From 2243660080ce6877d68a3f32fd64625f86023f77 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 19 Oct 2020 09:28:05 -0700 Subject: [PATCH] feat(core): TypeScript 4 + cleanup (#8967) --- .eslintrc | 42 - .eslintrc.json | 40 + .github/workflows/npm_release.yml | 2 +- .vscode/extensions.json | 8 + apps/toolbox/package.json | 8 +- apps/ui/package.json | 10 +- jest.config.js | 8 +- jest.preset.js | 11 + migrations.json | 109 ++- nx.json | 92 ++- package.json | 143 ++-- packages/core-compat/.npmignore | 4 - packages/core-compat/README.md | 3 - .../application-settings.d.ts | 1 - .../application-settings.js | 2 - .../application-settings.ts | 1 - .../application-settings/index.d.ts | 1 - .../core-compat/application-settings/index.js | 2 - .../core-compat/application-settings/index.ts | 1 - .../core-compat/application/application.d.ts | 1 - .../core-compat/application/application.js | 2 - .../core-compat/application/application.ts | 1 - packages/core-compat/application/index.d.ts | 1 - packages/core-compat/application/index.js | 2 - packages/core-compat/application/index.ts | 1 - packages/core-compat/bundle-entry-points.d.ts | 1 - packages/core-compat/bundle-entry-points.js | 2 - packages/core-compat/bundle-entry-points.ts | 2 - packages/core-compat/color/color.d.ts | 1 - packages/core-compat/color/color.js | 2 - packages/core-compat/color/color.ts | 1 - packages/core-compat/color/index.d.ts | 1 - packages/core-compat/color/index.js | 2 - packages/core-compat/color/index.ts | 1 - .../core-compat/data/observable/index.d.ts | 1 - packages/core-compat/data/observable/index.js | 2 - packages/core-compat/data/observable/index.ts | 1 - .../data/observable/observable.d.ts | 1 - .../core-compat/data/observable/observable.js | 2 - .../core-compat/data/observable/observable.ts | 1 - .../core-compat/file-system/file-system.d.ts | 1 - .../core-compat/file-system/file-system.js | 2 - .../core-compat/file-system/file-system.ts | 1 - packages/core-compat/file-system/index.d.ts | 1 - packages/core-compat/file-system/index.js | 2 - packages/core-compat/file-system/index.ts | 1 - packages/core-compat/http/http.d.ts | 1 - packages/core-compat/http/http.js | 2 - packages/core-compat/http/http.ts | 1 - packages/core-compat/http/index.d.ts | 1 - packages/core-compat/http/index.js | 2 - packages/core-compat/http/index.ts | 1 - .../core-compat/image-asset/image-asset.d.ts | 1 - .../core-compat/image-asset/image-asset.js | 2 - .../core-compat/image-asset/image-asset.ts | 1 - packages/core-compat/image-asset/index.d.ts | 1 - packages/core-compat/image-asset/index.js | 2 - packages/core-compat/image-asset/index.ts | 1 - .../image-source/image-source.d.ts | 1 - .../core-compat/image-source/image-source.js | 2 - .../core-compat/image-source/image-source.ts | 1 - packages/core-compat/image-source/index.d.ts | 1 - packages/core-compat/image-source/index.js | 2 - packages/core-compat/image-source/index.ts | 1 - packages/core-compat/inspector_modules.js | 7 - packages/core-compat/package.json | 25 - packages/core-compat/platform/index.d.ts | 1 - packages/core-compat/platform/index.js | 2 - packages/core-compat/platform/index.ts | 1 - packages/core-compat/platform/platform.d.ts | 1 - packages/core-compat/platform/platform.js | 2 - packages/core-compat/platform/platform.ts | 1 - packages/core-compat/profiling/index.d.ts | 1 - packages/core-compat/profiling/index.js | 2 - packages/core-compat/profiling/index.ts | 1 - packages/core-compat/profiling/profiling.d.ts | 1 - packages/core-compat/profiling/profiling.js | 2 - packages/core-compat/profiling/profiling.ts | 1 - packages/core-compat/tns-core-modules.d.ts | 1 - packages/core-compat/trace/index.d.ts | 1 - packages/core-compat/trace/index.js | 2 - packages/core-compat/trace/index.ts | 1 - packages/core-compat/trace/trace.d.ts | 21 - packages/core-compat/trace/trace.js | 23 - packages/core-compat/trace/trace.ts | 22 - packages/core-compat/tsconfig.json | 30 - packages/core-compat/ui/core/index.d.ts | 1 - packages/core-compat/ui/core/index.js | 2 - packages/core-compat/ui/core/index.ts | 1 - packages/core-compat/ui/core/view/index.d.ts | 1 - packages/core-compat/ui/core/view/index.js | 2 - packages/core-compat/ui/core/view/index.ts | 1 - packages/core-compat/ui/core/view/view.d.ts | 1 - packages/core-compat/ui/core/view/view.js | 2 - packages/core-compat/ui/core/view/view.ts | 1 - .../core-compat/ui/frame/activity.android.js | 7 - packages/core-compat/ui/frame/frame.d.ts | 1 - packages/core-compat/ui/frame/frame.js | 2 - packages/core-compat/ui/frame/frame.ts | 1 - packages/core-compat/ui/frame/index.d.ts | 1 - packages/core-compat/ui/frame/index.js | 2 - packages/core-compat/ui/frame/index.ts | 1 - .../absolute-layout/absolute-layout.d.ts | 1 - .../absolute-layout/absolute-layout.js | 2 - .../absolute-layout/absolute-layout.ts | 1 - .../ui/layouts/absolute-layout/index.d.ts | 1 - .../ui/layouts/absolute-layout/index.js | 2 - .../ui/layouts/absolute-layout/index.ts | 1 - .../ui/layouts/dock-layout/dock-layout.d.ts | 1 - .../ui/layouts/dock-layout/dock-layout.js | 2 - .../ui/layouts/dock-layout/dock-layout.ts | 1 - .../ui/layouts/dock-layout/index.d.ts | 1 - .../ui/layouts/dock-layout/index.js | 2 - .../ui/layouts/dock-layout/index.ts | 1 - .../flexbox-layout/flexbox-layout.d.ts | 1 - .../layouts/flexbox-layout/flexbox-layout.js | 2 - .../layouts/flexbox-layout/flexbox-layout.ts | 1 - .../ui/layouts/flexbox-layout/index.d.ts | 1 - .../ui/layouts/flexbox-layout/index.js | 2 - .../ui/layouts/flexbox-layout/index.ts | 1 - .../ui/layouts/grid-layout/grid-layout.d.ts | 1 - .../ui/layouts/grid-layout/grid-layout.js | 2 - .../ui/layouts/grid-layout/grid-layout.ts | 1 - .../ui/layouts/grid-layout/index.d.ts | 1 - .../ui/layouts/grid-layout/index.js | 2 - .../ui/layouts/grid-layout/index.ts | 1 - packages/core-compat/ui/layouts/index.d.ts | 1 - packages/core-compat/ui/layouts/index.js | 2 - packages/core-compat/ui/layouts/index.ts | 1 - .../ui/layouts/stack-layout/index.d.ts | 1 - .../ui/layouts/stack-layout/index.js | 2 - .../ui/layouts/stack-layout/index.ts | 1 - .../ui/layouts/stack-layout/stack-layout.d.ts | 1 - .../ui/layouts/stack-layout/stack-layout.js | 2 - .../ui/layouts/stack-layout/stack-layout.ts | 1 - .../ui/layouts/wrap-layout/index.d.ts | 1 - .../ui/layouts/wrap-layout/index.js | 2 - .../ui/layouts/wrap-layout/index.ts | 1 - .../ui/layouts/wrap-layout/wrap-layout.d.ts | 1 - .../ui/layouts/wrap-layout/wrap-layout.js | 2 - .../ui/layouts/wrap-layout/wrap-layout.ts | 1 - packages/core-compat/ui/page/index.d.ts | 1 - packages/core-compat/ui/page/index.js | 2 - packages/core-compat/ui/page/index.ts | 1 - packages/core-compat/utils/index.d.ts | 1 - packages/core-compat/utils/index.js | 2 - packages/core-compat/utils/index.ts | 1 - packages/core-compat/utils/types.d.ts | 14 - packages/core-compat/utils/types.js | 17 - packages/core-compat/utils/types.ts | 16 - packages/core-compat/utils/utils.d.ts | 1 - packages/core-compat/utils/utils.js | 2 - packages/core-compat/utils/utils.ts | 1 - packages/core-compat/xml/index.d.ts | 1 - packages/core-compat/xml/index.js | 2 - packages/core-compat/xml/index.ts | 1 - packages/core-compat/xml/xml.d.ts | 1 - packages/core-compat/xml/xml.js | 2 - packages/core-compat/xml/xml.ts | 1 - packages/core/{.eslintrc => .eslintrc.json} | 0 packages/core/.gitignore | 1 + packages/core/.npmignore | 1 + packages/core/application/index.android.ts | 5 + packages/core/application/index.ios.ts | 5 + packages/core/image-asset/index.android.ts | 1 + packages/core/image-asset/index.ios.ts | 1 + packages/core/jest.config.js | 4 + packages/core/package.json | 2 +- packages/core/tsconfig.lib.json | 48 +- .../core/ui/action-bar/action-bar-common.ts | 4 + packages/core/ui/action-bar/index.android.ts | 1 + packages/core/ui/action-bar/index.ios.ts | 1 + .../core/ui/activity-indicator/index.ios.ts | 1 + .../core/ui/bottom-navigation/index.ios.ts | 1 + packages/core/ui/button/index.ios.ts | 1 + packages/core/ui/date-picker/index.ios.ts | 1 + packages/core/ui/frame/index.android.ts | 1 + packages/core/ui/frame/index.ios.ts | 1 + packages/core/ui/html-view/index.ios.ts | 1 + packages/core/ui/index.ts | 6 +- packages/core/ui/label/index.ios.ts | 1 + packages/core/ui/list-picker/index.ios.ts | 1 + packages/core/ui/list-view/index.ios.ts | 1 + packages/core/ui/page/index.ios.ts | 2 + packages/core/ui/progress/index.ios.ts | 1 + .../core/ui/proxy-view-container/index.ts | 5 +- packages/core/ui/search-bar/index.ios.ts | 1 + packages/core/ui/segmented-bar/index.ios.ts | 1 + packages/core/ui/slider/index.ios.ts | 1 + packages/core/ui/switch/index.ios.ts | 1 + packages/core/ui/tab-view/index.ios.ts | 1 + packages/core/ui/tabs/index.ios.ts | 2 + packages/core/ui/text-base/index.android.ts | 1 + packages/core/ui/text-base/index.ios.ts | 1 + packages/core/ui/text-field/index.ios.ts | 1 + packages/core/ui/text-view/index.ios.ts | 1 + packages/core/ui/time-picker/index.ios.ts | 1 + packages/core/ui/web-view/index.ios.ts | 1 + .../src/main/res/drawable-hdpi/add_to_fav.png | Bin 0 -> 915 bytes .../baseline_motorcycle_black_18.png | Bin 0 -> 324 bytes .../baseline_motorcycle_black_24.png | Bin 0 -> 389 bytes .../baseline_motorcycle_black_36.png | Bin 0 -> 565 bytes .../baseline_motorcycle_black_48.png | Bin 0 -> 593 bytes .../src/main/res/drawable-mdpi/add_to_fav.png | Bin 0 -> 669 bytes .../baseline_motorcycle_black_18.png | Bin 0 -> 234 bytes .../baseline_motorcycle_black_24.png | Bin 0 -> 232 bytes .../baseline_motorcycle_black_36.png | Bin 0 -> 389 bytes .../baseline_motorcycle_black_48.png | Bin 0 -> 402 bytes .../src/main/res/drawable-nodpi/i18x32.png | Bin 0 -> 3441 bytes .../src/main/res/drawable-nodpi/i32x18.png | Bin 0 -> 3419 bytes .../src/main/res/drawable-nodpi/i32x32.png | Bin 0 -> 3428 bytes .../src/main/res/drawable-nodpi/icon.png | Bin 0 -> 10946 bytes .../src/main/res/drawable-nodpi/testlogo.jpg | Bin 0 -> 3924 bytes .../src/main/res/drawable-nodpi/tile.png | Bin 0 -> 3491 bytes .../src/main/res/drawable-nodpi/up.png | Bin 0 -> 5192 bytes .../src/main/res/drawable-nodpi/upccw.png | Bin 0 -> 5276 bytes .../src/main/res/drawable-nodpi/upcw.png | Bin 0 -> 5274 bytes .../src/main/res/drawable-nodpi/upflip.png | Bin 0 -> 5147 bytes .../main/res/drawable-xhdpi/add_to_fav.png | Bin 0 -> 1134 bytes .../baseline_motorcycle_black_18.png | Bin 0 -> 389 bytes .../baseline_motorcycle_black_24.png | Bin 0 -> 402 bytes .../baseline_motorcycle_black_36.png | Bin 0 -> 593 bytes .../baseline_motorcycle_black_48.png | Bin 0 -> 775 bytes .../main/res/drawable-xxhdpi/add_to_fav.png | Bin 0 -> 1584 bytes .../baseline_motorcycle_black_18.png | Bin 0 -> 565 bytes .../baseline_motorcycle_black_24.png | Bin 0 -> 593 bytes .../baseline_motorcycle_black_36.png | Bin 0 -> 1016 bytes .../baseline_motorcycle_black_48.png | Bin 0 -> 1126 bytes .../main/res/drawable-xxxhdpi/add_to_fav.png | Bin 0 -> 1969 bytes .../baseline_motorcycle_black_18.png | Bin 0 -> 593 bytes .../baseline_motorcycle_black_24.png | Bin 0 -> 775 bytes .../baseline_motorcycle_black_36.png | Bin 0 -> 1126 bytes .../baseline_motorcycle_black_48.png | Bin 0 -> 1538 bytes tools/assets/App_Resources/iOS/add_to_fav.png | Bin 0 -> 669 bytes .../App_Resources/iOS/add_to_fav@2x.png | Bin 0 -> 1134 bytes .../App_Resources/iOS/add_to_fav@3x.png | Bin 0 -> 1584 bytes .../iOS/baseline_motorcycle_black_24@1x.png | Bin 0 -> 232 bytes .../iOS/baseline_motorcycle_black_24@2x.png | Bin 0 -> 402 bytes .../iOS/baseline_motorcycle_black_24@3x.png | Bin 0 -> 593 bytes tools/assets/App_Resources/iOS/i18x32.png | Bin 0 -> 3441 bytes tools/assets/App_Resources/iOS/i18x32@2x.png | Bin 0 -> 3441 bytes tools/assets/App_Resources/iOS/i18x32@3x.png | Bin 0 -> 3441 bytes tools/assets/App_Resources/iOS/i32x18.png | Bin 0 -> 3419 bytes tools/assets/App_Resources/iOS/i32x18@2x.png | Bin 0 -> 3419 bytes tools/assets/App_Resources/iOS/i32x18@3x.png | Bin 0 -> 3419 bytes tools/assets/App_Resources/iOS/i32x32.png | Bin 0 -> 3428 bytes tools/assets/App_Resources/iOS/i32x32@2x.png | Bin 0 -> 3428 bytes tools/assets/App_Resources/iOS/i32x32@3x.png | Bin 0 -> 3428 bytes tools/assets/App_Resources/iOS/testlogo.jpg | Bin 0 -> 3924 bytes tools/assets/App_Resources/iOS/tile.png | Bin 0 -> 3491 bytes tools/assets/App_Resources/iOS/tile@2x.png | Bin 0 -> 3491 bytes tools/assets/App_Resources/iOS/tile@3x.png | Bin 0 -> 3491 bytes tools/assets/App_Resources/iOS/up.png | Bin 0 -> 5192 bytes tools/assets/App_Resources/iOS/up@2x.png | Bin 0 -> 5192 bytes tools/assets/App_Resources/iOS/up@3x.png | Bin 0 -> 5192 bytes tools/assets/App_Resources/iOS/upccw.png | Bin 0 -> 5276 bytes tools/assets/App_Resources/iOS/upccw@2x.png | Bin 0 -> 5276 bytes tools/assets/App_Resources/iOS/upccw@3x.png | Bin 0 -> 5276 bytes tools/assets/App_Resources/iOS/upcw.png | Bin 0 -> 5274 bytes tools/assets/App_Resources/iOS/upcw@2x.png | Bin 0 -> 5274 bytes tools/assets/App_Resources/iOS/upcw@3x.png | Bin 0 -> 5274 bytes tools/assets/App_Resources/iOS/upflip.png | Bin 0 -> 5147 bytes tools/assets/App_Resources/iOS/upflip@2x.png | Bin 0 -> 5147 bytes tools/assets/App_Resources/iOS/upflip@3x.png | Bin 0 -> 5147 bytes tools/workspace-scripts.js | 11 +- workspace.json | 725 ++++++++---------- 266 files changed, 677 insertions(+), 1014 deletions(-) delete mode 100644 .eslintrc create mode 100644 .eslintrc.json create mode 100644 .vscode/extensions.json create mode 100644 jest.preset.js delete mode 100644 packages/core-compat/.npmignore delete mode 100644 packages/core-compat/README.md delete mode 100644 packages/core-compat/application-settings/application-settings.d.ts delete mode 100644 packages/core-compat/application-settings/application-settings.js delete mode 100644 packages/core-compat/application-settings/application-settings.ts delete mode 100644 packages/core-compat/application-settings/index.d.ts delete mode 100644 packages/core-compat/application-settings/index.js delete mode 100644 packages/core-compat/application-settings/index.ts delete mode 100644 packages/core-compat/application/application.d.ts delete mode 100644 packages/core-compat/application/application.js delete mode 100644 packages/core-compat/application/application.ts delete mode 100644 packages/core-compat/application/index.d.ts delete mode 100644 packages/core-compat/application/index.js delete mode 100644 packages/core-compat/application/index.ts delete mode 100644 packages/core-compat/bundle-entry-points.d.ts delete mode 100644 packages/core-compat/bundle-entry-points.js delete mode 100644 packages/core-compat/bundle-entry-points.ts delete mode 100644 packages/core-compat/color/color.d.ts delete mode 100644 packages/core-compat/color/color.js delete mode 100644 packages/core-compat/color/color.ts delete mode 100644 packages/core-compat/color/index.d.ts delete mode 100644 packages/core-compat/color/index.js delete mode 100644 packages/core-compat/color/index.ts delete mode 100644 packages/core-compat/data/observable/index.d.ts delete mode 100644 packages/core-compat/data/observable/index.js delete mode 100644 packages/core-compat/data/observable/index.ts delete mode 100644 packages/core-compat/data/observable/observable.d.ts delete mode 100644 packages/core-compat/data/observable/observable.js delete mode 100644 packages/core-compat/data/observable/observable.ts delete mode 100644 packages/core-compat/file-system/file-system.d.ts delete mode 100644 packages/core-compat/file-system/file-system.js delete mode 100644 packages/core-compat/file-system/file-system.ts delete mode 100644 packages/core-compat/file-system/index.d.ts delete mode 100644 packages/core-compat/file-system/index.js delete mode 100644 packages/core-compat/file-system/index.ts delete mode 100644 packages/core-compat/http/http.d.ts delete mode 100644 packages/core-compat/http/http.js delete mode 100644 packages/core-compat/http/http.ts delete mode 100644 packages/core-compat/http/index.d.ts delete mode 100644 packages/core-compat/http/index.js delete mode 100644 packages/core-compat/http/index.ts delete mode 100644 packages/core-compat/image-asset/image-asset.d.ts delete mode 100644 packages/core-compat/image-asset/image-asset.js delete mode 100644 packages/core-compat/image-asset/image-asset.ts delete mode 100644 packages/core-compat/image-asset/index.d.ts delete mode 100644 packages/core-compat/image-asset/index.js delete mode 100644 packages/core-compat/image-asset/index.ts delete mode 100644 packages/core-compat/image-source/image-source.d.ts delete mode 100644 packages/core-compat/image-source/image-source.js delete mode 100644 packages/core-compat/image-source/image-source.ts delete mode 100644 packages/core-compat/image-source/index.d.ts delete mode 100644 packages/core-compat/image-source/index.js delete mode 100644 packages/core-compat/image-source/index.ts delete mode 100644 packages/core-compat/inspector_modules.js delete mode 100644 packages/core-compat/package.json delete mode 100644 packages/core-compat/platform/index.d.ts delete mode 100644 packages/core-compat/platform/index.js delete mode 100644 packages/core-compat/platform/index.ts delete mode 100644 packages/core-compat/platform/platform.d.ts delete mode 100644 packages/core-compat/platform/platform.js delete mode 100644 packages/core-compat/platform/platform.ts delete mode 100644 packages/core-compat/profiling/index.d.ts delete mode 100644 packages/core-compat/profiling/index.js delete mode 100644 packages/core-compat/profiling/index.ts delete mode 100644 packages/core-compat/profiling/profiling.d.ts delete mode 100644 packages/core-compat/profiling/profiling.js delete mode 100644 packages/core-compat/profiling/profiling.ts delete mode 100644 packages/core-compat/tns-core-modules.d.ts delete mode 100644 packages/core-compat/trace/index.d.ts delete mode 100644 packages/core-compat/trace/index.js delete mode 100644 packages/core-compat/trace/index.ts delete mode 100644 packages/core-compat/trace/trace.d.ts delete mode 100644 packages/core-compat/trace/trace.js delete mode 100644 packages/core-compat/trace/trace.ts delete mode 100644 packages/core-compat/tsconfig.json delete mode 100644 packages/core-compat/ui/core/index.d.ts delete mode 100644 packages/core-compat/ui/core/index.js delete mode 100644 packages/core-compat/ui/core/index.ts delete mode 100644 packages/core-compat/ui/core/view/index.d.ts delete mode 100644 packages/core-compat/ui/core/view/index.js delete mode 100644 packages/core-compat/ui/core/view/index.ts delete mode 100644 packages/core-compat/ui/core/view/view.d.ts delete mode 100644 packages/core-compat/ui/core/view/view.js delete mode 100644 packages/core-compat/ui/core/view/view.ts delete mode 100644 packages/core-compat/ui/frame/activity.android.js delete mode 100644 packages/core-compat/ui/frame/frame.d.ts delete mode 100644 packages/core-compat/ui/frame/frame.js delete mode 100644 packages/core-compat/ui/frame/frame.ts delete mode 100644 packages/core-compat/ui/frame/index.d.ts delete mode 100644 packages/core-compat/ui/frame/index.js delete mode 100644 packages/core-compat/ui/frame/index.ts delete mode 100644 packages/core-compat/ui/layouts/absolute-layout/absolute-layout.d.ts delete mode 100644 packages/core-compat/ui/layouts/absolute-layout/absolute-layout.js delete mode 100644 packages/core-compat/ui/layouts/absolute-layout/absolute-layout.ts delete mode 100644 packages/core-compat/ui/layouts/absolute-layout/index.d.ts delete mode 100644 packages/core-compat/ui/layouts/absolute-layout/index.js delete mode 100644 packages/core-compat/ui/layouts/absolute-layout/index.ts delete mode 100644 packages/core-compat/ui/layouts/dock-layout/dock-layout.d.ts delete mode 100644 packages/core-compat/ui/layouts/dock-layout/dock-layout.js delete mode 100644 packages/core-compat/ui/layouts/dock-layout/dock-layout.ts delete mode 100644 packages/core-compat/ui/layouts/dock-layout/index.d.ts delete mode 100644 packages/core-compat/ui/layouts/dock-layout/index.js delete mode 100644 packages/core-compat/ui/layouts/dock-layout/index.ts delete mode 100644 packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.d.ts delete mode 100644 packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.js delete mode 100644 packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.ts delete mode 100644 packages/core-compat/ui/layouts/flexbox-layout/index.d.ts delete mode 100644 packages/core-compat/ui/layouts/flexbox-layout/index.js delete mode 100644 packages/core-compat/ui/layouts/flexbox-layout/index.ts delete mode 100644 packages/core-compat/ui/layouts/grid-layout/grid-layout.d.ts delete mode 100644 packages/core-compat/ui/layouts/grid-layout/grid-layout.js delete mode 100644 packages/core-compat/ui/layouts/grid-layout/grid-layout.ts delete mode 100644 packages/core-compat/ui/layouts/grid-layout/index.d.ts delete mode 100644 packages/core-compat/ui/layouts/grid-layout/index.js delete mode 100644 packages/core-compat/ui/layouts/grid-layout/index.ts delete mode 100644 packages/core-compat/ui/layouts/index.d.ts delete mode 100644 packages/core-compat/ui/layouts/index.js delete mode 100644 packages/core-compat/ui/layouts/index.ts delete mode 100644 packages/core-compat/ui/layouts/stack-layout/index.d.ts delete mode 100644 packages/core-compat/ui/layouts/stack-layout/index.js delete mode 100644 packages/core-compat/ui/layouts/stack-layout/index.ts delete mode 100644 packages/core-compat/ui/layouts/stack-layout/stack-layout.d.ts delete mode 100644 packages/core-compat/ui/layouts/stack-layout/stack-layout.js delete mode 100644 packages/core-compat/ui/layouts/stack-layout/stack-layout.ts delete mode 100644 packages/core-compat/ui/layouts/wrap-layout/index.d.ts delete mode 100644 packages/core-compat/ui/layouts/wrap-layout/index.js delete mode 100644 packages/core-compat/ui/layouts/wrap-layout/index.ts delete mode 100644 packages/core-compat/ui/layouts/wrap-layout/wrap-layout.d.ts delete mode 100644 packages/core-compat/ui/layouts/wrap-layout/wrap-layout.js delete mode 100644 packages/core-compat/ui/layouts/wrap-layout/wrap-layout.ts delete mode 100644 packages/core-compat/ui/page/index.d.ts delete mode 100644 packages/core-compat/ui/page/index.js delete mode 100644 packages/core-compat/ui/page/index.ts delete mode 100644 packages/core-compat/utils/index.d.ts delete mode 100644 packages/core-compat/utils/index.js delete mode 100644 packages/core-compat/utils/index.ts delete mode 100644 packages/core-compat/utils/types.d.ts delete mode 100644 packages/core-compat/utils/types.js delete mode 100644 packages/core-compat/utils/types.ts delete mode 100644 packages/core-compat/utils/utils.d.ts delete mode 100644 packages/core-compat/utils/utils.js delete mode 100644 packages/core-compat/utils/utils.ts delete mode 100644 packages/core-compat/xml/index.d.ts delete mode 100644 packages/core-compat/xml/index.js delete mode 100644 packages/core-compat/xml/index.ts delete mode 100644 packages/core-compat/xml/xml.d.ts delete mode 100644 packages/core-compat/xml/xml.js delete mode 100644 packages/core-compat/xml/xml.ts rename packages/core/{.eslintrc => .eslintrc.json} (100%) create mode 100644 packages/core/jest.config.js create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/add_to_fav.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/baseline_motorcycle_black_18.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/baseline_motorcycle_black_24.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/baseline_motorcycle_black_36.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/baseline_motorcycle_black_48.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-mdpi/add_to_fav.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-mdpi/baseline_motorcycle_black_18.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-mdpi/baseline_motorcycle_black_24.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-mdpi/baseline_motorcycle_black_36.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-mdpi/baseline_motorcycle_black_48.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/i18x32.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/i32x18.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/i32x32.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/icon.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/testlogo.jpg create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/tile.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/up.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/upccw.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/upcw.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/upflip.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/add_to_fav.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/baseline_motorcycle_black_18.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/baseline_motorcycle_black_24.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/baseline_motorcycle_black_36.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/baseline_motorcycle_black_48.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-xxhdpi/add_to_fav.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xxhdpi/baseline_motorcycle_black_18.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xxhdpi/baseline_motorcycle_black_24.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xxhdpi/baseline_motorcycle_black_36.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xxhdpi/baseline_motorcycle_black_48.png create mode 100644 tools/assets/App_Resources/Android/src/main/res/drawable-xxxhdpi/add_to_fav.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xxxhdpi/baseline_motorcycle_black_18.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xxxhdpi/baseline_motorcycle_black_24.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xxxhdpi/baseline_motorcycle_black_36.png create mode 100755 tools/assets/App_Resources/Android/src/main/res/drawable-xxxhdpi/baseline_motorcycle_black_48.png create mode 100644 tools/assets/App_Resources/iOS/add_to_fav.png create mode 100644 tools/assets/App_Resources/iOS/add_to_fav@2x.png create mode 100644 tools/assets/App_Resources/iOS/add_to_fav@3x.png create mode 100755 tools/assets/App_Resources/iOS/baseline_motorcycle_black_24@1x.png create mode 100755 tools/assets/App_Resources/iOS/baseline_motorcycle_black_24@2x.png create mode 100755 tools/assets/App_Resources/iOS/baseline_motorcycle_black_24@3x.png create mode 100644 tools/assets/App_Resources/iOS/i18x32.png create mode 100644 tools/assets/App_Resources/iOS/i18x32@2x.png create mode 100644 tools/assets/App_Resources/iOS/i18x32@3x.png create mode 100644 tools/assets/App_Resources/iOS/i32x18.png create mode 100644 tools/assets/App_Resources/iOS/i32x18@2x.png create mode 100644 tools/assets/App_Resources/iOS/i32x18@3x.png create mode 100644 tools/assets/App_Resources/iOS/i32x32.png create mode 100644 tools/assets/App_Resources/iOS/i32x32@2x.png create mode 100644 tools/assets/App_Resources/iOS/i32x32@3x.png create mode 100644 tools/assets/App_Resources/iOS/testlogo.jpg create mode 100644 tools/assets/App_Resources/iOS/tile.png create mode 100644 tools/assets/App_Resources/iOS/tile@2x.png create mode 100644 tools/assets/App_Resources/iOS/tile@3x.png create mode 100644 tools/assets/App_Resources/iOS/up.png create mode 100644 tools/assets/App_Resources/iOS/up@2x.png create mode 100644 tools/assets/App_Resources/iOS/up@3x.png create mode 100644 tools/assets/App_Resources/iOS/upccw.png create mode 100644 tools/assets/App_Resources/iOS/upccw@2x.png create mode 100644 tools/assets/App_Resources/iOS/upccw@3x.png create mode 100644 tools/assets/App_Resources/iOS/upcw.png create mode 100644 tools/assets/App_Resources/iOS/upcw@2x.png create mode 100644 tools/assets/App_Resources/iOS/upcw@3x.png create mode 100644 tools/assets/App_Resources/iOS/upflip.png create mode 100644 tools/assets/App_Resources/iOS/upflip@2x.png create mode 100644 tools/assets/App_Resources/iOS/upflip@3x.png diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 72845e2f3..000000000 --- a/.eslintrc +++ /dev/null @@ -1,42 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 2018, - "sourceType": "module", - "project": "./tsconfig.json" - }, - "ignorePatterns": ["**/*"], - "plugins": ["@typescript-eslint", "@nrwl/nx"], - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "prettier", - "prettier/@typescript-eslint" - ], - "rules": { - "@typescript-eslint/explicit-member-accessibility": "off", - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/no-parameter-properties": "off", - "@nrwl/nx/enforce-module-boundaries": [ - "error", - { - "enforceBuildableLibDependency": true, - "allow": [], - "depConstraints": [ - { "sourceTag": "*", "onlyDependOnLibsWithTags": ["*"] } - ] - } - ] - }, - "overrides": [ - { - "files": ["*.tsx"], - "rules": { - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/no-any": "off" - } - } - ] -} diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..74d9d35a6 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,40 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module", + "project": "./tsconfig.json" + }, + "ignorePatterns": ["**/*"], + "plugins": ["@typescript-eslint", "@nrwl/nx"], + "extends": ["eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended", "prettier", "prettier/@typescript-eslint"], + "rules": { + "@typescript-eslint/explicit-member-accessibility": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-parameter-properties": "off", + "@nrwl/nx/enforce-module-boundaries": [ + "error", + { + "enforceBuildableLibDependency": true, + "allow": [], + "depConstraints": [ + { + "sourceTag": "*", + "onlyDependOnLibsWithTags": ["*"] + } + ] + } + ], + "@typescript-eslint/explicit-module-boundary-types": "off" + }, + "overrides": [ + { + "files": ["*.tsx"], + "rules": { + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/no-any": "off" + } + } + ] +} diff --git a/.github/workflows/npm_release.yml b/.github/workflows/npm_release.yml index 76e43ca4d..e21f08f52 100644 --- a/.github/workflows/npm_release.yml +++ b/.github/workflows/npm_release.yml @@ -23,7 +23,7 @@ jobs: run: npm version $NPM_VERSION - name: Build @nativescript/core - run: npx nx run core:build.npm + run: npx nx run core:build - name: Publish @nativescript/core working-directory: dist/packages diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..98c163683 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "nrwl.angular-console", + "ms-vscode.vscode-typescript-tslint-plugin", + "esbenp.prettier-vscode", + "firsttris.vscode-jest-runner" + ] +} diff --git a/apps/toolbox/package.json b/apps/toolbox/package.json index 16167ec77..61a742272 100644 --- a/apps/toolbox/package.json +++ b/apps/toolbox/package.json @@ -2,10 +2,10 @@ "main": "main.js", "description": "NativeScript Application", "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/NativeScript/NativeScript.git" - }, + "repository": { + "type": "git", + "url": "https://github.com/NativeScript/NativeScript.git" + }, "dependencies": { "nativescript-theme-core": "file:../../node_modules/nativescript-theme-core", "@nativescript/core": "file:../../packages/core" diff --git a/apps/ui/package.json b/apps/ui/package.json index 100413761..c1b026215 100644 --- a/apps/ui/package.json +++ b/apps/ui/package.json @@ -1,11 +1,11 @@ { "main": "main.js", "description": "NativeScript Application", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/NativeScript/NativeScript.git" - }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/NativeScript/NativeScript.git" + }, "dependencies": { "nativescript-theme-core": "file:../../node_modules/nativescript-theme-core", "@nativescript/core": "file:../../packages/core" diff --git a/jest.config.js b/jest.config.js index 30b91f3cb..8c858feaf 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,9 +1,3 @@ module.exports = { - testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'], - transform: { - '^.+\\.(ts|js|html)$': 'ts-jest' - }, - resolver: '@nrwl/jest/plugins/resolver', - moduleFileExtensions: ['ts', 'js', 'html'], - coverageReporters: ['html'] + projects: ['/packages/core'], }; diff --git a/jest.preset.js b/jest.preset.js new file mode 100644 index 000000000..0ab15bec5 --- /dev/null +++ b/jest.preset.js @@ -0,0 +1,11 @@ +const nxPreset = require('@nrwl/jest/preset'); +module.exports = { + ...nxPreset, + testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'], + transform: { + '^.+\\.(ts|js|html)$': 'ts-jest', + }, + resolver: '@nrwl/jest/plugins/resolver', + moduleFileExtensions: ['ts', 'js', 'html'], + coverageReporters: ['html'], +}; diff --git a/migrations.json b/migrations.json index 99cdca8b8..f1929b173 100644 --- a/migrations.json +++ b/migrations.json @@ -1,32 +1,109 @@ { "migrations": [ { - "version": "10.0.0-beta.0", - "description": "Add default branch to nx.json", - "factory": "./src/migrations/update-10-0-0/update-10-0-0", + "version": "10.1.0-beta.0", + "description": "Migrate .eslintrc files to use tsconfig with a wildcard", + "factory": "./src/migrations/update-10-1-0/migrate-eslintrc-tsconfig-wildcard", "package": "@nrwl/workspace", - "name": "add-default-branch-to-nx-json" + "name": "migrate-eslintrc-tsconfig-wildcard" }, { - "version": "10.0.0-beta.0", - "description": "Migrate tsconfigs to solution style tsconfigs", - "factory": "./src/migrations/update-10-0-0/solution-tsconfigs", + "version": "10.3.0-beta.0", + "description": "Add @nrwl/cli as dependency", + "factory": "./src/migrations/update-10-3-0/add-cli-dependency", "package": "@nrwl/workspace", - "name": "solution-tsconfigs" + "name": "add-cli-dependency" }, { - "version": "10.0.1-beta.0", - "description": "Migrate .eslintrc files to reference new tsconfig", - "factory": "./src/migrations/update-10-0-1/migrate-eslintrc", + "version": "10.3.0-beta.0", + "description": "Update typescript to v4", + "factory": "./src/migrations/update-10-3-0/update-typescript", "package": "@nrwl/workspace", - "name": "migrate-eslintrc-tsconfig" + "name": "update-10-3-0" }, { - "version": "10.0.0-beta.2", - "description": "update jest configs to include setup env files", - "factory": "./src/migrations/update-10-0-0/update-jest-configs", + "version": "10.3.0-beta.1", + "description": "Adds .vscode/extensions.json to a workspace", + "factory": "./src/migrations/update-10-3-0/add-vscode-extensions", + "package": "@nrwl/workspace", + "name": "add-vscode-extensions" + }, + { + "version": "10.3.0-beta.0", + "description": "Adds `buildableProjectDepsInPackageJsonType` for web and angular package builders", + "factory": "./src/migrations/update-10-3-0/add-buildable-project-deps-in-package-json-type", + "package": "@nrwl/workspace", + "name": "add-buildable-project-deps-in-package-json-type" + }, + { + "version": "10.1.0-beta.4", + "description": "Update jest to v26", + "factory": "./src/migrations/update-10-1-0/update-10-1-0", "package": "@nrwl/jest", - "name": "update-10.0.0" + "name": "update-10.1.0" + }, + { + "version": "10.2.0", + "description": "Remove deprecated jest builder options", + "factory": "./src/migrations/update-10-2-0/update-10-2-0", + "package": "@nrwl/jest", + "name": "update-10.2.0" + }, + { + "version": "10.3.0-beta.1", + "description": "Adds all jest projects into the root jest config", + "factory": "./src/migrations/update-10-3-0/update-projects-property", + "package": "@nrwl/jest", + "name": "update-projects-property" + }, + { + "version": "10.3.0-beta.1", + "description": "Update ts-jest to v26.4", + "factory": "./src/migrations/update-10-3-0/update-ts-jest", + "package": "@nrwl/jest", + "name": "update-ts-jest" + }, + { + "version": "10.3.0-beta.1", + "description": "Adds a jest extension to the recommended extensions for vscode", + "factory": "./src/migrations/update-10-3-0/add-jest-extension", + "package": "@nrwl/jest", + "name": "add-jest-extension" + }, + { + "version": "10.3.0-beta.1", + "description": "Update @typescript-eslint to v4.3", + "factory": "./src/migrations/update-10-3-0/update-10-3-0", + "package": "@nrwl/linter", + "name": "update-10.3.0" + }, + { + "version": "10.3.0-beta.0", + "description": "Migrate to the new ESLint builder and ESLint config style", + "factory": "./src/migrations/update-10-3-0/update-eslint-builder-and-config", + "package": "@nrwl/linter", + "name": "update-eslint-builder-and-config" + }, + { + "version": "10.3.0-beta.2", + "description": "Add explicit .json file extension to .eslintrc files, not using an extension is deprecated", + "factory": "./src/migrations/update-10-3-0/add-json-ext-to-eslintrc", + "package": "@nrwl/linter", + "name": "add-json-ext-to-eslintrc" + }, + { + "version": "10.3.0-beta.3", + "description": "Update implicitDependencies within nx.json to include root .eslintrc.json", + "factory": "./src/migrations/update-10-3-0/add-root-eslintrc-json-to-workspace-implicit-deps", + "package": "@nrwl/linter", + "name": "add-root-eslintrc-json-to-workspace-implicit-deps" + }, + { + "version": "10.1.0-beta.1", + "description": "Removes rootDir from node libs' tsconfig", + "factory": "./src/migrations/update-10-1-0/remove-root-dir", + "package": "@nrwl/node", + "name": "remove-root-dir" } ] } \ No newline at end of file diff --git a/nx.json b/nx.json index 5d47c3b81..e3adc53f7 100644 --- a/nx.json +++ b/nx.json @@ -1,49 +1,47 @@ { - "npmScope": "nativescript", - "workspaceLayout": { - "appsDir": "apps", - "libsDir": "packages" - }, - "implicitDependencies": { - "workspace.json": "*", - "package.json": { - "dependencies": "*", - "devDependencies": "*" - }, - "tsconfig.json": "*", - "tslint.json": "*", - "nx.json": "*" - }, - "projects": { - "apps-automated": { - "tags": [] - }, - "apps-toolbox": { - "tags": [] - }, - "apps-ui": { - "tags": [] - }, - "core": { - "tags": [] - }, - "core-compat": { - "tags": [] - }, - "types": { - "tags": [] - }, - "types-ios": { - "tags": [] - }, - "types-android": { - "tags": [] - }, - "ui-mobile-base": { - "tags": [] - }, - "webpack": { - "tags": [] - } - } + "npmScope": "nativescript", + "workspaceLayout": { + "appsDir": "apps", + "libsDir": "packages" + }, + "implicitDependencies": { + "workspace.json": "*", + "package.json": { + "dependencies": "*", + "devDependencies": "*" + }, + "tsconfig.json": "*", + "tslint.json": "*", + "nx.json": "*", + ".eslintrc.json": "*" + }, + "projects": { + "apps-automated": { + "tags": [] + }, + "apps-toolbox": { + "tags": [] + }, + "apps-ui": { + "tags": [] + }, + "core": { + "tags": [] + }, + "types": { + "tags": [] + }, + "types-ios": { + "tags": [] + }, + "types-android": { + "tags": [] + }, + "ui-mobile-base": { + "tags": [] + }, + "webpack": { + "tags": [] + } + } } diff --git a/package.json b/package.json index 7b2748a27..d8d7d2b7b 100644 --- a/package.json +++ b/package.json @@ -1,73 +1,74 @@ { - "name": "nativescript", - "version": "7.0.10", - "license": "MIT", - "scripts": { - "setup": "npx rimraf hooks node_modules package-lock.json && npm i && ts-patch install && nx run core:setup", - "start": "nps", - "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" - }, - "private": true, - "repository": { - "type": "git", - "url": "https://github.com/NativeScript/NativeScript.git" - }, - "dependencies": { - "nativescript-theme-core": "^1.0.4" - }, - "devDependencies": { - "@nativescript/hook": "^2.0.0", - "@nrwl/eslint-plugin-nx": "~10.0.7", - "@nrwl/jest": "~10.0.7", - "@nrwl/node": "~10.0.7", - "@nrwl/workspace": "~10.0.7", - "@nstudio/focus": "~10.0.0", - "@nstudio/nps-i": "~1.1.0", - "@types/chai": "^4.2.11", - "@types/jest": "~26.0.4", - "@types/mocha": "^7.0.2", - "@types/node": "~14.0.22", - "@typescript-eslint/eslint-plugin": "~3.6.0", - "@typescript-eslint/parser": "~3.6.0", - "chai": "^4.2.0", - "conventional-changelog-cli": "^2.0.34", - "copyfiles": "^2.3.0", - "css": "^3.0.0", - "css-tree": "^1.0.0-alpha.39", - "dotenv": "~8.2.0", - "eslint": "~7.4.0", - "eslint-config-prettier": "~6.11.0", - "gonzales": "^1.0.7", - "husky": "^4.2.5", - "jest": "~26.1.0", - "lint-staged": "^10.2.11", - "mocha": "^8.0.1", - "mocha-typescript": "^1.1.17", - "module-alias": "^2.2.2", - "nativescript": "~7.0.6", - "node-sass": "~4.14.1", - "parse-css": "git+https://github.com/tabatkins/parse-css.git", - "parserlib": "^1.1.1", - "prettier": "~2.0.5", - "reduce-css-calc": "~2.1.7", - "shady-css-parser": "^0.1.0", - "terser-webpack-plugin": "~3.0.6", - "ts-jest": "~26.1.1", - "ts-node": "~8.10.2", - "ts-patch": "^1.2.5", - "tslint": "~6.1.2", - "typescript": "~3.9.7", - "webpack": "~4.44.1", - "webpack-cli": "~3.3.12" - }, - "husky": { - "hooks": { - "pre-commit": "npx lint-staged" - } - }, - "lint-staged": { - "**/*": [ - "nx format:write --files" - ] - } + "name": "nativescript", + "version": "7.0.10", + "license": "MIT", + "scripts": { + "setup": "npx rimraf hooks node_modules package-lock.json && npm i && ts-patch install && nx run core:setup", + "start": "nps", + "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" + }, + "private": true, + "repository": { + "type": "git", + "url": "https://github.com/NativeScript/NativeScript.git" + }, + "dependencies": { + "nativescript-theme-core": "^1.0.4" + }, + "devDependencies": { + "@nativescript/hook": "^2.0.0", + "@nrwl/cli": "~10.3.1", + "@nrwl/eslint-plugin-nx": "~10.3.0", + "@nrwl/jest": "~10.3.0", + "@nrwl/node": "~10.3.0", + "@nrwl/workspace": "~10.3.0", + "@nstudio/focus": "~10.3.0", + "@nstudio/nps-i": "~1.1.0", + "@types/chai": "^4.2.11", + "@types/jest": "~26.0.8", + "@types/mocha": "^7.0.2", + "@types/node": "~14.0.22", + "@typescript-eslint/eslint-plugin": "~4.3.0", + "@typescript-eslint/parser": "~4.3.0", + "chai": "^4.2.0", + "conventional-changelog-cli": "^2.0.34", + "copyfiles": "^2.4.0", + "css": "^3.0.0", + "css-tree": "^1.0.0-alpha.39", + "dotenv": "~8.2.0", + "eslint": "~7.10.0", + "eslint-config-prettier": "~6.11.0", + "gonzales": "^1.0.7", + "husky": "^4.2.5", + "jest": "~26.2.2", + "lint-staged": "^10.2.11", + "mocha": "^8.0.1", + "mocha-typescript": "^1.1.17", + "module-alias": "^2.2.2", + "nativescript": "~7.0.6", + "node-sass": "~4.14.1", + "parse-css": "git+https://github.com/tabatkins/parse-css.git", + "parserlib": "^1.1.1", + "prettier": "~2.0.5", + "reduce-css-calc": "~2.1.7", + "shady-css-parser": "^0.1.0", + "terser-webpack-plugin": "~3.0.6", + "ts-jest": "26.4.0", + "ts-node": "~8.10.2", + "ts-patch": "^1.2.5", + "tslint": "~6.1.2", + "typescript": "~4.0.3", + "webpack": "~4.44.1", + "webpack-cli": "~3.3.12" + }, + "husky": { + "hooks": { + "pre-commit": "npx lint-staged" + } + }, + "lint-staged": { + "**/*": [ + "nx format:write --files" + ] + } } diff --git a/packages/core-compat/.npmignore b/packages/core-compat/.npmignore deleted file mode 100644 index c32fafcdf..000000000 --- a/packages/core-compat/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -*.tgz -**/*.ts -!**/*.d.ts -npm-debug.log \ No newline at end of file diff --git a/packages/core-compat/README.md b/packages/core-compat/README.md deleted file mode 100644 index 71596b20e..000000000 --- a/packages/core-compat/README.md +++ /dev/null @@ -1,3 +0,0 @@ -**NOTE**: Do not use this package directly. - -The `tns-core-modules` package exists only for compatibility with older versions of NativeScript. It's recommended to use `@nativescript/core` now. \ No newline at end of file diff --git a/packages/core-compat/application-settings/application-settings.d.ts b/packages/core-compat/application-settings/application-settings.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/application-settings/application-settings.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/application-settings/application-settings.js b/packages/core-compat/application-settings/application-settings.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/application-settings/application-settings.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/application-settings/application-settings.ts b/packages/core-compat/application-settings/application-settings.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/application-settings/application-settings.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/application-settings/index.d.ts b/packages/core-compat/application-settings/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/application-settings/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/application-settings/index.js b/packages/core-compat/application-settings/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/application-settings/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/application-settings/index.ts b/packages/core-compat/application-settings/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/application-settings/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/application/application.d.ts b/packages/core-compat/application/application.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/application/application.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/application/application.js b/packages/core-compat/application/application.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/application/application.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/application/application.ts b/packages/core-compat/application/application.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/application/application.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/application/index.d.ts b/packages/core-compat/application/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/application/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/application/index.js b/packages/core-compat/application/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/application/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/application/index.ts b/packages/core-compat/application/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/application/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/bundle-entry-points.d.ts b/packages/core-compat/bundle-entry-points.d.ts deleted file mode 100644 index e51f287b0..000000000 --- a/packages/core-compat/bundle-entry-points.d.ts +++ /dev/null @@ -1 +0,0 @@ -import '@nativescript/core/bundle-entry-points'; diff --git a/packages/core-compat/bundle-entry-points.js b/packages/core-compat/bundle-entry-points.js deleted file mode 100644 index 2c24e8de4..000000000 --- a/packages/core-compat/bundle-entry-points.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -require("@nativescript/core/bundle-entry-points"); diff --git a/packages/core-compat/bundle-entry-points.ts b/packages/core-compat/bundle-entry-points.ts deleted file mode 100644 index 849ee1ceb..000000000 --- a/packages/core-compat/bundle-entry-points.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Execute the bundle-entry-points from core. Nothing is exported. -import '@nativescript/core/bundle-entry-points'; diff --git a/packages/core-compat/color/color.d.ts b/packages/core-compat/color/color.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/color/color.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/color/color.js b/packages/core-compat/color/color.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/color/color.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/color/color.ts b/packages/core-compat/color/color.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/color/color.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/color/index.d.ts b/packages/core-compat/color/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/color/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/color/index.js b/packages/core-compat/color/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/color/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/color/index.ts b/packages/core-compat/color/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/color/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/data/observable/index.d.ts b/packages/core-compat/data/observable/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/data/observable/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/data/observable/index.js b/packages/core-compat/data/observable/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/data/observable/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/data/observable/index.ts b/packages/core-compat/data/observable/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/data/observable/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/data/observable/observable.d.ts b/packages/core-compat/data/observable/observable.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/data/observable/observable.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/data/observable/observable.js b/packages/core-compat/data/observable/observable.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/data/observable/observable.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/data/observable/observable.ts b/packages/core-compat/data/observable/observable.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/data/observable/observable.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/file-system/file-system.d.ts b/packages/core-compat/file-system/file-system.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/file-system/file-system.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/file-system/file-system.js b/packages/core-compat/file-system/file-system.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/file-system/file-system.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/file-system/file-system.ts b/packages/core-compat/file-system/file-system.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/file-system/file-system.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/file-system/index.d.ts b/packages/core-compat/file-system/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/file-system/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/file-system/index.js b/packages/core-compat/file-system/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/file-system/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/file-system/index.ts b/packages/core-compat/file-system/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/file-system/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/http/http.d.ts b/packages/core-compat/http/http.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/http/http.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/http/http.js b/packages/core-compat/http/http.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/http/http.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/http/http.ts b/packages/core-compat/http/http.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/http/http.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/http/index.d.ts b/packages/core-compat/http/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/http/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/http/index.js b/packages/core-compat/http/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/http/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/http/index.ts b/packages/core-compat/http/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/http/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/image-asset/image-asset.d.ts b/packages/core-compat/image-asset/image-asset.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/image-asset/image-asset.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/image-asset/image-asset.js b/packages/core-compat/image-asset/image-asset.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/image-asset/image-asset.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/image-asset/image-asset.ts b/packages/core-compat/image-asset/image-asset.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/image-asset/image-asset.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/image-asset/index.d.ts b/packages/core-compat/image-asset/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/image-asset/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/image-asset/index.js b/packages/core-compat/image-asset/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/image-asset/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/image-asset/index.ts b/packages/core-compat/image-asset/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/image-asset/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/image-source/image-source.d.ts b/packages/core-compat/image-source/image-source.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/image-source/image-source.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/image-source/image-source.js b/packages/core-compat/image-source/image-source.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/image-source/image-source.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/image-source/image-source.ts b/packages/core-compat/image-source/image-source.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/image-source/image-source.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/image-source/index.d.ts b/packages/core-compat/image-source/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/image-source/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/image-source/index.js b/packages/core-compat/image-source/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/image-source/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/image-source/index.ts b/packages/core-compat/image-source/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/image-source/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/inspector_modules.js b/packages/core-compat/inspector_modules.js deleted file mode 100644 index 1c334b4de..000000000 --- a/packages/core-compat/inspector_modules.js +++ /dev/null @@ -1,7 +0,0 @@ -// The "inspector_modules" module is not public, but is refered in legacy versons of webpack.config -// So add the re-export manually -function __export(m) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; -} -Object.defineProperty(exports, "__esModule", { value: true }); -__export(require("@nativescript/core/inspector_modules")); diff --git a/packages/core-compat/package.json b/packages/core-compat/package.json deleted file mode 100644 index 1062ef0e6..000000000 --- a/packages/core-compat/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "tns-core-modules", - "main": "index", - "types": "index.d.ts", - "description": "Compatibility with old style tns-core-modules imports for NativeScript.", - "version": "7.0.0-rc.33", - "homepage": "https://nativescript.org", - "repository": { - "type": "git", - "url": "https://github.com/NativeScript/NativeScript" - }, - "license": "Apache-2.0", - "scripts": { - "setup": "npm i" - }, - "devDependencies": { - "@nativescript/core": "rc" - }, - "nativescript": { - "platforms": { - "ios": "5.0.0", - "android": "5.0.0" - } - } -} diff --git a/packages/core-compat/platform/index.d.ts b/packages/core-compat/platform/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/platform/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/platform/index.js b/packages/core-compat/platform/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/platform/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/platform/index.ts b/packages/core-compat/platform/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/platform/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/platform/platform.d.ts b/packages/core-compat/platform/platform.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/platform/platform.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/platform/platform.js b/packages/core-compat/platform/platform.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/platform/platform.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/platform/platform.ts b/packages/core-compat/platform/platform.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/platform/platform.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/profiling/index.d.ts b/packages/core-compat/profiling/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/profiling/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/profiling/index.js b/packages/core-compat/profiling/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/profiling/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/profiling/index.ts b/packages/core-compat/profiling/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/profiling/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/profiling/profiling.d.ts b/packages/core-compat/profiling/profiling.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/profiling/profiling.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/profiling/profiling.js b/packages/core-compat/profiling/profiling.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/profiling/profiling.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/profiling/profiling.ts b/packages/core-compat/profiling/profiling.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/profiling/profiling.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/tns-core-modules.d.ts b/packages/core-compat/tns-core-modules.d.ts deleted file mode 100644 index e2eb1206c..000000000 --- a/packages/core-compat/tns-core-modules.d.ts +++ /dev/null @@ -1 +0,0 @@ -// Not needed. Only added for back-compatibility as some apps refer to this file. diff --git a/packages/core-compat/trace/index.d.ts b/packages/core-compat/trace/index.d.ts deleted file mode 100644 index de705c20a..000000000 --- a/packages/core-compat/trace/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './trace'; diff --git a/packages/core-compat/trace/index.js b/packages/core-compat/trace/index.js deleted file mode 100644 index 716cccb41..000000000 --- a/packages/core-compat/trace/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./trace"), exports); diff --git a/packages/core-compat/trace/index.ts b/packages/core-compat/trace/index.ts deleted file mode 100644 index de705c20a..000000000 --- a/packages/core-compat/trace/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './trace'; diff --git a/packages/core-compat/trace/trace.d.ts b/packages/core-compat/trace/trace.d.ts deleted file mode 100644 index 69fed71f4..000000000 --- a/packages/core-compat/trace/trace.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Trace } from '@nativescript/core'; -export declare const enable: typeof Trace.enable; -export declare const error: typeof Trace.error; -export declare const getErrorHandler: typeof Trace.getErrorHandler; -export declare const isCategorySet: typeof Trace.isCategorySet; -export declare const isEnabled: typeof Trace.isEnabled; -export declare const notifyEvent: typeof Trace.notifyEvent; -export declare const setCategories: typeof Trace.setCategories; -export declare const setErrorHandler: typeof Trace.setErrorHandler; -export declare const write: typeof Trace.write; -export declare const removeWriter: typeof Trace.removeWriter; -export declare const messageType: typeof Trace.messageType; -export declare const removeEventListener: typeof Trace.removeEventListener; -export declare const addCategories: typeof Trace.addCategories; -export declare const addEventListener: typeof Trace.addEventListener; -export declare const DefaultErrorHandler: typeof Trace.DefaultErrorHandler; -export declare const ConsoleWriter: typeof Trace.ConsoleWriter; -export declare const addWriter: typeof Trace.addWriter; -export declare const categories: typeof Trace.categories; -export declare const clearWriters: typeof Trace.clearWriters; -export declare const disable: typeof Trace.disable; diff --git a/packages/core-compat/trace/trace.js b/packages/core-compat/trace/trace.js deleted file mode 100644 index cbd32e03d..000000000 --- a/packages/core-compat/trace/trace.js +++ /dev/null @@ -1,23 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.disable = exports.clearWriters = exports.categories = exports.addWriter = exports.ConsoleWriter = exports.DefaultErrorHandler = exports.addEventListener = exports.addCategories = exports.removeEventListener = exports.messageType = exports.removeWriter = exports.write = exports.setErrorHandler = exports.setCategories = exports.notifyEvent = exports.isEnabled = exports.isCategorySet = exports.getErrorHandler = exports.error = exports.enable = void 0; -var core_1 = require("@nativescript/core"); -exports.enable = core_1.Trace.enable; -exports.error = core_1.Trace.error; -exports.getErrorHandler = core_1.Trace.getErrorHandler; -exports.isCategorySet = core_1.Trace.isCategorySet; -exports.isEnabled = core_1.Trace.isEnabled; -exports.notifyEvent = core_1.Trace.notifyEvent; -exports.setCategories = core_1.Trace.setCategories; -exports.setErrorHandler = core_1.Trace.setErrorHandler; -exports.write = core_1.Trace.write; -exports.removeWriter = core_1.Trace.removeWriter; -exports.messageType = core_1.Trace.messageType; -exports.removeEventListener = core_1.Trace.removeEventListener; -exports.addCategories = core_1.Trace.addCategories; -exports.addEventListener = core_1.Trace.addEventListener; -exports.DefaultErrorHandler = core_1.Trace.DefaultErrorHandler; -exports.ConsoleWriter = core_1.Trace.ConsoleWriter; -exports.addWriter = core_1.Trace.addWriter; -exports.categories = core_1.Trace.categories; -exports.clearWriters = core_1.Trace.clearWriters; -exports.disable = core_1.Trace.disable; diff --git a/packages/core-compat/trace/trace.ts b/packages/core-compat/trace/trace.ts deleted file mode 100644 index 52afde9ad..000000000 --- a/packages/core-compat/trace/trace.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Trace } from '@nativescript/core'; - -export const enable = Trace.enable; -export const error = Trace.error; -export const getErrorHandler = Trace.getErrorHandler; -export const isCategorySet = Trace.isCategorySet; -export const isEnabled = Trace.isEnabled; -export const notifyEvent = Trace.notifyEvent; -export const setCategories = Trace.setCategories; -export const setErrorHandler = Trace.setErrorHandler; -export const write = Trace.write; -export const removeWriter = Trace.removeWriter; -export const messageType = Trace.messageType; -export const removeEventListener = Trace.removeEventListener; -export const addCategories = Trace.addCategories; -export const addEventListener = Trace.addEventListener; -export const DefaultErrorHandler = Trace.DefaultErrorHandler; -export const ConsoleWriter = Trace.ConsoleWriter; -export const addWriter = Trace.addWriter; -export const categories = Trace.categories; -export const clearWriters = Trace.clearWriters; -export const disable = Trace.disable; diff --git a/packages/core-compat/tsconfig.json b/packages/core-compat/tsconfig.json deleted file mode 100644 index 9aa096cc8..000000000 --- a/packages/core-compat/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "compilerOptions": { - "noEmitOnError": true, - "noEmitHelpers": true, - "target": "es5", - "module": "commonjs", - "declaration": true, - "noImplicitAny": false, - "noImplicitUseStrict": true, - "removeComments": true, - "experimentalDecorators": true, - "diagnostics": true, - "sourceMap": false, - "types" : [ - "node" - ], - "lib": [ - "es6", "dom" - ], - "baseUrl": "." - }, - "include": [ - "**/*.ts" - ], - "exclude": [ - "node_modules", - "dist", - "__tests__" - ] -} diff --git a/packages/core-compat/ui/core/index.d.ts b/packages/core-compat/ui/core/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/core/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/core/index.js b/packages/core-compat/ui/core/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/core/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/core/index.ts b/packages/core-compat/ui/core/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/core/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/core/view/index.d.ts b/packages/core-compat/ui/core/view/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/core/view/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/core/view/index.js b/packages/core-compat/ui/core/view/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/core/view/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/core/view/index.ts b/packages/core-compat/ui/core/view/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/core/view/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/core/view/view.d.ts b/packages/core-compat/ui/core/view/view.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/core/view/view.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/core/view/view.js b/packages/core-compat/ui/core/view/view.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/core/view/view.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/core/view/view.ts b/packages/core-compat/ui/core/view/view.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/core/view/view.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/frame/activity.android.js b/packages/core-compat/ui/frame/activity.android.js deleted file mode 100644 index 3fc99d0f8..000000000 --- a/packages/core-compat/ui/frame/activity.android.js +++ /dev/null @@ -1,7 +0,0 @@ -// The "ui/frame/activity" module is not public, but is refered in legacy versons of webpack.config -// So add the re-export manually -function __export(m) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; -} -Object.defineProperty(exports, "__esModule", { value: true }); -__export(require("@nativescript/core/ui/frame/activity")); diff --git a/packages/core-compat/ui/frame/frame.d.ts b/packages/core-compat/ui/frame/frame.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/frame/frame.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/frame/frame.js b/packages/core-compat/ui/frame/frame.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/frame/frame.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/frame/frame.ts b/packages/core-compat/ui/frame/frame.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/frame/frame.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/frame/index.d.ts b/packages/core-compat/ui/frame/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/frame/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/frame/index.js b/packages/core-compat/ui/frame/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/frame/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/frame/index.ts b/packages/core-compat/ui/frame/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/frame/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/absolute-layout/absolute-layout.d.ts b/packages/core-compat/ui/layouts/absolute-layout/absolute-layout.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/absolute-layout/absolute-layout.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/absolute-layout/absolute-layout.js b/packages/core-compat/ui/layouts/absolute-layout/absolute-layout.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/absolute-layout/absolute-layout.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/absolute-layout/absolute-layout.ts b/packages/core-compat/ui/layouts/absolute-layout/absolute-layout.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/absolute-layout/absolute-layout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/absolute-layout/index.d.ts b/packages/core-compat/ui/layouts/absolute-layout/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/absolute-layout/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/absolute-layout/index.js b/packages/core-compat/ui/layouts/absolute-layout/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/absolute-layout/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/absolute-layout/index.ts b/packages/core-compat/ui/layouts/absolute-layout/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/absolute-layout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/dock-layout/dock-layout.d.ts b/packages/core-compat/ui/layouts/dock-layout/dock-layout.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/dock-layout/dock-layout.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/dock-layout/dock-layout.js b/packages/core-compat/ui/layouts/dock-layout/dock-layout.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/dock-layout/dock-layout.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/dock-layout/dock-layout.ts b/packages/core-compat/ui/layouts/dock-layout/dock-layout.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/dock-layout/dock-layout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/dock-layout/index.d.ts b/packages/core-compat/ui/layouts/dock-layout/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/dock-layout/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/dock-layout/index.js b/packages/core-compat/ui/layouts/dock-layout/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/dock-layout/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/dock-layout/index.ts b/packages/core-compat/ui/layouts/dock-layout/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/dock-layout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.d.ts b/packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.js b/packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.ts b/packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/flexbox-layout/flexbox-layout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/flexbox-layout/index.d.ts b/packages/core-compat/ui/layouts/flexbox-layout/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/flexbox-layout/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/flexbox-layout/index.js b/packages/core-compat/ui/layouts/flexbox-layout/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/flexbox-layout/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/flexbox-layout/index.ts b/packages/core-compat/ui/layouts/flexbox-layout/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/flexbox-layout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/grid-layout/grid-layout.d.ts b/packages/core-compat/ui/layouts/grid-layout/grid-layout.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/grid-layout/grid-layout.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/grid-layout/grid-layout.js b/packages/core-compat/ui/layouts/grid-layout/grid-layout.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/grid-layout/grid-layout.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/grid-layout/grid-layout.ts b/packages/core-compat/ui/layouts/grid-layout/grid-layout.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/grid-layout/grid-layout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/grid-layout/index.d.ts b/packages/core-compat/ui/layouts/grid-layout/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/grid-layout/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/grid-layout/index.js b/packages/core-compat/ui/layouts/grid-layout/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/grid-layout/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/grid-layout/index.ts b/packages/core-compat/ui/layouts/grid-layout/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/grid-layout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/index.d.ts b/packages/core-compat/ui/layouts/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/index.js b/packages/core-compat/ui/layouts/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/index.ts b/packages/core-compat/ui/layouts/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/stack-layout/index.d.ts b/packages/core-compat/ui/layouts/stack-layout/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/stack-layout/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/stack-layout/index.js b/packages/core-compat/ui/layouts/stack-layout/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/stack-layout/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/stack-layout/index.ts b/packages/core-compat/ui/layouts/stack-layout/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/stack-layout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/stack-layout/stack-layout.d.ts b/packages/core-compat/ui/layouts/stack-layout/stack-layout.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/stack-layout/stack-layout.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/stack-layout/stack-layout.js b/packages/core-compat/ui/layouts/stack-layout/stack-layout.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/stack-layout/stack-layout.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/stack-layout/stack-layout.ts b/packages/core-compat/ui/layouts/stack-layout/stack-layout.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/stack-layout/stack-layout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/wrap-layout/index.d.ts b/packages/core-compat/ui/layouts/wrap-layout/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/wrap-layout/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/wrap-layout/index.js b/packages/core-compat/ui/layouts/wrap-layout/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/wrap-layout/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/wrap-layout/index.ts b/packages/core-compat/ui/layouts/wrap-layout/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/wrap-layout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/wrap-layout/wrap-layout.d.ts b/packages/core-compat/ui/layouts/wrap-layout/wrap-layout.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/wrap-layout/wrap-layout.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/layouts/wrap-layout/wrap-layout.js b/packages/core-compat/ui/layouts/wrap-layout/wrap-layout.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/layouts/wrap-layout/wrap-layout.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/layouts/wrap-layout/wrap-layout.ts b/packages/core-compat/ui/layouts/wrap-layout/wrap-layout.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/layouts/wrap-layout/wrap-layout.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/page/index.d.ts b/packages/core-compat/ui/page/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/page/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/ui/page/index.js b/packages/core-compat/ui/page/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/ui/page/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/ui/page/index.ts b/packages/core-compat/ui/page/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/ui/page/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/utils/index.d.ts b/packages/core-compat/utils/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/utils/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/utils/index.js b/packages/core-compat/utils/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/utils/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/utils/index.ts b/packages/core-compat/utils/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/utils/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/utils/types.d.ts b/packages/core-compat/utils/types.d.ts deleted file mode 100644 index 373f25969..000000000 --- a/packages/core-compat/utils/types.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -export declare const ClassInfo: typeof import('@nativescript/core/utils/types').ClassInfo; -export declare const getClass: typeof import('@nativescript/core/utils/types').getClass; -export declare const getBaseClasses: typeof import('@nativescript/core/utils/types').getBaseClasses; -export declare const getClassInfo: typeof import('@nativescript/core/utils/types').getClassInfo; -export declare const isBoolean: typeof import('@nativescript/core/utils/types').isBoolean; -export declare const isDefined: typeof import('@nativescript/core/utils/types').isDefined; -export declare const isFunction: typeof import('@nativescript/core/utils/types').isFunction; -export declare const isNullOrUndefined: typeof import('@nativescript/core/utils/types').isNullOrUndefined; -export declare const isNumber: typeof import('@nativescript/core/utils/types').isNumber; -export declare const isObject: typeof import('@nativescript/core/utils/types').isObject; -export declare const isString: typeof import('@nativescript/core/utils/types').isString; -export declare const isUndefined: typeof import('@nativescript/core/utils/types').isUndefined; -export declare const toUIString: typeof import('@nativescript/core/utils/types').toUIString; -export declare const verifyCallback: typeof import('@nativescript/core/utils/types').verifyCallback; diff --git a/packages/core-compat/utils/types.js b/packages/core-compat/utils/types.js deleted file mode 100644 index ca93d7ed6..000000000 --- a/packages/core-compat/utils/types.js +++ /dev/null @@ -1,17 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.verifyCallback = exports.toUIString = exports.isUndefined = exports.isString = exports.isObject = exports.isNumber = exports.isNullOrUndefined = exports.isFunction = exports.isDefined = exports.isBoolean = exports.getClassInfo = exports.getBaseClasses = exports.getClass = exports.ClassInfo = void 0; -var core_1 = require("@nativescript/core"); -exports.ClassInfo = core_1.Utils.ClassInfo; -exports.getClass = core_1.Utils.getClass; -exports.getBaseClasses = core_1.Utils.getBaseClasses; -exports.getClassInfo = core_1.Utils.getClassInfo; -exports.isBoolean = core_1.Utils.isBoolean; -exports.isDefined = core_1.Utils.isDefined; -exports.isFunction = core_1.Utils.isFunction; -exports.isNullOrUndefined = core_1.Utils.isNullOrUndefined; -exports.isNumber = core_1.Utils.isNumber; -exports.isObject = core_1.Utils.isObject; -exports.isString = core_1.Utils.isString; -exports.isUndefined = core_1.Utils.isUndefined; -exports.toUIString = core_1.Utils.toUIString; -exports.verifyCallback = core_1.Utils.verifyCallback; diff --git a/packages/core-compat/utils/types.ts b/packages/core-compat/utils/types.ts deleted file mode 100644 index 41e298460..000000000 --- a/packages/core-compat/utils/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Utils } from '@nativescript/core'; - -export const ClassInfo = Utils.ClassInfo; -export const getClass = Utils.getClass; -export const getBaseClasses = Utils.getBaseClasses; -export const getClassInfo = Utils.getClassInfo; -export const isBoolean = Utils.isBoolean; -export const isDefined = Utils.isDefined; -export const isFunction = Utils.isFunction; -export const isNullOrUndefined = Utils.isNullOrUndefined; -export const isNumber = Utils.isNumber; -export const isObject = Utils.isObject; -export const isString = Utils.isString; -export const isUndefined = Utils.isUndefined; -export const toUIString = Utils.toUIString; -export const verifyCallback = Utils.verifyCallback; diff --git a/packages/core-compat/utils/utils.d.ts b/packages/core-compat/utils/utils.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/utils/utils.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/utils/utils.js b/packages/core-compat/utils/utils.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/utils/utils.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/utils/utils.ts b/packages/core-compat/utils/utils.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/utils/utils.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/xml/index.d.ts b/packages/core-compat/xml/index.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/xml/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/xml/index.js b/packages/core-compat/xml/index.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/xml/index.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/xml/index.ts b/packages/core-compat/xml/index.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/xml/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/xml/xml.d.ts b/packages/core-compat/xml/xml.d.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/xml/xml.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core-compat/xml/xml.js b/packages/core-compat/xml/xml.js deleted file mode 100644 index 4ae4e4d5b..000000000 --- a/packages/core-compat/xml/xml.js +++ /dev/null @@ -1,2 +0,0 @@ -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("@nativescript/core"), exports); diff --git a/packages/core-compat/xml/xml.ts b/packages/core-compat/xml/xml.ts deleted file mode 100644 index 5dff1da93..000000000 --- a/packages/core-compat/xml/xml.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@nativescript/core'; diff --git a/packages/core/.eslintrc b/packages/core/.eslintrc.json similarity index 100% rename from packages/core/.eslintrc rename to packages/core/.eslintrc.json diff --git a/packages/core/.gitignore b/packages/core/.gitignore index 1ea5a026a..7fe498c27 100644 --- a/packages/core/.gitignore +++ b/packages/core/.gitignore @@ -1,5 +1,6 @@ dist *.js +!jest.config.js *.map !xml/xml.js !js-libs/**/*.* diff --git a/packages/core/.npmignore b/packages/core/.npmignore index 2856450cd..a80034276 100644 --- a/packages/core/.npmignore +++ b/packages/core/.npmignore @@ -3,4 +3,5 @@ dist *.tgz **/*.ts !**/*.d.ts +jest.config.js npm-debug.log \ No newline at end of file diff --git a/packages/core/application/index.android.ts b/packages/core/application/index.android.ts index 7587f17af..aadc3ff5d 100644 --- a/packages/core/application/index.android.ts +++ b/packages/core/application/index.android.ts @@ -504,3 +504,8 @@ declare namespace com { } } } + +// core exports this symbol so apps may import them in general +// technically they are only available for use when running that platform +// helps avoid a webpack nonexistent warning +export const iOSApplication = undefined; diff --git a/packages/core/application/index.ios.ts b/packages/core/application/index.ios.ts index ba05b941a..2ad1bb4b4 100644 --- a/packages/core/application/index.ios.ts +++ b/packages/core/application/index.ios.ts @@ -528,3 +528,8 @@ global.__onLiveSync = function __onLiveSync(context?: ModuleContext) { const rootView = getRootView(); livesync(rootView, context); }; + +// core exports this symbol so apps may import them in general +// technically they are only available for use when running that platform +// helps avoid a webpack nonexistent warning +export const AndroidApplication = undefined; diff --git a/packages/core/image-asset/index.android.ts b/packages/core/image-asset/index.android.ts index de4e9ebe5..35e9e66d2 100644 --- a/packages/core/image-asset/index.android.ts +++ b/packages/core/image-asset/index.android.ts @@ -15,6 +15,7 @@ export class ImageAsset extends ImageAssetBase { this.android = fileName; } + // @ts-ignore get android(): string { return this._android; } diff --git a/packages/core/image-asset/index.ios.ts b/packages/core/image-asset/index.ios.ts index 4a6531f67..32ec30583 100644 --- a/packages/core/image-asset/index.ios.ts +++ b/packages/core/image-asset/index.ios.ts @@ -21,6 +21,7 @@ export class ImageAsset extends ImageAssetBase { } } + // @ts-ignore get ios(): PHAsset { return this._ios; } diff --git a/packages/core/jest.config.js b/packages/core/jest.config.js new file mode 100644 index 000000000..a831fe51b --- /dev/null +++ b/packages/core/jest.config.js @@ -0,0 +1,4 @@ +module.exports = { + preset: '../../jest.preset.js', + displayName: 'core', +}; diff --git a/packages/core/package.json b/packages/core/package.json index 9afe0deb4..cf77e2711 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -31,7 +31,7 @@ "css-tree": "^1.0.0-alpha.39", "@nativescript/hook": "~2.0.0", "reduce-css-calc": "^2.1.7", - "tslib": "2.0.0" + "tslib": "~2.0.0" }, "nativescript": { "platforms": { diff --git a/packages/core/tsconfig.lib.json b/packages/core/tsconfig.lib.json index 1a082d817..1c189dfd0 100644 --- a/packages/core/tsconfig.lib.json +++ b/packages/core/tsconfig.lib.json @@ -1,25 +1,27 @@ { - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmitOnError": true, - "noEmitHelpers": true, - "declaration": true, - "noImplicitAny": false, - "noImplicitUseStrict": true, - "removeComments": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "diagnostics": true, - "sourceMap": true, - "inlineSourceMap": false, - "baseUrl": ".", - "outDir": "../../dist/out-tsc", - "rootDir": "./", - "types": ["node"], - "plugins": [ - { "transform": "../../../packages/webpack/transformers/ns-transform-native-classes.ts", "type": "raw" } - ] - }, - "exclude": ["**/*.spec.ts", "dist", "__tests__"], - "include": ["**/*.ts", "./references.d.ts"] + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmitOnError": true, + "noEmitHelpers": true, + "declaration": true, + "noImplicitAny": false, + "noImplicitUseStrict": true, + "removeComments": false, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "diagnostics": true, + "sourceMap": true, + "inlineSourceMap": false, + "baseUrl": ".", + "outDir": "../../dist", + "types": ["node"], + "plugins": [ + { + "transform": "../webpack/transformers/ns-transform-native-classes.ts", + "type": "raw" + } + ] + }, + "exclude": ["**/*.spec.ts", "dist", "__tests__"], + "include": ["**/*.ts", "./references.d.ts"] } diff --git a/packages/core/ui/action-bar/action-bar-common.ts b/packages/core/ui/action-bar/action-bar-common.ts index 2ce8d7c0b..8d0c84a68 100644 --- a/packages/core/ui/action-bar/action-bar-common.ts +++ b/packages/core/ui/action-bar/action-bar-common.ts @@ -102,10 +102,12 @@ export class ActionBarBase extends View implements ActionBarDefinition { this.style.androidContentInsetRight = value; } + // @ts-ignore get ios(): any { return undefined; } + // @ts-ignore get android(): AndroidActionBarSettings { return undefined; } @@ -262,7 +264,9 @@ export class ActionItemBase extends ViewBase implements ActionItemDefinition { private _actionBar: ActionBarDefinition; private _actionView: View; + // @ts-ignore public ios: IOSActionItemSettings; + // @ts-ignore public android: AndroidActionItemSettings; public text: string; diff --git a/packages/core/ui/action-bar/index.android.ts b/packages/core/ui/action-bar/index.android.ts index 531c68ee3..a5e57ccb5 100644 --- a/packages/core/ui/action-bar/index.android.ts +++ b/packages/core/ui/action-bar/index.android.ts @@ -96,6 +96,7 @@ export class ActionItem extends ActionItemBase { this._itemId = generateItemId(); } + // @ts-ignore public get android(): AndroidActionItemSettings { return this._androidPosition; } diff --git a/packages/core/ui/action-bar/index.ios.ts b/packages/core/ui/action-bar/index.ios.ts index bc557be49..66da39270 100644 --- a/packages/core/ui/action-bar/index.ios.ts +++ b/packages/core/ui/action-bar/index.ios.ts @@ -64,6 +64,7 @@ export class ActionItem extends ActionItemBase { systemIcon: undefined, }; + // @ts-ignore public get ios(): IOSActionItemSettings { return this._ios; } diff --git a/packages/core/ui/activity-indicator/index.ios.ts b/packages/core/ui/activity-indicator/index.ios.ts index 6eb82c21e..cc93d4eef 100644 --- a/packages/core/ui/activity-indicator/index.ios.ts +++ b/packages/core/ui/activity-indicator/index.ios.ts @@ -20,6 +20,7 @@ export class ActivityIndicator extends ActivityIndicatorBase { return view; } + // @ts-ignore get ios(): UIActivityIndicatorView { return this.nativeViewProtected; } diff --git a/packages/core/ui/bottom-navigation/index.ios.ts b/packages/core/ui/bottom-navigation/index.ios.ts index 78c80464d..43ddc14bc 100644 --- a/packages/core/ui/bottom-navigation/index.ios.ts +++ b/packages/core/ui/bottom-navigation/index.ios.ts @@ -316,6 +316,7 @@ export class BottomNavigation extends TabNavigationBase { super.onUnloaded(); } + // @ts-ignore get ios(): UITabBarController { return this._ios; } diff --git a/packages/core/ui/button/index.ios.ts b/packages/core/ui/button/index.ios.ts index e48e0b86b..f57842155 100644 --- a/packages/core/ui/button/index.ios.ts +++ b/packages/core/ui/button/index.ios.ts @@ -33,6 +33,7 @@ export class Button extends ButtonBase { super.disposeNativeView(); } + // @ts-ignore get ios() { return this.nativeViewProtected; } diff --git a/packages/core/ui/date-picker/index.ios.ts b/packages/core/ui/date-picker/index.ios.ts index 118124bd0..69267ccd9 100644 --- a/packages/core/ui/date-picker/index.ios.ts +++ b/packages/core/ui/date-picker/index.ios.ts @@ -33,6 +33,7 @@ export class DatePicker extends DatePickerBase { super.disposeNativeView(); } + // @ts-ignore get ios(): UIDatePicker { return this.nativeViewProtected; } diff --git a/packages/core/ui/frame/index.android.ts b/packages/core/ui/frame/index.android.ts index bc635bbb9..097d1a439 100644 --- a/packages/core/ui/frame/index.android.ts +++ b/packages/core/ui/frame/index.android.ts @@ -130,6 +130,7 @@ export class Frame extends FrameBase { return this._containerViewId; } + // @ts-ignore get android(): AndroidFrame { return this._android; } diff --git a/packages/core/ui/frame/index.ios.ts b/packages/core/ui/frame/index.ios.ts index ec78a7b0c..1ccb99603 100644 --- a/packages/core/ui/frame/index.ios.ts +++ b/packages/core/ui/frame/index.ios.ts @@ -46,6 +46,7 @@ export class Frame extends FrameBase { super.disposeNativeView(); } + // @ts-ignore public get ios(): iOSFrame { return this._ios; } diff --git a/packages/core/ui/html-view/index.ios.ts b/packages/core/ui/html-view/index.ios.ts index 7c6d9462f..60be5b9ba 100644 --- a/packages/core/ui/html-view/index.ios.ts +++ b/packages/core/ui/html-view/index.ios.ts @@ -32,6 +32,7 @@ export class HtmlView extends HtmlViewBase { this.nativeViewProtected.textContainerInset = (UIEdgeInsets as any).zero; } + // @ts-ignore get ios(): UITextView { return this.nativeViewProtected; } diff --git a/packages/core/ui/index.ts b/packages/core/ui/index.ts index 4304ae45c..52d8b2900 100644 --- a/packages/core/ui/index.ts +++ b/packages/core/ui/index.ts @@ -1,6 +1,7 @@ export { ActionBar, ActionItem, ActionItems, NavigationButton } from './action-bar'; export { ActivityIndicator } from './activity-indicator'; -export { Animation, AnimationDefinition, KeyframeAnimation, KeyframeAnimationInfo, KeyframeDeclaration, KeyframeInfo } from './animation'; +export { Animation, KeyframeAnimation, KeyframeAnimationInfo, KeyframeDeclaration, KeyframeInfo } from './animation'; +export type { AnimationDefinition } from './animation'; export { BottomNavigation } from './bottom-navigation'; export type { SelectedIndexChangedEventData } from './bottom-navigation'; export { Builder } from './builder'; @@ -45,7 +46,8 @@ export { ListView } from './list-view'; export type { ItemEventData, TemplatedItemsView, ItemsSource } from './list-view'; export { Page, PageBase } from './page'; export type { NavigatedData } from './page'; -export { Placeholder, CreateViewEventData } from './placeholder'; +export { Placeholder } from './placeholder'; +export type { CreateViewEventData } from './placeholder'; export { Progress } from './progress'; export { ProxyViewContainer } from './proxy-view-container'; export { Repeater } from './repeater'; diff --git a/packages/core/ui/label/index.ios.ts b/packages/core/ui/label/index.ios.ts index 8fe2dc68d..6b8b91283 100644 --- a/packages/core/ui/label/index.ios.ts +++ b/packages/core/ui/label/index.ios.ts @@ -27,6 +27,7 @@ export class Label extends TextBase implements LabelDefinition { return view; } + // @ts-ignore get ios(): TNSLabel { return this.nativeTextViewProtected; } diff --git a/packages/core/ui/list-picker/index.ios.ts b/packages/core/ui/list-picker/index.ios.ts index cf255d0c2..2b5260508 100644 --- a/packages/core/ui/list-picker/index.ios.ts +++ b/packages/core/ui/list-picker/index.ios.ts @@ -28,6 +28,7 @@ export class ListPicker extends ListPickerBase { super.disposeNativeView(); } + // @ts-ignore get ios() { return this.nativeViewProtected; } diff --git a/packages/core/ui/list-view/index.ios.ts b/packages/core/ui/list-view/index.ios.ts index 5277f2fca..974f96334 100644 --- a/packages/core/ui/list-view/index.ios.ts +++ b/packages/core/ui/list-view/index.ios.ts @@ -291,6 +291,7 @@ export class ListView extends ListViewBase { super.onUnloaded(); } + // @ts-ignore get ios(): UITableView { return this.nativeViewProtected; } diff --git a/packages/core/ui/page/index.ios.ts b/packages/core/ui/page/index.ios.ts index f7ea82a6a..c1ad6b607 100644 --- a/packages/core/ui/page/index.ios.ts +++ b/packages/core/ui/page/index.ios.ts @@ -309,6 +309,7 @@ class UIViewControllerImpl extends UIViewController { } } + // @ts-ignore public get preferredStatusBarStyle(): UIStatusBarStyle { const owner = this._owner.get(); if (owner) { @@ -340,6 +341,7 @@ export class Page extends PageBase { return this.viewController.view; } + // @ts-ignore get ios(): UIViewController { return this._ios; } diff --git a/packages/core/ui/progress/index.ios.ts b/packages/core/ui/progress/index.ios.ts index 32aa736ae..06c9bb8d9 100644 --- a/packages/core/ui/progress/index.ios.ts +++ b/packages/core/ui/progress/index.ios.ts @@ -11,6 +11,7 @@ export class Progress extends ProgressBase { return UIProgressView.new(); } + // @ts-ignore get ios() { return this.nativeViewProtected; } diff --git a/packages/core/ui/proxy-view-container/index.ts b/packages/core/ui/proxy-view-container/index.ts index bb2a715bb..aec10d7ce 100644 --- a/packages/core/ui/proxy-view-container/index.ts +++ b/packages/core/ui/proxy-view-container/index.ts @@ -1,4 +1,3 @@ -import { ProxyViewContainer as ProxyViewContainerDefinition } from '.'; import { View, CSSType } from '../core/view'; import { LayoutBase } from '../layouts/layout-base'; import { Property } from '../core/properties'; @@ -14,7 +13,7 @@ import { Trace } from '../../trace'; // * Child is removed from attached proxy. Handled in _removeViewFromNativeVisualTree. // * Proxy (with children) is removed form the DOM. In _removeViewFromNativeVisualTree recursively when the proxy is removed from its parent. @CSSType('ProxyViewContainer') -export class ProxyViewContainer extends LayoutBase implements ProxyViewContainerDefinition { +export class ProxyViewContainer extends LayoutBase { private proxiedLayoutProperties = new Set(); constructor() { @@ -23,10 +22,12 @@ export class ProxyViewContainer extends LayoutBase implements ProxyViewContainer } // No native view for proxy container. + // @ts-ignore get ios(): any { return null; } + // @ts-ignore get android(): any { return null; } diff --git a/packages/core/ui/search-bar/index.ios.ts b/packages/core/ui/search-bar/index.ios.ts index 2ed62bb3e..9d689efac 100644 --- a/packages/core/ui/search-bar/index.ios.ts +++ b/packages/core/ui/search-bar/index.ios.ts @@ -103,6 +103,7 @@ export class SearchBar extends SearchBarBase { (this.ios).resignFirstResponder(); } + // @ts-ignore get ios(): UISearchBar { return this.nativeViewProtected; } diff --git a/packages/core/ui/segmented-bar/index.ios.ts b/packages/core/ui/segmented-bar/index.ios.ts index dc1307d98..42a9252a0 100644 --- a/packages/core/ui/segmented-bar/index.ios.ts +++ b/packages/core/ui/segmented-bar/index.ios.ts @@ -36,6 +36,7 @@ export class SegmentedBar extends SegmentedBarBase { super.disposeNativeView(); } + // @ts-ignore get ios(): UISegmentedControl { return this.nativeViewProtected; } diff --git a/packages/core/ui/slider/index.ios.ts b/packages/core/ui/slider/index.ios.ts index 4bbd8efc9..a7a53de97 100644 --- a/packages/core/ui/slider/index.ios.ts +++ b/packages/core/ui/slider/index.ios.ts @@ -52,6 +52,7 @@ export class Slider extends SliderBase { super.disposeNativeView(); } + // @ts-ignore get ios(): UISlider { return this.nativeViewProtected; } diff --git a/packages/core/ui/switch/index.ios.ts b/packages/core/ui/switch/index.ios.ts index ec37e99bc..9835be79b 100644 --- a/packages/core/ui/switch/index.ios.ts +++ b/packages/core/ui/switch/index.ios.ts @@ -55,6 +55,7 @@ export class Switch extends SwitchBase { super.disposeNativeView(); } + // @ts-ignore get ios(): UISwitch { return this.nativeViewProtected; } diff --git a/packages/core/ui/tab-view/index.ios.ts b/packages/core/ui/tab-view/index.ios.ts index f17041008..c467aee3f 100644 --- a/packages/core/ui/tab-view/index.ios.ts +++ b/packages/core/ui/tab-view/index.ios.ts @@ -330,6 +330,7 @@ export class TabView extends TabViewBase { super.onUnloaded(); } + // @ts-ignore get ios(): UITabBarController { return this._ios; } diff --git a/packages/core/ui/tabs/index.ios.ts b/packages/core/ui/tabs/index.ios.ts index 9213b803b..c3681f6be 100644 --- a/packages/core/ui/tabs/index.ios.ts +++ b/packages/core/ui/tabs/index.ios.ts @@ -466,6 +466,7 @@ export class Tabs extends TabsBase { // public offscreenTabLimit: number; // public tabsPosition: "top" | "bottom"; public _canSelectItem: boolean; + // @ts-ignore public isLoaded: boolean; public viewController: UIPageViewControllerImpl; public items: TabContentItem[]; @@ -530,6 +531,7 @@ export class Tabs extends TabsBase { super.onUnloaded(); } + // @ts-ignore get ios(): UIPageViewController { return this._ios; } diff --git a/packages/core/ui/text-base/index.android.ts b/packages/core/ui/text-base/index.android.ts index d9fbdacec..3177ef2cf 100644 --- a/packages/core/ui/text-base/index.android.ts +++ b/packages/core/ui/text-base/index.android.ts @@ -164,6 +164,7 @@ function initializeBaselineAdjustedSpan(): void { export class TextBase extends TextBaseCommon { nativeViewProtected: android.widget.TextView; + // @ts-ignore nativeTextViewProtected: android.widget.TextView; private _defaultTransformationMethod: android.text.method.TransformationMethod; private _paintFlags: number; diff --git a/packages/core/ui/text-base/index.ios.ts b/packages/core/ui/text-base/index.ios.ts index d5d0c424f..01f06054d 100644 --- a/packages/core/ui/text-base/index.ios.ts +++ b/packages/core/ui/text-base/index.ios.ts @@ -79,6 +79,7 @@ class UILabelClickHandlerImpl extends NSObject { export class TextBase extends TextBaseCommon { public nativeViewProtected: UITextField | UITextView | UILabel | UIButton; + // @ts-ignore public nativeTextViewProtected: UITextField | UITextView | UILabel | UIButton; private _tappable: boolean = false; private _tapGestureRecognizer: UITapGestureRecognizer; diff --git a/packages/core/ui/text-field/index.ios.ts b/packages/core/ui/text-field/index.ios.ts index f72fdc568..f402ccbcd 100644 --- a/packages/core/ui/text-field/index.ios.ts +++ b/packages/core/ui/text-field/index.ios.ts @@ -145,6 +145,7 @@ export class TextField extends TextFieldBase { super.onUnloaded(); } + // @ts-ignore get ios(): UITextField { return this.nativeViewProtected; } diff --git a/packages/core/ui/text-view/index.ios.ts b/packages/core/ui/text-view/index.ios.ts index 3de66521a..d43d9d666 100644 --- a/packages/core/ui/text-view/index.ios.ts +++ b/packages/core/ui/text-view/index.ios.ts @@ -123,6 +123,7 @@ export class TextView extends TextViewBaseCommon { super.onUnloaded(); } + // @ts-ignore get ios(): UITextView { return this.nativeViewProtected; } diff --git a/packages/core/ui/time-picker/index.ios.ts b/packages/core/ui/time-picker/index.ios.ts index 12c7ddd7f..ab80f2a16 100644 --- a/packages/core/ui/time-picker/index.ios.ts +++ b/packages/core/ui/time-picker/index.ios.ts @@ -51,6 +51,7 @@ export class TimePicker extends TimePickerBase { super.initNativeView(); } + // @ts-ignore get ios(): UIDatePicker { return this.nativeViewProtected; } diff --git a/packages/core/ui/web-view/index.ios.ts b/packages/core/ui/web-view/index.ios.ts index 97f0baeda..8dd35dedf 100644 --- a/packages/core/ui/web-view/index.ios.ts +++ b/packages/core/ui/web-view/index.ios.ts @@ -130,6 +130,7 @@ export class WebView extends WebViewBase { super.onUnloaded(); } + // @ts-ignore get ios(): WKWebView { return this.nativeViewProtected; } diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/add_to_fav.png b/tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/add_to_fav.png new file mode 100644 index 0000000000000000000000000000000000000000..d79e38998f003c25f726f3bff7ed33272177c080 GIT binary patch literal 915 zcmeAS@N?(olHy`uVBq!ia0vp^DnP8v!3-o%-;NLhQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI9}80Z4_F1o;IsD1`CWIW#a8X(q&5#);%Gv*ddCu~kSJ#bg*T@`x$vS~y3gCc9*p z)~AJd+8V1%`}+o{RO>_%)r16j7M%E#!GkW{s0wpdb&7Jf^F z+l@6=6J+_=-&kFcp5u4nRuA`k`8@uZSrf$Vx;`CTee?%2M^K0W<9;>~rwEHf9GMP+ zF0IO49gjkLI@Kqw+@e3()vu)JL|VvHa7 z|GqChFUmZWPc)@1;c;%}^;+xC|0`%Y|9OXbH5N^iulV(}ozi;yL+NS6*Xy$ryiRGV zX$9~Z2c4T&t#bJ6LEVcF?r^>M`Lt%^jMb_Cy7T{VFz0a3&i_8ebl04wa*YKC`Q|EjGr;jz2r%vxYA+0WXWcf>T zkHr_CPd>Te^;^B&YHPmV4t-^FN^AP0m45`}>lp1mYnU9n)ioU$Qw*N2elF{r5}E*V C-Tln~ literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/baseline_motorcycle_black_18.png b/tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/baseline_motorcycle_black_18.png new file mode 100755 index 0000000000000000000000000000000000000000..0e08b122fd2179da5bc4e8f15aea451463a00c7e GIT binary patch literal 324 zcmV-K0lWT*P)G^+Jm`4Yj?D(o1LO5Zo48?t+oO9x*ol{OiE(e8YmYd|5_^RE; zS?h&xP%cS#;i*c1#p1KZ0qP5(J4h23qMR|Wo01mX7oN%kV4bi;vO&l|Ly>x9gs#Fx zlIg-G$s}Pr3TvpLenO~=%0eiUe&B*IM^f2Kp^vO6WuI^iuv^%y1j<`4gjN!U3gL#m zLU^h^pn_Y%Q+vG>!ct!t;<0$!WsN1OIw9Wn+zPpUrGVxJYOAQvWmR2&!0f*AL170000Kn{dM zsgiE)ADr{v^Vn%n?Dqli*|Fn)(UL+d8rvUjbJddZSL10|`KMRUwq6~wWZe(hqVLu% znWo+izr^_cbVZFt`HL1+%-9sMYStb{Jkpn%zPM`2UMIZ~v1vxhvWVA=T#}lOF*M=5 zh-D=oMa+Uz!+KKbrK0m9I!gLtpb4VdbB{&bQ*=xAu*yXc`r=!(5eG%7{G;N3&SoJ{5TM==B zp$j6S>xqY6iHHqN6;nD=>As@d22!eHT8&9<8THOZRi|}j*g)GP)Z1^~Eq9zzZ^B`h j-8Apdgy3SMU=#oVO+Om@%^LtZ00000NkvXXu0mjfcz&ts literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/baseline_motorcycle_black_36.png b/tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/baseline_motorcycle_black_36.png new file mode 100755 index 0000000000000000000000000000000000000000..582032b56346e05f22b74a1c6ce6406e097dd384 GIT binary patch literal 565 zcmV-50?Pe~P)>OHL7Ft1ncG{jgY%ld#y2ld#y2b5e~jCN4q6rKTo57|#^nI$-%!CeoeCL>vX! z!dHT#QMVXLCL*90-w29<`a(~9Odu!*Ya$*x5ER4J9Tz#ZH}!@I)FBfk=)m;|zNcZ7 zCnedLrhTDb$%&&yvgN8}OA0pmMy(|!g5o@o&LSM7;j?N#Bs*3qx#AhMixgOul&ADY zdYYy(IuN^#o?)f2nPuW40tb(>K0CF%Ff={j8m;2;2ZXv`DEjmIy!)p z01d3mv5?})CB3y0cC+&`AatJy2wOpZ1V75 zH80q{pOjpb(fXjYleHPxU6o78f}M84RhGCEY?01O?SIO|Pqq4wZdgsyehWvf2$DKZ zCHZ5{XzOFp&DT0BC_uREEY{Y`;o>AgT3zNWkNB^xTqG5`JiOMrKRL}QF7ZoSn~$rU zJofmrZj+Nh)%oo)ag>yJD8e0=!DHmXNdrE)Ol%=FKC&=@7Xf2;>4Ccvtl)dV#C_Tj zL1}2mE>3Zrjf|l({<1TiqnzRhYZ*-qQjvHWhG7H)`PP3fd}osI00000NkvXXu0mjf D3dadX literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/baseline_motorcycle_black_48.png b/tools/assets/App_Resources/Android/src/main/res/drawable-hdpi/baseline_motorcycle_black_48.png new file mode 100755 index 0000000000000000000000000000000000000000..0522d79e704d7a0527ac3cf5cace54661add0f11 GIT binary patch literal 593 zcmV-X0SNnZ6Wgd`m9f>vT$__FJ9Cq>J0G9L{7!rB`@A2na2&^R z9LI5-kWk{>pcvtY%59ZYZmXnnTP2m-DydvmNl=U%`K6MpR3f)kx|?q+Rc9)fdBG1d zQ2|Z{-+93WrcxEZ)Zzf?s1Qs#`>BDCCX@7!yVU}ZQF)B>62n&743|pa0 z`jCV2L>h-Av6Ue-rwGNF#w8#B=6XVDS~8v^o{t+rd9tkyuWx`c$ z?<}Gx+FCoZ-1E#wt3vIN&DQpwAo`}AkcG&itmYe&h%pjmZH?nZX@8fZ!KXs0Y@-a2 zZY0PWXvd}n{~NkRGbusP#_k(>s;#xR{15$PsGK00sqH;QbXr^6itL59x63|3ILpo; z8fA4AnU2zCfFB7xjD%6PSL)XmSLz6g+9$|YYS|{wov0zYLX7m>eAoDx0G)+uo z-g`AeX-*lsFrW7*VUl`8$TDtkzzK`6w8A26UBC$| zg7?;u$nby@CgY=89Q^MCYdU9X9$>;jYT%b@OyM%m`A!;NdB6$g(#Y?G@4Vom{^sg9 fj^j9vlMDO-GF)(NEB5pb00000NkvXXu0mjfLC6^o literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-mdpi/add_to_fav.png b/tools/assets/App_Resources/Android/src/main/res/drawable-mdpi/add_to_fav.png new file mode 100644 index 0000000000000000000000000000000000000000..fafe86a9061a1b314a976dedf154063e5acf24b0 GIT binary patch literal 669 zcmeAS@N?(olHy`uVBq!ia0vp^5@CQfaQEB+4jJY|EeJ!r>9<9jdJr z7Q@bzA!aHRtXpMOs1aL~r>t(zvU=XrYM@z+N#5=*3>~bp9zYIffk$L90|U1Z2s2)~ zTlWVj_}bIOF+}5h?!=oyO$I!!i#-@cr*<`YI2MW@tv&qq|9>xSW|v&KOSg+Jrx`Jx zSRBAmDAJvzH`Qy>g$bM!U1I`GeM4E?b}|KMa`&v_TM+)ga_za|z0(@o95XKGtjuk` z-?QzO(d;P_yc=?MJ}!yvRW0=?-tFhUO_$;P`@eO!Kik%QX+CH!&+^xW=d9o}<>DD< z&E`F+F>(vu^ipT)=Lrv=b8ClQV=7M558k;&Ii*5--u3Kx;c`Z1@1I3Wv6TGI+vj*J zkN-(Q&!WeT2kP2;F8>s&+os++{WGVo>ArhGwY!h~Yzopr083fCZsn^>#IJNHzWauvuIE=g0RO9+j^ zUvNjr26BXlK1rw&etIC}fqOy@aLtr0XyrEd zFINS{=g-hyb)r>5UYuDb?1d+jOpj)g`*bm7z7s(=)R_G`B;6V^nCI#gr<~07;}=X& z>5x)5Jxx(_=2qs8B~^!+1Ov^ZFKp+%mN>s$qS(d9Ao}h>MV-5g!xEk69JilybHkFr gZA-qj$3JCj{aN>UUxMc@pwk&VUHx3vIVCg!0NvKn{dM zsgiE)ADr{v^Vn%n?Dqli*|Fn)(UL+d8rvUjbJddZSL10|`KMRUwq6~wWZe(hqVLu% znWo+izr^_cbVZFt`HL1+%-9sMYStb{Jkpn%zPM`2UMIZ~v1vxhvWVA=T#}lOF*M=5 zh-D=oMa+Uz!+KKbrK0m9I!gLtpb4VdbB{&bQ*=xAu*yXc`r=!(5eG%7{G;N3&SoJ{5TM==B zp$j6S>xqY6iHHqN6;nD=>As@d22!eHT8&9<8THOZRi|}j*g)GP)Z1^~Eq9zzZ^B`h j-8Apdgy3SMU=#oVO+Om@%^LtZ00000NkvXXu0mjfcz&ts literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-mdpi/baseline_motorcycle_black_48.png b/tools/assets/App_Resources/Android/src/main/res/drawable-mdpi/baseline_motorcycle_black_48.png new file mode 100755 index 0000000000000000000000000000000000000000..f3434107c87200ec736dde3dcd96ca72452e437f GIT binary patch literal 402 zcmV;D0d4+?P)jP!Gmf;(g+;_mML&mi*+w|`%ocgGEjCxeBB z#lfZ6CG-wDxXUgM?z)SEJMBUuf?cbNJMO}jG`d*i;0m!w7iqX)$agw8xIuLA9UcBN z%fSs}mj7t*g-H%>Atw2XDvgS;PdN_28@%b!Z%nulK(#1sLB+UdgW90V_!K8!pihUxjP5L<2|^DX9uBA&zREk*l%E(lL#_P$gHC+Zwo# zA<8|Fp3jUK0Hmj@WqkPM zI$XjmOowlwAc=JVfbE4d3We1}p@gvncL!%Y4gk=NNlRxoHMz#$wH63%9OMEEi*AbP zzA#2|paUv7xiAuPOyRLb(d_Xp7T6>Qpg>9ZEuj5{XvSj^cJwQu>}((5766{K;1(_) zpMg)gdrLuU`~4Za`)h&Ql)!#wKw$#pq*$9gpn&BMEzMk+-ssm7Vj+MQ4YtHEgzUVB zN#wIofKBLcZnUSJLI9_L1{VeD*R_L#tKA!RCba+!phVYa<623HJmfs$ssx4}ph@pU zHsHQOl0ye{0M^8^->KKTUZkiOQ}%gRbX`||b_7sqcn@1aOV_Z*RmL#5vw=Pic$E_`F)*8$H`;$RkD^Immmn z-kg?vAvf@MCjL~0q^l?3@`H*`4X#rmwwk@h2e8F24vPaG;bZ5$;%ke^M#SFvnw{R4 z%95#yT>@`ujWh+H*8*|o%z8A&Zv9}<{g-&wuE%xE1D*mi5vpCMSw-fEIsF`#@UCLL zR<$ogD^dR>WnE)p&TG_0ykzm0N>A9A0gOJ&de#dOq%j9{q|Z8;_YP+9*pSt^+*j{I zcfO~nitY?=-t2C4US`Uk*NXRTX)p}64-P%!!Q8Z*z={kzT?%--{Ej2EV$6FekiUj} zip;w{&;7^!3!B63^5b;mb@1cNm|{i1kfX;I_wD6unB|EG**xw?`&G+L=#oXE90pMF za2J`RoHtYg)PU24E?yv8q^f1NUA8F=Whej&O3;}-WZewqyq?KZ%G~eNG2J3`CsenT z%R`e+7YHsrWgjjr%=i>mXf!c-*X14Xazk?yTH0Gip|mk8%Dc zSGX`jE7B-0gZf%MVt$5$BI?(^hB|djEm?>B0|FYHF!xY zSdPsT{Gr+pw+DIo!X#w{&BMHBJ4!*l;lZ;f{1^o|UW8qo74T!WV!!%IXU^dpIEcH6 zW4rCeoE(F&{hhEPh;}sS&)9DeBV7S7Qc1*Lm(w^#0qm+PPT>8ZGcBAar_2s&Yv;3F zmAi2t%g$TQRL*J=D%mk?mnD}W=PO5l->BF30?*UCitQ7&<6|s%gpafmujQTRow=Pi zTBo~?+je;>3(!A_EARB51AE5QfNJQbfL7dO!O@5_?f2%^{m=~})4;WarP-m+wcogC zMl?p6Ann9Hci3et#6zaR z$2rCI%FbCQ(@Wk-)tx{}i76(N6LS;Q61(j|Wzw+3UUA2yxbCj*(bx3v2TsCbfgNdO zIpD{u4~MZ6k{pskMW!Xk-(~Wn4e~!d95I3#%5dylX4B!wbvde^t|b|d>z&O zA_bbFE(2azTF;4O-$kdeIMB0+V%aPBJxyY1P!I99| z%V^(@a~+ge=~%-wSqu{<4C9h^T*}%gpggf@Fhs=HcKQ|fF(Jve9;P16o-?UWQ|nW^ zOij%YW_P4Sr7}#Xi{woom~oqJm*id*G|DfAm8`$pDzU}}cBDF%-S6(TTf{9E)s@v{ z)LAql8!dy4QCA_R5X*eM`C>7>A?=G-h%X$X7K_re((}w8n@5a5Tpv~4^9kPyp!1ku+cct%o-*@WJY0{_Kdnvm*tGQgZBDzx9>8+z)`DXc)!?^8E zU(W=_{+*Me-E*9vtF;@&1y#*jDp^|V5LfB_l7bH$*(!gKW}QW0tyibsTTNMAp+;pa z%fwg{?7JUE{7&CRdPSN^`oKr^8+$pUM~Rs?{jfQ8Z76feib_i^9KhHM;u^i>JUMG~ zd@?;MiInAuPrujr*Dcg~*T1QaI#g5r%i!neZKuzCUn@4JX2(B8e%)A~puT%!Zc7~Z zUNv%eS-Ur#5iFtBs#d5r5DW@JH@SwC=2g#}Z5G$B%wS8e`bK}d>fr3b6JQ;EQcrS_~{L0Q>dxH1gDr_72=r;9y}%8AlsmB=h@yF zot=b9qP-rG2r{)W^&TFR-^T5xgQTmia_ecWY!sdqb1R$T3VHv9TC+c%DnGrVeJj5$ zeFOCrf$9c%7%>uXZX z2MZZ_OQqIE2&u9sjhSU8RpfsS+;5D(l(N7C0>7}l|RGs|l8E)l~~c@9h`Z z_h)xdD6%P8qS`lmuL`AZ7xMmKtdSBF*uAyp-_USoM{EbZV{@#A@luHVUh%gl#e$wH zb-vfBh?-;7`lTzaZciwck!6vmBO?N7TMBEqPkocSo--xEqj48vk5k2|ylZRFEonFD zw^HL~8^a)ymXsbG3*k{5vPu}@aa)4Fi zaQDXskG{Ey@fDxZfvM8kw}hdO4#W)H=!cmLw^b;v?Id}Cc-9fu z$&-|)+hf~q(>4LkOPb3OP16gFd%+D&b5Y$KGpd-|3OmXxtXq21CYevr1F3mt`{aW_ zlV-DnT3~e;d8u_kh=agvbCC4CYm}73JIsrQzPm93$_C{LuJhII{WkuTH2P{Z#hq{< zwp+bX9pG-b_krd(>eRkGsPeYHc$-n^r224B#kVoJQ?grl1TKgGUQ7A&$;5zCo=Wqb z+y1cHt@HaX>zDT2U1x%u)H5-eSzH9IoJ{k>TUUG>{jBPQI2HnYNMQ;+r#J~2V9BDc zII_^hbE)}`_KX^4DgcpdfNzg(vBEz-6rr+f0Qg1v0ZNxL+SOC}9o>{x&~BQRDUXVa zIh@?1N110W*M^7f-wY2||5h=k1E@$C*jgM)*4#a4JM928Z?YEmYH9ws7Msp!YF0^l zet3gr_0YXW1OSe4A1xptD~AsNpkr`0weYeqxD3DL?kZzz?{0^a@pJV!L<0Z_KltI+ z73XCu?B|MiBf|Yu!9Ni2!~KyN3KsqW@p4fGTNq%4QSJnsu%e8Dj4W7Zex^el1%qRq{c!keTF$OGH{xMwY6>tV#E&%p^88ciFHDPHn2O53 zGJo;>!aS-3Zb)#(9g1`$g_;}!`Y+pGcm(uFr(bmYIg}sP!>OpTA)tRxSdEQg{^rEt z&@J?|G);9u)De;609h9Lma@;H`v;+_v2tc+khb Kw8+St;r{_w!aKtN literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/i32x18.png b/tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/i32x18.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ba2f305ea974dc3fa02327c5d1e56781080178 GIT binary patch literal 3419 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/i32x32.png b/tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/i32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..0f778f86e92176943a6c0658a14d2fe23e464221 GIT binary patch literal 3428 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/icon.png b/tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1034356e2641a785ae5182f97d86293c7d1e572a GIT binary patch literal 10946 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 Ef4RP_fdBvi literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/tile.png b/tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/tile.png new file mode 100644 index 0000000000000000000000000000000000000000..7ebde26a0e80acc0de0169d548b3c7a9d60c8cb2 GIT binary patch literal 3491 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/upccw.png b/tools/assets/App_Resources/Android/src/main/res/drawable-nodpi/upccw.png new file mode 100644 index 0000000000000000000000000000000000000000..6ad441c51a7d30ea0fc9079d4dbb1fcd53791407 GIT binary patch literal 5276 zcmZ`*by!sWww@scK}wnt7#e{A1caf7?hp_O2^j?G8IW#KI;6W>3CW=wX^^3%J|q+d z1nIo^ednIz^PGG4^ZfSy?X})_#k>AlVcMEX#DsK&004kkMOj|=_RD&EWbWYIz7g;# zGyp(YX)7nEts*DKq>XU0wzY=?0Lo#BN%(qCp3(L1c|%&q$-zu)hwRFgx-b$2uR1bv zRZaoCpzxAVqUa7o?Ko>7Ls`%ZpcPLj?%iNZ?Ck&|!XHpW0A-?Y2l?yQW4l>bn?8Hj zqsbT7d)_CD-lO<{!WfqO?A?NZf;(U2WwZE(LqBt}`vE#+2x9{!_}84DgnS49m<7CY zye#iy1lV}B*a=~d_HJ&T4jfoMK>=idoc%v_QCytaur-ONoT}IWS!|mM4GK-9z@RIc z5!0Yjv6x@dLa~^2(%#500Rck6lLmkl(oNQjEpr{Zk^23s2l^dMX->Xl?XLD~xw*LX zj@8_Z;Dfw`gsDj%26$_V|3TPI#LLK@`0lXepF7RNp(}k_lA8) z=n`<^o{~ZZ$A!x^j4&(~vctMJVjI7#H^!WUW*@pnqe?4uki%<@XT#N^TnWPc3=@~F zmqM>UGej8Rt6bs^sQI#8SKAZx7d7FJxiBmTOZL+eFs~vrMoEmJ{iQ0MQooQUY@TtV z%DTvm&vFORT&2J2T*Q8jsjA)CPpf2x>5@REM@-*Szfs+|J88n2)%7jl>^xqQ?F@Zr zKG15rg_pi2AMM`Jq7`7}8$j=j-?kM)01Kq80u*gckp$Gvx=ni1HC9knQ17o%d`aOs zME3~JVO8vdi&Dc%g#nW4OmENsxRuzC#00ePj>E{p}29O!0QdZ%Q+Vn1UFun;;t|E7q#Zm@>tEjAk zc$uib1)G{Pa^k*|p)A4e?;se*8V!nA;cg^w48B+q*us}v5vIXiGbayXl8_Ivi3Jzn z*~-0*rM1EqgYCvb?&B!HCbT731A4UCYbgic5$5WaV3h^?1&+#4=Wc709Fo!nDCV4u zQ_}=;@q-Kk-Bx<5h=+rGS4cf@8AvJvAFVKW;F}OV?NVB`J_Y+ww2_>2SFQ@+Fj>6` zEMZX$CH^b?lto9G0Spsi_EaX*4HE)8D03jFzbh>TT|^nM ziz90KJXgUkVU5I%SYLrA6cwPEVEUe@)qM|z7Um`3Ud-moxUtLb}e zt~UwF^Du69;rA7>S+P>F16IVJc*SCeIbOy^4D=7oe8&DZc3&(U*qit%16;I|gVvts zBH>~z(JQ+*l}e|ek-wWWtpm}?){$13D2Oba)s-k6(S_@d=(-mysZtcy6+Zj&u<%hq zM1hv-@_RoPxrB*0m&Dc2_V2mk#aJdEK4Mpk7fw7%)`;Vc{g~X!C(iROc`^=}yf(1@ zS%1LvJ$(VQkVe|WD76Juaac2qK5uQS$yG!$E=x;Vajz(5aA?5z^Sgn{cu2f7$MTpA z4U|ZPCAB)FG=8zu{)% zPS#s05!B1nr_ets%X$jZ$uAWv+n+ivGu8I)O?de!WnkEH1HMtx^rjHYV4~k z_moAC#W-JOt(0A5Qt^={veNq9MoCgyQno>nLGUz-LtcH<>!4#lj3$NvWSZ%m=>X-0 zb~h0=*)I|;;w^G`=}B_53VS7bogBKHi=3;R;~zTFci<)A5#Yh`8i*|99?G??0=u&m zW)5vtOfHYlx_$QsP}|ZA9+7Q>evT#j~)-XsoNZ zYSd^fs4u6}rnrm@4)3Nu8Ic@*oZgVuUc+A-S|@5V@lvJcu;#1voWxpA)N#>Hu7RM6s|sZuQRh~@Xzx9JT$7n-nzl&LERBiUiQn1Ayi4BV3o}Jn4devB z#qQ7T%3Y58PJ{87tzK4H3|rIte)#p-Wa_2~=JI{vn5q>B-s&dcLWatCo$6eNT-=)9 zecR~Sw2pFX9zwmlRa5%c_|MQ2o1ZjCwTE9<=5|Al4)*6UQ$q$8$T_zi9VffJsHJ3I zPN`0*La8xdVjqPz2fwQ9hUEwC9BOsRgh}jTcj;rdip}s<5c4=KTmV| z=o#v{p=Sk8;1@~6ybUH<&6k~oiGXc_V#kH%Xt;JZ9J7VRK`!D=?nW4i#=8w_ zRok78#fx9tKsjUjai3oH#K>!pJx&~2RB-L+d9Z^h(Uqu9E4tdu(1?cXTr7JY`!4YnN?791qiyhfK@nvnYy3yb9^vnP&A zW?t=^vRlDzOY5yyzAbI5?*>SgB~|@}&P2Bfj#ZYPq!ufTC1mSgSKN3%Y1h9&0UH7< zHao`{Nf7vEH*x3vGr1YmXlez>)bnZLbmDB#J`L*X)m(Y*OxH}j6XJ&bqT!&y%Sr3% z`{m0So1U$4@rmZr6I{mo(rBOB(^&y3{$qOyxDNun7ynoB{Fq3#c>5cFPchW-!)v?! z$5&1c%f4;Wsj8`I?#uMRJ})n+2G&h!?;ryudPcCk?ax^3Ekk7AF6t z6|RiFIDq*X;56?A0rW=>Glob8K*u}^5P6*3Bb`9^(otkv!BN&YKCiTt#KtLf27kqP z4~@1OLZcgA)y^sbYGcNZHzwc9UfgukS_2K*OgUUT+JEeYC*kVp*X4e^-Czlvm7gI2 zfV&jG4-k-+K?49_;n?aKx*BSzLti*K@L54;9{P6>#2J(WV?^-Y-J{V=ba2rxZnFpxtx#udHLi5wS3XMeBn(> z&9;Ie!dttmMk5Qk_c~GfVc)`cdjJ4lX-pt9# z1o(Xvc$3D=TBWu6&~7%;G)#QaW4)eT(W_Eksv9{33${Gy8k>SJH7~H`qfjC3?rYZ$J;n60Pl)FX^W{{ZG$|}S#CIW#828~Cw)mvV(*PMgA z4i28;2`r_3f~;|`bRrMa6h50%U4-cuz*^yr5N8H?~Vp5nG@21DT*#?Oi`aI*^uwAx-@W^JG;apH`>Y7qTrrzb2J=4xWajx(!6-e=T)k^^e_+0&yLjSdssS4vS8XRy@A+hy|aWNiw#@Uqn%un zX+`#AgZY&2k9sZbepw16l>al2b#xMK5MUn!p} zXVt_?*PA0QN9Ja?$Zp`<((Yq5zTUHpuJ1)vdmA-lZJ@7}Rp@R}tMhwVxsLHW?xUT| z+b{zu7(KQ}AbKKD0L{zf#^B3G54ht-M4YAr5?tQ%Y130=>1T)hRJ=Qz(fu`;{YHUUP((|<|_#SL9U)RT%>7qZC=Fd0glgA zIpyp1Jpp}i%~e6~UuEa-)h`qZ^{<8yg>8MvNIJ*am9vcbn{PTbb1R>cCM z^}e^oFJyv79@=&K4_PC+5zyAcD;M&J7xbrsChRP+HbM%LGAQTm*yub?I(i{)jZfM> zIpJxz=R_RF&n0zL@(08V9IRA*vFU3D^Q}35&HFs6E+B#Du~;o<8c`V|t6WRnW34hZH{g(J1sIDo z=kdhM3z2~gyd|<6V4&b|m(BNOQa}4&W1H1kI8d2`)*jS_T zyuKwGPDDD{_qRG@sI;fH4|J06Gl{3y4GN}F2(R`DG{nC>hcwwwB4N+UE!{PBFv0fu z)^})d97XA1ObiP1-202XM2N<v*PK$PhO)m(*4O9nKCIQ{&7>~lk%^uH&5K?s?$8Zl z(n*SGpB=47;2TPB)&I!H;?}4SeaSChk`7!9d`6ck)#qeoovL1;pxVYzP-_|D+X(|6 zl-;K!H3XH=l`TwLgccYXy?-sJvQ#=ms*1+oW3>H2+GmAaC1}Q{S7`Yr9(G?>uTgTU z*$LqjhwyQFj_647nzgGhcSfT60KM5!)@B1Iu7Zy}xv!&Yx+it3iIJx>ZUgBQ1{e9a zV~hfFbGkgbo8=t0Ey7uO_A2h7w@XJURuz_rd1$ZsDgm%WHwyS=Z}O{=k;M%42XiyE zt;0FL=ApZ4O4};;pTxyHN0sI6sfb$|4Ci0?;Fss{y4+3HQfUGc7eR=9?mJP|$(J^%n9QdE%9y8klYA1Pey`?s_C)Fc3a z|J51>(@=!L7&M$6EUazK0RV;Y#3UTJwgFA=fj4jS7!b_x_=H8_s}_`4)~lKnsKmyP z9T-sC8qJI=42vMh6l2ey5Pw%xA3&by(*|^N8~vGiv;Fqqb|m@g z_Q3lbfg&z|D;ahjq4*Bd4c zR*yvV$(Ue?>hpaj6X_wXJCUtpi>*<|z*$b0sQRK(O~lZ8-NjJ3FnfYvFYWks^R<9m zA8n*Aj^Z^|zp~Hc+j3jH-hu|4Q778vAn{&mJjPW-`UtV1Xm62XyTmcV=&@(4u!0sM zy$^O2#a?t=?IdzMs-%p2nEI6wszuB@J!~9D8LYHLFk!@;*|Fh&aTzcE_+s+pRe!Vf z4tCnQOq6?Dle)i|kN+b_oR*zvJZJ!Q8K7WiirBwu)^)<0rmmEtl=5($?Au4KlgX|p zbLgdq;DVI!B0<1}rQ;cy-%gr{AxRKl7Fo`1%}$GK@fLz#2~d@N1&tNXnkYt-5=Hml z;wsfokVxxPd0FOl1#&Y` zZUh;>qG!Vjl_D?1>TSatLmvr@T;Zt0vk$sj;orf5tq4+Kt-k^WGC*WPtYW}<*w(Oj zG1O)lBG8{Pybm#Dq2n45X8$e?mMZdrP<*6TA$oC;Z@`EYC2~)L_=JSUUoQK6jFKvV zoe!iN;JVUXMl=-YvqIv5MN9lO;OPpj2aXY;UWfdu#c%LivKHd=&abQdm<(pY0fkI* zVMJ>YznL@@Xu(h+Mo$G&t#ARbodT;f<#+idhAe(zLZZ$tDw7}lFFtAzQdVMD;%WP{ zcTbw8@+b4V^J9F}9CGI(FL^K6HE%LEi)#yU;})Vc4F1xS+4G`(srP|Nuaht>#;3^2 z9?w;Vzk%19*I3t}Ym!^C02K|U zkE9S>O-wY#G!2q9O!p%d`Z3K+39E!E79d!5*BT zFc0Nm5sWL1$&8VR={F;);1-D)VzrEo?CBHCxF|rvqoP7AOUH>MCDBO^|_=(9h6JXncoH2ycXnta~?eH!6ZVLOqdB z30o;Z$tLjuhq0ztWlYPMFQdE3QU@6UJ$vT>_JH)jqlA)##)MutTnC~P%<-5b8NO8b z1fHQorgL7LsRz=`EfOg{oH{Eu*6{95u&nslKV-UPzE#*z(U9Dr-wbUw^wEOpF~OM( za~0Q%SQIDZo~j|fT7+&DCZ#52=@#e)O*7f$)O>IYJoDXG+s6YLXE?CYFY;){dLK7G#tYsCgGgEd}wk8rY zl7sS;M)SSC+;=%5IgB2{*Du#?*D2O(BdaOoxtE&j5Qpw$%JF9LOf1o=n<~w!m8uIW z%W2dforVX7ex_&-iw`|Zt4(dKMbIxUCU9n-qUB58HvWJD7;3={SQClf9&mtChzcs8#|lzX9vB*=tXuQ zmt((E?R(6YFDs(L*Wuq!77Zp+wvG0$3Ol#@MRi(rvbZw$GvxH>aDIPkP}c-8=lVm_!RFw@QnC-5M7u=3 z#HbI^TiF&n-?FUQWx7^YS=cc0K2&}`6siMp_`F_W-baGwwj5bhEd zV130eC8i^G!keQ$5{C1_Y3E5vnt;`JS%P%c80$o}2YL-%5l_)Z||0cINKowmM&nB&L^Bxv6*# zvCSklW?iLj4=oHn3U>|Te(yuQO`=EjjP`(}mDQKIogK-xO0=B#a=Bi2T>vQnGo_RIafmlhso*G*`Z0gXr|ZE=M1R-4>(PlW1N z!ADh4n&7i-Te^Xxp<)ztKCWuB);9h}$B$^k&f1#I!VR-c!rPS#7_1at%2w;1c2fhB zH1*xMn{7tD_3l4A@N8;&bir~Vd-0N>4(plklbfR7pNc?EVh!%k_aSuzwaR6C?e?Eg z)gcuj)FDCM*JlC;=0ArQuAG*OeP$xLA|C9s?o%Ed@SbtobB}Y(=^RxHAWwW#lnu1& zoiEOg!ZDgK+#iV2+d}f3+3v=YJFh!^$TP`@6Gancb?S;wiYetgqFiomj}gYzTCTpQ zwKUSIes&uBo1%LS4PKj<8AOgjbtW4-N4d4p^&lHNfj6J6Oa(USaeBLZU)}(327|~X zSVh(5(`_O7KE>Ap`z|k@PByi8Ry{`Mw+dENZ@)iJi4wZ1nP{cCdyde(v7HmSK!}aT zk8G!BHN-fXd^VoF-7>xIZjaIdMf1uUHMooXay}=|;+!es?%6FY*oiB9jVwDgAP!3xP$lQH=k`l4y;`@W zcY<1$Hk)sJnp##v`-zvumHY%Qg!k~y6qmG9KFN+IWa-?N-g#@c>fF_%)drMqw~x{j zJL9~(i@offL8enqQp)m9y_hCSBgz6DQq|wQnJYogbj-v%INz~c)gIM)IjG-!zqXvQ z>e?9-8*eN+$D)5IIr+Bg_bfjJ-CKtT5A zpaD|TsQ>_UOl!Eli@vIg=xYZ%9uqSMQ*#~SbLb;8pv4NncE}oOOp@~5rX`c=D$4uDfAyq{eLh8h5yO?hvy&6 zKb458J6oIIi}Xhd34RFgf7$+phw%Q<=^wiNJ(Rz!_fwI;hw%P;!V>tH>#ybk0Gt3t z8ELo`*1iEATwDI3s)7Q#fmwJTm~H-HJJv7Ufwe%b0A0A0luh}3U^PXwjUCFd1R5|6 z`ivhjoiD2#DgDqqm7+AqfVg-yN8SuCi$@;a8V?d)GEyB9p?0MHLc0Sr9 zd3Qq%Hi3GJt#V(+q9vaht)0~dkU5!N>4NM?*f;8l0#8fGp{!cT3mpp9A!BQEPU^4n zs-RY%hfyq4MKg*-Ta~5l@4dt&U*X!?<8;`Y>#|3QQ?Dje4RR8+&kW!)X1wknA*Hc3 znxNTmEdvf(GuSc|Aqb3yX1M2LLwoKKXipf5r0D|QeiLP+qLxxw$5k|Y2z18bAP)%J z@rl)E3R+nO&e!pd_jff~e^HTR`4T0u2X)i7r&~2_ysmGPqet8M0MB9(z~({boz(NV zKkx>jp&eS^YR9_=XHkuMc1Swf4+;w?`0Z*y$#vXZQcIz$e7m~qDatPmAC2XG^Cy0w z_krfcbIvzHlY8nwD=s!ho58r&5TNMI;wE_~P#eag^5`n&JiD*+muwz~=g0*@<%iXktR-)9=9xQV7@GZ5gR_z?sk#td8j+P5WtE z!=4BoWoE2vVsXiN)4T4{s|~s&bqBk;;8bQ68j3Qw8mlJ!i%fa2baz8(Klb#~@L*|E zzUK+ME#j#a75MVltw}KV+Pg2Aa@sXTK~2_ToR+sS-C}EjnBV1a#>%sUyFtiwd5Io^ zT4pT0$?~~}#`#d>BqMLyY43+RRkYf1shgs8;HAfL|Erg^HqkThWFS=n+lmwRJp3=| zKzj!XM|P*c)d# zCE4DUt(flFwTh1ZE~zJoW@AU_x#i9?&M~{HC}k_pws0{kOV0=`TnIuu$+4GL z`*L!%`DSQ7#)yi|wD!7;k#@X1uLxPjeju=&a4ERRZg`1m_qUF^P>0<-AP=@xC0sm} zHM^Y0AVsA21kYGqGW<3%m*MzkkQSJ8TsOJ2;n9#~vr)mull!{(d)1bGiNLQ=Ai54x zUn%#o?RotRPTJc`^72>HbiQs#WnbNqA<|S_EKg9e3@%!|ztjpr8qrCncrAa#^XA_Y zmo(2qr(qT>5Ne%TRrcig#@`Q<7d}!~$N&Wt)K5hj(-@QZoR`Z# za3ZdnL7Lp38|0a!af#dZoOby!3t}~BF@9+glZtBM*j1a(po};U&SMx#H}&LO6BR3E=k_DUF3D7_C}enE*qHMvmmOwn{3TqV8vbI{LFdyREK;?iB)I z#?BekGE@CS3Y;Hx>IP#CdrMfGLb}?t2giies#=(R3yFj09}|ostIC;Y6Xq%CH%Cls z6#VAb5V;8l9fhO@yPj&-r{qbJW!6TayN^ClZS}ZzR4DDWTak$E0n4&if#`-jlxJ#c zur;~XEG9bDK2j#Tk6js2HoZSaJJE3lmOhM~)p_*31|3JutVVb$KAZ8YDIgjBR6El^ zihriYRtYjVxdf3RoTuOx@=gbmOx0sug>rFDGnN~hkQx4`>Ad(}3&;XtE3KdpE(@=g z^b(EEBwRqCn*B9_f|k0|-ctgEKtStv*F`;?_!pnxHL(hbyuEI7>Ob_Is0H3|T3lQd zV3u7ss#33E3XyNAx5kN?f3MciTUgT~h~Mp51mf(`Aj?gL2FRb0wB9C-g^;?qctqZP zL79{rMc9`dDPr|b_Lur+`M7*5KmSZ$bMlN7lQ=Y3 z)crXVrdZPi4bq)8!l%D^B;*hkzIL}IQ_gz^O1QIsN0I-&R85kdz+ zKp;lCKp+p#x$oXH#(i&(@$LQXwdP!9u0JbA@1Z(11v3Qz0HD^?P%*grDqfvCWTaPb zFcl;j0H7#$R94p0R95ED^Ki9ugxdlD8Zl{afJTO9%)QtEQ1jRgE{?m0JR0Q&P#RVL z8rmCLd?KXbv4zo8@olDhNp=LR#o^BgU;@!3lo2*WJE2q*+cKsA`m~_78{XcdKXWfO z1F@GQ>F1Z&fRn|55g_1W0{2axPEkNU*@TKxuFz0)A0JOJpiPk?F$^NS=4KdG5(=;k zeeQz$+`|rV@NaSw#~fkt_(%QwHiiuVMFPIwUj_~Qd`RdTc!-?bL)DKFKp53Y+fAf+8NHGDW5IXoB~*P@rEQH;&s%vm zDZ6boFDGLEeQN60$v{@y=8Ta27<`=ltFDyJnDk$}jYH8ZJ-YNfh-o}>aIZBjSs*vy z1u1hXanhsfGNNM=pLHH%xUH3j4DjHM1G|k;w{Y}*&-jL-GJV9*TK(zJ7is=fiC)%m zTr*DGyN@-_1gME4>DLard-(-U-unp!9Cc@1j*#nRBIjI10ygxhDfaq%1QG(xgG1Fr)Md0cTcAd zt@@iCw@9n=xSDMgjwAW++bA8#ZGKRf1x`_;d z!>KOOS;DeCu1}dUMG}BXd$(h{kgaU+lj{+}NV@lzwOcK!#Ty6_EkO0Vb7+z@amMz!8V;r8f4+P>qTkZc2n21Y8xj zVBvxs4C@gVR_uHvFBRzvNqXDJ#|THl<5up~ledNhaEnM2jy zos2OshVcutnS^<*bXQOhg$J!%_a$MaDGw7{Vf6)?Q$6ZXU$y(q6-d`YbJAJ9DniTw ziwrB|R*R%s6teTf4pB27iz*~MtREAli$kBXs+ zw2Is?l)rn*CQBq;#7BfELx0Fefd2C8Su`0O;w>o2@FcRdC%5Nm`%>>U>t1(h zR-%Hqsvf^pF87#v>UzQj0&}`DwwVZ)uGg!3zN$@}O9a@2&6UYt4Zm;T^l>COHr(|~ zy08a&+!?eGGJRqK&TKuELf#zS1!UZpu>{>|l{s9WcHd3u z&GFOlvlki_U;CQLtg7?j=eucrkUmmhL32F+)km}eq-fZ{)?nDcCx1zc?qkhIvx)m3 z#q#6wb+wk0gSnMc$CKRCR{P+|{3&4W$@^kF+9?ugN9j6Af{CT+%|fyQFViQJ5b10E z-}{XFEs|OCImLCd?!VTa*OG-cLRsFgZJ|6R<&tuB71Xew5(WnQpY*-#FHZrbDDW|A)5``jY3oh#_aQcK%6Gef7FH$X%F7o;t$?-Nz_^0`w9J-%Lo@t%|4_#T>NZ*i>liHHjQCTbBS8iD) z=*(3`tJcO5$K7K%V%C3Us`f*TT8*fO>Y3#leC^g+U0lsAb-|_Pdc>X&opuT=g_|cq z=lg?ZohqIA2g}(^8ScXaLq9VOhvkN(vg@*1tAwkgYor~_>&PqkD;n(LYP`NI!ULv{tKOzrWG#|6DqvpkrtI!uUZ!se#aMX2 z`rk#oAnMKQ$XibO!HDrie_7UCj9D}KakyYMnYn3>!6knj)q=6vHhYP<(>COIXS&rO z7PsbpzNq&@eQ)q;9Bg=brKZBc*stglhhL0G)rSi!vp=Jb_V?y6Uk6RB5wl*q`mRpc z*GuU^eDdw`ALU1br~_47oP#Tnb<4L~d9`cODc;onCJL#=-^LdZpa`4@gQ>enNQvK& zw2+BX4^VAWeIhBRD5JSe<4!)yv@dN0GGd*h zeban_My5tyQ)tl>+w(Wnf_3J(jktD-Mfx2RbIYP?QNQmE#uJ~VKR;A^_M!8`&WBbH z95^lK3#0b~zahSvv_|B4*5=UsAWMu_wBV~Crp@b*7^PUT*IRjm@3iyh@vTxXr&$h! zq;IA9^0{;MD-`iK-UCA#_@feUy!BAy;MKTc{Md-R%h%}h7Mb{gw!Vd_Q3v7@gj6Cx%zt@JY~0IH{nTVUG4Y6b=Y^R%av1Q zR#0kV+!|-AluvpNspo`%6y;Gj4Z4zVZO`kpiutb&)!nIMbulbZ|#4mOK4zoau$DH;$S2GogLWQ z-D`Pq<6 z$pw5Ce2S1AO&QtDL821ftxGJ>mm4;??)G?Nwgix>Im!q8%j1L|d4HzN-@JLMf4j+T zcy(@e$9raUp`u~jV{+RLk#0NlV_6_XcG3CkV&LGJ$&T~EF7kv=z~^^u75asHtW3Wk1cboK}eVsq_x{vF4ItW`XKxD$@9}3?E?FYK(6n zs0%CGY#(K(@c>%llg@f)@^Toa7*s)DpH5R}QzO~-7#l90&wkFE>6l4z^}zF-*X`H& zyXs#2z}e3@bZw2vjyD#akg(rWm~cFO1eLX0Faf#2mlZgI~tjKn(91|dFJXYWDRq*u@&-lcDq6Y01#i9tE;oEr!|MK zGu#Cs<15GY7eeOh{>KdB;`j^V=_JQxs-wrD?CN35At59#B+MmG!NI`+@qpRM7^tZI zi+=Sd$K~MZ=_UgL`S|z<`G^U*df05-_PH5+WI>FCzA`}Uu|7A2>Rmzi3kaU{x6!R zquu{Q`{VhW_E%qjr-S?nCZp%*YYR71adftIL0pw4FAkQ3{FUavJpU>5A57DKFeRk_ z$^3`sAIv|M$mn`F+FptDM+$in2c5!93LNh+5KVUSZkzYn^zHJ3jKE2!Xml4kLWf<0%A9f~ zxr;Y-RXZ)#P^u;^~$7;_HrmQkhETj4PJhzNp0voig!po0Z;>K$zJFPv0QFh*WqlXg% zUwx$FbeCl~t;X|@lH!+xD?~ciWAgebLM?dTrk0AAFHP%7pJ&Fc%`9_l>ZB(LR*6Bp zQeJKjvL|M|z%|>uD#TjBq7Ey1b{Y$$1uuW8zBu|SOLCmrR+N6biS|~5|6nprzV5^I z;cUPrSXXiP8ya^Zq-HjmKr($}MW)(Yy1){HX1WNA(VAEQ@HLIUU#_0f8rw@-YB_*vPEYC6i zG@@$*hK@yb*zWeQFGp7Ir?3hS1SHRPmN>FQPGWAkIzlJ=8DvR#gi8A@W!!@bDGPt8 znkYx>m{1f(mqVP={5!6jMxRELHQ_7Qs?)A*VEe(zgYA&5qQJyLm zNJwR5UfM`&LD$<8D7C5WjzQ0-0`QuNPEdW!neYjJg4Nm7U1W3NgPaOitfPI@r|O^1 zF=1>zN*;M-pUXWegGhi~Lvx|ZlaIukA&5m&Ev4vw{U1Hgr8_`xXObOO-Pv)CsZ&mjS#=5O>WTP=ON{l_gakzj2{!7K>DUfdP zRbeAJEJD~Uv_v#iAX{UstM}qZdPZBXF1i{nyItCJ64?lm1bcM#JtSB+RV%rzcMqzo zDcoGOO?a&XJ@pP~OY!bSZ?wcSaX>V6(Q2`aILVl(on@2$%I_mev^Y~&C{KK2;AEDi z*e}Oo&D{ng@UlT`c7y%?&BI}PN{90a z9q@NygW6Kgr%ByK{hu@e;t#MD;2w&{iC&%5B%|&360Nw-gzY?A|VGYGZS|N z{@M#ZZ8?9{;C(U0q^220=gMkXSjpJTrdt+KRGPrUZ)I1y8Rk}iDVV{Wh#FC~nC~Y0 ziQG)h*#loZH#cgPV~2rCEe%diQ%P*x9VZ*- z2X#jK^KvfHEYFL{)Q-&`aGbC31B|=`(WxIZSEMkgva|7o zzW8?DmnGLSF%DnO=*hU_!qB_$*2~HY9BBd#I@`sUx`V@APlD{dlGSLxu=|UU2UKls z&q(%0&1>j_jvi(ab$N?g?olki1IpLgq(lG#eUs$DR5P4mZEkEZCNir@;v~)l^J>Aa zp=pOvu`yFXCHVp?60bqlLIe!-I7m%w4KZsgGJL#s(TJMu&K0haGI7nk#^M$g!#SCM z7C|d67Y~u8I;hB5=XMLhjU&MF@FK$5iS|C89(Ggvmzoyl* xNra@&;1dHnriOr00hW@DaKkn$FIKq)5`acNPLby@L;cSVq^bH)r3`8n{y$j=t&9Kw literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/add_to_fav.png b/tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/add_to_fav.png new file mode 100644 index 0000000000000000000000000000000000000000..ef05e3ea12324a7a3f90b13b045be5755581ef62 GIT binary patch literal 1134 zcmeAS@N?(olHy`uVBq!ia0vp^20*OG!3-oL8M5Ml6id3JuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L3g##adp3|2E37{m+a>JN2!#MJ zls3lt@Bpc#k|4ie2E}l`I;RHaQoZ;T6UhvJPtF=)>qslce02@A#26c)dNz*$4mnLb z@6c>1%b@h)S|5Rm++;HyQSJo!U;}+;U!y={m8uAK{+vn$$0${%YF6n~8Fve<5}u+g zH*qoDG}D)JC#wQ&V@&dPcVXyYmGuB}I14-?iy0WWg+Q3`(%rg03=B*ro-U3d9>=GK zW=20Ukl@)Wo5d=+JLl$9uZvn+8#*ciV;nv>#74%3?CJmiUwzxdfE#MJo_XK%OaHXw zrM0lr4P_CfgKY{dkNrCyxhOQUcsTw@l$>ywk!5m#h!2~9kD}1QDfM+Cms@<4Uqu@< zM>?e$KAtW=yVp$DQ^^G`wq{ zZ#3auc&3D=e3PpV?`c(?PZ7&@?GZW|vARoF`UKxa9iE$EVQYO-QX@^-6ZF=v7rka^ z)FuB~#Qo#fL$l_cpU6AgZi?CVmPK3k3g6Q0mt7imkN0hkw`*edW|zuuZM&t}mv+s+ zykg3OFW*G(G1t|eUC&g_+?`>%;GgJzzAJWRyY&}+wA|0Q(ehVKLC4}`yT3m;+Swlm zY++b_^zn8X5u3cMn-+mLYre9WB^w4G)HHr~&Trw2HR2C#4g}0$tn_=7vA^)0>v_e( z+7zh|doCx;u(8YBEVFp=SHQ_aa~a|L088VE3@o=ls>2?u2xbJ-}?Y6ec%zJ&meE0Wto>lcv`L^fOadBFi z$}8CIIyt3Ip*x`{ZX`F}3;pYqc(4$t>c@ zdAyYQu+(mmq-l-kxO2qp({`wTp7mG$+`e5K4(^J&l{aUvp;Tmbv2xGVdQ+2AZysx# k&-j~OD^xG~dhZ|hqr%oUwg!7P0}~a4r>mdKI;Vst0Dq@#+W-In literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/baseline_motorcycle_black_18.png b/tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/baseline_motorcycle_black_18.png new file mode 100755 index 0000000000000000000000000000000000000000..2a9bc9caa11032ffa60222e80e63378ddd9437f7 GIT binary patch literal 389 zcmV;00eb$4P)Kn{dM zsgiE)ADr{v^Vn%n?Dqli*|Fn)(UL+d8rvUjbJddZSL10|`KMRUwq6~wWZe(hqVLu% znWo+izr^_cbVZFt`HL1+%-9sMYStb{Jkpn%zPM`2UMIZ~v1vxhvWVA=T#}lOF*M=5 zh-D=oMa+Uz!+KKbrK0m9I!gLtpb4VdbB{&bQ*=xAu*yXc`r=!(5eG%7{G;N3&SoJ{5TM==B zp$j6S>xqY6iHHqN6;nD=>As@d22!eHT8&9<8THOZRi|}j*g)GP)Z1^~Eq9zzZ^B`h j-8Apdgy3SMU=#oVO+Om@%^LtZ00000NkvXXu0mjfcz&ts literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/baseline_motorcycle_black_24.png b/tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/baseline_motorcycle_black_24.png new file mode 100755 index 0000000000000000000000000000000000000000..f3434107c87200ec736dde3dcd96ca72452e437f GIT binary patch literal 402 zcmV;D0d4+?P)jP!Gmf;(g+;_mML&mi*+w|`%ocgGEjCxeBB z#lfZ6CG-wDxXUgM?z)SEJMBUuf?cbNJMO}jG`d*i;0m!w7iqX)$agw8xIuLA9UcBN z%fSs}mj7t*g-H%>Atw2XDvgS;PdN_28@%b!Z%nulK(#1sLB+UdgW90V_!K8!pihUxjP5L<2|^DX9uBA&zREk*l%E(lL#_P$gHC+Zwo# zA<8|FpSNnZ6Wgd`m9f>vT$__FJ9Cq>J0G9L{7!rB`@A2na2&^R z9LI5-kWk{>pcvtY%59ZYZmXnnTP2m-DydvmNl=U%`K6MpR3f)kx|?q+Rc9)fdBG1d zQ2|Z{-+93WrcxEZ)Zzf?s1Qs#`>BDCCX@7!yVU}ZQF)B>62n&743|pa0 z`jCV2L>h-Av6Ue-rwGNF#w8#B=6XVDS~8v^o{t+rd9tkyuWx`c$ z?<}Gx+FCoZ-1E#wt3vIN&DQpwAo`}AkcG&itmYe&h%pjmZH?nZX@8fZ!KXs0Y@-a2 zZY0PWXvd}n{~NkRGbusP#_k(>s;#xR{15$PsGK00sqH;QbXr^6itL59x63|3ILpo; z8fA4AnU2zCfFB7xjD%6PSL)XmSLz6g+9$|YYS|{wov0zYLX7m>eAoDx0G)+uo z-g`AeX-*lsFrW7*VUl`8$TDtkzzK`6w8A26UBC$| zg7?;u$nby@CgY=89Q^MCYdU9X9$>;jYT%b@OyM%m`A!;NdB6$g(#Y?G@4Vom{^sg9 fj^j9vlMDO-GF)(NEB5pb00000NkvXXu0mjfLC6^o literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/baseline_motorcycle_black_48.png b/tools/assets/App_Resources/Android/src/main/res/drawable-xhdpi/baseline_motorcycle_black_48.png new file mode 100755 index 0000000000000000000000000000000000000000..a3451d3c29e1143243d6f8b1e49bb2eb9be1a8b0 GIT binary patch literal 775 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 D3dadX literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-xxhdpi/baseline_motorcycle_black_24.png b/tools/assets/App_Resources/Android/src/main/res/drawable-xxhdpi/baseline_motorcycle_black_24.png new file mode 100755 index 0000000000000000000000000000000000000000..0522d79e704d7a0527ac3cf5cace54661add0f11 GIT binary patch literal 593 zcmV-X0SNnZ6Wgd`m9f>vT$__FJ9Cq>J0G9L{7!rB`@A2na2&^R z9LI5-kWk{>pcvtY%59ZYZmXnnTP2m-DydvmNl=U%`K6MpR3f)kx|?q+Rc9)fdBG1d zQ2|Z{-+93WrcxEZ)Zzf?s1Qs#`>BDCCX@7!yVU}ZQF)B>62n&743|pa0 z`jCV2L>h-Av6Ue-rwGNF#w8#B=6XVDS~8v^o{t+rd9tkyuWx`c$ z?<}Gx+FCoZ-1E#wt3vIN&DQpwAo`}AkcG&itmYe&h%pjmZH?nZX@8fZ!KXs0Y@-a2 zZY0PWXvd}n{~NkRGbusP#_k(>s;#xR{15$PsGK00sqH;QbXr^6itL59x63|3ILpo; z8fA4AnU2zCfFB7xjD%6PSL)XmSLz6g+9$|YYS|{wov0zYLX7m>eAoDx0G)+uo z-g`AeX-*lsFrW7*VUl`8$TDtkzzK`6w8A26UBC$| zg7?;u$nby@CgY=89Q^MCYdU9X9$>;jYT%b@OyM%m`A!;NdB6$g(#Y?G@4Vom{^sg9 fj^j9vlMDO-GF)(NEB5pb00000NkvXXu0mjfLC6^o literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-xxhdpi/baseline_motorcycle_black_36.png b/tools/assets/App_Resources/Android/src/main/res/drawable-xxhdpi/baseline_motorcycle_black_36.png new file mode 100755 index 0000000000000000000000000000000000000000..1bc61bfd102411333f865c87fedbea02a6d4472d GIT binary patch literal 1016 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 S)$~h#C}2-z*w)(kr~U&Pmn=pA literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-xxxhdpi/baseline_motorcycle_black_18.png b/tools/assets/App_Resources/Android/src/main/res/drawable-xxxhdpi/baseline_motorcycle_black_18.png new file mode 100755 index 0000000000000000000000000000000000000000..0522d79e704d7a0527ac3cf5cace54661add0f11 GIT binary patch literal 593 zcmV-X0SNnZ6Wgd`m9f>vT$__FJ9Cq>J0G9L{7!rB`@A2na2&^R z9LI5-kWk{>pcvtY%59ZYZmXnnTP2m-DydvmNl=U%`K6MpR3f)kx|?q+Rc9)fdBG1d zQ2|Z{-+93WrcxEZ)Zzf?s1Qs#`>BDCCX@7!yVU}ZQF)B>62n&743|pa0 z`jCV2L>h-Av6Ue-rwGNF#w8#B=6XVDS~8v^o{t+rd9tkyuWx`c$ z?<}Gx+FCoZ-1E#wt3vIN&DQpwAo`}AkcG&itmYe&h%pjmZH?nZX@8fZ!KXs0Y@-a2 zZY0PWXvd}n{~NkRGbusP#_k(>s;#xR{15$PsGK00sqH;QbXr^6itL59x63|3ILpo; z8fA4AnU2zCfFB7xjD%6PSL)XmSLz6g+9$|YYS|{wov0zYLX7m>eAoDx0G)+uo z-g`AeX-*lsFrW7*VUl`8$TDtkzzK`6w8A26UBC$| zg7?;u$nby@CgY=89Q^MCYdU9X9$>;jYT%b@OyM%m`A!;NdB6$g(#Y?G@4Vom{^sg9 fj^j9vlMDO-GF)(NEB5pb00000NkvXXu0mjfLC6^o literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/Android/src/main/res/drawable-xxxhdpi/baseline_motorcycle_black_24.png b/tools/assets/App_Resources/Android/src/main/res/drawable-xxxhdpi/baseline_motorcycle_black_24.png new file mode 100755 index 0000000000000000000000000000000000000000..a3451d3c29e1143243d6f8b1e49bb2eb9be1a8b0 GIT binary patch literal 775 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/add_to_fav.png b/tools/assets/App_Resources/iOS/add_to_fav.png new file mode 100644 index 0000000000000000000000000000000000000000..fafe86a9061a1b314a976dedf154063e5acf24b0 GIT binary patch literal 669 zcmeAS@N?(olHy`uVBq!ia0vp^5@CQfaQEB+4jJY|EeJ!r>9<9jdJr z7Q@bzA!aHRtXpMOs1aL~r>t(zvU=XrYM@z+N#5=*3>~bp9zYIffk$L90|U1Z2s2)~ zTlWVj_}bIOF+}5h?!=oyO$I!!i#-@cr*<`YI2MW@tv&qq|9>xSW|v&KOSg+Jrx`Jx zSRBAmDAJvzH`Qy>g$bM!U1I`GeM4E?b}|KMa`&v_TM+)ga_za|z0(@o95XKGtjuk` z-?QzO(d;P_yc=?MJ}!yvRW0=?-tFhUO_$;P`@eO!Kik%QX+CH!&+^xW=d9o}<>DD< z&E`F+F>(vu^ipT)=Lrv=b8ClQV=7M558k;&Ii*5--u3Kx;c`Z1@1I3Wv6TGI+vj*J zkN-(Q&!WeT2kP2;F8>s&+os++{WGVo>ArhGwY!h~Yzopr083JN2!#MJ zls3lt@Bpc#k|4ie2E}l`I;RHaQoZ;T6UhvJPtF=)>qslce02@A#26c)dNz*$4mnLb z@6c>1%b@h)S|5Rm++;HyQSJo!U;}+;U!y={m8uAK{+vn$$0${%YF6n~8Fve<5}u+g zH*qoDG}D)JC#wQ&V@&dPcVXyYmGuB}I14-?iy0WWg+Q3`(%rg03=B*ro-U3d9>=GK zW=20Ukl@)Wo5d=+JLl$9uZvn+8#*ciV;nv>#74%3?CJmiUwzxdfE#MJo_XK%OaHXw zrM0lr4P_CfgKY{dkNrCyxhOQUcsTw@l$>ywk!5m#h!2~9kD}1QDfM+Cms@<4Uqu@< zM>?e$KAtW=yVp$DQ^^G`wq{ zZ#3auc&3D=e3PpV?`c(?PZ7&@?GZW|vARoF`UKxa9iE$EVQYO-QX@^-6ZF=v7rka^ z)FuB~#Qo#fL$l_cpU6AgZi?CVmPK3k3g6Q0mt7imkN0hkw`*edW|zuuZM&t}mv+s+ zykg3OFW*G(G1t|eUC&g_+?`>%;GgJzzAJWRyY&}+wA|0Q(ehVKLC4}`yT3m;+Swlm zY++b_^zn8X5u3cMn-+mLYre9WB^w4G)HHr~&Trw2HR2C#4g}0$tn_=7vA^)0>v_e( z+7zh|doCx;u(8YBEVFp=SHQ_aa~a|L088VE3@o=ls>2?u2xbJ-}?Y6ec%zJ&meE0Wto>lcv`L^fOadBFi z$}8CIIyt3Ip*x`{ZX`F}3;pYqc(4$t>c@ zdAyYQu+(mmq-l-kxO2qp({`wTp7mG$+`e5K4(^J&l{aUvp;Tmbv2xGVdQ+2AZysx# k&-j~OD^xG~dhZ|hqr%oUwg!7P0}~a4r>mdKI;Vst0Dq@#+W-In literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/add_to_fav@3x.png b/tools/assets/App_Resources/iOS/add_to_fav@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..67ccc7dc33ab38a86e38d2bde1ff23e2fdd846ef GIT binary patch literal 1584 zcmeAS@N?(olHy`uVBq!ia0vp^9zg8M!3-qttqoWWq*&4&eH|GXHuiJ>Nn{1`6_P!I zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4FdyXOn^^_D^S7zQ9y$b z00wOG{mXxVRB=g=UoeAWIA5Jp19Pcfilo0MXN`!cb($4pzPg55QH+gHJ-bH|TZOc7 zR;IpuWr#B`zeBN-oR+D*cW7cxc^<2PjFEeAY(}lNTXi-|n4@cfpNplgvV>GgP_lTT ziE5P@M}kFwL9Q^jrfsxu8B<_7k3y=U&ldYRZ-Le`CV9KNFm$lWf)WpBfk$L90|U1Z z2s2)~TL*L?^CnLh$B>A_YiEQzzj6?075vB|ed9nkub?y+2bYExM^=c-(WbXb-|l_= zZ+|CphlZfXwU%0g-PV)!r8gNDht2iddG$(x#YdC9`>f_fH80$zwZLk@Iw_fh91^Ws z4X+&6?&Dg(#+G&ATqX+-+k!yj6`UD)Y_ql$`J^paDrzv>r0G^e+1z!qFD@M07}4lA z_Z@%2)(obb4SHp7nQ~@1+;!mJ{f*&nl*QiKhPkD09OBor1=v40@m~_?Jy*|)r#l)pzP~8(Ac#|n{my-5bAxq#j~6cZUdO+8 z3Y*O;2Vwh50;8jHEy{z)I0`$OvfO**npeA|TP@N4y{rab!p?ZrHwrn?H9+;nH*W0M(|J@Q+B zZl7bu^-L%^zjKCm?)oWLZ+^XY{E1`q#d9LJW?cF3^iWUMk=0BZ@*A7qzxi0T{>rnf zn{R%1T(_f_@%ACJ-3OzV<)p4TGpV>kvmxVmxlw+xQQ)~b9!5K}-Y#i9S^SLm=iluS zhOTk?&un=<75<)9{ORPh+>6tTt0uGF-I#v#&8O4bj^Ehz^zk&MYX=uj?33Xt%r2C& v-;p){>ERbsigW%x`FFncWw6xt{|rwL0XyrEd zFINS{=g-hyb)r>5UYuDb?1d+jOpj)g`*bm7z7s(=)R_G`B;6V^nCI#gr<~07;}=X& z>5x)5Jxx(_=2qs8B~^!+1Ov^ZFKp+%mN>s$qS(d9Ao}h>MV-5g!xEk69JilybHkFr gZA-qj$3JCj{aN>UUxMc@pwk&VUHx3vIVCg!0NvjP!Gmf;(g+;_mML&mi*+w|`%ocgGEjCxeBB z#lfZ6CG-wDxXUgM?z)SEJMBUuf?cbNJMO}jG`d*i;0m!w7iqX)$agw8xIuLA9UcBN z%fSs}mj7t*g-H%>Atw2XDvgS;PdN_28@%b!Z%nulK(#1sLB+UdgW90V_!K8!pihUxjP5L<2|^DX9uBA&zREk*l%E(lL#_P$gHC+Zwo# zA<8|FpSNnZ6Wgd`m9f>vT$__FJ9Cq>J0G9L{7!rB`@A2na2&^R z9LI5-kWk{>pcvtY%59ZYZmXnnTP2m-DydvmNl=U%`K6MpR3f)kx|?q+Rc9)fdBG1d zQ2|Z{-+93WrcxEZ)Zzf?s1Qs#`>BDCCX@7!yVU}ZQF)B>62n&743|pa0 z`jCV2L>h-Av6Ue-rwGNF#w8#B=6XVDS~8v^o{t+rd9tkyuWx`c$ z?<}Gx+FCoZ-1E#wt3vIN&DQpwAo`}AkcG&itmYe&h%pjmZH?nZX@8fZ!KXs0Y@-a2 zZY0PWXvd}n{~NkRGbusP#_k(>s;#xR{15$PsGK00sqH;QbXr^6itL59x63|3ILpo; z8fA4AnU2zCfFB7xjD%6PSL)XmSLz6g+9$|YYS|{wov0zYLX7m>eAoDx0G)+uo z-g`AeX-*lsFrW7*VUl`8$TDtkzzK`6w8A26UBC$| zg7?;u$nby@CgY=89Q^MCYdU9X9$>;jYT%b@OyM%m`A!;NdB6$g(#Y?G@4Vom{^sg9 fj^j9vlMDO-GF)(NEB5pb00000NkvXXu0mjfLC6^o literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/i18x32.png b/tools/assets/App_Resources/iOS/i18x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a232174190aaf1199002f08627f1a138662b9ac4 GIT binary patch literal 3441 zcmZ`*c{r478=tY0Nk}BZOx9u$GGlBr#xjzzrjW>3jUK0Hmj@WqkPM zI$XjmOowlwAc=JVfbE4d3We1}p@gvncL!%Y4gk=NNlRxoHMz#$wH63%9OMEEi*AbP zzA#2|paUv7xiAuPOyRLb(d_Xp7T6>Qpg>9ZEuj5{XvSj^cJwQu>}((5766{K;1(_) zpMg)gdrLuU`~4Za`)h&Ql)!#wKw$#pq*$9gpn&BMEzMk+-ssm7Vj+MQ4YtHEgzUVB zN#wIofKBLcZnUSJLI9_L1{VeD*R_L#tKA!RCba+!phVYa<623HJmfs$ssx4}ph@pU zHsHQOl0ye{0M^8^->KKTUZkiOQ}%gRbX`||b_7sqcn@1aOV_Z*RmL#5vw=Pic$E_`F)*8$H`;$RkD^Immmn z-kg?vAvf@MCjL~0q^l?3@`H*`4X#rmwwk@h2e8F24vPaG;bZ5$;%ke^M#SFvnw{R4 z%95#yT>@`ujWh+H*8*|o%z8A&Zv9}<{g-&wuE%xE1D*mi5vpCMSw-fEIsF`#@UCLL zR<$ogD^dR>WnE)p&TG_0ykzm0N>A9A0gOJ&de#dOq%j9{q|Z8;_YP+9*pSt^+*j{I zcfO~nitY?=-t2C4US`Uk*NXRTX)p}64-P%!!Q8Z*z={kzT?%--{Ej2EV$6FekiUj} zip;w{&;7^!3!B63^5b;mb@1cNm|{i1kfX;I_wD6unB|EG**xw?`&G+L=#oXE90pMF za2J`RoHtYg)PU24E?yv8q^f1NUA8F=Whej&O3;}-WZewqyq?KZ%G~eNG2J3`CsenT z%R`e+7YHsrWgjjr%=i>mXf!c-*X14Xazk?yTH0Gip|mk8%Dc zSGX`jE7B-0gZf%MVt$5$BI?(^hB|djEm?>B0|FYHF!xY zSdPsT{Gr+pw+DIo!X#w{&BMHBJ4!*l;lZ;f{1^o|UW8qo74T!WV!!%IXU^dpIEcH6 zW4rCeoE(F&{hhEPh;}sS&)9DeBV7S7Qc1*Lm(w^#0qm+PPT>8ZGcBAar_2s&Yv;3F zmAi2t%g$TQRL*J=D%mk?mnD}W=PO5l->BF30?*UCitQ7&<6|s%gpafmujQTRow=Pi zTBo~?+je;>3(!A_EARB51AE5QfNJQbfL7dO!O@5_?f2%^{m=~})4;WarP-m+wcogC zMl?p6Ann9Hci3et#6zaR z$2rCI%FbCQ(@Wk-)tx{}i76(N6LS;Q61(j|Wzw+3UUA2yxbCj*(bx3v2TsCbfgNdO zIpD{u4~MZ6k{pskMW!Xk-(~Wn4e~!d95I3#%5dylX4B!wbvde^t|b|d>z&O zA_bbFE(2azTF;4O-$kdeIMB0+V%aPBJxyY1P!I99| z%V^(@a~+ge=~%-wSqu{<4C9h^T*}%gpggf@Fhs=HcKQ|fF(Jve9;P16o-?UWQ|nW^ zOij%YW_P4Sr7}#Xi{woom~oqJm*id*G|DfAm8`$pDzU}}cBDF%-S6(TTf{9E)s@v{ z)LAql8!dy4QCA_R5X*eM`C>7>A?=G-h%X$X7K_re((}w8n@5a5Tpv~4^9kPyp!1ku+cct%o-*@WJY0{_Kdnvm*tGQgZBDzx9>8+z)`DXc)!?^8E zU(W=_{+*Me-E*9vtF;@&1y#*jDp^|V5LfB_l7bH$*(!gKW}QW0tyibsTTNMAp+;pa z%fwg{?7JUE{7&CRdPSN^`oKr^8+$pUM~Rs?{jfQ8Z76feib_i^9KhHM;u^i>JUMG~ zd@?;MiInAuPrujr*Dcg~*T1QaI#g5r%i!neZKuzCUn@4JX2(B8e%)A~puT%!Zc7~Z zUNv%eS-Ur#5iFtBs#d5r5DW@JH@SwC=2g#}Z5G$B%wS8e`bK}d>fr3b6JQ;EQcrS_~{L0Q>dxH1gDr_72=r;9y}%8AlsmB=h@yF zot=b9qP-rG2r{)W^&TFR-^T5xgQTmia_ecWY!sdqb1R$T3VHv9TC+c%DnGrVeJj5$ zeFOCrf$9c%7%>uXZX z2MZZ_OQqIE2&u9sjhSU8RpfsS+;5D(l(N7C0>7}l|RGs|l8E)l~~c@9h`Z z_h)xdD6%P8qS`lmuL`AZ7xMmKtdSBF*uAyp-_USoM{EbZV{@#A@luHVUh%gl#e$wH zb-vfBh?-;7`lTzaZciwck!6vmBO?N7TMBEqPkocSo--xEqj48vk5k2|ylZRFEonFD zw^HL~8^a)ymXsbG3*k{5vPu}@aa)4Fi zaQDXskG{Ey@fDxZfvM8kw}hdO4#W)H=!cmLw^b;v?Id}Cc-9fu z$&-|)+hf~q(>4LkOPb3OP16gFd%+D&b5Y$KGpd-|3OmXxtXq21CYevr1F3mt`{aW_ zlV-DnT3~e;d8u_kh=agvbCC4CYm}73JIsrQzPm93$_C{LuJhII{WkuTH2P{Z#hq{< zwp+bX9pG-b_krd(>eRkGsPeYHc$-n^r224B#kVoJQ?grl1TKgGUQ7A&$;5zCo=Wqb z+y1cHt@HaX>zDT2U1x%u)H5-eSzH9IoJ{k>TUUG>{jBPQI2HnYNMQ;+r#J~2V9BDc zII_^hbE)}`_KX^4DgcpdfNzg(vBEz-6rr+f0Qg1v0ZNxL+SOC}9o>{x&~BQRDUXVa zIh@?1N110W*M^7f-wY2||5h=k1E@$C*jgM)*4#a4JM928Z?YEmYH9ws7Msp!YF0^l zet3gr_0YXW1OSe4A1xptD~AsNpkr`0weYeqxD3DL?kZzz?{0^a@pJV!L<0Z_KltI+ z73XCu?B|MiBf|Yu!9Ni2!~KyN3KsqW@p4fGTNq%4QSJnsu%e8Dj4W7Zex^el1%qRq{c!keTF$OGH{xMwY6>tV#E&%p^88ciFHDPHn2O53 zGJo;>!aS-3Zb)#(9g1`$g_;}!`Y+pGcm(uFr(bmYIg}sP!>OpTA)tRxSdEQg{^rEt z&@J?|G);9u)De;609h9Lma@;H`v;+_v2tc+khb Kw8+St;r{_w!aKtN literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/i18x32@2x.png b/tools/assets/App_Resources/iOS/i18x32@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a232174190aaf1199002f08627f1a138662b9ac4 GIT binary patch literal 3441 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 Kw8+St;r{_w!aKtN literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/i18x32@3x.png b/tools/assets/App_Resources/iOS/i18x32@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a232174190aaf1199002f08627f1a138662b9ac4 GIT binary patch literal 3441 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 Kw8+St;r{_w!aKtN literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/i32x18.png b/tools/assets/App_Resources/iOS/i32x18.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ba2f305ea974dc3fa02327c5d1e56781080178 GIT binary patch literal 3419 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/i32x18@2x.png b/tools/assets/App_Resources/iOS/i32x18@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ba2f305ea974dc3fa02327c5d1e56781080178 GIT binary patch literal 3419 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/i32x18@3x.png b/tools/assets/App_Resources/iOS/i32x18@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ba2f305ea974dc3fa02327c5d1e56781080178 GIT binary patch literal 3419 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/i32x32.png b/tools/assets/App_Resources/iOS/i32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..0f778f86e92176943a6c0658a14d2fe23e464221 GIT binary patch literal 3428 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/i32x32@2x.png b/tools/assets/App_Resources/iOS/i32x32@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0f778f86e92176943a6c0658a14d2fe23e464221 GIT binary patch literal 3428 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/i32x32@3x.png b/tools/assets/App_Resources/iOS/i32x32@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0f778f86e92176943a6c0658a14d2fe23e464221 GIT binary patch literal 3428 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/testlogo.jpg b/tools/assets/App_Resources/iOS/testlogo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..102a9b13475b7cb2c39bd5aa1bf6fef6a0ec2373 GIT binary patch literal 3924 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 Ef4RP_fdBvi literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/tile.png b/tools/assets/App_Resources/iOS/tile.png new file mode 100644 index 0000000000000000000000000000000000000000..7ebde26a0e80acc0de0169d548b3c7a9d60c8cb2 GIT binary patch literal 3491 zcmZ`*c{r49`<}5A35i6;Oc{hhMrMp{?E5yBLZTVVYiu+2eaUMp`;sM+B~()Oo$Ru{ zWFN~bOKB2`Xz-)n-}iMK-}gPoaX-&}U)OnF%XvM2+%bmw8Z1maOaK6YMN3oF_~grT zx)|tA-lf{QLjVBNOD7c-LoF2*kRid%-U*Kb05oIL(&;fKH+gzC17OV~>|oH<9YM{P z#%NYG|7tdNZ6Qgz@Ys@Q=J+-X!z6nkZ&~zTHxliJ?^FD#UYUPhSZp|5y9!RPZ9R%n}Y+4j0815ZU9we2U{1l(oytk=7%}o@hG&$v})V( z8AETC>7?worTmhAeEi%MbdBFG>vHI11b=W<8>Y8VKeQCK7abUS_f8dp@ za4Niqca+jhk@oK8jWeUyqR{r~1YJFPg=g$3ZlE9b;9ZE2@43h*utdxmVzor}lxnpr zd?i|4^-Ge~G$!Wss%*y#mwv7GKztq6)?wJndMSW5W`#`*S|@Ye(_TF@W_2a^&HK>( zgB1Cz`{O%z`kI~A>9Utq<9*ti3_`I%p_kn0ThdG&a zb8Rhi{Pj?DXS`EtnyP#YT$~wG3I~iixbJd=tY;%E&qYY&aXdMyS#MD*TO~?r1F9bX zKqtxOjggha9`++xYK=YF4nj zD^qC#!4(&<;bI`J_Yu~2_=RYrlsHRhd)gRBsD{Gh7Deh9T_b)hO0LtZEW){Im+!EL zgHWoGj)~wxIwzGs6E9+^5$Ml}u=6x(=utz|mC#N@!79%FD5iYl5~{L@;IJVjuKW!{ z)}3=aq3VzKM!2}cgeCaQ!n_u{Dp&@>gBH*E((q~FNZ2m@L$^JVykfVil zujA#CBn=3AFRTQj9?kN1?01NfCNCH*BjBgWW*j38cF}|qxISpigYqP0nOQnIxotm5 z-hODv%vDKO$!HQP+%;~OC7B`VBT4 z`JS`3Jsz^W)KB9oyZx5H9x-(+byRaeD~@u$$%spx50yn6k6)GI`YW3O+xcFoGH787XRw7TzzKGDejS8sm%yjeQE|wK}7TT%m#XLUJ%fC3Q5(BWBBNPcPBbcG zEQy%0+_%ze+Gm}7sZc;#FYDR^omp);bR+uGljZdWPZ{~7Tmwb*&Ekaqw|$nqQGG8{ zU@3~wg<&ObB(n@8^HqvR_*Uo^F07wwB7BN=mP=Z^uJR7rHb1-){T!W(PI(g)35(TL z^XaxCUB7bwrPODsjj25t zj48_Wp2$^^49t9q6y}jBhv{Bft~sAkK`Eka>)mddwP8S4s>ADteFJu@xYd$|*9{pB z7R~5p%OGPFa|i}vS)jFCDyTK4eqEpV(mranBt0uV&#c%iVglmwq~?Kl_--&+pUlW- z{mA{13sMZ((ZJMzCoz-gNKk)_JhU0^pXR@}<8dH!pmjjM<94ZyE}f2%4o6qZY^!oj zrDX}&k*hYPRue}PC&KlO$LPL=`UiCub?R>ByEe=CoKx%Q}uaXjSf1&e>1f?hp3Q zXk*_w!tGw*_*|@ANzN*@j1|Ha_4aYqUav^_fQjA8M`_ksB*sQX@`Fz)pEk%*8SCOP z)&y+d!VK8RQx*fC3?^C3-`CGow>#7&ynA@w`R!i-kRAGr@cNI zxjAn>n9m3jQfOBwQWy?m2~=xw39iViUAWu|)v3;4O0W4&9a3|A`S>ZY0q9H>%+g6q zN0Uz5!XU-c&-{_OnD!-8IqPLs560<>+p-uKhIfWdkgo>yTpSOc6Kj%aQnd5v?2gV( z(oUlEP6!2JEHGZs-%7pdU(aNp>8sx@=qT7I zXeCe(X*sXBy>M~MT0--sXFp?<^EHvY^R0(b%(OD4A<>6SgbnDmE%I zZMt18oxc;DsdLk$p0K~W9Yftj?Q<5%k4F^}gpNltIw&1MoVlEXX~;A+)4H;qGA@lb z@t#NcuSDx=W3S+EwLHptAufjG734-kga69GBNq3FI@|Z_+Xb}=^?c4Q(tkX6w3A-p zr|;?Nu{mTvd>g@`07dH0@Pu8EfS^ zzC|=U#7`skiE_g!Lu)yC4T&DM&#kA9R_!QV?eV632{1LQ1|P&1!X9VdwaIdStLE{( zk4^4_OEc3O-jl;~74@Tpv5)q|4BX_01WlFK_%;M)VU4VT$j7kM53p#_fy;#T=A z>Dk`Yp6k4gf9sm^dPK|oO7me*Q_E6RAM1j=c8K)8>;~hm*1SpPQ?=pLJkz7{;{cOZ z)8l$zZCLqQ`!GK%f!^jg>7ZvaKZk3aOAYq!_5@2dOCH}Acm3fX)6eoJ-%O^s5sn3a z)Na@MyBQpQpg2rAcCL@ejW(9<(ej^H91pDeJ|%fUVi%9X1rorUDStnm8J5YDYrPlZ zhp6AZcI3Qu1cM;fcD z|3g1H$%7p|J>8Kon2(Q-xX*QQH-ZC95`jR#B&1+cQer0vF`}QVr>(D;D-rT5$p6Pt z#S!lkoZLN~++0DYac%9~ygcQ>;L}9^dVbZ3^L6@nCRgG=ZJjg-JN3XM#U)_>jppfO z|37G_o?o<|ef>&@It_+2bn?aFZ>l=E;9Q9(r71`wWKciT{DBpd{hj%n z=QrkQB}fB;6YfN$Qz;ZAQLz88{ewrrPIdZCw_ii~X+4>W0uu`MuL&zK(JbGYIT?Da zmZ~yFljZJQmEYG8pt3UEt?&eX1&NAK(NT;!{p?rDijIVsu(-adLa&5iMT{rNLdkoi zA6k*P4`41V1>4Hd6?T9Czdm`#Tjck(JP|oH<9YM{P z#%NYG|7tdNZ6Qgz@Ys@Q=J+-X!z6nkZ&~zTHxliJ?^FD#UYUPhSZp|5y9!RPZ9R%n}Y+4j0815ZU9we2U{1l(oytk=7%}o@hG&$v})V( z8AETC>7?worTmhAeEi%MbdBFG>vHI11b=W<8>Y8VKeQCK7abUS_f8dp@ za4Niqca+jhk@oK8jWeUyqR{r~1YJFPg=g$3ZlE9b;9ZE2@43h*utdxmVzor}lxnpr zd?i|4^-Ge~G$!Wss%*y#mwv7GKztq6)?wJndMSW5W`#`*S|@Ye(_TF@W_2a^&HK>( zgB1Cz`{O%z`kI~A>9Utq<9*ti3_`I%p_kn0ThdG&a zb8Rhi{Pj?DXS`EtnyP#YT$~wG3I~iixbJd=tY;%E&qYY&aXdMyS#MD*TO~?r1F9bX zKqtxOjggha9`++xYK=YF4nj zD^qC#!4(&<;bI`J_Yu~2_=RYrlsHRhd)gRBsD{Gh7Deh9T_b)hO0LtZEW){Im+!EL zgHWoGj)~wxIwzGs6E9+^5$Ml}u=6x(=utz|mC#N@!79%FD5iYl5~{L@;IJVjuKW!{ z)}3=aq3VzKM!2}cgeCaQ!n_u{Dp&@>gBH*E((q~FNZ2m@L$^JVykfVil zujA#CBn=3AFRTQj9?kN1?01NfCNCH*BjBgWW*j38cF}|qxISpigYqP0nOQnIxotm5 z-hODv%vDKO$!HQP+%;~OC7B`VBT4 z`JS`3Jsz^W)KB9oyZx5H9x-(+byRaeD~@u$$%spx50yn6k6)GI`YW3O+xcFoGH787XRw7TzzKGDejS8sm%yjeQE|wK}7TT%m#XLUJ%fC3Q5(BWBBNPcPBbcG zEQy%0+_%ze+Gm}7sZc;#FYDR^omp);bR+uGljZdWPZ{~7Tmwb*&Ekaqw|$nqQGG8{ zU@3~wg<&ObB(n@8^HqvR_*Uo^F07wwB7BN=mP=Z^uJR7rHb1-){T!W(PI(g)35(TL z^XaxCUB7bwrPODsjj25t zj48_Wp2$^^49t9q6y}jBhv{Bft~sAkK`Eka>)mddwP8S4s>ADteFJu@xYd$|*9{pB z7R~5p%OGPFa|i}vS)jFCDyTK4eqEpV(mranBt0uV&#c%iVglmwq~?Kl_--&+pUlW- z{mA{13sMZ((ZJMzCoz-gNKk)_JhU0^pXR@}<8dH!pmjjM<94ZyE}f2%4o6qZY^!oj zrDX}&k*hYPRue}PC&KlO$LPL=`UiCub?R>ByEe=CoKx%Q}uaXjSf1&e>1f?hp3Q zXk*_w!tGw*_*|@ANzN*@j1|Ha_4aYqUav^_fQjA8M`_ksB*sQX@`Fz)pEk%*8SCOP z)&y+d!VK8RQx*fC3?^C3-`CGow>#7&ynA@w`R!i-kRAGr@cNI zxjAn>n9m3jQfOBwQWy?m2~=xw39iViUAWu|)v3;4O0W4&9a3|A`S>ZY0q9H>%+g6q zN0Uz5!XU-c&-{_OnD!-8IqPLs560<>+p-uKhIfWdkgo>yTpSOc6Kj%aQnd5v?2gV( z(oUlEP6!2JEHGZs-%7pdU(aNp>8sx@=qT7I zXeCe(X*sXBy>M~MT0--sXFp?<^EHvY^R0(b%(OD4A<>6SgbnDmE%I zZMt18oxc;DsdLk$p0K~W9Yftj?Q<5%k4F^}gpNltIw&1MoVlEXX~;A+)4H;qGA@lb z@t#NcuSDx=W3S+EwLHptAufjG734-kga69GBNq3FI@|Z_+Xb}=^?c4Q(tkX6w3A-p zr|;?Nu{mTvd>g@`07dH0@Pu8EfS^ zzC|=U#7`skiE_g!Lu)yC4T&DM&#kA9R_!QV?eV632{1LQ1|P&1!X9VdwaIdStLE{( zk4^4_OEc3O-jl;~74@Tpv5)q|4BX_01WlFK_%;M)VU4VT$j7kM53p#_fy;#T=A z>Dk`Yp6k4gf9sm^dPK|oO7me*Q_E6RAM1j=c8K)8>;~hm*1SpPQ?=pLJkz7{;{cOZ z)8l$zZCLqQ`!GK%f!^jg>7ZvaKZk3aOAYq!_5@2dOCH}Acm3fX)6eoJ-%O^s5sn3a z)Na@MyBQpQpg2rAcCL@ejW(9<(ej^H91pDeJ|%fUVi%9X1rorUDStnm8J5YDYrPlZ zhp6AZcI3Qu1cM;fcD z|3g1H$%7p|J>8Kon2(Q-xX*QQH-ZC95`jR#B&1+cQer0vF`}QVr>(D;D-rT5$p6Pt z#S!lkoZLN~++0DYac%9~ygcQ>;L}9^dVbZ3^L6@nCRgG=ZJjg-JN3XM#U)_>jppfO z|37G_o?o<|ef>&@It_+2bn?aFZ>l=E;9Q9(r71`wWKciT{DBpd{hj%n z=QrkQB}fB;6YfN$Qz;ZAQLz88{ewrrPIdZCw_ii~X+4>W0uu`MuL&zK(JbGYIT?Da zmZ~yFljZJQmEYG8pt3UEt?&eX1&NAK(NT;!{p?rDijIVsu(-adLa&5iMT{rNLdkoi zA6k*P4`41V1>4Hd6?T9Czdm`#Tjck(JP|oH<9YM{P z#%NYG|7tdNZ6Qgz@Ys@Q=J+-X!z6nkZ&~zTHxliJ?^FD#UYUPhSZp|5y9!RPZ9R%n}Y+4j0815ZU9we2U{1l(oytk=7%}o@hG&$v})V( z8AETC>7?worTmhAeEi%MbdBFG>vHI11b=W<8>Y8VKeQCK7abUS_f8dp@ za4Niqca+jhk@oK8jWeUyqR{r~1YJFPg=g$3ZlE9b;9ZE2@43h*utdxmVzor}lxnpr zd?i|4^-Ge~G$!Wss%*y#mwv7GKztq6)?wJndMSW5W`#`*S|@Ye(_TF@W_2a^&HK>( zgB1Cz`{O%z`kI~A>9Utq<9*ti3_`I%p_kn0ThdG&a zb8Rhi{Pj?DXS`EtnyP#YT$~wG3I~iixbJd=tY;%E&qYY&aXdMyS#MD*TO~?r1F9bX zKqtxOjggha9`++xYK=YF4nj zD^qC#!4(&<;bI`J_Yu~2_=RYrlsHRhd)gRBsD{Gh7Deh9T_b)hO0LtZEW){Im+!EL zgHWoGj)~wxIwzGs6E9+^5$Ml}u=6x(=utz|mC#N@!79%FD5iYl5~{L@;IJVjuKW!{ z)}3=aq3VzKM!2}cgeCaQ!n_u{Dp&@>gBH*E((q~FNZ2m@L$^JVykfVil zujA#CBn=3AFRTQj9?kN1?01NfCNCH*BjBgWW*j38cF}|qxISpigYqP0nOQnIxotm5 z-hODv%vDKO$!HQP+%;~OC7B`VBT4 z`JS`3Jsz^W)KB9oyZx5H9x-(+byRaeD~@u$$%spx50yn6k6)GI`YW3O+xcFoGH787XRw7TzzKGDejS8sm%yjeQE|wK}7TT%m#XLUJ%fC3Q5(BWBBNPcPBbcG zEQy%0+_%ze+Gm}7sZc;#FYDR^omp);bR+uGljZdWPZ{~7Tmwb*&Ekaqw|$nqQGG8{ zU@3~wg<&ObB(n@8^HqvR_*Uo^F07wwB7BN=mP=Z^uJR7rHb1-){T!W(PI(g)35(TL z^XaxCUB7bwrPODsjj25t zj48_Wp2$^^49t9q6y}jBhv{Bft~sAkK`Eka>)mddwP8S4s>ADteFJu@xYd$|*9{pB z7R~5p%OGPFa|i}vS)jFCDyTK4eqEpV(mranBt0uV&#c%iVglmwq~?Kl_--&+pUlW- z{mA{13sMZ((ZJMzCoz-gNKk)_JhU0^pXR@}<8dH!pmjjM<94ZyE}f2%4o6qZY^!oj zrDX}&k*hYPRue}PC&KlO$LPL=`UiCub?R>ByEe=CoKx%Q}uaXjSf1&e>1f?hp3Q zXk*_w!tGw*_*|@ANzN*@j1|Ha_4aYqUav^_fQjA8M`_ksB*sQX@`Fz)pEk%*8SCOP z)&y+d!VK8RQx*fC3?^C3-`CGow>#7&ynA@w`R!i-kRAGr@cNI zxjAn>n9m3jQfOBwQWy?m2~=xw39iViUAWu|)v3;4O0W4&9a3|A`S>ZY0q9H>%+g6q zN0Uz5!XU-c&-{_OnD!-8IqPLs560<>+p-uKhIfWdkgo>yTpSOc6Kj%aQnd5v?2gV( z(oUlEP6!2JEHGZs-%7pdU(aNp>8sx@=qT7I zXeCe(X*sXBy>M~MT0--sXFp?<^EHvY^R0(b%(OD4A<>6SgbnDmE%I zZMt18oxc;DsdLk$p0K~W9Yftj?Q<5%k4F^}gpNltIw&1MoVlEXX~;A+)4H;qGA@lb z@t#NcuSDx=W3S+EwLHptAufjG734-kga69GBNq3FI@|Z_+Xb}=^?c4Q(tkX6w3A-p zr|;?Nu{mTvd>g@`07dH0@Pu8EfS^ zzC|=U#7`skiE_g!Lu)yC4T&DM&#kA9R_!QV?eV632{1LQ1|P&1!X9VdwaIdStLE{( zk4^4_OEc3O-jl;~74@Tpv5)q|4BX_01WlFK_%;M)VU4VT$j7kM53p#_fy;#T=A z>Dk`Yp6k4gf9sm^dPK|oO7me*Q_E6RAM1j=c8K)8>;~hm*1SpPQ?=pLJkz7{;{cOZ z)8l$zZCLqQ`!GK%f!^jg>7ZvaKZk3aOAYq!_5@2dOCH}Acm3fX)6eoJ-%O^s5sn3a z)Na@MyBQpQpg2rAcCL@ejW(9<(ej^H91pDeJ|%fUVi%9X1rorUDStnm8J5YDYrPlZ zhp6AZcI3Qu1cM;fcD z|3g1H$%7p|J>8Kon2(Q-xX*QQH-ZC95`jR#B&1+cQer0vF`}QVr>(D;D-rT5$p6Pt z#S!lkoZLN~++0DYac%9~ygcQ>;L}9^dVbZ3^L6@nCRgG=ZJjg-JN3XM#U)_>jppfO z|37G_o?o<|ef>&@It_+2bn?aFZ>l=E;9Q9(r71`wWKciT{DBpd{hj%n z=QrkQB}fB;6YfN$Qz;ZAQLz88{ewrrPIdZCw_ii~X+4>W0uu`MuL&zK(JbGYIT?Da zmZ~yFljZJQmEYG8pt3UEt?&eX1&NAK(NT;!{p?rDijIVsu(-adLa&5iMT{rNLdkoi zA6k*P4`41V1>4Hd6?T9Czdm`#Tjck(JPd*APU?^^Hoowa`F{LbFbv&*yp*-`qB9?(#-Q33z}8f`6g*wt70>hNA8 zzj{NcoZK1 zRwJN>jvgu?MjjSj97!G9W}=^9N5ozl_KXOAFOrNZ+=gTeMNPRWYXV?O32vkJ@xkoo zT&xA{T@I$5U+x8BX9EX;fDdszjC`HqfcMw_R9DFn>5u#-z!w5&Q>Kg$l^0!de;n}< z1+YXtcg2@=a{?R!nw=zej`s+JC%p$Yj~f8WL;^j(U=4x-xvER@PXwSO02LC4a$SZ; z2(dmdx<5dD4~ifmsnbOeyVSjbehLat4SyB@aYQHGR}$sR$kmLE8NZQNst+dB+m@*G zebgosvf38&v%?SGB`1##2eI3>q$3Za2r>4ryOKJi(td3>^+zsr>oM^m#t6CJ_t7bd z_i_SXlCvd~COo+zEB-^WO!to+9&43;7y+_+Xt#=S51Y8_728l!Zh+`ts>k(zkr7Om z>|r0mx8NmwzOly`1GVvFy*j~nF26Wa^b|G%F&^ym;R-#h6kLml>_J*H*`5;ZcEv-4 z`5pfR87&wh`l>v|l8YA9<3pm2SZ7F9jrJsikZUw*Tkd4GxF z&-8moBVFQ?#O3?kg&9#Ll7L}*_Y(%>dKSd&M!0A$!@JAc^;V72RfHH6P@Q+Knjn)q zTuP)YON?5*S8kH5nAQ2vvI0f=o`^$$*eH+U2u1ft22%xa(BbP`8|Mp@Rt3Gg3b7Uu zcg0P3m@tTWIo!gEQ-JK1GE*^GPaDM#;=!<(1)+Kh*YNWNv2~!@f+P#sk`;XzNM1d{ zA)fm^xue?4cvd(GM0GbF%t)%CI;1bpi|W$nt7htZMVSvPCN2#R2^~~s&fn6fJ-We$ z(#*sDU}gyw6y-1u^e^guqX*`7cG8I=8Xq)pjX*6@q5$(mTEe!u^IHkuM;K}eD z_#2lDp%3+W(&^-{8ITfjW$CLI^JnwVa5eKjq_>TnQkQ$Dl<>e@Z$?{Q)tP6G`#K%J zb|tSxB8lLOWUVPxAwJ2(^7x#1#rR%0O{Fj-zMtPdA*Q#dcl;a4GKLWnP4qRTGMl?_ zJ8wjPN|08Nv)Hio`e+85hHk-b-k1T{AlE=id+7b^4-+u?k^z`4Yyjr_eh$j;q2`0> zpLajpe;@N+4?3S1!lRZvl;DxF_{}*{FbTpleD^+|PLgEGahh&|aQvsV77@97uhNDS z5NS)jE8mQIEfR0N=aSIPy!%FH8Y-vSqC9_o?*VN-j%oO71Z< zG?F)ZA#_J5&2X+*-0-atgAukg=Lv^FK?$UEfApl(LO<|pvVCQGZ@2OU_F-m+E3_Zaxs6YpF-<`!eVx z!IOCS;&fLYw&+&rPCuN_VomoL=-u)aocI1S=ZsVrsm<%sK~-om9O|vB;dIXj0mFvz@fPweu=% zT_noF6W*H_{*t68zaxJ>VS{DIZ{o|m_H5LW;l|O7>2SuH`3^qu0|pA`ux;@c^Pp?U z_Q`OsLCmgC?Y^w{Z(M2cZu;Kv>Pk(e!ymsQu@1jjj;oJm7AAKijt};yc1FJ&TO%gD zw+-B!_TJ2;1q&#)D}GSK1k(g*w7P^;5Wg0^`O{C00kfO8^YcZYOrX162U;Zy zxH%2Hg_0Y&Yb4*qO37K+DD2bz4E5?csyxzj>Kw~4=WlvcQSQ{zezvn^Y3B#WHxpHb zHs$j?RzT>iwrP%aN9+D5OxNYel9XO^zTJ1wUplKgl~}z}=bW_Nu^ngDSy#JKybNEV zzFfemsg)a+3)J~$UDT>6*@P?;CR%2L0((#P{F|F^;rMVGI7_N}GU*WUi;~l#5)Kc! zM&Cbn|pF8VtwvRjRf0V`*3Y23r>t(Vsi3hLq-IGkK0o_}<( zkyzmb_I&NJyr94M9?qc1FZ*aJ+gbiYa4BA5$Ls0+k>*za>O1)#(2|ukYp<~xu~O%? z!)P|b9|+?M=Sc_-A%{sCT+7aFjQ6nqXfbiQYJ>mU9&5xA2i7oe^o9KL#4_dH9WM_s zZyD*`Y<3@5oSNM78OO|2Gz@tTZ`vW!Y{xg|?;+)8T}EevzMmOyxlB*HDCh(X&U-W> z_RFVd%ditz*E!1o^qR_gc*A|k+Ia;iQUWKlMRB4%_c)_S1CyLxzvbSx}hb*XJS1n1}&u4V3Q z*1@04eFTE~R8PdsnF~4ObPjq<1AH zv<_~ONgc1I(Ueki{@3_`BZr)xB+}ytt{rma5PFp|6|73DS{Hv|22Eo5QU@;L< z@c%{gal7@=O4`9mB{LOI@(@|^jiu=F?sNR+5Ux>2mjXTAG-ZLl)tQ3Q&FUp2mgD* zij<^FR#N}~5Uj1PV(38j3@(ZzDc(WO)JNA{8;n&bjZ+s zxOWfOkE*D)|5|;erjJOa48$3RC!z(wbwP0*#DFex|D1H?g`Z~!zA6@DLh%Kh3Qtyb zcb%i2&ZkPHz1li-BQHc+p_~1{U4&yGc;;z3kjb_@+z_g5(SDYJkh zQmL5zUam5G8=KQTn}(lvw6_1$o#q5hjlpN{T3^RQj2tL0j_S;k*)`Cg$Ld zcHpCzQIEfez!3|A0Mq!fZFS6Xk1QoaTd&33c}>UVV?`Jn<&*i&?H2dWhla^}hifz6 z#&n`9$6Ke^))Z42gYX=Ddb$D1FjVWNhM#9DV+eL}fS>LWT<;FBZibQ0kDv|Nh9$Uu zD_9;*6XrEyibbjzs|lZ=NCEe^z*XS&oEvWquBAy6LN^F9NIIt$T8s12gu$h zNPjyX09yW8JDGGOytLQV2Q??mrN8wUgq_9g1 z_*QUSaS5|=l#IP!eByo|$L^m=hRQixjGK@(jjN;3Q}J1k(%96o#$yAYU{Mo! zn_lzmEu-iVF|n3&-X1=#1AzI5juC^T+sUSYRTZgPB*9_BKVBhR7GOoBq7xtiaA0jz zYu_GXRQ_Zlv|(zKFjn1uJIlY^kvWXH9Q>r4Px^bVIM_2E{S9=OYLN$j20i1 zi&9XAe`)XFg8*(T8mwhDzcb#uuvdA+Fi?dN=h<`(lRsROrW*dNwEgRzBr-VS;LCSo z@xj7C&b&aM(LweGg`U}DQrsN!?&~u2i%+G~71BnldrEfQR^zO3DreZ-YfOPh=26m$ z6^E|l&59QGRRemdt~x^tRsuiJq))7L}zG1J0zOKrAw=t(I&MTmFQ*ofI0#oW*=32@E^K z6@6y?#;R_qh1}N+CE<<%jqg&7nxnz$Bz%=i>2Vz$pA24tE|(?uPcA<=JyS$3Jwu0B z>dq)SS<(yGSUuOy*QP`v2`ns}&2;p!N9G|7cfc$Cr6-Y0ImTvtTxO?BK&r#n!k5>F z`=DdGrPN9Re&ze`a*-x&f;-c+Qmav0oo@pXSyGS6spT5oVlUZfCLdsK6=E~EvQ((2 zJC7z(CTUuMV|o>n+=53Z!95*5&uotJ%eVxoP?^QJ&@!xg-NV;|yBnvwd4ZR9-p>a- z;A(N^)b!T2IBd^!h@xM=p2@EjFvmub)d|kYH4Kfcsx-!YJR-HJsKw6L*Jp(81jFw~ zS~r=xp{X9*mwPW>9-o)~G9+iK?0kalfz6i`N@`;{SuL9P^hx{0>{pGfIj`r{ZsRxrBEg}nEv_O?8uEC zCBm}RD+rrvvla;*2@+_@wmCjNYrxmXe<(T!~fiF@XT33EFY*u=9h!_ z8JJ|2Lm0L2Y29YMc8JCWEafLMYEer}1+6z{$X4PTTS6K^*cm^o{=n_V+R`kXqF=PK z@q>8j^yMm<$o!r~1y^kNF?P>)zP`Z>c3zjaWiiE$7B96kIEB{H7J|Il zV3-B9g(|12@xq#i6gLs)@V3D-Y+T0KXp>QiKl9MQx7h9G>W$*6){4V58=q7qq_Y=z zCg@Nl5?HudO2I$BPmsss)|Scb;*nIwCS3TNH$-liz)2o(@XoDbd}zkqtz)SoX|!un zL2qMP^UP<0yE`67m84d*k0X(g)`C$gOJ&EesXX`azs(E0%c<-f1jto**MUL)9M*Zw zu00A8BmYxPHyTq~5Kzj$Snw@*LfeNjuL}k}9<#U2DH@?p56LE4aHu@F^KeMNkOD_y s576g9(!50REYrFRi?XoG>bn8}VvmSl(oT>t{$7~0H6E##t6GKq4}#m!QUCw| literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/up@2x.png b/tools/assets/App_Resources/iOS/up@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..04dca794a7db34141c8da2fe25f2da8f93e86f3e GIT binary patch literal 5192 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/up@3x.png b/tools/assets/App_Resources/iOS/up@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..04dca794a7db34141c8da2fe25f2da8f93e86f3e GIT binary patch literal 5192 zcmZ`*cQjmk*B*7EMYJd(Mv0a%h&Fl;BZ3LSMU;#d-RNxwktm7Yi4uvLi0FN^5Q2%T zccS;GV;JU>d*APU?^^Hoowa`F{LbFbv&*yp*-`qB9?(#-Q33z}8f`6g*wt70>hNA8 zzj{NcoZK1 zRwJN>jvgu?MjjSj97!G9W}=^9N5ozl_KXOAFOrNZ+=gTeMNPRWYXV?O32vkJ@xkoo zT&xA{T@I$5U+x8BX9EX;fDdszjC`HqfcMw_R9DFn>5u#-z!w5&Q>Kg$l^0!de;n}< z1+YXtcg2@=a{?R!nw=zej`s+JC%p$Yj~f8WL;^j(U=4x-xvER@PXwSO02LC4a$SZ; z2(dmdx<5dD4~ifmsnbOeyVSjbehLat4SyB@aYQHGR}$sR$kmLE8NZQNst+dB+m@*G zebgosvf38&v%?SGB`1##2eI3>q$3Za2r>4ryOKJi(td3>^+zsr>oM^m#t6CJ_t7bd z_i_SXlCvd~COo+zEB-^WO!to+9&43;7y+_+Xt#=S51Y8_728l!Zh+`ts>k(zkr7Om z>|r0mx8NmwzOly`1GVvFy*j~nF26Wa^b|G%F&^ym;R-#h6kLml>_J*H*`5;ZcEv-4 z`5pfR87&wh`l>v|l8YA9<3pm2SZ7F9jrJsikZUw*Tkd4GxF z&-8moBVFQ?#O3?kg&9#Ll7L}*_Y(%>dKSd&M!0A$!@JAc^;V72RfHH6P@Q+Knjn)q zTuP)YON?5*S8kH5nAQ2vvI0f=o`^$$*eH+U2u1ft22%xa(BbP`8|Mp@Rt3Gg3b7Uu zcg0P3m@tTWIo!gEQ-JK1GE*^GPaDM#;=!<(1)+Kh*YNWNv2~!@f+P#sk`;XzNM1d{ zA)fm^xue?4cvd(GM0GbF%t)%CI;1bpi|W$nt7htZMVSvPCN2#R2^~~s&fn6fJ-We$ z(#*sDU}gyw6y-1u^e^guqX*`7cG8I=8Xq)pjX*6@q5$(mTEe!u^IHkuM;K}eD z_#2lDp%3+W(&^-{8ITfjW$CLI^JnwVa5eKjq_>TnQkQ$Dl<>e@Z$?{Q)tP6G`#K%J zb|tSxB8lLOWUVPxAwJ2(^7x#1#rR%0O{Fj-zMtPdA*Q#dcl;a4GKLWnP4qRTGMl?_ zJ8wjPN|08Nv)Hio`e+85hHk-b-k1T{AlE=id+7b^4-+u?k^z`4Yyjr_eh$j;q2`0> zpLajpe;@N+4?3S1!lRZvl;DxF_{}*{FbTpleD^+|PLgEGahh&|aQvsV77@97uhNDS z5NS)jE8mQIEfR0N=aSIPy!%FH8Y-vSqC9_o?*VN-j%oO71Z< zG?F)ZA#_J5&2X+*-0-atgAukg=Lv^FK?$UEfApl(LO<|pvVCQGZ@2OU_F-m+E3_Zaxs6YpF-<`!eVx z!IOCS;&fLYw&+&rPCuN_VomoL=-u)aocI1S=ZsVrsm<%sK~-om9O|vB;dIXj0mFvz@fPweu=% zT_noF6W*H_{*t68zaxJ>VS{DIZ{o|m_H5LW;l|O7>2SuH`3^qu0|pA`ux;@c^Pp?U z_Q`OsLCmgC?Y^w{Z(M2cZu;Kv>Pk(e!ymsQu@1jjj;oJm7AAKijt};yc1FJ&TO%gD zw+-B!_TJ2;1q&#)D}GSK1k(g*w7P^;5Wg0^`O{C00kfO8^YcZYOrX162U;Zy zxH%2Hg_0Y&Yb4*qO37K+DD2bz4E5?csyxzj>Kw~4=WlvcQSQ{zezvn^Y3B#WHxpHb zHs$j?RzT>iwrP%aN9+D5OxNYel9XO^zTJ1wUplKgl~}z}=bW_Nu^ngDSy#JKybNEV zzFfemsg)a+3)J~$UDT>6*@P?;CR%2L0((#P{F|F^;rMVGI7_N}GU*WUi;~l#5)Kc! zM&Cbn|pF8VtwvRjRf0V`*3Y23r>t(Vsi3hLq-IGkK0o_}<( zkyzmb_I&NJyr94M9?qc1FZ*aJ+gbiYa4BA5$Ls0+k>*za>O1)#(2|ukYp<~xu~O%? z!)P|b9|+?M=Sc_-A%{sCT+7aFjQ6nqXfbiQYJ>mU9&5xA2i7oe^o9KL#4_dH9WM_s zZyD*`Y<3@5oSNM78OO|2Gz@tTZ`vW!Y{xg|?;+)8T}EevzMmOyxlB*HDCh(X&U-W> z_RFVd%ditz*E!1o^qR_gc*A|k+Ia;iQUWKlMRB4%_c)_S1CyLxzvbSx}hb*XJS1n1}&u4V3Q z*1@04eFTE~R8PdsnF~4ObPjq<1AH zv<_~ONgc1I(Ueki{@3_`BZr)xB+}ytt{rma5PFp|6|73DS{Hv|22Eo5QU@;L< z@c%{gal7@=O4`9mB{LOI@(@|^jiu=F?sNR+5Ux>2mjXTAG-ZLl)tQ3Q&FUp2mgD* zij<^FR#N}~5Uj1PV(38j3@(ZzDc(WO)JNA{8;n&bjZ+s zxOWfOkE*D)|5|;erjJOa48$3RC!z(wbwP0*#DFex|D1H?g`Z~!zA6@DLh%Kh3Qtyb zcb%i2&ZkPHz1li-BQHc+p_~1{U4&yGc;;z3kjb_@+z_g5(SDYJkh zQmL5zUam5G8=KQTn}(lvw6_1$o#q5hjlpN{T3^RQj2tL0j_S;k*)`Cg$Ld zcHpCzQIEfez!3|A0Mq!fZFS6Xk1QoaTd&33c}>UVV?`Jn<&*i&?H2dWhla^}hifz6 z#&n`9$6Ke^))Z42gYX=Ddb$D1FjVWNhM#9DV+eL}fS>LWT<;FBZibQ0kDv|Nh9$Uu zD_9;*6XrEyibbjzs|lZ=NCEe^z*XS&oEvWquBAy6LN^F9NIIt$T8s12gu$h zNPjyX09yW8JDGGOytLQV2Q??mrN8wUgq_9g1 z_*QUSaS5|=l#IP!eByo|$L^m=hRQixjGK@(jjN;3Q}J1k(%96o#$yAYU{Mo! zn_lzmEu-iVF|n3&-X1=#1AzI5juC^T+sUSYRTZgPB*9_BKVBhR7GOoBq7xtiaA0jz zYu_GXRQ_Zlv|(zKFjn1uJIlY^kvWXH9Q>r4Px^bVIM_2E{S9=OYLN$j20i1 zi&9XAe`)XFg8*(T8mwhDzcb#uuvdA+Fi?dN=h<`(lRsROrW*dNwEgRzBr-VS;LCSo z@xj7C&b&aM(LweGg`U}DQrsN!?&~u2i%+G~71BnldrEfQR^zO3DreZ-YfOPh=26m$ z6^E|l&59QGRRemdt~x^tRsuiJq))7L}zG1J0zOKrAw=t(I&MTmFQ*ofI0#oW*=32@E^K z6@6y?#;R_qh1}N+CE<<%jqg&7nxnz$Bz%=i>2Vz$pA24tE|(?uPcA<=JyS$3Jwu0B z>dq)SS<(yGSUuOy*QP`v2`ns}&2;p!N9G|7cfc$Cr6-Y0ImTvtTxO?BK&r#n!k5>F z`=DdGrPN9Re&ze`a*-x&f;-c+Qmav0oo@pXSyGS6spT5oVlUZfCLdsK6=E~EvQ((2 zJC7z(CTUuMV|o>n+=53Z!95*5&uotJ%eVxoP?^QJ&@!xg-NV;|yBnvwd4ZR9-p>a- z;A(N^)b!T2IBd^!h@xM=p2@EjFvmub)d|kYH4Kfcsx-!YJR-HJsKw6L*Jp(81jFw~ zS~r=xp{X9*mwPW>9-o)~G9+iK?0kalfz6i`N@`;{SuL9P^hx{0>{pGfIj`r{ZsRxrBEg}nEv_O?8uEC zCBm}RD+rrvvla;*2@+_@wmCjNYrxmXe<(T!~fiF@XT33EFY*u=9h!_ z8JJ|2Lm0L2Y29YMc8JCWEafLMYEer}1+6z{$X4PTTS6K^*cm^o{=n_V+R`kXqF=PK z@q>8j^yMm<$o!r~1y^kNF?P>)zP`Z>c3zjaWiiE$7B96kIEB{H7J|Il zV3-B9g(|12@xq#i6gLs)@V3D-Y+T0KXp>QiKl9MQx7h9G>W$*6){4V58=q7qq_Y=z zCg@Nl5?HudO2I$BPmsss)|Scb;*nIwCS3TNH$-liz)2o(@XoDbd}zkqtz)SoX|!un zL2qMP^UP<0yE`67m84d*k0X(g)`C$gOJ&EesXX`azs(E0%c<-f1jto**MUL)9M*Zw zu00A8BmYxPHyTq~5Kzj$Snw@*LfeNjuL}k}9<#U2DH@?p56LE4aHu@F^KeMNkOD_y s576g9(!50REYrFRi?XoG>bn8}VvmSl(oT>t{$7~0H6E##t6GKq4}#m!QUCw| literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/upccw.png b/tools/assets/App_Resources/iOS/upccw.png new file mode 100644 index 0000000000000000000000000000000000000000..6ad441c51a7d30ea0fc9079d4dbb1fcd53791407 GIT binary patch literal 5276 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/upflip@2x.png b/tools/assets/App_Resources/iOS/upflip@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..af39cee601f3bf9f7a2011e67ef1b6f03f4b9f02 GIT binary patch literal 5147 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 literal 0 HcmV?d00001 diff --git a/tools/assets/App_Resources/iOS/upflip@3x.png b/tools/assets/App_Resources/iOS/upflip@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..af39cee601f3bf9f7a2011e67ef1b6f03f4b9f02 GIT binary patch literal 5147 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 literal 0 HcmV?d00001 diff --git a/tools/workspace-scripts.js b/tools/workspace-scripts.js index 84cb23ee0..53fb315a2 100644 --- a/tools/workspace-scripts.js +++ b/tools/workspace-scripts.js @@ -87,8 +87,8 @@ module.exports = { // @nativescript/core core: { build: { - script: 'nx run core:build.npm', - description: '@nativescript/core: Build for npm' + script: 'nx run core:build', + description: '@nativescript/core: Build' }, test: { script: 'nx run core:unit', @@ -99,13 +99,6 @@ module.exports = { }, }, }, - // tns-core-modules (old historic compatibility) - 'core-compat': { - build: { - script: 'nx run core-compat:build', - description: 'tns-core-modules: (Compatibility package) Build for npm' - }, - }, // @nativescript/ui-mobile-base 'ui-mobile-base': { build: { diff --git a/workspace.json b/workspace.json index d08978ac0..f31778a13 100644 --- a/workspace.json +++ b/workspace.json @@ -1,418 +1,317 @@ { - "version": 1, - "projects": { - "apps-automated": { - "root": "apps/automated/", - "sourceRoot": "apps/automated/app", - "projectType": "application", - "prefix": "nativescript", - "architect": { - "ios": { - "builder": "@nrwl/workspace:run-commands", - "options": { + "version": 1, + "projects": { + "apps-automated": { + "root": "apps/automated/", + "sourceRoot": "apps/automated/app", + "projectType": "application", + "prefix": "nativescript", + "architect": { + "ios": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["ns debug ios --no-hmr --emulator --env.testing"], + "cwd": "apps/automated", + "parallel": false + } + }, + "android": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["ns debug android --no-hmr --emulator --env.testing"], + "cwd": "apps/automated", + "parallel": false + } + }, + "clean": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["npx rimraf -- hooks node_modules platforms package-lock.json webpack.config.js", "npm i", "npx rimraf -- package-lock.json"], + "cwd": "apps/automated", + "parallel": false + } + } + } + }, + "apps-toolbox": { + "root": "apps/toolbox/", + "sourceRoot": "apps/toolbox/src", + "projectType": "application", + "prefix": "nativescript", + "architect": { + "ios": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["ns debug ios --no-hmr --emulator --env.testing"], + "cwd": "apps/toolbox", + "parallel": false + } + }, + "android": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["ns debug android --no-hmr --emulator --env.testing"], + "cwd": "apps/toolbox", + "parallel": false + } + }, + "clean": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["npx rimraf -- hooks node_modules platforms package-lock.json webpack.config.js", "npm i", "npx rimraf -- package-lock.json"], + "cwd": "apps/toolbox", + "parallel": false + } + } + } + }, + "apps-ui": { + "root": "apps/ui/", + "sourceRoot": "apps/ui/src", + "projectType": "application", + "prefix": "nativescript", + "architect": { + "ios": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["ns debug ios --no-hmr --emulator --env.testing"], + "cwd": "apps/ui", + "parallel": false + } + }, + "android": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["ns debug android --no-hmr --emulator --env.testing"], + "cwd": "apps/ui", + "parallel": false + } + }, + "clean": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["npx rimraf -- hooks node_modules platforms package-lock.json webpack.config.js", "npm i", "npx rimraf -- package-lock.json"], + "cwd": "apps/ui", + "parallel": false + } + } + } + }, + "core": { + "root": "packages/core", + "sourceRoot": "packages/core", + "projectType": "library", + "schematics": {}, + "architect": { + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": ["packages/core/**/*.ts", "packages/core/references.d.ts", "packages/core/**/*.spec.ts", "packages/core/**/*.spec.tsx", "packages/core/**/*.spec.js", "packages/core/**/*.spec.jsx", "packages/core/**/*.d.ts"] + } + }, + "test": { + "builder": "@nrwl/jest:jest", + "options": { + "jestConfig": "packages/core/jest.config.js", + "passWithNoTests": true + } + }, + "setup": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["nx run webpack:build"] + } + }, + "build": { + "builder": "@nrwl/workspace:run-commands", + "outputs": ["dist/packages"], + "options": { "commands": [ - "ns debug ios --no-hmr --emulator --env.testing" - ], - "cwd": "apps/automated", - "parallel": false - } - }, - "android": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "ns debug android --no-hmr --emulator --env.testing" - ], - "cwd": "apps/automated", - "parallel": false - } - }, - "clean": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "npx rimraf -- hooks node_modules platforms package-lock.json webpack.config.js", - "npm i", - "npx rimraf -- package-lock.json" - ], - "cwd": "apps/automated", - "parallel": false - } - } - } - }, - "apps-toolbox": { - "root": "apps/toolbox/", - "sourceRoot": "apps/toolbox/src", - "projectType": "application", - "prefix": "nativescript", - "architect": { - "ios": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "ns debug ios --no-hmr --emulator --env.testing" - ], - "cwd": "apps/toolbox", - "parallel": false - } - }, - "android": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "ns debug android --no-hmr --emulator --env.testing" - ], - "cwd": "apps/toolbox", - "parallel": false - } - }, - "clean": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "npx rimraf -- hooks node_modules platforms package-lock.json webpack.config.js", - "npm i", - "npx rimraf -- package-lock.json" - ], - "cwd": "apps/toolbox", - "parallel": false - } - } - } - }, - "apps-ui": { - "root": "apps/ui/", - "sourceRoot": "apps/ui/src", - "projectType": "application", - "prefix": "nativescript", - "architect": { - "ios": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "ns debug ios --no-hmr --emulator --env.testing" - ], - "cwd": "apps/ui", - "parallel": false - } - }, - "android": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "ns debug android --no-hmr --emulator --env.testing" - ], - "cwd": "apps/ui", - "parallel": false - } - }, - "clean": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "npx rimraf -- hooks node_modules platforms package-lock.json webpack.config.js", - "npm i", - "npx rimraf -- package-lock.json" - ], - "cwd": "apps/ui", - "parallel": false - } - } - } - }, - "core": { - "root": "packages/core", - "sourceRoot": "packages/core", - "projectType": "library", - "schematics": {}, - "architect": { - "lint": { - "builder": "@nrwl/linter:lint", - "options": { - "linter": "eslint", - "config": "packages/core/.eslintrc", - "tsConfig": [ - "packages/core/tsconfig.lib.json", - "packages/core/tsconfig.spec.json" - ], - "exclude": [ - "**/node_modules/**", - "!packages/core/**" - ] - } - }, - "test": { - "builder": "@nrwl/jest:jest", - "options": { - "jestConfig": "packages/core/jest.config.js", - "tsConfig": "packages/core/tsconfig.spec.json", - "passWithNoTests": true - } - }, - "setup": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "nx run webpack:build" - ] - } - }, - "build": { - "builder": "@nrwl/node:package", - "outputs": ["dist/packages"], - "options": { - "outputPath": "dist/packages/core", - "tsConfig": "packages/core/tsconfig.lib.json", - "packageJson": "packages/core/package.json", - "main": "packages/core/index.ts", - "assets": [ - "packages/core/*.md" - ] - } - }, - "build.npm": { - "builder": "@nrwl/workspace:run-commands", - "outputs": ["dist/packages"], - "options": { - "commands": [ - "nx run core:build && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/**/*.d.ts\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/js-libs/**/*\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/cli-hooks/**/*.js\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/platforms/**/*\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/fetch/**/*\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/css/**/*\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/css-value/**/*\" dist", + "npx rimraf dist/packages/core", + "./node_modules/.bin/tsc -p packages/core/tsconfig.lib.json", + "./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/**/*.d.ts\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/js-libs/**/*\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/cli-hooks/**/*.js\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/platforms/**/*\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/fetch/**/*\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/css/**/*\" dist && ./node_modules/.bin/copyfiles -e \"packages/core/__tests__/**/*\" \"packages/core/css-value/**/*\" dist", + "cp packages/core/package.json dist/packages/core", "cp LICENSE dist/packages/core", - "cd dist/packages/core && npm pack && mv *.tgz .." + "cd dist/packages/core && npm pack && mv *.tgz .." ], "cwd": ".", - "parallel": false - } - }, - "unit": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "../../../node_modules/.bin/tsc -p tsconfig.json && ../../../node_modules/.bin/mocha --config=.mocharc.yml" - ], - "cwd": "packages/core/__tests__", - "parallel": false - } - }, - "unit.watch": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "../../../node_modules/.bin/tsc -p tsconfig.json && ../../../node_modules/.bin/mocha --watch --config=.mocharc.yml" - ], - "cwd": "packages/core/__tests__", - "parallel": false - } - } - } - }, - "core-compat": { - "root": "packages/core-compat", - "sourceRoot": "packages/core-compat", - "projectType": "library", - "schematics": {}, - "architect": { - "build": { - "builder": "@nrwl/workspace:run-commands", - "outputs": ["dist/packages"], - "options": { - "commands": [ - "npx rimraf -- node_modules package-lock.json", - "npm i", - "../../node_modules/.bin/tsc -p tsconfig.json", - "mv \"$(npm pack | tail -n 1)\" ../../dist/packages/tns-core-modules.tgz" - ], - "cwd": "packages/core-compat", - "parallel": false - } - } - } - }, - "types": { - "root": "packages/types", - "sourceRoot": "packages/types", - "projectType": "library", - "schematics": {}, - "architect": { - "build": { - "builder": "@nrwl/workspace:run-commands", - "outputs": ["dist/packages"], - "options": { - "commands": [ - "mkdir -p ../../dist/packages/types", - "cp -R * ../../dist/packages/types" - ], - "cwd": "packages/types", - "parallel": false - } - } - } - }, - "types-ios": { - "root": "packages/types-ios", - "sourceRoot": "packages/types-ios/src", - "projectType": "library", - "schematics": {}, - "architect": { - "build": { - "builder": "@nrwl/workspace:run-commands", - "outputs": ["dist/packages"], - "options": { - "commands": [ - "mkdir -p ../../dist/packages/types-ios", - "cp -R src/* ../../dist/packages/types-ios", - "cp package.json *.md ../../dist/packages/types-ios" - ], - "cwd": "packages/types-ios", - "parallel": false - } - } - } - }, - "types-android": { - "root": "packages/types-android", - "sourceRoot": "packages/types-android/src", - "projectType": "library", - "schematics": {}, - "architect": { - "build": { - "builder": "@nrwl/workspace:run-commands", - "outputs": ["dist/packages"], - "options": { - "commands": [ - "mkdir -p ../../dist/packages/types-android", - "cp -R src/* ../../dist/packages/types-android", - "cp package.json *.md ../../dist/packages/types-android" - ], - "cwd": "packages/types-android", - "parallel": false - } - } - } - }, - "ui-mobile-base": { - "root": "packages/ui-mobile-base", - "sourceRoot": "packages/ui-mobile-base", - "projectType": "library", - "schematics": {}, - "architect": { - "build": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "./build.sh", - "cp -R dist/package/platforms/* ../../packages/core/platforms" - ], - "cwd": "packages/ui-mobile-base", - "parallel": false - } - } - } - }, - "webpack": { - "root": "packages/webpack", - "sourceRoot": "packages/webpack", - "projectType": "library", - "schematics": {}, - "architect": { - "lint": { - "builder": "@nrwl/linter:lint", - "options": { - "linter": "eslint", - "config": "packages/webpack/.eslintrc", - "tsConfig": [ - "packages/webpack/tsconfig.json" - ], - "exclude": [ - "**/node_modules/**", - "!packages/webpack/**" - ] - } - }, - "test": { - "builder": "@nrwl/workspace:run-commands", - "options": { - "commands": [ - "npm run tsc", - "npm run jasmine" - ], - "cwd": "packages/webpack", - "parallel": false - } - }, - "build": { - "builder": "@nrwl/workspace:run-commands", - "outputs": ["dist/packages"], - "options": { - "commands": [ - "npm run setup", - "mkdir -p ../../dist/packages", - "mv \"$(npm pack | tail -n 1)\" ../../dist/packages/nativescript-webpack.tgz" - ], - "cwd": "packages/webpack", - "parallel": false - } - } - } - } - }, - "cli": { - "defaultCollection": "@nrwl/workspace" - }, - "schematics": { - "@nrwl/workspace": { - "library": { - "linter": "eslint" - } - }, - "@nrwl/cypress": { - "cypress-project": { - "linter": "eslint" - } - }, - "@nrwl/react": { - "application": { - "linter": "eslint" - }, - "library": { - "linter": "eslint" - } - }, - "@nrwl/next": { - "application": { - "linter": "eslint" - } - }, - "@nrwl/web": { - "application": { - "linter": "eslint" - } - }, - "@nrwl/node": { - "application": { - "linter": "eslint" - }, - "library": { - "linter": "eslint" - } - }, - "@nrwl/nx-plugin": { - "plugin": { - "linter": "eslint" - } - }, - "@nrwl/nest": { - "application": { - "linter": "eslint" - } - }, - "@nrwl/express": { - "application": { - "linter": "eslint" - }, - "library": { - "linter": "eslint" - } - } - } -} \ No newline at end of file + "parallel": false + } + }, + "unit": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["../../../node_modules/.bin/tsc -p tsconfig.json && ../../../node_modules/.bin/mocha --config=.mocharc.yml"], + "cwd": "packages/core/__tests__", + "parallel": false + } + }, + "unit.watch": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["../../../node_modules/.bin/tsc -p tsconfig.json && ../../../node_modules/.bin/mocha --watch --config=.mocharc.yml"], + "cwd": "packages/core/__tests__", + "parallel": false + } + } + } + }, + "types": { + "root": "packages/types", + "sourceRoot": "packages/types", + "projectType": "library", + "schematics": {}, + "architect": { + "build": { + "builder": "@nrwl/workspace:run-commands", + "outputs": ["dist/packages"], + "options": { + "commands": ["mkdir -p ../../dist/packages/types", "cp -R * ../../dist/packages/types"], + "cwd": "packages/types", + "parallel": false + } + } + } + }, + "types-ios": { + "root": "packages/types-ios", + "sourceRoot": "packages/types-ios/src", + "projectType": "library", + "schematics": {}, + "architect": { + "build": { + "builder": "@nrwl/workspace:run-commands", + "outputs": ["dist/packages"], + "options": { + "commands": ["mkdir -p ../../dist/packages/types-ios", "cp -R src/* ../../dist/packages/types-ios", "cp package.json *.md ../../dist/packages/types-ios"], + "cwd": "packages/types-ios", + "parallel": false + } + } + } + }, + "types-android": { + "root": "packages/types-android", + "sourceRoot": "packages/types-android/src", + "projectType": "library", + "schematics": {}, + "architect": { + "build": { + "builder": "@nrwl/workspace:run-commands", + "outputs": ["dist/packages"], + "options": { + "commands": ["mkdir -p ../../dist/packages/types-android", "cp -R src/* ../../dist/packages/types-android", "cp package.json *.md ../../dist/packages/types-android"], + "cwd": "packages/types-android", + "parallel": false + } + } + } + }, + "ui-mobile-base": { + "root": "packages/ui-mobile-base", + "sourceRoot": "packages/ui-mobile-base", + "projectType": "library", + "schematics": {}, + "architect": { + "build": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["./build.sh", "cp -R dist/package/platforms/* ../../packages/core/platforms"], + "cwd": "packages/ui-mobile-base", + "parallel": false + } + } + } + }, + "webpack": { + "root": "packages/webpack", + "sourceRoot": "packages/webpack", + "projectType": "library", + "schematics": {}, + "architect": { + "lint": { + "builder": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [] + } + }, + "test": { + "builder": "@nrwl/workspace:run-commands", + "options": { + "commands": ["npm run tsc", "npm run jasmine"], + "cwd": "packages/webpack", + "parallel": false + } + }, + "build": { + "builder": "@nrwl/workspace:run-commands", + "outputs": ["dist/packages"], + "options": { + "commands": ["npm run setup", "mkdir -p ../../dist/packages", "mv \"$(npm pack | tail -n 1)\" ../../dist/packages/nativescript-webpack.tgz"], + "cwd": "packages/webpack", + "parallel": false + } + } + } + } + }, + "cli": { + "defaultCollection": "@nrwl/workspace" + }, + "schematics": { + "@nrwl/workspace": { + "library": { + "linter": "eslint" + } + }, + "@nrwl/cypress": { + "cypress-project": { + "linter": "eslint" + } + }, + "@nrwl/react": { + "application": { + "linter": "eslint" + }, + "library": { + "linter": "eslint" + } + }, + "@nrwl/next": { + "application": { + "linter": "eslint" + } + }, + "@nrwl/web": { + "application": { + "linter": "eslint" + } + }, + "@nrwl/node": { + "application": { + "linter": "eslint" + }, + "library": { + "linter": "eslint" + } + }, + "@nrwl/nx-plugin": { + "plugin": { + "linter": "eslint" + } + }, + "@nrwl/nest": { + "application": { + "linter": "eslint" + } + }, + "@nrwl/express": { + "application": { + "linter": "eslint" + }, + "library": { + "linter": "eslint" + } + } + } +}