├── .github ├── issue_template.md └── pull_request_template.md ├── .gitignore ├── .travis.yml ├── API_DOCUMENTATION.md ├── LICENSE ├── README.md ├── demo-ng ├── App_Resources │ ├── Android │ │ ├── app.gradle │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── res │ │ │ ├── drawable-hdpi │ │ │ ├── background.png │ │ │ ├── ic_home_filled.png │ │ │ ├── ic_home_outline.png │ │ │ ├── icon.png │ │ │ └── logo.png │ │ │ ├── drawable-ldpi │ │ │ ├── background.png │ │ │ ├── ic_home_filled.png │ │ │ ├── ic_home_outline.png │ │ │ ├── icon.png │ │ │ └── logo.png │ │ │ ├── drawable-mdpi │ │ │ ├── background.png │ │ │ ├── ic_home_filled.png │ │ │ ├── ic_home_outline.png │ │ │ ├── icon.png │ │ │ └── logo.png │ │ │ ├── drawable-nodpi │ │ │ └── splash_screen.xml │ │ │ ├── drawable-xhdpi │ │ │ ├── background.png │ │ │ ├── ic_home_filled.png │ │ │ ├── ic_home_outline.png │ │ │ ├── icon.png │ │ │ └── logo.png │ │ │ ├── drawable-xxhdpi │ │ │ ├── background.png │ │ │ ├── ic_home_filled.png │ │ │ ├── ic_home_outline.png │ │ │ ├── icon.png │ │ │ └── logo.png │ │ │ ├── drawable-xxxhdpi │ │ │ ├── background.png │ │ │ ├── ic_home_filled.png │ │ │ ├── ic_home_outline.png │ │ │ ├── icon.png │ │ │ └── logo.png │ │ │ ├── values-v21 │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ └── styles.xml │ └── iOS │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── icon-1024.png │ │ │ ├── icon-29.png │ │ │ ├── icon-29@2x.png │ │ │ ├── icon-29@3x.png │ │ │ ├── icon-40.png │ │ │ ├── icon-40@2x.png │ │ │ ├── icon-40@3x.png │ │ │ ├── icon-60@2x.png │ │ │ ├── icon-60@3x.png │ │ │ ├── icon-76.png │ │ │ ├── icon-76@2x.png │ │ │ └── icon-83.5@2x.png │ │ ├── Contents.json │ │ ├── LaunchImage.launchimage │ │ │ ├── Contents.json │ │ │ ├── Default-1125h.png │ │ │ ├── Default-568h@2x.png │ │ │ ├── Default-667h@2x.png │ │ │ ├── Default-736h@3x.png │ │ │ ├── Default-Landscape-X.png │ │ │ ├── Default-Landscape.png │ │ │ ├── Default-Landscape@2x.png │ │ │ ├── Default-Landscape@3x.png │ │ │ ├── Default-Portrait.png │ │ │ ├── Default-Portrait@2x.png │ │ │ ├── Default.png │ │ │ └── Default@2x.png │ │ ├── LaunchScreen.AspectFill.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchScreen-AspectFill.png │ │ │ └── LaunchScreen-AspectFill@2x.png │ │ ├── LaunchScreen.Center.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchScreen-Center.png │ │ │ └── LaunchScreen-Center@2x.png │ │ ├── ic_home_filled.imageset │ │ │ ├── Contents.json │ │ │ └── ic_home_filled.png │ │ └── ic_home_outline.imageset │ │ │ ├── Contents.json │ │ │ └── ic_home_outline.png │ │ ├── Info.plist │ │ ├── LaunchScreen.storyboard │ │ └── build.xcconfig ├── README.md ├── angular.json ├── nsconfig.json ├── package-lock.json ├── package.json ├── src │ ├── app.css │ ├── app │ │ ├── app.component.html │ │ ├── app.component.ts │ │ └── app.module.ts │ ├── main.ts │ └── package.json ├── tsconfig.json └── tsconfig.tns.json ├── demo-vue ├── .gitignore ├── README.md ├── app │ ├── App_Resources │ │ ├── Android │ │ │ ├── app.gradle │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── res │ │ │ │ ├── drawable-hdpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_filled.png │ │ │ │ ├── ic_home_outline.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-ldpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_filled.png │ │ │ │ ├── ic_home_outline.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-mdpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_filled.png │ │ │ │ ├── ic_home_outline.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-nodpi │ │ │ │ └── splash_screen.xml │ │ │ │ ├── drawable-xhdpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_filled.png │ │ │ │ ├── ic_home_outline.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_filled.png │ │ │ │ ├── ic_home_outline.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_filled.png │ │ │ │ ├── ic_home_outline.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── values-v21 │ │ │ │ ├── colors.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ │ └── values │ │ │ │ ├── colors.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ └── iOS │ │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon-1024.png │ │ │ │ ├── icon-29.png │ │ │ │ ├── icon-29@2x.png │ │ │ │ ├── icon-29@3x.png │ │ │ │ ├── icon-40.png │ │ │ │ ├── icon-40@2x.png │ │ │ │ ├── icon-40@3x.png │ │ │ │ ├── icon-60@2x.png │ │ │ │ ├── icon-60@3x.png │ │ │ │ ├── icon-76.png │ │ │ │ ├── icon-76@2x.png │ │ │ │ └── icon-83.5@2x.png │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.launchimage │ │ │ │ ├── Contents.json │ │ │ │ ├── Default-1125h.png │ │ │ │ ├── Default-568h@2x.png │ │ │ │ ├── Default-667h@2x.png │ │ │ │ ├── Default-736h@3x.png │ │ │ │ ├── Default-Landscape-X.png │ │ │ │ ├── Default-Landscape.png │ │ │ │ ├── Default-Landscape@2x.png │ │ │ │ ├── Default-Landscape@3x.png │ │ │ │ ├── Default-Portrait.png │ │ │ │ ├── Default-Portrait@2x.png │ │ │ │ ├── Default.png │ │ │ │ └── Default@2x.png │ │ │ ├── LaunchScreen.AspectFill.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── LaunchScreen-AspectFill.png │ │ │ │ └── LaunchScreen-AspectFill@2x.png │ │ │ ├── LaunchScreen.Center.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── LaunchScreen-Center.png │ │ │ │ └── LaunchScreen-Center@2x.png │ │ │ ├── ic_home_filled.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_home_filled.png │ │ │ └── ic_home_outline.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_home_outline.png │ │ │ ├── Info.plist │ │ │ ├── LaunchScreen.storyboard │ │ │ └── build.xcconfig │ ├── app.scss │ ├── assets │ │ └── images │ │ │ └── NativeScript-Vue.png │ ├── components │ │ └── App.vue │ ├── fonts │ │ └── .gitkeep │ └── package.json ├── package-lock.json └── package.json ├── demo ├── README.md ├── app │ ├── App_Resources │ │ ├── Android │ │ │ ├── app.gradle │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── res │ │ │ │ ├── drawable-hdpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_black_24dp.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-ldpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_black_24dp.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-mdpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_black_24dp.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-nodpi │ │ │ │ └── splash_screen.xml │ │ │ │ ├── drawable-xhdpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_black_24dp.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_black_24dp.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── background.png │ │ │ │ ├── ic_home_black_24dp.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── values-v21 │ │ │ │ ├── colors.xml │ │ │ │ └── styles.xml │ │ │ │ └── values │ │ │ │ ├── colors.xml │ │ │ │ └── styles.xml │ │ └── iOS │ │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon-29.png │ │ │ │ ├── icon-29@2x.png │ │ │ │ ├── icon-29@3x.png │ │ │ │ ├── icon-40.png │ │ │ │ ├── icon-40@2x.png │ │ │ │ ├── icon-40@3x.png │ │ │ │ ├── icon-50.png │ │ │ │ ├── icon-50@2x.png │ │ │ │ ├── icon-57.png │ │ │ │ ├── icon-57@2x.png │ │ │ │ ├── icon-60@2x.png │ │ │ │ ├── icon-60@3x.png │ │ │ │ ├── icon-72.png │ │ │ │ ├── icon-72@2x.png │ │ │ │ ├── icon-76.png │ │ │ │ ├── icon-76@2x.png │ │ │ │ └── icon-83.5@2x.png │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.launchimage │ │ │ │ ├── Contents.json │ │ │ │ ├── Default-568h@2x.png │ │ │ │ ├── Default-667h@2x.png │ │ │ │ ├── Default-736h@3x.png │ │ │ │ ├── Default-Landscape.png │ │ │ │ ├── Default-Landscape@2x.png │ │ │ │ ├── Default-Landscape@3x.png │ │ │ │ ├── Default-Portrait.png │ │ │ │ ├── Default-Portrait@2x.png │ │ │ │ ├── Default.png │ │ │ │ └── Default@2x.png │ │ │ ├── LaunchScreen.AspectFill.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── LaunchScreen-AspectFill.png │ │ │ │ └── LaunchScreen-AspectFill@2x.png │ │ │ ├── LaunchScreen.Center.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── LaunchScreen-Center.png │ │ │ │ └── LaunchScreen-Center@2x.png │ │ │ └── ic_home_black_24dp.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ic_home_black_24dp.png │ │ │ ├── Info.plist │ │ │ ├── LaunchScreen.storyboard │ │ │ └── build.xcconfig │ ├── app.css │ ├── app.ts │ ├── main-page.ts │ ├── main-page.xml │ ├── main-view-model.ts │ ├── package.json │ └── tests │ │ └── tests.js ├── karma.conf.js ├── package-lock.json ├── package.json ├── references.d.ts ├── tsconfig.json └── tsconfig.tns.json ├── publish ├── pack.sh ├── package-lock.json ├── package.json └── publish.sh ├── src ├── .npmignore ├── angular │ ├── bottombar.directives.d.ts │ ├── bottombar.directives.ts │ ├── bottombar.module.d.ts │ ├── bottombar.module.ts │ ├── index.d.ts │ ├── index.ts │ ├── package.json │ └── tsconfig.json ├── bottombar-item │ ├── android │ │ ├── bottombar-item.d.ts │ │ └── bottombar-item.ts │ ├── bottombar-item.base.d.ts │ ├── bottombar-item.base.ts │ └── ios │ │ ├── bottombar-item.d.ts │ │ └── bottombar-item.ts ├── bottombar.android.ts ├── bottombar.ios.ts ├── bottombar │ ├── android │ │ ├── bottombar.d.ts │ │ └── bottombar.ts │ ├── bottombar.base.d.ts │ ├── bottombar.base.ts │ ├── bottombar.common.d.ts │ ├── bottombar.common.ts │ └── ios │ │ ├── bottombar.d.ts │ │ └── bottombar.ts ├── e2e │ ├── bottombar.e2e-spec.ts │ ├── config │ │ ├── appium.capabilities.json │ │ └── mocha.opts │ ├── setup.d.ts │ ├── setup.ts │ └── tsconfig.json ├── index.d.ts ├── package-lock.json ├── package.json ├── platforms │ └── android │ │ └── include.gradle ├── references.d.ts ├── screenshots │ ├── ressources.android.png │ ├── ressources.ios.png │ ├── showcase.android.gif │ └── showcase.ios.gif ├── scripts │ └── build-native.js ├── tsconfig.json ├── utils │ ├── android │ │ ├── utils.d.ts │ │ └── utils.ts │ ├── utils.common.d.ts │ └── utils.common.ts └── vue │ ├── index.js │ └── package.json └── tslint.json /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | ### Make sure to check the demo app(s) for sample usage 2 | 3 | ### Make sure to check the existing issues in this repository 4 | 5 | ### If the demo apps cannot help and there is no issue for your problem, tell us about it 6 | Please, ensure your title is less than 63 characters long and starts with a capital 7 | letter. 8 | 9 | ### Which platform(s) does your issue occur on? 10 | - iOS/Android/Both 11 | - iOS/Android versions 12 | - emulator or device. What type of device? 13 | 14 | ### Please, provide the following version numbers that your issue occurs with: 15 | 16 | - CLI: (run `tns --version` to fetch it) 17 | - Cross-platform modules: (check the 'version' attribute in the 18 | `node_modules/tns-core-modules/package.json` file in your project) 19 | - Runtime(s): (look for the `"tns-android"` and `"tns-ios"` properties in the `package.json` file of your project) 20 | - Plugin(s): (look for the version numbers in the `package.json` file of your 21 | project and paste your dependencies and devDependencies here) 22 | 23 | ### Please, tell us how to recreate the issue in as much detail as possible. 24 | Describe the steps to reproduce it. 25 | 26 | ### Is there any code involved? 27 | - provide a code example to recreate the problem 28 | - (EVEN BETTER) provide a .zip with application or refer to a repository with application where the problem is reproducible. 29 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | ## PR Checklist 11 | 12 | - [ ] The PR title follows our guidelines: https://github.com/NativeScript/NativeScript/blob/master/CONTRIBUTING.md#commit-messages. 13 | - [ ] There is an issue for the bug/feature this PR is for. To avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it. 14 | - [ ] All existing tests are passing 15 | - [ ] Tests for the changes are included 16 | 17 | ## What is the current behavior? 18 | 19 | 20 | ## What is the new behavior? 21 | 22 | 23 | Fixes/Implements/Closes #[Issue Number]. 24 | 25 | 26 | 27 | 36 | 37 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .idea 3 | .DS_Store 4 | *.esm.json 5 | *.js 6 | *.js.map 7 | *.log 8 | src/*.d.ts 9 | !src/vue/index.js 10 | !src/index.d.ts 11 | !src/references.d.ts 12 | !src/scripts/*.js 13 | !seed-tests/*.js 14 | seed-tests/seed-copy/**/*.* 15 | seed-tests/seed-copy-new-git-repo/**/*.* 16 | 17 | !demo/karma.conf.js 18 | !demo/app/tests/*.js 19 | demo/*.d.ts 20 | !demo/references.d.ts 21 | demo/e2e 22 | demo/lib 23 | demo/platforms 24 | !demo-ng/karma.conf.js 25 | !demo-ng/app/tests/*.js 26 | 27 | 28 | demo-ng/*.d.ts 29 | !demo-ng/references.d.ts 30 | demo-ng/lib 31 | demo-ng/platforms 32 | 33 | demo-vue/*.d.ts 34 | !demo-vue/references.d.ts 35 | demo-vue/lib 36 | demo-vue/platforms 37 | 38 | node_modules 39 | publish/src 40 | publish/package 41 | demo/report/report.html 42 | demo/report/stats.json 43 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | env: 2 | global: 3 | - ANDROID_PACKAGE='app-debug.apk' 4 | - ANDROID_PACKAGE_FOLDER=$TRAVIS_BUILD_DIR/demo/platforms/android/app/build/outputs/apk/debug 5 | - ANDROID_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER/$ANDROID_PACKAGE?overwrite=true" 6 | - IOS_PACKAGE='demo.zip' 7 | - IOS_PACKAGE_FOLDER=$TRAVIS_BUILD_DIR/demo/platforms/ios/build/emulator 8 | - IOS_SAUCE_STORAGE="https://saucelabs.com/rest/v1/storage/$SAUCE_USER/$IOS_PACKAGE?overwrite=true" 9 | 10 | matrix: 11 | include: 12 | - stage: "Lint" 13 | language: node_js 14 | os: linux 15 | node_js: "8" 16 | script: cd src && npm run ci.tslint && cd ../demo && npm run ci.tslint 17 | - stage: "WebPack, Build and Test" 18 | os: osx 19 | env: 20 | - WebPack="iOS" 21 | osx_image: xcode10 22 | language: node_js 23 | node_js: "8" 24 | jdk: oraclejdk8 25 | before_install: pip install six 26 | script: cd demo && npm run build.ci.iosOnly && npm i && tns build ios --bundle --env.uglify 27 | - language: android 28 | os: linux 29 | env: 30 | - WebPack="Android" 31 | jdk: oraclejdk8 32 | before_install: nvm install 8 33 | script: cd demo && npm run build.ci.plugin && npm i && tns build android --bundle --env.uglify --env.snapshot 34 | - language: android 35 | env: 36 | - BuildAndroid="28" 37 | os: linux 38 | jdk: oraclejdk8 39 | before_install: nvm install stable 40 | script: 41 | - cd src && npm run clean.ci && npm run tsc && cd ../demo && npm run clean && tns build android 42 | - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $ANDROID_SAUCE_STORAGE --data-binary @$ANDROID_PACKAGE_FOLDER/$ANDROID_PACKAGE.apk" 43 | - os: osx 44 | env: 45 | - BuildiOS="12" 46 | - Xcode="10.0" 47 | osx_image: xcode10 48 | language: node_js 49 | node_js: "8" 50 | jdk: oraclejdk8 51 | before_install: pip install six 52 | script: 53 | - cd src && npm run clean.ci && npm run tsc && cd ../demo && npm run clean && tns build ios 54 | - cd $IOS_PACKAGE_FOLDER && zip -r $IOS_PACKAGE demo.app 55 | - "curl -u $SAUCE_USER:$SAUCE_KEY -X POST -H 'Content-Type: application/octet-stream' $IOS_SAUCE_STORAGE --data-binary @$IOS_PACKAGE_FOLDER/$IOS_PACKAGE" 56 | - os: linux 57 | language: android 58 | dist: precise 59 | sudo: required 60 | jdk: oraclejdk8 61 | before_script: 62 | - echo no | android create avd --force -n test -t android-21 -b armeabi-v7a 63 | - emulator -avd test -no-audio -no-window & 64 | - android-wait-for-emulator 65 | before_install: 66 | - nvm install 8 67 | script: cd src && npm run test.ci.android 68 | - os: osx 69 | language: node_js 70 | node_js: "8" 71 | jdk: oraclejdk8 72 | before_install: pip install six 73 | osx_image: xcode10 74 | script: cd src && npm run test.ci.ios 75 | # Waiting to get access to an open source Sauce Labs account 76 | # - stage: "UI Tests" 77 | # env: Android="23" 78 | # language: node_js 79 | # os: linux 80 | # node_js: "8" 81 | # script: 82 | # - npm i -g appium 83 | # - cd demo && npm i 84 | # - travis_retry npm run e2e -- --runType sauce.android24 --sauceLab --reuseDevice --appPath $ANDROID_PACKAGE 85 | # - os: linux 86 | # env: 87 | # - iOS="12.1" 88 | # language: node_js 89 | # node_js: "8" 90 | # script: 91 | # - npm i -g appium 92 | # - cd demo && npm run clean && npm i 93 | # - travis_wait travis_retry npm run e2e -- --runType sauce.iPhone6.110 --sauceLab --reuseDevice --appPath $IOS_PACKAGE 94 | 95 | android: 96 | components: 97 | - tools 98 | - platform-tools 99 | - build-tools-28.0.2 100 | - android-28 101 | - android-26 102 | - extra-android-m2repository 103 | - sys-img-armeabi-v7a-android-21 104 | 105 | install: 106 | - echo no | npm install -g nativescript 107 | - tns usage-reporting disable 108 | - tns error-reporting disable -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![npm](https://img.shields.io/npm/v/nativescript-bottombar.svg)](https://www.npmjs.com/package/nativescript-bottombar) 2 | [![npm](https://img.shields.io/npm/dt/nativescript-bottombar.svg?label=npm%20downloads)](https://www.npmjs.com/package/nativescript-bottombar) 3 | [![twitter: @_rhanb](https://img.shields.io/badge/twitter-%40rhanb-2F98C1.svg)](https://twitter.com/_rhanb) 4 | 5 | [![Build Status](https://travis-ci.org/rhanb/nativescript-bottombar.svg?branch=4.0-rc)](https://travis-ci.org/rhanb/nativescript-bottombar) 6 | ![Package size](https://img.shields.io/badge/package%20size-15.1%20kB-lightgrey.svg) 7 | ![Unpacked size](https://img.shields.io/badge/unpacked%20size-58.9%20kB-brightgreen.svg) 8 | 9 | [![NPM](https://nodei.co/npm/nativescript-bottombar.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/nativescript-bottombar/) 10 | 11 | 12 | # NativeScript BottomBar :beers::fire::fr: 13 | 14 | 15 | NativeScript plugin for [BottomNavigationView](https://github.com/aurelhubert/ahbottomnavigation) and [UITabBar](https://developer.apple.com/documentation/uikit/uitabbar). 16 | 17 | PS: To have a material design on iOS too, free to use the plugin [nativescript-bottom-navigation](https://github.com/henrychavez/nativescript-bottom-navigation/) 18 | 19 | No third libraries are used in this plugin, wich means this plugin is lightweight because only javascript files will be added to your app. 20 | 21 | iOS | Android 22 | -------- | --------- 23 | ![iOS](/src/screenshots/showcase.ios.gif) | ![Android](/src/screenshots/showcase.android.gif) 24 | 25 | ## Installation 26 | 27 | `tns plugin add nativescript-bottombar@next` 28 | 29 | ## Usage 30 | 31 | [API documentation](/API_DOCUMENTATION.md) 32 | 33 | - [Angular](/demo-ng/README.md) 34 | - [Vue](/demo-vue/README.md) 35 | - [{N} core](/demo/README.md) 36 | 37 | ## Common Usage 38 | 39 | ### Icons 40 | 41 | The properties `icon` and `checkedIcon` supports the following path formats: 42 | 43 | - `~/`: relative path to the app folder 44 | - `res://`: icons must be in the App_Resources folder as follow 45 | 46 | 47 | | iOS | Android | 48 | |:-------------------------------------------:|-----------------------------------------------------| 49 | | ![iOS](/src/screenshots/ressources.ios.png) | ![Android](/src/screenshots/ressources.android.png) | 50 | 51 | ### Ripple effect color on Android 52 | 53 | To change the color of the ripple effect when an item is tapped, please add the following item to your `AppTheme` inside your `App_Resources` > `Android` > `src` > `main` > `res` > `values` > `styles.xml` file with the desired `color` resource. 54 | 55 | ```XML 56 | 57 | 60 | ``` 61 | 62 | ### Android support 63 | 64 | You will need Support Library APIs v28 installed on your developer machine to be able to successfully use this plugin. If you already use the latest {N} version `5.0`, you should be good to go. 65 | 66 | ## More details 67 | 68 | [API documentation](/API_DOCUMENTATION.md) 69 | 70 | ### TODO 71 | 72 | - [ ] Allow to hide/show the `BottomBar` 73 | - [ ] Expose more `BottomBarItem` customisation (font, position, etc..) 74 | - [ ] Expose selection indicator on `iOS` 75 | - [ ] Implement more `unit` tests and `e2e` tests 76 | -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/app.gradle: -------------------------------------------------------------------------------- 1 | // Add your native dependencies here: 2 | 3 | // Uncomment to add recyclerview-v7 dependency 4 | //dependencies { 5 | // implementation 'com.android.support:recyclerview-v7:+' 6 | //} 7 | 8 | // If you want to add something to be applied before applying plugins' include.gradle files 9 | // e.g. project.ext.googlePlayServicesVersion = "15.0.1" 10 | // create a file named before-plugins.gradle in the current directory and place it there 11 | 12 | android { 13 | defaultConfig { 14 | generatedDensities = [] 15 | } 16 | aaptOptions { 17 | additionalParameters "--no-version-vectors" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 27 | 28 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-hdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-hdpi/background.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-hdpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-hdpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-hdpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-hdpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-hdpi/icon.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-hdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-hdpi/logo.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-ldpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-ldpi/background.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-ldpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-ldpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-ldpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-ldpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-ldpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-ldpi/icon.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-ldpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-ldpi/logo.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-mdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-mdpi/background.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-mdpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-mdpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-mdpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-mdpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-mdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-mdpi/icon.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-mdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-mdpi/logo.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xhdpi/background.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xhdpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xhdpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xhdpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xhdpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xxhdpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xxhdpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xxhdpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xxhdpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xxxhdpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xxxhdpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xxxhdpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xxxhdpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/values-v21/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3d5afe 4 | -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 15 | 16 | 17 | 20 | 21 | 24 | -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #F5F5F5 4 | #757575 5 | #33B5E5 6 | #272734 7 | -------------------------------------------------------------------------------- /demo-ng/App_Resources/Android/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 18 | 19 | 21 | 22 | 23 | 31 | 32 | 34 | 35 | 36 | 42 | 43 | 45 | 46 | -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "icon-29.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "29x29", 11 | "idiom" : "iphone", 12 | "filename" : "icon-29@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "icon-29@3x.png", 19 | "scale" : "3x" 20 | }, 21 | { 22 | "size" : "40x40", 23 | "idiom" : "iphone", 24 | "filename" : "icon-40@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "icon-40@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "60x60", 35 | "idiom" : "iphone", 36 | "filename" : "icon-60@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "icon-60@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "29x29", 47 | "idiom" : "ipad", 48 | "filename" : "icon-29.png", 49 | "scale" : "1x" 50 | }, 51 | { 52 | "size" : "29x29", 53 | "idiom" : "ipad", 54 | "filename" : "icon-29@2x.png", 55 | "scale" : "2x" 56 | }, 57 | { 58 | "size" : "40x40", 59 | "idiom" : "ipad", 60 | "filename" : "icon-40.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "40x40", 65 | "idiom" : "ipad", 66 | "filename" : "icon-40@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "76x76", 71 | "idiom" : "ipad", 72 | "filename" : "icon-76.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "76x76", 77 | "idiom" : "ipad", 78 | "filename" : "icon-76@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "83.5x83.5", 83 | "idiom" : "ipad", 84 | "filename" : "icon-83.5@2x.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "1024x1024", 89 | "idiom" : "ios-marketing", 90 | "filename" : "icon-1024.png", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-1125h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-1125h.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-736h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-736h@3x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-X.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@3x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchScreen-AspectFill.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchScreen-AspectFill@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchScreen-Center.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchScreen-Center@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/ic_home_filled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "ic_home_filled.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "filename": "ic_home_filled.png", 11 | "scale": "2x" 12 | }, 13 | { 14 | "idiom": "universal", 15 | "filename": "ic_home_filled.png", 16 | "scale": "3x" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/ic_home_filled.imageset/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/ic_home_filled.imageset/ic_home_filled.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/ic_home_outline.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "ic_home_outline.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "filename": "ic_home_outline.png", 11 | "scale": "2x" 12 | }, 13 | { 14 | "idiom": "universal", 15 | "filename": "ic_home_outline.png", 16 | "scale": "3x" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Assets.xcassets/ic_home_outline.imageset/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-ng/App_Resources/iOS/Assets.xcassets/ic_home_outline.imageset/ic_home_outline.png -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiresFullScreen 28 | 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /demo-ng/App_Resources/iOS/build.xcconfig: -------------------------------------------------------------------------------- 1 | // You can add custom settings here 2 | // for example you can uncomment the following line to force distribution code signing 3 | // CODE_SIGN_IDENTITY = iPhone Distribution 4 | // To build for device with Xcode 8 you need to specify your development team. More info: https://developer.apple.com/library/prerelease/content/releasenotes/DeveloperTools/RN-Xcode/Introduction.html 5 | // DEVELOPMENT_TEAM = YOUR_TEAM_ID; 6 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 7 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 8 | -------------------------------------------------------------------------------- /demo-ng/README.md: -------------------------------------------------------------------------------- 1 | # Nativescript Bottombar usage with Angular 2 | 3 | ### Module 4 | ```typescript 5 | import { BottomBarModule } from 'nativescript-bottombar/angular'; 6 | 7 | @NgModule({ 8 | bootstrap: [ 9 | ... 10 | ], 11 | imports: [ 12 | ... 13 | BottomBarModule 14 | ], 15 | declarations: [ 16 | ... 17 | ] 18 | }) 19 | ``` 20 | 21 | ### XML 22 | 23 | ```xml 24 | 25 | 26 | 27 | 28 | 32 | 37 | 38 | 44 | 45 | 51 | 52 | 53 | 54 | ``` 55 | ### Component 56 | 57 | ```typescript 58 | import { Component } from "@angular/core"; 59 | import { BottomBar, LABEL_VISIBILITY, TabSelectedEventData } from 'nativescript-bottombar'; 60 | 61 | @Component({ 62 | selector: "ns-app", 63 | moduleId: module.id, 64 | templateUrl: "./app.component.html", 65 | styles: [` 66 | BottomBar { 67 | inactive-tint-color: #B98AF9; 68 | active-tint-color: #FFFFFF; 69 | bar-background-color: #6800F4; 70 | } 71 | `] 72 | }) 73 | export class AppComponent { 74 | private bottomBar: BottomBar; 75 | labelVisibility: LABEL_VISIBILITY; 76 | 77 | constructor() { 78 | this.labelVisibility = LABEL_VISIBILITY.SELECTED; 79 | } 80 | 81 | tabSelected(event: TabSelectedEventData) { 82 | console.dir(event); 83 | } 84 | 85 | barLoaded(event) { 86 | this.bottomBar = event.object; 87 | } 88 | } 89 | ``` 90 | 91 | ## Common Usage 92 | 93 | ### Icons 94 | 95 | The properties `icon` and `checkedIcon` supports the following path formats: 96 | 97 | - `~/`: relative path to the app folder 98 | - `res://`: icons must be in the App_Resources folder as follow 99 | 100 | 101 | | iOS | Android | 102 | |:-------------------------------------------:|-----------------------------------------------------| 103 | | ![iOS](/src/screenshots/ressources.ios.png) | ![Android](/src/screenshots/ressources.android.png) | 104 | 105 | ### Ripple effect color on Android 106 | 107 | To change the color of the ripple effect when an item is tapped, please add the following item to your `AppTheme` inside your `App_Resources` > `Android` > `src` > `main` > `res` > `values` > `styles.xml` file with the desired `color` resource. 108 | 109 | ```XML 110 | 111 | 114 | ``` 115 | 116 | ## More details 117 | 118 | [API documentation](/API_DOCUMENTATION.md) -------------------------------------------------------------------------------- /demo-ng/angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "version": 1, 4 | "newProjectRoot": "projects", 5 | "cli": { 6 | "defaultCollection": "@nativescript/schematics" 7 | }, 8 | "projects": { 9 | "hello-world": { 10 | "root": "", 11 | "sourceRoot": "src", 12 | "projectType": "application", 13 | "prefix": "ns" 14 | } 15 | }, 16 | "defaultProject": "hello-world" 17 | } 18 | -------------------------------------------------------------------------------- /demo-ng/nsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "appResourcesPath": "App_Resources", 3 | "appPath": "src" 4 | } 5 | -------------------------------------------------------------------------------- /demo-ng/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "nativescript": { 3 | "id": "org.nativescript.demong", 4 | "tns-android": { 5 | "version": "4.2.0" 6 | }, 7 | "tns-ios": { 8 | "version": "4.2.0" 9 | } 10 | }, 11 | "description": "NativeScript Application", 12 | "license": "SEE LICENSE IN ", 13 | "repository": "", 14 | "dependencies": { 15 | "@angular/animations": "~7.0.0", 16 | "@angular/common": "~7.0.0", 17 | "@angular/compiler": "~7.0.0", 18 | "@angular/core": "~7.0.0", 19 | "@angular/forms": "~7.0.0", 20 | "@angular/http": "~7.0.0", 21 | "@angular/platform-browser": "~7.0.0", 22 | "@angular/platform-browser-dynamic": "~7.0.0", 23 | "@angular/router": "~7.0.0", 24 | "nativescript-angular": "~7.0.0", 25 | "nativescript-bottombar": "file:../src", 26 | "nativescript-theme-core": "~1.0.4", 27 | "reflect-metadata": "~0.1.8", 28 | "rxjs": "~6.3.0", 29 | "tns-core-modules": "^4.2.0", 30 | "zone.js": "^0.8.26" 31 | }, 32 | "devDependencies": { 33 | "@angular/compiler-cli": "~7.0.0", 34 | "@nativescript/schematics": "~0.4.0", 35 | "@ngtools/webpack": "~7.0.0", 36 | "@types/chai": "~4.1.3", 37 | "@types/mocha": "~5.2.1", 38 | "@types/node": "^7.0.5", 39 | "nativescript-dev-typescript": "~0.7.0", 40 | "nativescript-dev-webpack": "~0.18.0", 41 | "typescript": "^3.1.6" 42 | }, 43 | "readme": "NativeScript Application", 44 | "scripts": { 45 | "e2e": "tsc -p e2e && mocha --opts ./e2e/config/mocha.opts", 46 | "e2e-watch": "tsc -p e2e --watch" 47 | } 48 | } -------------------------------------------------------------------------------- /demo-ng/src/app.css: -------------------------------------------------------------------------------- 1 | /* 2 | In NativeScript, the app.css file is where you place CSS rules that 3 | you would like to apply to your entire application. Check out 4 | http://docs.nativescript.org/ui/styling for a full list of the CSS 5 | selectors and properties you can use to style UI components. 6 | 7 | /* 8 | In many cases you may want to use the NativeScript core theme instead 9 | of writing your own CSS rules. For a full list of class names in the theme 10 | refer to http://docs.nativescript.org/ui/theme. 11 | */ 12 | @import '~nativescript-theme-core/css/core.light.css'; 13 | -------------------------------------------------------------------------------- /demo-ng/src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /demo-ng/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | import { BottomBar, LABEL_VISIBILITY, TabSelectedEventData } from 'nativescript-bottombar'; 3 | 4 | @Component({ 5 | selector: "ns-app", 6 | moduleId: module.id, 7 | templateUrl: "./app.component.html", 8 | styles: [` 9 | BottomBar { 10 | inactive-tint-color: #B98AF9; 11 | active-tint-color: #FFFFFF; 12 | bar-background-color: #6800F4; 13 | } 14 | `] 15 | }) 16 | export class AppComponent { 17 | private bottomBar: BottomBar; 18 | labelVisibility: LABEL_VISIBILITY; 19 | 20 | constructor() { 21 | this.labelVisibility = LABEL_VISIBILITY.SELECTED; 22 | } 23 | 24 | tabSelected(event: TabSelectedEventData) { 25 | console.dir(event); 26 | } 27 | 28 | barLoaded(event) { 29 | this.bottomBar = event.object; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /demo-ng/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, NO_ERRORS_SCHEMA } from "@angular/core"; 2 | import { NativeScriptModule } from "nativescript-angular/nativescript.module"; 3 | 4 | import { BottomBarModule } from 'nativescript-bottombar/angular'; 5 | 6 | import { AppComponent } from "./app.component"; 7 | 8 | // Uncomment and add to NgModule imports if you need to use two-way binding 9 | // import { NativeScriptFormsModule } from "nativescript-angular/forms"; 10 | 11 | // Uncomment and add to NgModule imports if you need to use the HttpClient wrapper 12 | // import { NativeScriptHttpClientModule } from "nativescript-angular/http-client"; 13 | 14 | @NgModule({ 15 | bootstrap: [ 16 | AppComponent 17 | ], 18 | imports: [ 19 | NativeScriptModule, 20 | BottomBarModule 21 | ], 22 | declarations: [ 23 | AppComponent 24 | ], 25 | providers: [], 26 | schemas: [ 27 | NO_ERRORS_SCHEMA 28 | ] 29 | }) 30 | /* 31 | Pass your application module to the bootstrapModule function located in main.ts to start your app 32 | */ 33 | export class AppModule { } 34 | -------------------------------------------------------------------------------- /demo-ng/src/main.ts: -------------------------------------------------------------------------------- 1 | // this import should be first in order to load some required settings (like globals and reflect-metadata) 2 | import { platformNativeScriptDynamic } from "nativescript-angular/platform"; 3 | 4 | import { AppModule } from "./app/app.module"; 5 | 6 | // A traditional NativeScript application starts by initializing global objects, setting up global CSS rules, creating, and navigating to the main page. 7 | // Angular applications need to take care of their own initialization: modules, components, directives, routes, DI providers. 8 | // A NativeScript Angular app needs to make both paradigms work together, so we provide a wrapper platform object, platformNativeScriptDynamic, 9 | // that sets up a NativeScript application and can bootstrap the Angular framework. 10 | platformNativeScriptDynamic().bootstrapModule(AppModule); 11 | -------------------------------------------------------------------------------- /demo-ng/src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "main.js", 3 | "android": { 4 | "v8Flags": "--expose_gc" 5 | } 6 | } -------------------------------------------------------------------------------- /demo-ng/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es5", 5 | "experimentalDecorators": true, 6 | "emitDecoratorMetadata": true, 7 | "noEmitHelpers": true, 8 | "noEmitOnError": true, 9 | "lib": [ 10 | "es6", 11 | "dom", 12 | "es2015.iterable" 13 | ], 14 | "baseUrl": ".", 15 | "paths": { 16 | "~/*": [ 17 | "src/*" 18 | ], 19 | "*": [ 20 | "./node_modules/tns-core-modules/*", 21 | "./node_modules/*" 22 | ] 23 | } 24 | }, 25 | "exclude": [ 26 | "node_modules", 27 | "../src/node_modules", 28 | "../e2e", 29 | "platforms" 30 | ] 31 | } -------------------------------------------------------------------------------- /demo-ng/tsconfig.tns.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig", 3 | "compilerOptions": { 4 | "module": "es2015", 5 | "moduleResolution": "node" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /demo-vue/.gitignore: -------------------------------------------------------------------------------- 1 | # JetBrains project files 2 | .idea 3 | 4 | # NPM 5 | node_modules 6 | 7 | # NativeScript application 8 | hooks 9 | platforms 10 | -------------------------------------------------------------------------------- /demo-vue/README.md: -------------------------------------------------------------------------------- 1 | # Nativescript Bottombar usage with Vue 2 | 3 | ### Main file 4 | 5 | ```javascript 6 | import Vue from 'nativescript-vue' 7 | import App from './components/App' 8 | 9 | require('nativescript-bottombar/vue').register(Vue); 10 | 11 | // Prints Vue logs when --env.production is *NOT* set while building 12 | Vue.config.silent = (TNS_ENV === 'production') 13 | 14 | new Vue({ 15 | render: h => h('frame', [h(App)]) 16 | }).$start() 17 | ``` 18 | 19 | ### Component 20 | 21 | - template 22 | ```xml 23 | 54 | ``` 55 | 56 | - script 57 | ```typescript 58 | 73 | ``` 74 | 75 | - style 76 | ```css 77 | 97 | ``` 98 | 99 | ## Common Usage 100 | 101 | ### Icons 102 | 103 | The properties `icon` and `checkedIcon` supports the following path formats: 104 | 105 | - `~/`: relative path to the app folder 106 | - `res://`: icons must be in the App_Resources folder as follow 107 | 108 | 109 | | iOS | Android | 110 | |:-------------------------------------------:|-----------------------------------------------------| 111 | | ![iOS](/src/screenshots/ressources.ios.png) | ![Android](/src/screenshots/ressources.android.png) | 112 | 113 | ### Ripple effect color on Android 114 | 115 | To change the color of the ripple effect when an item is tapped, please add the following item to your `AppTheme` inside your `App_Resources` > `Android` > `src` > `main` > `res` > `values` > `styles.xml` file with the desired `color` resource. 116 | 117 | ```XML 118 | 119 | 122 | ``` 123 | 124 | ## More details 125 | 126 | [API documentation](/API_DOCUMENTATION.md) -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/app.gradle: -------------------------------------------------------------------------------- 1 | // Add your native dependencies here: 2 | 3 | android { 4 | defaultConfig { 5 | generatedDensities = [] 6 | applicationId = "__PACKAGE__" 7 | } 8 | aaptOptions { 9 | additionalParameters "--no-version-vectors" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/ic_home_filled.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/ic_home_outline.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/values-v21/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3d5afe 4 | -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/values-v21/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | NativeScript-Vue Application 4 | NativeScript-Vue Application 5 | 6 | -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | 14 | 15 | 16 | 19 | 20 | 23 | -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #F5F5F5 4 | #53ba82 5 | #33B5E5 6 | #272734 7 | 8 | -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | NativeScript-Vue Application 4 | NativeScript-Vue Application 5 | 6 | -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/Android/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 17 | 18 | 20 | 21 | 22 | 29 | 30 | 32 | 33 | 34 | 39 | 40 | 42 | 43 | -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "icon-29.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "29x29", 11 | "idiom" : "iphone", 12 | "filename" : "icon-29@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "icon-29@3x.png", 19 | "scale" : "3x" 20 | }, 21 | { 22 | "size" : "40x40", 23 | "idiom" : "iphone", 24 | "filename" : "icon-40@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "icon-40@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "60x60", 35 | "idiom" : "iphone", 36 | "filename" : "icon-60@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "icon-60@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "29x29", 47 | "idiom" : "ipad", 48 | "filename" : "icon-29.png", 49 | "scale" : "1x" 50 | }, 51 | { 52 | "size" : "29x29", 53 | "idiom" : "ipad", 54 | "filename" : "icon-29@2x.png", 55 | "scale" : "2x" 56 | }, 57 | { 58 | "size" : "40x40", 59 | "idiom" : "ipad", 60 | "filename" : "icon-40.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "40x40", 65 | "idiom" : "ipad", 66 | "filename" : "icon-40@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "76x76", 71 | "idiom" : "ipad", 72 | "filename" : "icon-76.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "76x76", 77 | "idiom" : "ipad", 78 | "filename" : "icon-76@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "83.5x83.5", 83 | "idiom" : "ipad", 84 | "filename" : "icon-83.5@2x.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "1024x1024", 89 | "idiom" : "ios-marketing", 90 | "filename" : "icon-1024.png", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-1125h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-1125h.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-736h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-736h@3x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape-X.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@3x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchScreen-AspectFill.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchScreen-AspectFill@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchScreen-Center.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchScreen-Center@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/ic_home_filled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "ic_home_filled.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "filename": "ic_home_filled.png", 11 | "scale": "2x" 12 | }, 13 | { 14 | "idiom": "universal", 15 | "filename": "ic_home_filled.png", 16 | "scale": "3x" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/ic_home_filled.imageset/ic_home_filled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/ic_home_filled.imageset/ic_home_filled.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/ic_home_outline.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "ic_home_outline.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "filename": "ic_home_outline.png", 11 | "scale": "2x" 12 | }, 13 | { 14 | "idiom": "universal", 15 | "filename": "ic_home_outline.png", 16 | "scale": "3x" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Assets.xcassets/ic_home_outline.imageset/ic_home_outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/App_Resources/iOS/Assets.xcassets/ic_home_outline.imageset/ic_home_outline.png -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | NativeScript-Vue Application 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0.0 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiresFullScreen 28 | 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /demo-vue/app/App_Resources/iOS/build.xcconfig: -------------------------------------------------------------------------------- 1 | // You can add custom settings here 2 | // for example you can uncomment the following line to force distribution code signing 3 | // CODE_SIGN_IDENTITY = iPhone Distribution 4 | // To build for device with Xcode 8 you need to specify your development team. More info: https://developer.apple.com/library/prerelease/content/releasenotes/DeveloperTools/RN-Xcode/Introduction.html 5 | // DEVELOPMENT_TEAM = YOUR_TEAM_ID; 6 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 7 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 8 | -------------------------------------------------------------------------------- /demo-vue/app/app.scss: -------------------------------------------------------------------------------- 1 | // NativeScript core theme 2 | // @see https://docs.nativescript.org/ui/theme 3 | @import '~nativescript-theme-core/scss/dark'; 4 | 5 | // Override variables here 6 | 7 | @import '~nativescript-theme-core/scss/index'; 8 | 9 | // Global SCSS styling 10 | // @see https://docs.nativescript.org/ui/styling 11 | -------------------------------------------------------------------------------- /demo-vue/app/assets/images/NativeScript-Vue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/assets/images/NativeScript-Vue.png -------------------------------------------------------------------------------- /demo-vue/app/components/App.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 33 | 34 | 55 | -------------------------------------------------------------------------------- /demo-vue/app/fonts/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo-vue/app/fonts/.gitkeep -------------------------------------------------------------------------------- /demo-vue/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "android": { 3 | "v8Flags": "--expose_gc" 4 | }, 5 | "main": "main", 6 | "name": "demo-vue", 7 | "version": "1.0.0" 8 | } 9 | -------------------------------------------------------------------------------- /demo-vue/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demo-vue", 3 | "version": "1.0.0", 4 | "description": "A native application built with NativeScript-Vue", 5 | "author": "rhanb ", 6 | "license": "MIT", 7 | "nativescript": { 8 | "id": "org.nativescript.application", 9 | "tns-ios": { 10 | "version": "5.0.0" 11 | }, 12 | "tns-android": { 13 | "version": "5.0.0" 14 | } 15 | }, 16 | "dependencies": { 17 | "nativescript-bottombar": "file:../src", 18 | "nativescript-theme-core": "^1.0.4", 19 | "nativescript-vue": "^2.0.0", 20 | "tns-core-modules": "^5.0.2" 21 | }, 22 | "devDependencies": { 23 | "@babel/core": "^7.0.0", 24 | "@babel/preset-env": "^7.0.0", 25 | "babel-loader": "^8.0.2", 26 | "babel-traverse": "6.26.0", 27 | "babel-types": "6.26.0", 28 | "babylon": "6.18.0", 29 | "clean-webpack-plugin": "^0.1.19", 30 | "copy-webpack-plugin": "^4.5.2", 31 | "css-loader": "^1.0.0", 32 | "lazy": "1.0.11", 33 | "nativescript-dev-webpack": "next", 34 | "nativescript-vue-template-compiler": "^2.0.0", 35 | "nativescript-worker-loader": "~0.9.0", 36 | "node-sass": "^4.9.2", 37 | "sass-loader": "^7.1.0", 38 | "terser-webpack-plugin": "^1.1.0", 39 | "vue-loader": "^15.2.6", 40 | "webpack": "^4.16.4", 41 | "webpack-bundle-analyzer": "~2.13.1", 42 | "webpack-cli": "^3.1.0" 43 | } 44 | } -------------------------------------------------------------------------------- /demo/README.md: -------------------------------------------------------------------------------- 1 | # Nativescript Bottombar usage with Typescript 2 | 3 | ### XML 4 | 5 | ```xml 6 | 8 | 9 | 10 | 11 | 12 | 16 | 22 | 23 | 28 | 29 | 34 | 35 | 36 | 37 | 38 | ``` 39 | 40 | ### Model 41 | 42 | ```typescript 43 | import { TabSelectedEventData, BottomBar } from 'nativescript-bottombar'; 44 | 45 | export class HelloWorldModel extends Observable { 46 | private _bottomBar: BottomBar; 47 | 48 | constructor() { 49 | super(); 50 | } 51 | 52 | public bottomBarLoaded(event) { 53 | console.dir(event); 54 | this._bottomBar = event.object; 55 | } 56 | 57 | bottomBarItemSelected(event: TabSelectedEventData) { 58 | console.dir(event); 59 | } 60 | } 61 | ``` 62 | 63 | ## Common Usage 64 | 65 | ### Icons 66 | 67 | The properties `icon` and `checkedIcon` supports the following path formats: 68 | 69 | - `~/`: relative path to the app folder 70 | - `res://`: icons must be in the App_Resources folder as follow 71 | 72 | 73 | | iOS | Android | 74 | |:-------------------------------------------:|-----------------------------------------------------| 75 | | ![iOS](/src/screenshots/ressources.ios.png) | ![Android](/src/screenshots/ressources.android.png) | 76 | 77 | ### Ripple effect color on Android 78 | 79 | To change the color of the ripple effect when an item is tapped, please add the following item to your `AppTheme` inside your `App_Resources` > `Android` > `src` > `main` > `res` > `values` > `styles.xml` file with the desired `color` resource. 80 | 81 | ```XML 82 | 83 | 86 | ``` 87 | 88 | ## More details 89 | 90 | [API documentation](/API_DOCUMENTATION.md) -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/app.gradle: -------------------------------------------------------------------------------- 1 | // Add your native dependencies here: 2 | 3 | // Uncomment to add recyclerview-v7 dependency 4 | //dependencies { 5 | // compile 'com.android.support:recyclerview-v7:+' 6 | //} 7 | 8 | android { 9 | defaultConfig { 10 | generatedDensities = [] 11 | applicationId = "org.nativescript.demo" 12 | } 13 | aaptOptions { 14 | additionalParameters "--no-version-vectors" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 27 | 28 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-hdpi/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-hdpi/ic_home_black_24dp.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-ldpi/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-ldpi/ic_home_black_24dp.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-mdpi/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-mdpi/ic_home_black_24dp.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/ic_home_black_24dp.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/ic_home_black_24dp.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/ic_home_black_24dp.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/values-v21/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3d5afe 4 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | 14 | 15 | 16 | 19 | 20 | 23 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #F5F5F5 4 | #757575 5 | #33B5E5 6 | #272734 7 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 18 | 19 | 21 | 22 | 23 | 31 | 32 | 34 | 35 | 36 | 42 | 43 | 45 | 46 | -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "icon-29.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "29x29", 11 | "idiom" : "iphone", 12 | "filename" : "icon-29@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "icon-29@3x.png", 19 | "scale" : "3x" 20 | }, 21 | { 22 | "size" : "40x40", 23 | "idiom" : "iphone", 24 | "filename" : "icon-40@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "icon-40@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "57x57", 35 | "idiom" : "iphone", 36 | "filename" : "icon-57.png", 37 | "scale" : "1x" 38 | }, 39 | { 40 | "size" : "57x57", 41 | "idiom" : "iphone", 42 | "filename" : "icon-57@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "icon-60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "icon-60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "29x29", 59 | "idiom" : "ipad", 60 | "filename" : "icon-29.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "icon-29@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "40x40", 71 | "idiom" : "ipad", 72 | "filename" : "icon-40.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "icon-40@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "50x50", 83 | "idiom" : "ipad", 84 | "filename" : "icon-50.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "50x50", 89 | "idiom" : "ipad", 90 | "filename" : "icon-50@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "72x72", 95 | "idiom" : "ipad", 96 | "filename" : "icon-72.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "72x72", 101 | "idiom" : "ipad", 102 | "filename" : "icon-72@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "76x76", 107 | "idiom" : "ipad", 108 | "filename" : "icon-76.png", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "size" : "76x76", 113 | "idiom" : "ipad", 114 | "filename" : "icon-76@2x.png", 115 | "scale" : "2x" 116 | }, 117 | { 118 | "size" : "83.5x83.5", 119 | "idiom" : "ipad", 120 | "filename" : "icon-83.5@2x.png", 121 | "scale" : "2x" 122 | } 123 | ], 124 | "info" : { 125 | "version" : 1, 126 | "author" : "xcode" 127 | } 128 | } -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-50.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-57.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-736h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-736h@3x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@3x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchScreen-AspectFill.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchScreen-AspectFill@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchScreen-Center.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchScreen-Center@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/ic_home_black_24dp.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "ic_home_black_24dp.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "filename": "ic_home_black_24dp.png", 11 | "scale": "2x" 12 | }, 13 | { 14 | "idiom": "universal", 15 | "filename": "ic_home_black_24dp.png", 16 | "scale": "3x" 17 | } 18 | ], 19 | "info": { 20 | "version": 1, 21 | "author": "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/ic_home_black_24dp.imageset/ic_home_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/demo/app/App_Resources/iOS/Assets.xcassets/ic_home_black_24dp.imageset/ic_home_black_24dp.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiresFullScreen 28 | 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/build.xcconfig: -------------------------------------------------------------------------------- 1 | // You can add custom settings here 2 | // for example you can uncomment the following line to force distribution code signing 3 | // CODE_SIGN_IDENTITY = iPhone Distribution 4 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 5 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 6 | -------------------------------------------------------------------------------- /demo/app/app.css: -------------------------------------------------------------------------------- 1 | @import '~nativescript-theme-core/css/core.light.css'; 2 | 3 | BottomBar { 4 | active-tint-color: #022733; 5 | bar-background-color: #F8FAFD; 6 | inactive-tint-color: #5CB85C; 7 | } -------------------------------------------------------------------------------- /demo/app/app.ts: -------------------------------------------------------------------------------- 1 | import * as application from 'tns-core-modules/application'; 2 | application.start({ moduleName: "main-page" }); 3 | -------------------------------------------------------------------------------- /demo/app/main-page.ts: -------------------------------------------------------------------------------- 1 | import * as observable from 'tns-core-modules/data/observable'; 2 | import * as pages from 'tns-core-modules/ui/page'; 3 | import {HelloWorldModel} from './main-view-model'; 4 | 5 | // Event handler for Page 'loaded' event attached in main-page.xml 6 | export function pageLoaded(args: observable.EventData) { 7 | // Get the event sender 8 | let page = args.object; 9 | page.bindingContext = new HelloWorldModel(); 10 | } 11 | -------------------------------------------------------------------------------- /demo/app/main-page.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /demo/app/main-view-model.ts: -------------------------------------------------------------------------------- 1 | import { Observable } from 'tns-core-modules/data/observable'; 2 | import { TabSelectedEventData, BottomBar } from 'nativescript-bottombar'; 3 | import { Color } from 'tns-core-modules/color/color'; 4 | 5 | export class HelloWorldModel extends Observable { 6 | private _bottomBar: BottomBar; 7 | 8 | constructor() { 9 | super(); 10 | } 11 | 12 | public bottomBarLoaded(event) { 13 | console.dir(event); 14 | this._bottomBar = event.object; 15 | } 16 | 17 | bottomBarItemSelected(event: TabSelectedEventData) { 18 | console.dir(event); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /demo/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tns-template-hello-world-ts", 3 | "main": "app.js", 4 | "version": "1.6.0", 5 | "author": { 6 | "name": "Telerik", 7 | "email": "support@telerik.com" 8 | }, 9 | "description": "Nativescript hello-world-ts project template", 10 | "license": "Apache-2.0", 11 | "keywords": [ 12 | "telerik", 13 | "mobile", 14 | "nativescript", 15 | "{N}", 16 | "tns", 17 | "appbuilder", 18 | "template" 19 | ], 20 | "repository": { 21 | "type": "git", 22 | "url": "git+ssh://git@github.com/NativeScript/template-hello-world-ts.git" 23 | }, 24 | "bugs": { 25 | "url": "https://github.com/NativeScript/template-hello-world-ts/issues" 26 | }, 27 | "homepage": "https://github.com/NativeScript/template-hello-world-ts", 28 | "android": { 29 | "v8Flags": "--expose_gc", 30 | "requireModules": ["nativescript-bottombar"] 31 | }, 32 | "devDependencies": { 33 | "nativescript-dev-typescript": "^0.3.0" 34 | }, 35 | "_id": "tns-template-hello-world-ts@1.6.0", 36 | "_shasum": "a567c2b9a56024818c06596dab9629d155c5b8a8", 37 | "_resolved": "https://registry.npmjs.org/tns-template-hello-world-ts/-/tns-template-hello-world-ts-1.6.0.tgz", 38 | "_from": "tns-template-hello-world-ts@latest", 39 | "scripts": { 40 | "build.plugin": "cd ../src && npm run build", 41 | "ci.tslint": "npm i && tslint --config '../tslint.json' 'app/**/*.ts' --exclude '**/node_modules/**'" 42 | }, 43 | "_npmVersion": "2.14.7", 44 | "_nodeVersion": "4.2.2", 45 | "_npmUser": { 46 | "name": "enchev", 47 | "email": "vladimir.enchev@gmail.com" 48 | }, 49 | "dist": { 50 | "shasum": "a567c2b9a56024818c06596dab9629d155c5b8a8", 51 | "tarball": "http://registry.npmjs.org/tns-template-hello-world-ts/-/tns-template-hello-world-ts-1.6.0.tgz" 52 | }, 53 | "maintainers": [ 54 | { 55 | "name": "enchev", 56 | "email": "vladimir.enchev@gmail.com" 57 | }, 58 | { 59 | "name": "erjangavalji", 60 | "email": "erjan.gavalji@gmail.com" 61 | }, 62 | { 63 | "name": "fatme", 64 | "email": "hfatme@gmail.com" 65 | }, 66 | { 67 | "name": "hdeshev", 68 | "email": "hristo@deshev.com" 69 | }, 70 | { 71 | "name": "kerezov", 72 | "email": "d.kerezov@gmail.com" 73 | }, 74 | { 75 | "name": "ligaz", 76 | "email": "stefan.dobrev@gmail.com" 77 | }, 78 | { 79 | "name": "nsndeck", 80 | "email": "nedyalko.nikolov@telerik.com" 81 | }, 82 | { 83 | "name": "rosen-vladimirov", 84 | "email": "rosen.vladimirov.91@gmail.com" 85 | }, 86 | { 87 | "name": "sdobrev", 88 | "email": "stefan.dobrev@gmail.com" 89 | }, 90 | { 91 | "name": "tailsu", 92 | "email": "tailsu@gmail.com" 93 | }, 94 | { 95 | "name": "teobugslayer", 96 | "email": "teobugslayer@gmail.com" 97 | }, 98 | { 99 | "name": "valio.stoychev", 100 | "email": "valio.stoychev@gmail.com" 101 | } 102 | ], 103 | "_npmOperationalInternal": { 104 | "host": "packages-5-east.internal.npmjs.com", 105 | "tmp": "tmp/tns-template-hello-world-ts-1.6.0.tgz_1455717516189_0.6427943941671401" 106 | }, 107 | "directories": {}, 108 | "readme": "ERROR: No README data found!" 109 | } 110 | -------------------------------------------------------------------------------- /demo/app/tests/tests.js: -------------------------------------------------------------------------------- 1 | const nativescriptBottombar = require('nativescript-bottombar'); 2 | const bottomBar = createBottomBar(); 3 | 4 | /** 5 | * 7 | 8 | 9 | 10 | 11 | */ 12 | function createBottomBar() { 13 | const bar = new nativescriptBottombar.BottomBar(); 14 | const items = []; 15 | for (let i = 0; i < 3; i++) { 16 | const item = new nativescriptBottombar.BottomBarItem(); 17 | item.icon = 'ic_home_black_24dp'; 18 | item.title = ['Home', i].join(' '); 19 | item.badge = i.toString(); 20 | items.push(item); 21 | } 22 | bar.items = items; 23 | return items; 24 | } 25 | 26 | describe("should be loaded", function() { 27 | it("exists", function() { 28 | console.dir(bottomBar); 29 | // expect(bottomBar.isLoaded).toBe(true); 30 | }); 31 | }); -------------------------------------------------------------------------------- /demo/karma.conf.js: -------------------------------------------------------------------------------- 1 | module.exports = function(config) { 2 | config.set({ 3 | 4 | // base path that will be used to resolve all patterns (eg. files, exclude) 5 | basePath: '', 6 | 7 | 8 | // frameworks to use 9 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 10 | frameworks: ['jasmine'], 11 | 12 | 13 | // list of files / patterns to load in the browser 14 | files: [ 15 | 'app/**/*.js' 16 | ], 17 | 18 | 19 | // list of files to exclude 20 | exclude: [ 21 | ], 22 | 23 | 24 | // preprocess matching files before serving them to the browser 25 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 26 | preprocessors: { 27 | }, 28 | 29 | 30 | // test results reporter to use 31 | // possible values: 'dots', 'progress' 32 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter 33 | reporters: ['progress'], 34 | 35 | 36 | // web server port 37 | port: 9876, 38 | 39 | 40 | // enable / disable colors in the output (reporters and logs) 41 | colors: true, 42 | 43 | 44 | // level of logging 45 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 46 | logLevel: config.LOG_INFO, 47 | 48 | 49 | // enable / disable watching file and executing tests whenever any file changes 50 | autoWatch: true, 51 | 52 | 53 | // start these browsers 54 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 55 | browsers: [], 56 | 57 | customLaunchers: { 58 | android: { 59 | base: 'NS', 60 | platform: 'android' 61 | }, 62 | ios: { 63 | base: 'NS', 64 | platform: 'ios' 65 | }, 66 | ios_simulator: { 67 | base: 'NS', 68 | platform: 'ios', 69 | arguments: ['--emulator'] 70 | } 71 | }, 72 | 73 | // Continuous Integration mode 74 | // if true, Karma captures browsers, runs the tests and exits 75 | singleRun: true 76 | }); 77 | }; 78 | -------------------------------------------------------------------------------- /demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "nativescript": { 3 | "id": "org.nativescript.demo", 4 | "tns-ios": { 5 | "version": "5.0.0" 6 | }, 7 | "tns-android": { 8 | "version": "5.0.0" 9 | } 10 | }, 11 | "dependencies": { 12 | "nativescript-bottombar": "file:../src", 13 | "nativescript-theme-core": "^1.0.4", 14 | "nativescript-unit-test-runner": "^0.3.4", 15 | "tns-core-modules": "^5.0.5" 16 | }, 17 | "devDependencies": { 18 | "@types/chai": "~4.1.3", 19 | "@types/mocha": "~5.2.1", 20 | "@types/node": "^7.0.5", 21 | "jasmine-core": "^2.5.2", 22 | "karma": "^1.3.0", 23 | "karma-jasmine": "^1.0.2", 24 | "karma-nativescript-launcher": "^0.4.0", 25 | "nativescript-css-loader": "~0.26.1", 26 | "nativescript-dev-appium": "^4.0.9", 27 | "nativescript-dev-typescript": "~0.7.4", 28 | "nativescript-dev-webpack": "~0.17.0", 29 | "tns-platform-declarations": "^5.0.0", 30 | "tslint": "~5.11.0", 31 | "typescript": "~2.8.2" 32 | }, 33 | "scripts": { 34 | "clean": "npx rimraf package-lock.json node_modules", 35 | "build.plugin": "npm run clean && cd ../src && npm run build", 36 | "build.ci.plugin": "npm run clean && cd ../src && npm run build.ci", 37 | "build.ci.iosOnly": "npm run clean && cd ../src && npm run build.ci.iosOnly", 38 | "ci.tslint": "npm run clean && npm i && tslint --config '../tslint.json' 'app/**/*.ts'", 39 | "e2e": "npx rimraf e2e && cp -R ../src/e2e ./e2e && tsc -p e2e && mocha --opts ./e2e/config/mocha.opts", 40 | "e2e.android": "tns build android && npm run e2e", 41 | "e2e.ios": "tns build ios && npm run e2e" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /demo/references.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "declaration": false, 6 | "removeComments": true, 7 | "noLib": false, 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "lib": [ 11 | "es6", 12 | "dom" 13 | ], 14 | "pretty": true, 15 | "allowUnreachableCode": false, 16 | "allowUnusedLabels": false, 17 | "noEmitHelpers": true, 18 | "noEmitOnError": false, 19 | "noImplicitAny": false, 20 | "noImplicitReturns": true, 21 | "noImplicitUseStrict": false, 22 | "noFallthroughCasesInSwitch": true, 23 | "baseUrl": ".", 24 | "paths": { 25 | "*": [ 26 | "./node_modules/*" 27 | ], 28 | "~/*": [ 29 | "app/*" 30 | ] 31 | } 32 | }, 33 | "include": [ 34 | "../src", 35 | "**/*" 36 | ], 37 | "exclude": [ 38 | "../src/node_modules", 39 | "../src/angular", 40 | "../src/e2e", 41 | "node_modules", 42 | "platforms" 43 | ], 44 | "compileOnSave": false 45 | } -------------------------------------------------------------------------------- /demo/tsconfig.tns.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig", 3 | "compilerOptions": { 4 | "module": "es2015", 5 | "moduleResolution": "node" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /publish/pack.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SOURCE_DIR=../src; 4 | TO_SOURCE_DIR=src; 5 | PACK_DIR=package; 6 | ROOT_DIR=..; 7 | PUBLISH=--publish 8 | 9 | install(){ 10 | npm i 11 | } 12 | 13 | pack() { 14 | 15 | echo 'Clearing /src and /package...' 16 | node_modules/.bin/rimraf "$TO_SOURCE_DIR" 17 | node_modules/.bin/rimraf "$PACK_DIR" 18 | 19 | # copy src 20 | echo 'Copying src...' 21 | node_modules/.bin/ncp "$SOURCE_DIR" "$TO_SOURCE_DIR" 22 | 23 | # copy README & LICENSE to src 24 | echo 'Copying README and LICENSE to /src...' 25 | node_modules/.bin/ncp "$ROOT_DIR"/LICENSE "$TO_SOURCE_DIR"/LICENSE 26 | node_modules/.bin/ncp "$ROOT_DIR"/README.md "$TO_SOURCE_DIR"/README.md 27 | 28 | # compile package and copy files required by npm 29 | echo 'Building /src...' 30 | cd "$TO_SOURCE_DIR" 31 | node_modules/.bin/tsc 32 | cd .. 33 | 34 | echo 'Creating package...' 35 | # create package dir 36 | mkdir "$PACK_DIR" 37 | 38 | # create the package 39 | cd "$PACK_DIR" 40 | npm pack ../"$TO_SOURCE_DIR" 41 | 42 | # delete source directory used to create the package 43 | cd .. 44 | node_modules/.bin/rimraf "$TO_SOURCE_DIR" 45 | } 46 | 47 | install && pack -------------------------------------------------------------------------------- /publish/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nativescript-publish", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "balanced-match": { 8 | "version": "1.0.0", 9 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 10 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 11 | "dev": true 12 | }, 13 | "brace-expansion": { 14 | "version": "1.1.11", 15 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 16 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 17 | "dev": true, 18 | "requires": { 19 | "balanced-match": "^1.0.0", 20 | "concat-map": "0.0.1" 21 | } 22 | }, 23 | "concat-map": { 24 | "version": "0.0.1", 25 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 26 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 27 | "dev": true 28 | }, 29 | "fs.realpath": { 30 | "version": "1.0.0", 31 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 32 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 33 | "dev": true 34 | }, 35 | "glob": { 36 | "version": "7.1.3", 37 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 38 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 39 | "dev": true, 40 | "requires": { 41 | "fs.realpath": "^1.0.0", 42 | "inflight": "^1.0.4", 43 | "inherits": "2", 44 | "minimatch": "^3.0.4", 45 | "once": "^1.3.0", 46 | "path-is-absolute": "^1.0.0" 47 | } 48 | }, 49 | "inflight": { 50 | "version": "1.0.6", 51 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 52 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 53 | "dev": true, 54 | "requires": { 55 | "once": "^1.3.0", 56 | "wrappy": "1" 57 | } 58 | }, 59 | "inherits": { 60 | "version": "2.0.3", 61 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 62 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 63 | "dev": true 64 | }, 65 | "minimatch": { 66 | "version": "3.0.4", 67 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 68 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 69 | "dev": true, 70 | "requires": { 71 | "brace-expansion": "^1.1.7" 72 | } 73 | }, 74 | "ncp": { 75 | "version": "2.0.0", 76 | "resolved": "http://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", 77 | "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", 78 | "dev": true 79 | }, 80 | "once": { 81 | "version": "1.4.0", 82 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 83 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 84 | "dev": true, 85 | "requires": { 86 | "wrappy": "1" 87 | } 88 | }, 89 | "path-is-absolute": { 90 | "version": "1.0.1", 91 | "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 92 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 93 | "dev": true 94 | }, 95 | "rimraf": { 96 | "version": "2.6.2", 97 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 98 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 99 | "dev": true, 100 | "requires": { 101 | "glob": "^7.0.5" 102 | } 103 | }, 104 | "wrappy": { 105 | "version": "1.0.2", 106 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 107 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 108 | "dev": true 109 | } 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /publish/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nativescript-publish", 3 | "version": "1.0.0", 4 | "description": "Publish helper", 5 | "devDependencies": { 6 | "ncp": "^2.0.0", 7 | "rimraf": "^2.5.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /publish/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # https://gist.github.com/schmich/d04acc4b02b45e489f329cfdf3280a3f 3 | 4 | PACK_DIR=package; 5 | 6 | publish() { 7 | cd $PACK_DIR 8 | echo 'Publishing to npm...' 9 | npm publish *.tgz 10 | } 11 | 12 | ./pack.sh && publish -------------------------------------------------------------------------------- /src/.npmignore: -------------------------------------------------------------------------------- 1 | *.map 2 | *.ts 3 | !*.d.ts 4 | tsconfig.json 5 | screenshots 6 | e2e 7 | scripts/* 8 | platforms/android/* 9 | !platforms/android/include.gradle 10 | !platforms/android/*.aar 11 | !platforms/android/*.jar -------------------------------------------------------------------------------- /src/angular/bottombar.directives.d.ts: -------------------------------------------------------------------------------- 1 | export declare class BottomBarDirective { 2 | } 3 | export declare class BottomBarItemDirective { 4 | } 5 | export declare const DIRECTIVES: (typeof BottomBarDirective)[]; 6 | -------------------------------------------------------------------------------- /src/angular/bottombar.directives.ts: -------------------------------------------------------------------------------- 1 | import { Directive } from "@angular/core"; 2 | 3 | @Directive({ 4 | selector: "BottomBar" 5 | }) 6 | export class BottomBarDirective { } 7 | 8 | @Directive({ 9 | selector: "BottomBarItem" 10 | }) 11 | export class BottomBarItemDirective { } 12 | 13 | export const DIRECTIVES = [ 14 | BottomBarDirective, 15 | BottomBarItemDirective 16 | ]; -------------------------------------------------------------------------------- /src/angular/bottombar.module.d.ts: -------------------------------------------------------------------------------- 1 | export declare class BottomBarModule { 2 | } 3 | -------------------------------------------------------------------------------- /src/angular/bottombar.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { registerElement } from 'nativescript-angular/element-registry'; 3 | 4 | import { BottomBar, BottomBarItem } from '../'; 5 | import { DIRECTIVES } from './bottombar.directives'; 6 | 7 | @NgModule({ 8 | declarations: DIRECTIVES, 9 | exports: DIRECTIVES 10 | }) 11 | export class BottomBarModule {} 12 | 13 | registerElement('BottomBar', () => BottomBar); 14 | registerElement('BottomBarItem', () => BottomBarItem); -------------------------------------------------------------------------------- /src/angular/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from './bottombar.module'; 2 | -------------------------------------------------------------------------------- /src/angular/index.ts: -------------------------------------------------------------------------------- 1 | export * from './bottombar.module'; -------------------------------------------------------------------------------- /src/angular/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nativescript-bottombar", 3 | "main": "index.js" 4 | } -------------------------------------------------------------------------------- /src/angular/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "experimentalDecorators": true 5 | } 6 | } -------------------------------------------------------------------------------- /src/bottombar-item/android/bottombar-item.d.ts: -------------------------------------------------------------------------------- 1 | import { Label } from 'tns-core-modules/ui/label/label'; 2 | import { BottomBarItemBase } from '../bottombar-item.base'; 3 | import { MenuItemType } from '../../bottombar.android'; 4 | import { BottomNavigationViewType } from '../../bottombar/android/bottombar'; 5 | export declare class BottomBarItem extends BottomBarItemBase { 6 | nativeView: MenuItemType; 7 | _badgeView: Label; 8 | readonly android: MenuItemType; 9 | initNativeView(): void; 10 | icon: string; 11 | title: string; 12 | checkedIcon: string; 13 | badge: string; 14 | badgeBackgroundColor: string; 15 | setViewBadge(bottomBar?: BottomNavigationViewType, context?: any): void; 16 | createViewBadge(bottomBar: BottomNavigationViewType, context: any): Label; 17 | } 18 | -------------------------------------------------------------------------------- /src/bottombar-item/android/bottombar-item.ts: -------------------------------------------------------------------------------- 1 | import { Label } from 'tns-core-modules/ui/label/label'; 2 | import { Color } from 'tns-core-modules/color/color'; 3 | 4 | import { BottomBarItemBase } from '../bottombar-item.base'; 5 | import { MenuItemType } from '../../bottombar.android'; 6 | import { BottomNavigationViewType } from '../../bottombar/android/bottombar'; 7 | import { createIconsStateListDrawable } from '../../utils/android/utils'; 8 | 9 | export class BottomBarItem extends BottomBarItemBase { 10 | nativeView: MenuItemType; 11 | _badgeView: Label; 12 | get android(): MenuItemType { 13 | return this.nativeView; 14 | } 15 | 16 | initNativeView() { 17 | // calling setNativeView triggers the 18 | // error 'nativeViewProtected.isClickable is not a function' 19 | this.nativeViewProtected.isClickable = () => true; 20 | super.initNativeView(); 21 | } 22 | 23 | set icon(image: string) { 24 | if (this._icon !== image) { 25 | this._icon = image; 26 | if (this.nativeView) { 27 | this.nativeView 28 | .setIcon(createIconsStateListDrawable(this._icon, this._checkedIcon)); 29 | } 30 | } 31 | } 32 | 33 | set title(value: string) { 34 | if (this._title !== value) { 35 | this._title = value; 36 | if (this.nativeView) { 37 | this.nativeView.setTitle(this._title); 38 | } 39 | } 40 | } 41 | 42 | set checkedIcon(image: string) { 43 | if (this._checkedIcon !== image) { 44 | this._checkedIcon = image; 45 | if (this.nativeView) { 46 | this.nativeView 47 | .setIcon(createIconsStateListDrawable(this._icon, this._checkedIcon)); 48 | } 49 | } 50 | } 51 | 52 | set badge(value: string) { 53 | if (this._badge !== value) { 54 | this._badge = value; 55 | this.setViewBadge(); 56 | } 57 | } 58 | 59 | set badgeBackgroundColor(color: string) { 60 | if (this._badgeBackgroundColor !== color) { 61 | this._badgeBackgroundColor = color; 62 | this.setViewBadge(); 63 | } 64 | } 65 | 66 | 67 | setViewBadge(bottomBar?: BottomNavigationViewType, context?: any) { 68 | if (!this._badgeView) { 69 | if (bottomBar && context) { 70 | this._badgeView = this.createViewBadge(bottomBar, context); 71 | } 72 | } else { 73 | if (this._badge) { 74 | this._badgeView.text = this._badge; 75 | if (this._badgeView.visibility === 'hidden') { 76 | this._badgeView.visibility = 'visible'; 77 | } 78 | } else { 79 | this._badgeView.visibility = 'hidden'; 80 | } 81 | 82 | if (this._badgeBackgroundColor) { 83 | this._badgeView.backgroundColor = this._badgeBackgroundColor; 84 | } 85 | } 86 | } 87 | 88 | createViewBadge(bottomBar: BottomNavigationViewType, context: any): Label { 89 | const textView = new Label(); 90 | textView.text = this._badge ? this._badge : ''; 91 | textView.textAlignment = textView.horizontalAlignment = 'center'; 92 | textView.fontSize = 8; 93 | textView.color = new Color('white'); 94 | textView.backgroundColor = this._badgeBackgroundColor 95 | ? this._badgeBackgroundColor 96 | : 'red'; 97 | textView.borderRadius = '10'; 98 | textView.width = 13; 99 | textView.height = 13; 100 | textView.marginLeft = 10; 101 | textView.marginTop = 5; 102 | textView._setupUI(context); 103 | textView.onLoaded(); 104 | 105 | const itemView = (bottomBar.getChildAt(0) as any) 106 | .getChildAt(this.index); 107 | 108 | itemView.addView(textView.android); 109 | 110 | return textView; 111 | } 112 | } -------------------------------------------------------------------------------- /src/bottombar-item/bottombar-item.base.d.ts: -------------------------------------------------------------------------------- 1 | import { View } from 'tns-core-modules/ui/core/view'; 2 | export declare class BottomBarItemBase extends View { 3 | index?: number; 4 | _title: string; 5 | readonly title: string; 6 | _badge: string; 7 | readonly badge: string; 8 | _icon: string; 9 | readonly icon: string; 10 | _checkedIcon?: string; 11 | readonly checkedIcon: string; 12 | _badgeBackgroundColor?: string; 13 | readonly badgeBackgroundColor: string; 14 | } 15 | -------------------------------------------------------------------------------- /src/bottombar-item/bottombar-item.base.ts: -------------------------------------------------------------------------------- 1 | import { View } from 'tns-core-modules/ui/core/view'; 2 | 3 | export class BottomBarItemBase extends View { 4 | index?: number; 5 | 6 | _title: string; 7 | get title(): string { 8 | return this._title; 9 | } 10 | 11 | _badge: string; 12 | get badge(): string { 13 | return this._badge; 14 | } 15 | 16 | _icon: string; 17 | get icon(): string { 18 | return this._icon; 19 | } 20 | 21 | _checkedIcon?: string; 22 | get checkedIcon(): string { 23 | return this._checkedIcon; 24 | } 25 | 26 | _badgeBackgroundColor?: string; 27 | get badgeBackgroundColor(): string { 28 | return this._badgeBackgroundColor; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/bottombar-item/ios/bottombar-item.d.ts: -------------------------------------------------------------------------------- 1 | import { BottomBarItemBase } from '../bottombar-item.base'; 2 | export declare class BottomBarItem extends BottomBarItemBase { 3 | nativeView: UITabBarItem; 4 | readonly ios: UITabBarItem; 5 | icon: string; 6 | title: string; 7 | checkedIcon: string; 8 | badge: string; 9 | badgeBackgroundColor: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/bottombar-item/ios/bottombar-item.ts: -------------------------------------------------------------------------------- 1 | import { Color } from 'tns-core-modules/color/color'; 2 | 3 | import { BottomBarItemBase } from '../bottombar-item.base'; 4 | import { imageConverter } from '../../utils/utils.common'; 5 | 6 | export class BottomBarItem extends BottomBarItemBase { 7 | nativeView: UITabBarItem; 8 | 9 | get ios(): UITabBarItem { 10 | return this.nativeView; 11 | } 12 | 13 | set icon(image: string) { 14 | if (this._icon !== image) { 15 | this._icon = image; 16 | if (this.nativeView) { 17 | this.nativeView.image = imageConverter(this._icon).ios; 18 | } 19 | } 20 | } 21 | 22 | set title(value: string) { 23 | if (this._title !== value) { 24 | this._title = value; 25 | if (this.nativeView) { 26 | this.nativeView.title = this._title; 27 | } 28 | } 29 | } 30 | 31 | set checkedIcon(image: string) { 32 | if (this._checkedIcon !== image) { 33 | this._checkedIcon = image; 34 | if (this.nativeView) { 35 | this.nativeView.selectedImage = imageConverter(this._checkedIcon).ios; 36 | } 37 | } 38 | } 39 | 40 | set badge(value: string) { 41 | if (this._badge !== value) { 42 | this._badge = value; 43 | if (this.nativeView) { 44 | // Need to be null to remove badge 45 | this.nativeView.badgeValue = this._badge === '' 46 | ? null 47 | : this._badge; 48 | } 49 | } 50 | } 51 | 52 | set badgeBackgroundColor(color: string) { 53 | if (this._badgeBackgroundColor !== color) { 54 | this._badgeBackgroundColor = color; 55 | if (this.nativeView) { 56 | this.nativeView.badgeColor = new Color(color).ios; 57 | } 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /src/bottombar.android.ts: -------------------------------------------------------------------------------- 1 | export * from './bottombar-item/bottombar-item.base'; 2 | export * from './bottombar-item/android/bottombar-item'; 3 | 4 | export * from './bottombar/bottombar.common'; 5 | export * from './bottombar/bottombar.base'; 6 | export * from './bottombar/android/bottombar'; -------------------------------------------------------------------------------- /src/bottombar.ios.ts: -------------------------------------------------------------------------------- 1 | export * from './bottombar-item/bottombar-item.base'; 2 | export * from './bottombar-item/ios/bottombar-item'; 3 | 4 | export * from './bottombar/bottombar.common'; 5 | export * from './bottombar/bottombar.base'; 6 | export * from './bottombar/ios/bottombar'; 7 | -------------------------------------------------------------------------------- /src/bottombar/android/bottombar.d.ts: -------------------------------------------------------------------------------- 1 | import { BottomBarBase } from '../bottombar.base'; 2 | import { BottomBarItem } from '../../bottombar-item/android/bottombar-item'; 3 | export declare type BottomNavigationViewType = android.support.design.widget.BottomNavigationView; 4 | export declare type MenuItemType = android.view.MenuItem; 5 | export declare type MenuType = android.view.Menu; 6 | export declare class BottomBar extends BottomBarBase { 7 | nativeView: BottomNavigationViewType; 8 | _items: BottomBarItem[]; 9 | readonly android: globalAndroid.support.design.widget.BottomNavigationView; 10 | createNativeView(): BottomNavigationViewType; 11 | _addChildFromBuilder(name: string, value: BottomBarItem): void; 12 | private createItem(item, id, bottomBar); 13 | protected createItems(bottomNavigationView: BottomNavigationViewType): void; 14 | private createBadges(bottomNavigationView); 15 | private setItemsColorStateList(activeTintColor, inactiveTintColor, bottomBarValue?); 16 | onTabSelected(index: number): void; 17 | private getItemByIndex(index); 18 | selectItem(index: number): void; 19 | } 20 | -------------------------------------------------------------------------------- /src/bottombar/bottombar.base.d.ts: -------------------------------------------------------------------------------- 1 | import { CssProperty, Style, Color, AddChildFromBuilder, Property, View } from 'tns-core-modules/ui/core/view'; 2 | import { BottomBarItemBase } from '../bottombar-item/bottombar-item.base'; 3 | import { LABEL_VISIBILITY } from './bottombar.common'; 4 | export declare namespace knownCollections { 5 | const items = "items"; 6 | } 7 | export declare abstract class BottomBarBase extends View implements AddChildFromBuilder { 8 | protected _items: BottomBarItemBase[]; 9 | readonly items: BottomBarItemBase[]; 10 | selectedIndex: number; 11 | inactiveTintColor: Color; 12 | activeTintColor: Color; 13 | barBackgroundColor: Color; 14 | constructor(); 15 | abstract _addChildFromBuilder(name: string, value: BottomBarItemBase): void; 16 | abstract selectItem(index: number): void; 17 | onTabSelected(newIndex: number): void; 18 | } 19 | export declare const items: Property; 20 | export declare const androidLabelVisibility: Property; 21 | declare module 'tns-core-modules/ui/styling/style' { 22 | interface Style { 23 | inactiveTintColor: Color; 24 | barBackgroundColor: Color; 25 | activeTintColor: Color; 26 | } 27 | } 28 | export declare const inactiveTintColor: CssProperty; 29 | export declare const barBackgroundColor: CssProperty; 30 | export declare const activeTintColor: CssProperty; 31 | -------------------------------------------------------------------------------- /src/bottombar/bottombar.base.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CssProperty, 3 | Style, 4 | Color, 5 | AddChildFromBuilder, 6 | Property, 7 | View, 8 | CSSType, 9 | isAndroid 10 | } from 'tns-core-modules/ui/core/view'; 11 | import { BottomBarItemBase } from '../bottombar-item/bottombar-item.base'; 12 | import { colorConverter } from '../utils/utils.common'; 13 | import { TabSelectedEventData, LABEL_VISIBILITY } from './bottombar.common'; 14 | 15 | export namespace knownCollections { 16 | export const items = 'items'; 17 | } 18 | 19 | @CSSType('BottomBar') 20 | export abstract class BottomBarBase extends View implements AddChildFromBuilder { 21 | 22 | protected _items: BottomBarItemBase[]; 23 | get items(): BottomBarItemBase[] { 24 | return this._items; 25 | } 26 | 27 | selectedIndex: number; 28 | 29 | get inactiveTintColor(): Color { 30 | return this.style.inactiveTintColor; 31 | } 32 | 33 | set inactiveTintColor(color: Color) { 34 | this.style.inactiveTintColor = color; 35 | } 36 | 37 | get activeTintColor(): Color { 38 | return this.style.activeTintColor; 39 | } 40 | 41 | set activeTintColor(color: Color) { 42 | this.style.activeTintColor = color; 43 | } 44 | 45 | get barBackgroundColor(): Color { 46 | return this.style.barBackgroundColor; 47 | } 48 | 49 | set barBackgroundColor(color: Color) { 50 | this.style.barBackgroundColor = color; 51 | } 52 | 53 | constructor() { 54 | super(); 55 | this.selectedIndex = 0; 56 | this._items = []; 57 | } 58 | 59 | 60 | public abstract _addChildFromBuilder(name: string, value: BottomBarItemBase): void; 61 | 62 | public abstract selectItem(index: number): void; 63 | 64 | public onTabSelected(newIndex: number): void { 65 | const oldIndex = this.selectedIndex; 66 | this.selectedIndex = newIndex; 67 | this.notify({ 68 | eventName: 'tabSelected', 69 | object: this, 70 | oldIndex: oldIndex, 71 | newIndex: this.selectedIndex 72 | }); 73 | } 74 | } 75 | 76 | /** 77 | * Properties 78 | */ 79 | export const items = new Property({ 80 | name: 'items', 81 | affectsLayout: true, 82 | defaultValue: [] 83 | }); 84 | items.register(BottomBarBase); 85 | 86 | export const androidLabelVisibility = new Property({ 87 | name: 'androidLabelVisibility', 88 | equalityComparer: (oldValue: LABEL_VISIBILITY, newValue: LABEL_VISIBILITY) => oldValue === newValue, 89 | affectsLayout: isAndroid, 90 | defaultValue: LABEL_VISIBILITY.AUTO 91 | }); 92 | androidLabelVisibility.register(BottomBarBase); 93 | /** 94 | * CSS Properties 95 | */ 96 | declare module 'tns-core-modules/ui/styling/style' { 97 | interface Style { 98 | inactiveTintColor: Color; 99 | barBackgroundColor: Color; 100 | activeTintColor: Color; 101 | } 102 | } 103 | 104 | export const inactiveTintColor = new CssProperty({ 105 | name: 'inactiveTintColor', 106 | cssName: 'inactive-tint-color', 107 | defaultValue: new Color('#d3d3d3'), 108 | valueConverter: colorConverter, 109 | equalityComparer: Color.equals 110 | }); 111 | inactiveTintColor.register(Style); 112 | 113 | export const barBackgroundColor = new CssProperty({ 114 | name: 'barBackgroundColor', 115 | cssName: 'bar-background-color', 116 | defaultValue: new Color('white'), 117 | valueConverter: colorConverter, 118 | equalityComparer: Color.equals 119 | }); 120 | barBackgroundColor.register(Style); 121 | 122 | export const activeTintColor = new CssProperty({ 123 | name: 'activeTintColor', 124 | cssName: 'active-tint-color', 125 | defaultValue: new Color('#000000'), 126 | valueConverter: colorConverter, 127 | equalityComparer: Color.equals 128 | }); 129 | activeTintColor.register(Style); -------------------------------------------------------------------------------- /src/bottombar/bottombar.common.d.ts: -------------------------------------------------------------------------------- 1 | import { EventData } from 'tns-core-modules/ui/core/view/view'; 2 | export interface TabSelectedEventData extends EventData { 3 | oldIndex: number; 4 | newIndex: number; 5 | } 6 | export declare enum LABEL_VISIBILITY { 7 | AUTO = -1, 8 | LABELED = 1, 9 | SELECTED = 0, 10 | UNLABELED = 2, 11 | } 12 | -------------------------------------------------------------------------------- /src/bottombar/bottombar.common.ts: -------------------------------------------------------------------------------- 1 | import { EventData } from 'tns-core-modules/ui/core/view/view'; 2 | 3 | export interface TabSelectedEventData extends EventData { 4 | oldIndex: number; 5 | newIndex: number; 6 | } 7 | 8 | // https://developer.android.com/reference/com/google/android/material/bottomnavigation/LabelVisibilityMode.html#LABEL_VISIBILITY_AUTO 9 | export enum LABEL_VISIBILITY { 10 | AUTO = -1, 11 | LABELED = 1, 12 | SELECTED = 0, 13 | UNLABELED = 2 14 | } -------------------------------------------------------------------------------- /src/bottombar/ios/bottombar.d.ts: -------------------------------------------------------------------------------- 1 | import { BottomBarBase } from '../bottombar.base'; 2 | import { BottomBarItem } from '../../bottombar-item/ios/bottombar-item'; 3 | export declare class BottomBarControllerDelegate extends NSObject implements UITabBarControllerDelegate { 4 | static ObjCProtocols: { 5 | prototype: UITabBarControllerDelegate; 6 | }[]; 7 | private _owner; 8 | static initWithOwner(owner: WeakRef): BottomBarControllerDelegate; 9 | tabBarControllerDidSelectViewController(tabBarController: UITabBarController, viewController: UIViewController): void; 10 | } 11 | export declare class BottomBar extends BottomBarBase { 12 | _tabBarController: UITabBarController; 13 | private _delegate; 14 | _items: BottomBarItem[]; 15 | nativeView: UITabBar; 16 | readonly ios: UITabBar; 17 | createNativeView(): UITabBar; 18 | _addChildFromBuilder(name: string, value: BottomBarItem): void; 19 | initNativeView(): void; 20 | private setViewControllers(); 21 | private createItem(value, id); 22 | private createItemViewController(item, id); 23 | onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void; 24 | selectItem(index: number): void; 25 | } 26 | -------------------------------------------------------------------------------- /src/e2e/bottombar.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { AppiumDriver, createDriver, SearchOptions } from "nativescript-dev-appium"; 2 | import { assert } from "chai"; 3 | import { runType, isSauceLab } from "nativescript-dev-appium/lib/parser"; 4 | 5 | const isSauceRun = isSauceLab; 6 | const isAndroid: Boolean = runType.includes("android"); 7 | 8 | describe("Bottom bar", () => { 9 | const defaultWaitTime = 15000; 10 | let driver: AppiumDriver; 11 | let bottomBar; 12 | const items = []; 13 | 14 | before(async () => { 15 | driver = await createDriver(); 16 | driver.defaultWaitTime = defaultWaitTime; 17 | }); 18 | 19 | after(async () => { 20 | if (isSauceRun) { 21 | driver.sessionId().then(function (sessionId) { 22 | console.log("Report: https://saucelabs.com/beta/tests/" + sessionId); 23 | }); 24 | } 25 | await driver.quit(); 26 | console.log("Driver successfully quit"); 27 | }); 28 | 29 | afterEach(async function () { 30 | if (this.currentTest.state === "failed") { 31 | await driver.logTestArtifacts(this.currentTest.title); 32 | } 33 | }); 34 | 35 | it("should find the bottombar", async () => { 36 | bottomBar = await driver.findElementByAccessibilityId("bottomBar", SearchOptions.exact); 37 | assert.exists(bottomBar); 38 | }); 39 | 40 | it('should have 3 child', async() => { 41 | for (let i = 1; i < 4; i++) { 42 | items.push( 43 | await driver.findElementByAccessibilityId(`bottomBarItem${i}`, SearchOptions.exact) 44 | ); 45 | } 46 | assert.equal(items.length, 3); 47 | }); 48 | }); -------------------------------------------------------------------------------- /src/e2e/config/appium.capabilities.json: -------------------------------------------------------------------------------- 1 | { 2 | "android19": { 3 | "platformName": "Android", 4 | "platformVersion": "4.4", 5 | "deviceName": "Emulator-Api19-Default", 6 | "avd": "Emulator-Api19-Default", 7 | "lt": 60000, 8 | "newCommandTimeout": 720, 9 | "noReset": true, 10 | "fullReset": false, 11 | "app": "" 12 | }, 13 | "android21": { 14 | "platformName": "Android", 15 | "platformVersion": "5.0", 16 | "deviceName": "Emulator-Api21-Default", 17 | "avd": "Emulator-Api21-Default", 18 | "lt": 60000, 19 | "newCommandTimeout": 720, 20 | "noReset": true, 21 | "fullReset": false, 22 | "app": "" 23 | }, 24 | "android23": { 25 | "platformName": "Android", 26 | "platformVersion": "6.0", 27 | "deviceName": "Emulator-Api23-Default", 28 | "avd": "Emulator-Api23-Default", 29 | "lt": 60000, 30 | "newCommandTimeout": 720, 31 | "noReset": true, 32 | "fullReset": false, 33 | "app": "" 34 | }, 35 | "android24": { 36 | "platformName": "Android", 37 | "platformVersion": "7.0", 38 | "deviceName": "Emulator-Api24-Default", 39 | "avd": "Emulator-Api24-Default", 40 | "lt": 60000, 41 | "newCommandTimeout": 720, 42 | "noReset": true, 43 | "fullReset": false, 44 | "app": "" 45 | }, 46 | "sauce.android24": { 47 | "platformName": "Android", 48 | "platformVersion": "7.0", 49 | "deviceName": "Google Pixel GoogleAPI Emulator", 50 | "appium-version": "1.7.1", 51 | "app": "" 52 | }, 53 | "android25": { 54 | "platformName": "Android", 55 | "platformVersion": "7.1", 56 | "deviceName": "Emulator-Api25-Google", 57 | "avd": "Emulator-Api25-Google", 58 | "lt": 60000, 59 | "newCommandTimeout": 720, 60 | "noReset": true, 61 | "fullReset": false, 62 | "app": "" 63 | }, 64 | "android26": { 65 | "platformName": "Android", 66 | "platformVersion": "8.0", 67 | "deviceName": "Pixel_API_26", 68 | "avd": "Pixel_API_26", 69 | "lt": 60000, 70 | "newCommandTimeout": 720, 71 | "noReset": true, 72 | "fullReset": false, 73 | "app": "" 74 | }, 75 | "android27": { 76 | "platformName": "Android", 77 | "platformVersion": "27", 78 | "deviceName": "Emulator-Api27-Google", 79 | "avd": "Emulator-Api27-Google", 80 | "lt": 60000, 81 | "newCommandTimeout": 720, 82 | "noReset": true, 83 | "fullReset": false, 84 | "app": "" 85 | }, 86 | "sim.iPhone6.121": { 87 | "platformName": "iOS", 88 | "platformVersion": "12.1", 89 | "deviceName": "iPhone 6", 90 | "noReset": true, 91 | "fullReset": false, 92 | "app": "" 93 | }, 94 | "sauce.iPhone6.110": { 95 | "platformName": "iOS", 96 | "platformVersion": "11.0", 97 | "deviceName": "iPhone 6 Simulator", 98 | "appium-version": "1.7.1", 99 | "app": "" 100 | }, 101 | "sim.iPhone7.100": { 102 | "platformName": "iOS", 103 | "platformVersion": "10.0", 104 | "deviceName": "iPhone 7", 105 | "noReset": true, 106 | "fullReset": false, 107 | "app": "" 108 | }, 109 | "sim.iPhone7.iOS110": { 110 | "platformName": "iOS", 111 | "platformVersion": "11.0", 112 | "deviceName": "iPhone 7 110", 113 | "noReset": true, 114 | "fullReset": false, 115 | "app": "" 116 | }, 117 | "sim.iPhone8": { 118 | "platformName": "iOS", 119 | "platformVersion": "11.3", 120 | "deviceName": "iPhone 8", 121 | "noReset": true, 122 | "fullReset": false, 123 | "app": "" 124 | }, 125 | "sim.iPhoneX": { 126 | "platformName": "iOS", 127 | "platformVersion": "11.3", 128 | "deviceName": "iPhone X", 129 | "noReset": true, 130 | "fullReset": false, 131 | "app": "" 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /src/e2e/config/mocha.opts: -------------------------------------------------------------------------------- 1 | --timeout 999999 2 | --recursive e2e 3 | --reporter mocha-multi 4 | --reporter-options spec=-,mocha-junit-reporter=test-results.xml 5 | --exit -------------------------------------------------------------------------------- /src/e2e/setup.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /src/e2e/setup.ts: -------------------------------------------------------------------------------- 1 | import { startServer, stopServer } from "nativescript-dev-appium"; 2 | 3 | before("start server", async () => { 4 | await startServer(); 5 | }); 6 | 7 | after("stop server", async () => { 8 | await stopServer(); 9 | }); 10 | -------------------------------------------------------------------------------- /src/e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "experimentalDecorators": true, 6 | "emitDecoratorMetadata": true, 7 | "importHelpers": false, 8 | "types": [ 9 | "node", 10 | "mocha", 11 | "chai" 12 | ], 13 | "lib": [ 14 | "es2015", 15 | "dom" 16 | ] 17 | } 18 | } -------------------------------------------------------------------------------- /src/index.d.ts: -------------------------------------------------------------------------------- 1 | import { View, ViewBase, Observable, AddChildFromBuilder, EventData } from 'tns-core-modules/ui/core/view'; 2 | import { Color } from 'tns-core-modules/color/color'; 3 | import { ImageSource } from 'tns-core-modules/image-source/image-source'; 4 | 5 | export declare class BottomBarItem extends View { 6 | index?: number; 7 | nativeView: any; 8 | readonly ios: any; 9 | readonly android: any; 10 | icon: string; 11 | title: string; 12 | checkedIcon: string; 13 | badge: string; 14 | badgeBackgroundColor: string; 15 | initNativeView(): void; 16 | } 17 | 18 | export declare class BottomBar extends View implements AddChildFromBuilder { 19 | items: BottomBarItem[]; 20 | selectedIndex: number; 21 | inactiveTintColor: Color; 22 | activeTintColor: Color; 23 | barBackgroundColor: Color; 24 | onTabSelected(newIndex: number): void; 25 | _addChildFromBuilder(name: string, value: BottomBarItem): void; 26 | selectItem(index: number): void; 27 | nativeView: any; 28 | readonly ios: any; 29 | readonly android: any; 30 | } 31 | 32 | export declare enum LABEL_VISIBILITY { 33 | AUTO = -1, 34 | LABELED = 1, 35 | SELECTED = 0, 36 | UNLABELED = 2, 37 | } 38 | 39 | export interface TabSelectedEventData extends EventData { 40 | oldIndex: number; 41 | newIndex: number; 42 | } 43 | -------------------------------------------------------------------------------- /src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nativescript-bottombar", 3 | "version": "4.0.0-rc1.2", 4 | "description": "NativeScript plugin to integrate a bottom navigation menu easily", 5 | "typings": "index.d.ts", 6 | "main": "bottombar", 7 | "nativescript": { 8 | "platforms": { 9 | "android": "4.0.0", 10 | "ios": "4.0.0" 11 | }, 12 | "plugin": { 13 | "nan": "true", 14 | "pan": "true", 15 | "core3": "true", 16 | "vue": "true", 17 | "webpack": "true", 18 | "category": "Developer" 19 | } 20 | }, 21 | "scripts": { 22 | "tsc": "tsc && cd angular && tsc", 23 | "build": "npm run tsc && npm run build.native", 24 | "build.ci": "npm run clean.ci && npm run build", 25 | "build.native": "node scripts/build-native.js", 26 | "build.ci.iosOnly": "npm run clean.ci && tsc", 27 | "postclone": "npm i && node scripts/postclone.js && cd ../demo && npm i && npx rimraf -- package-lock.json && cd ../src", 28 | "test.android": "npm run tsc && npm run tslint && cd ../demo && npm run clean && tns build android && tns test android --justlaunch", 29 | "test.ci.android": "npm run clean.ci && npm run test.android", 30 | "test.ios": "npm run tsc && npm run tslint && cd ../demo && npm run clean && tns build ios && tns test ios --justlaunch", 31 | "test.ci.ios": "npm run clean.ci && npm run test.ios", 32 | "tslint": "cd .. && tslint \"**/*.ts\" --config tslint.json", 33 | "plugin.tscwatch": "npm run tsc -- -w", 34 | "demo.ios": "npm run tsc && cd ../demo && tns run ios --syncAllFiles --emulator", 35 | "demo.ng.ios": "npm run tsc && cd ../demo-ng && tns run ios --syncAllFiles --emulator", 36 | "demo.vue.ios": "npm run tsc && cd ../demo-vue && tns run ios --syncAllFiles --emulator --bundle", 37 | "demo.android": "npm run tsc && cd ../demo && tns run android --syncAllFiles --emulator", 38 | "demo.ng.android": "npm run tsc && cd ../demo-ng && tns run android --syncAllFiles --emulator", 39 | "demo.vue.android": "npm run tsc && cd ../demo-ng && tns run android --syncAllFiles --emulator --bundle", 40 | "demo.reset": "cd ../demo && npx rimraf -- hooks node_modules platforms package-lock.json", 41 | "demo.ng.reset": "cd ../demo-ng && npx rimraf -- hooks node_modules platforms package-lock.json", 42 | "demo.vue.reset": "cd ../demo-vue && npx rimraf -- hooks node_modules platforms package-lock.json", 43 | "plugin.prepare": "npm run build && cd ../demo && tns plugin remove nativescript-bottombar && tns plugin add ../src", 44 | "plugin.ng.prepare": "npm run build && cd ../demo-ng && tns plugin remove nativescript-bottombar && tns plugin add ../src", 45 | "plugin.vue.prepare": "npm run build && cd ../demo-vue && tns plugin remove nativescript-bottombar && tns plugin add ../src", 46 | "clean.ci": "rm package-lock.json && npm i", 47 | "clean": "npm run demo.reset && npx rimraf -- node_modules package-lock.json && npm i", 48 | "clean.ng": "npm run demo.ng.reset && npx rimraf -- node_modules package-lock.json && npm i", 49 | "clean.vue": "npm run demo.ng.reset && npx rimraf -- node_modules package-lock.json && npm i", 50 | "ci.tslint": "npm run clean.ci && tslint '**/*.ts' --config '../tslint.json'", 51 | "prepack": "npm run build.native", 52 | "e2e": "tsc -p e2e && mocha --opts ./e2e/config/mocha.opts", 53 | "e2e-watch": "tsc -p e2e --watch" 54 | }, 55 | "keywords": [ 56 | "NativeScript", 57 | "JavaScript", 58 | "TypeScript", 59 | "Android", 60 | "iOS", 61 | "BottomNavigationView", 62 | "UITabBar", 63 | "BottomBar", 64 | "Angular", 65 | "Vue", 66 | "Material design", 67 | "bottom navigation", 68 | "tab navigation" 69 | ], 70 | "author": { 71 | "name": "Jean-Baptiste Aniel", 72 | "email": "aniel.jeanbaptiste@gmail.com" 73 | }, 74 | "bugs": { 75 | "url": "https://github.com/rhanb/nativescript-bottombar/issues" 76 | }, 77 | "license": "Apache-2.0", 78 | "homepage": "https://github.com/rhanb/nativescript-bottombar", 79 | "readmeFilename": "README.md", 80 | "devDependencies": { 81 | "@angular/core": "^7.1.0", 82 | "@types/chai": "~4.1.3", 83 | "@types/mocha": "~5.2.1", 84 | "@types/node": "^7.0.5", 85 | "mocha": "^5.2.0", 86 | "nativescript-angular": "^7.0.2", 87 | "nativescript-dev-appium": "^4.0.9", 88 | "prompt": "^1.0.0", 89 | "rimraf": "^2.6.2", 90 | "semver": "^5.6.0", 91 | "tns-core-modules": "^5.0.1", 92 | "tns-platform-declarations": "^5.0.0", 93 | "tslint": "^5.11.0", 94 | "typescript": "~2.8.2" 95 | }, 96 | "dependencies": {}, 97 | "bootstrapper": "nativescript-plugin-seed" 98 | } 99 | -------------------------------------------------------------------------------- /src/platforms/android/include.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | jcenter() 4 | maven { 5 | url "https://maven.google.com" 6 | } 7 | } 8 | } 9 | 10 | dependencies { 11 | def supportVer = "28.0.0"; 12 | if(project.hasProperty("supportVersion")) { 13 | supportVer = supportVersion 14 | } 15 | implementation "com.android.support:design:$supportVer" 16 | } -------------------------------------------------------------------------------- /src/references.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /src/screenshots/ressources.android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/src/screenshots/ressources.android.png -------------------------------------------------------------------------------- /src/screenshots/ressources.ios.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/src/screenshots/ressources.ios.png -------------------------------------------------------------------------------- /src/screenshots/showcase.android.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/src/screenshots/showcase.android.gif -------------------------------------------------------------------------------- /src/screenshots/showcase.ios.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rhanb/nativescript-bottombar/d5261332c809c524c7c937b4193de891a232b27c/src/screenshots/showcase.ios.gif -------------------------------------------------------------------------------- /src/scripts/build-native.js: -------------------------------------------------------------------------------- 1 | const { exec } = require('child_process'); 2 | const semver = require('semver'); 3 | 4 | exec('tns --version', (err, stdout, stderr) => { 5 | if (err) { 6 | // node couldn't execute the command 7 | console.log(`tns --version err: ${err}`); 8 | return; 9 | } 10 | 11 | const tnsVersion = semver.major(stdout); 12 | 13 | // execute 'tns plugin build' for {N} version > 4. This command builds .aar in platforms/android folder. 14 | if (tnsVersion >= 4) { 15 | console.log(`executing 'tns plugin build'`); 16 | exec('tns plugin build', (err, stdout, stderr) => { 17 | if (err) { 18 | // node couldn't execute the command 19 | console.log(`${err}`); 20 | return; 21 | } 22 | }); 23 | } 24 | }); 25 | -------------------------------------------------------------------------------- /src/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "declaration": true, 6 | "removeComments": true, 7 | "noLib": false, 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "skipLibCheck": true, 11 | "lib": ["es6", "dom"], 12 | "sourceMap": true, 13 | "pretty": true, 14 | "allowUnreachableCode": false, 15 | "allowUnusedLabels": false, 16 | "noEmitHelpers": true, 17 | "noEmitOnError": false, 18 | "noImplicitAny": false, 19 | "noImplicitReturns": true, 20 | "noImplicitUseStrict": false, 21 | "noFallthroughCasesInSwitch": true 22 | }, 23 | "exclude": [ 24 | "node_modules", 25 | "e2e" 26 | ], 27 | "files": [ 28 | "node_modules/tns-platform-declarations/android.d.ts", 29 | "node_modules/tns-platform-declarations/ios.d.ts", 30 | "./utils/utils.common.ts", 31 | "./utils/android/utils.ts", 32 | "./bottombar/bottombar.common.ts", 33 | "./bottombar/bottombar.base.ts", 34 | "./bottombar/ios/bottombar.ts", 35 | "./bottombar/android/bottombar.ts", 36 | "./bottombar-item/bottombar-item.base.ts", 37 | "./bottombar-item/ios/bottombar-item.ts", 38 | "./bottombar-item/android/bottombar-item.ts", 39 | "./bottombar.android.ts", 40 | "./bottombar.ios.ts" 41 | ], 42 | "compileOnSave": false 43 | } 44 | -------------------------------------------------------------------------------- /src/utils/android/utils.d.ts: -------------------------------------------------------------------------------- 1 | export declare type StateListDrawableType = android.graphics.drawable.StateListDrawable; 2 | export declare function createIconsStateListDrawable(icon: string, checkedIcon?: string): StateListDrawableType; 3 | -------------------------------------------------------------------------------- /src/utils/android/utils.ts: -------------------------------------------------------------------------------- 1 | import { imageConverter } from "../utils.common"; 2 | 3 | export declare type StateListDrawableType = android.graphics.drawable.StateListDrawable; 4 | 5 | const { StateListDrawable } = android.graphics.drawable; 6 | const { BitmapDrawable } = android.graphics.drawable; 7 | 8 | // avoid cond redidunsy between item and bar 9 | export function createIconsStateListDrawable(icon: string, checkedIcon?: string): StateListDrawableType { 10 | const statesListIconDrawable = new StateListDrawable(); 11 | 12 | const defaultIconState = Array.create('int', 1); 13 | defaultIconState[0] = -android.R.attr.state_checked; 14 | 15 | statesListIconDrawable.addState( 16 | defaultIconState, 17 | new BitmapDrawable(imageConverter(icon).android) 18 | ); 19 | 20 | if (checkedIcon) { 21 | const iconCheckedState = Array.create('int', 1); 22 | iconCheckedState[0] = android.R.attr.state_checked; 23 | 24 | statesListIconDrawable.addState( 25 | iconCheckedState, 26 | new BitmapDrawable(imageConverter(checkedIcon).android) 27 | ); 28 | 29 | } 30 | 31 | return statesListIconDrawable; 32 | } -------------------------------------------------------------------------------- /src/utils/utils.common.d.ts: -------------------------------------------------------------------------------- 1 | import { Color } from "tns-core-modules/ui/core/view/view"; 2 | import { ImageSource } from "tns-core-modules/image-source/image-source"; 3 | export declare function colorConverter(colorValue: string): Color; 4 | export declare class FileNotFoundError extends Error { 5 | constructor(path: string); 6 | } 7 | export declare function imageConverter(pathValue: string): ImageSource; 8 | -------------------------------------------------------------------------------- /src/utils/utils.common.ts: -------------------------------------------------------------------------------- 1 | import { Color } from "tns-core-modules/ui/core/view/view"; 2 | import { ImageSource, fromFileOrResource } from "tns-core-modules/image-source/image-source"; 3 | import { isFileOrResourcePath } from "tns-core-modules/utils/utils"; 4 | 5 | export function colorConverter(colorValue: string): Color { 6 | return new Color(colorValue); 7 | } 8 | 9 | export class FileNotFoundError extends Error { 10 | constructor(path: string) { 11 | super(); 12 | this.name = 'ResourceNotFound'; 13 | this.message = `Enable to find file: ${path}`; 14 | } 15 | } 16 | 17 | export function imageConverter(pathValue: string): ImageSource { 18 | if (!isFileOrResourcePath(pathValue)) { 19 | throw new FileNotFoundError(pathValue); 20 | } 21 | 22 | return fromFileOrResource(pathValue); 23 | } -------------------------------------------------------------------------------- /src/vue/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | register(Vue) { 3 | Vue.registerElement('BottomBar', () => require('../').BottomBar); 4 | Vue.registerElement('BottomBarItem', () => require('../').BottomBarItem); 5 | } 6 | }; 7 | -------------------------------------------------------------------------------- /src/vue/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "index" 3 | } -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "class-name": true, 4 | "comment-format": [ 5 | true, 6 | "check-space" 7 | ], 8 | "indent": [ 9 | true, 10 | "spaces" 11 | ], 12 | "no-duplicate-variable": true, 13 | "no-eval": true, 14 | "no-internal-module": true, 15 | "no-trailing-whitespace": true, 16 | "no-var-keyword": true, 17 | "one-line": [ 18 | true, 19 | "check-open-brace", 20 | "check-whitespace" 21 | ], 22 | "quotemark": [ 23 | false, 24 | "double" 25 | ], 26 | "semicolon": [ 27 | true, 28 | "always" 29 | ], 30 | "triple-equals": [ 31 | true, 32 | "allow-null-check" 33 | ], 34 | "typedef-whitespace": [ 35 | true, 36 | { 37 | "call-signature": "nospace", 38 | "index-signature": "nospace", 39 | "parameter": "nospace", 40 | "property-declaration": "nospace", 41 | "variable-declaration": "nospace" 42 | } 43 | ], 44 | "variable-name": [ 45 | true, 46 | "ban-keywords" 47 | ], 48 | "whitespace": [ 49 | true, 50 | "check-branch", 51 | "check-decl", 52 | "check-operator", 53 | "check-separator", 54 | "check-type" 55 | ] 56 | }, 57 | "linterOptions": { 58 | "exclude": [ 59 | "**/node_modules/**", 60 | "**/tns_modules/**" 61 | ] 62 | } 63 | } --------------------------------------------------------------------------------