├── home
├── home.component.css
├── home.component.scss
├── tabs
│ ├── tabs.component.css
│ ├── tabs.component.ios.css
│ ├── tabs.component.ios.scss
│ ├── .DS_Store
│ ├── tabs.component.android.css
│ ├── tabs.component.android.scss
│ ├── tabs.component.android.html
│ ├── tabs.component.ios.html
│ ├── tabs.component.ts
│ └── tabs.component.js
├── .DS_Store
├── chats
│ ├── _chats.component.common.scss
│ ├── chats.component.ios.scss
│ ├── chats.component.android.scss
│ ├── chats.component.ts
│ ├── chats.component.html
│ ├── short-when.pipe.ts
│ ├── chats.component.js
│ ├── short-when.pipe.js
│ ├── chats.component.css
│ └── chats.component.ios.css
├── home.component.ts
├── home-routing.module.ts
├── home.module.ts
├── home.component.html
├── home.component.js
├── home-routing.module.js
└── home.module.js
├── app.component.html
├── _app-common.scss
├── chat
├── _chat.component.common.scss
├── chat.component.ios.css
├── message-box
│ ├── _message-box.component.common.scss
│ ├── message-box.component.ts
│ ├── message-box.component.android.scss
│ ├── message-box.component.ios.scss
│ ├── message-box.component.html
│ ├── new-message.component.js
│ └── message-box.component.js
├── chat.component.android.css
├── chat-routing.module.ts
├── chat.component.ios.scss
├── chat.component.android.scss
├── messages-area
│ ├── messages-area.component.html
│ ├── messages-area.component.ts
│ ├── messages-area.component.css
│ ├── messages-area.component.scss
│ └── messages-area.component.js
├── chat.module.ts
├── chat.component.ts
├── chat-routing.module.js
├── chat.component.html
├── chat.module.js
└── chat.component.js
├── core
├── .DS_Store
├── models
│ ├── contact.model.ts
│ ├── sent-status.model.ts
│ ├── chat.model.ts
│ ├── image-message.model.ts
│ ├── message.model.ts
│ ├── contact.model.js
│ ├── chat.model.js
│ ├── sent-status.model.js
│ ├── message.model.js
│ └── image-message.model.js
├── index.ts
├── core.module.ts
├── core.module.js
├── index.js
├── chats.service.ts
└── chats.service.js
├── assets
├── .DS_Store
└── wallpaper.jpg
├── App_Resources
├── .DS_Store
├── iOS
│ ├── .DS_Store
│ ├── Assets.xcassets
│ │ ├── Contents.json
│ │ ├── .DS_Store
│ │ ├── AppIcon.appiconset
│ │ │ ├── .DS_Store
│ │ │ ├── icon.png
│ │ │ ├── icon-120.png
│ │ │ ├── icon-152.png
│ │ │ ├── icon-16.png
│ │ │ ├── icon-167.png
│ │ │ ├── icon-180.png
│ │ │ ├── icon-24.png
│ │ │ ├── icon-32.png
│ │ │ ├── icon-40.png
│ │ │ ├── icon-60.png
│ │ │ ├── icon-64.png
│ │ │ ├── icon-72.png
│ │ │ ├── icon-76.png
│ │ │ ├── icon@2x.png
│ │ │ ├── icon@3x.png
│ │ │ ├── icon-40@2x.png
│ │ │ ├── icon-40@3x.png
│ │ │ ├── icon-60@2x.png
│ │ │ ├── icon-60@3x.png
│ │ │ ├── icon-72@2x.png
│ │ │ ├── icon-76@2x.png
│ │ │ ├── icon-Small.png
│ │ │ ├── icon-Small-40.png
│ │ │ ├── icon-Small-50.png
│ │ │ ├── icon-Small@2x.png
│ │ │ ├── icon-Small@3x.png
│ │ │ ├── icon-Small-40@2x.png
│ │ │ ├── icon-Small-40@3x.png
│ │ │ ├── icon-Small-50@2x.png
│ │ │ └── Contents.json
│ │ ├── LaunchImage.launchimage
│ │ │ ├── Default.png
│ │ │ ├── Default@2x.png
│ │ │ ├── Default-568h@2x.png
│ │ │ ├── Default-667h@2x.png
│ │ │ ├── Default-736h@3x.png
│ │ │ ├── Default-Landscape.png
│ │ │ ├── Default-Portrait.png
│ │ │ ├── Default-Landscape@2x.png
│ │ │ ├── Default-Landscape@3x.png
│ │ │ ├── Default-Portrait@2x.png
│ │ │ └── Contents.json
│ │ ├── LaunchScreen.Center.imageset
│ │ │ ├── LaunchScreen-Center.png
│ │ │ ├── LaunchScreen-Center@2x.png
│ │ │ └── Contents.json
│ │ └── LaunchScreen.AspectFill.imageset
│ │ │ ├── LaunchScreen-AspectFill.png
│ │ │ ├── LaunchScreen-AspectFill@2x.png
│ │ │ └── Contents.json
│ ├── tabs
│ │ ├── .DS_Store
│ │ ├── calls.png
│ │ ├── chats.png
│ │ ├── calls@2x.png
│ │ ├── calls@3x.png
│ │ ├── camera.png
│ │ ├── chats@2x.png
│ │ ├── chats@3x.png
│ │ ├── settings.png
│ │ ├── status.png
│ │ ├── camera@2x.png
│ │ ├── status@2x.png
│ │ ├── status@3x.png
│ │ ├── calls-filled.png
│ │ ├── chats-filled.png
│ │ ├── settings@2x.png
│ │ ├── settings@3x.png
│ │ ├── calls-filled@2x.png
│ │ ├── calls-filled@3x.png
│ │ ├── chats-filled@2x.png
│ │ ├── chats-filled@3x.png
│ │ ├── settings-filled.png
│ │ ├── settings-filled@2x.png
│ │ └── settings-filled@3x.png
│ ├── video-call.png
│ ├── video-call@2x.png
│ ├── video-call@3x.png
│ ├── build.xcconfig
│ ├── Info.plist
│ └── LaunchScreen.storyboard
└── Android
│ ├── .DS_Store
│ ├── values-v21
│ ├── colors.xml
│ └── styles.xml
│ ├── drawable-hdpi
│ ├── .DS_Store
│ ├── icon.png
│ ├── logo.png
│ ├── background.png
│ ├── ic_comment.png
│ ├── ic_arrow_back.png
│ └── ic_photo_camera.png
│ ├── drawable-ldpi
│ ├── .DS_Store
│ ├── icon.png
│ ├── logo.png
│ └── background.png
│ ├── drawable-mdpi
│ ├── .DS_Store
│ ├── icon.png
│ ├── logo.png
│ ├── background.png
│ ├── ic_comment.png
│ ├── ic_arrow_back.png
│ └── ic_photo_camera.png
│ ├── drawable-xhdpi
│ ├── icon.png
│ ├── logo.png
│ ├── .DS_Store
│ ├── background.png
│ ├── ic_comment.png
│ ├── ic_arrow_back.png
│ └── ic_photo_camera.png
│ ├── drawable-xxhdpi
│ ├── .DS_Store
│ ├── icon.png
│ ├── logo.png
│ ├── background.png
│ ├── ic_comment.png
│ ├── ic_arrow_back.png
│ └── ic_photo_camera.png
│ ├── drawable-xxxhdpi
│ ├── icon.png
│ ├── logo.png
│ ├── .DS_Store
│ ├── background.png
│ ├── ic_comment.png
│ ├── ic_arrow_back.png
│ └── ic_photo_camera.png
│ ├── drawable
│ ├── bubble_shadow.9.png
│ ├── bubble_shadow_me.9.png
│ ├── bubble_shadow_continuation.9.png
│ └── bubble_shadow_me_continuation.9.png
│ ├── values
│ ├── colors.xml
│ └── styles.xml
│ ├── drawable-nodpi
│ └── splash_screen.xml
│ ├── app.gradle
│ └── AndroidManifest.xml
├── app.android.scss
├── app.ios.scss
├── app.component.ts
├── _nativesapp.scss
├── main.ts
├── main.aot.ts
├── tslint.json
├── tools
├── tslint.json
├── preinstall.js
└── postinstall.js
├── app-routing.module.ts
├── main.js
├── app.component.js
├── app.module.ts
├── .gitignore
├── package.json
├── app-routing.module.js
├── app.module.js
├── README.md
└── LICENSE
/home/home.component.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/home/home.component.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/home/tabs/tabs.component.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/home/tabs/tabs.component.ios.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/home/tabs/tabs.component.ios.scss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app.component.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/_app-common.scss:
--------------------------------------------------------------------------------
1 | @import 'nativesapp';
2 | @import '~nativescript-theme-core/scss/index';
--------------------------------------------------------------------------------
/chat/_chat.component.common.scss:
--------------------------------------------------------------------------------
1 | .wallpaper {
2 | background-image: url('~/assets/wallpaper.jpg');
3 | }
--------------------------------------------------------------------------------
/core/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/core/.DS_Store
--------------------------------------------------------------------------------
/home/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/home/.DS_Store
--------------------------------------------------------------------------------
/assets/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/assets/.DS_Store
--------------------------------------------------------------------------------
/assets/wallpaper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/assets/wallpaper.jpg
--------------------------------------------------------------------------------
/home/tabs/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/home/tabs/.DS_Store
--------------------------------------------------------------------------------
/core/models/contact.model.ts:
--------------------------------------------------------------------------------
1 | export class Contact {
2 | id?: number;
3 | avatar: string;
4 | name: string;
5 | }
6 |
--------------------------------------------------------------------------------
/App_Resources/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/.DS_Store
--------------------------------------------------------------------------------
/core/models/sent-status.model.ts:
--------------------------------------------------------------------------------
1 | export enum SentStatus {
2 | NOT_SENT,
3 | SENT,
4 | RECEIVED,
5 | VIEWED,
6 | }
7 |
--------------------------------------------------------------------------------
/App_Resources/iOS/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/.DS_Store
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/App_Resources/Android/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/.DS_Store
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/.DS_Store
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/calls.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/calls.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/chats.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/chats.png
--------------------------------------------------------------------------------
/App_Resources/iOS/video-call.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/video-call.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/calls@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/calls@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/calls@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/calls@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/camera.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/chats@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/chats@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/chats@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/chats@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/settings.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/status.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/status.png
--------------------------------------------------------------------------------
/App_Resources/iOS/video-call@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/video-call@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/video-call@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/video-call@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/camera@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/camera@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/status@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/status@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/status@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/status@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/calls-filled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/calls-filled.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/chats-filled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/chats-filled.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/settings@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/settings@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/settings@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/settings@3x.png
--------------------------------------------------------------------------------
/app.android.scss:
--------------------------------------------------------------------------------
1 | @import '~nativescript-theme-core/scss/forest';
2 | @import 'app-common';
3 | @import '~nativescript-theme-core/scss/platforms/index.android';
--------------------------------------------------------------------------------
/App_Resources/Android/values-v21/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3d5afe
4 |
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/calls-filled@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/calls-filled@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/calls-filled@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/calls-filled@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/chats-filled@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/chats-filled@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/chats-filled@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/chats-filled@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/settings-filled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/settings-filled.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-hdpi/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-hdpi/.DS_Store
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-hdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-hdpi/icon.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-hdpi/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-hdpi/logo.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-ldpi/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-ldpi/.DS_Store
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-ldpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-ldpi/icon.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-ldpi/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-ldpi/logo.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-mdpi/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-mdpi/.DS_Store
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-mdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-mdpi/icon.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-mdpi/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-mdpi/logo.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xhdpi/icon.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xhdpi/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xhdpi/logo.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/.DS_Store
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/settings-filled@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/settings-filled@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/tabs/settings-filled@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/tabs/settings-filled@3x.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xhdpi/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xhdpi/.DS_Store
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxhdpi/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxhdpi/.DS_Store
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxhdpi/icon.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxhdpi/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxhdpi/logo.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxxhdpi/icon.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxxhdpi/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxxhdpi/logo.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-hdpi/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-hdpi/background.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-hdpi/ic_comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-hdpi/ic_comment.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-ldpi/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-ldpi/background.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-mdpi/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-mdpi/background.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-mdpi/ic_comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-mdpi/ic_comment.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxxhdpi/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxxhdpi/.DS_Store
--------------------------------------------------------------------------------
/App_Resources/Android/drawable/bubble_shadow.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable/bubble_shadow.9.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xhdpi/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xhdpi/background.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xhdpi/ic_comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xhdpi/ic_comment.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxhdpi/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxhdpi/background.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxhdpi/ic_comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxhdpi/ic_comment.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-hdpi/ic_arrow_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-hdpi/ic_arrow_back.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-hdpi/ic_photo_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-hdpi/ic_photo_camera.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-mdpi/ic_arrow_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-mdpi/ic_arrow_back.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-mdpi/ic_photo_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-mdpi/ic_photo_camera.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xhdpi/ic_arrow_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xhdpi/ic_arrow_back.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxhdpi/ic_arrow_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxhdpi/ic_arrow_back.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxxhdpi/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxxhdpi/background.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxxhdpi/ic_comment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxxhdpi/ic_comment.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable/bubble_shadow_me.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable/bubble_shadow_me.9.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xhdpi/ic_photo_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xhdpi/ic_photo_camera.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxhdpi/ic_photo_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxhdpi/ic_photo_camera.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxxhdpi/ic_arrow_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxxhdpi/ic_arrow_back.png
--------------------------------------------------------------------------------
/app.ios.scss:
--------------------------------------------------------------------------------
1 | @import '~nativescript-theme-core/scss/light';
2 | @import 'app-common';
3 | @import '~nativescript-theme-core/scss/platforms/index.ios';
4 |
5 | .link {
6 | color: $blue;
7 | }
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-xxxhdpi/ic_photo_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable-xxxhdpi/ic_photo_camera.png
--------------------------------------------------------------------------------
/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'ns-app',
5 | templateUrl: 'app.component.html',
6 | })
7 | export class AppComponent {
8 | }
9 |
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/.DS_Store
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable/bubble_shadow_continuation.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable/bubble_shadow_continuation.9.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-120.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-152.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-16.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-167.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-180.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-24.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-32.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-64.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon@3x.png
--------------------------------------------------------------------------------
/App_Resources/Android/drawable/bubble_shadow_me_continuation.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/Android/drawable/bubble_shadow_me_continuation.9.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small-40.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small-50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small-50.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small-40@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small-40@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small-50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-Small-50@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-736h@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-736h@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@3x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png
--------------------------------------------------------------------------------
/core/models/chat.model.ts:
--------------------------------------------------------------------------------
1 | import { Contact } from './contact.model';
2 |
3 | export class Chat {
4 | id?: number;
5 | contact: Contact;
6 | type: string;
7 | when: number;
8 | muted: boolean;
9 | unread: number;
10 | text: string;
11 | }
12 |
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Especializa/nativescript-whatsapp-template/HEAD/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png
--------------------------------------------------------------------------------
/_nativesapp.scss:
--------------------------------------------------------------------------------
1 | .mdi {
2 | font-family: "Material Icons", "MaterialIcons-Regular";
3 | }
4 |
5 | .action-bar {
6 | .action-bar-button {
7 | border-color: transparent;
8 | background-color: transparent;
9 | font-size: 20;
10 | border-width: 1;
11 | }
12 | }
--------------------------------------------------------------------------------
/home/chats/_chats.component.common.scss:
--------------------------------------------------------------------------------
1 | .thumb {
2 | border-radius: 50%;
3 | }
4 |
5 | .muted {
6 | font-weight: normal;
7 | opacity: 0.4;
8 | font-size: 20;
9 | }
10 |
11 | .unread {
12 | text-align: center;
13 | min-width: 20;
14 | min-height: 20;
15 | color: $white;
16 | }
--------------------------------------------------------------------------------
/home/tabs/tabs.component.android.css:
--------------------------------------------------------------------------------
1 | .fab-button{height:56;width:56;margin:15;background-color:#25D366;horizontal-align:right;vertical-align:bottom}.tab-view{font-weight:bold;font-size:14;tab-text-color:rgba(255,255,255,0.5);selected-tab-text-color:white;android-selected-tab-highlight-color:white}
2 |
--------------------------------------------------------------------------------
/main.ts:
--------------------------------------------------------------------------------
1 | // this import should be first in order to load some required settings
2 | // (like globals and reflect-metadata)
3 | import { platformNativeScriptDynamic } from 'nativescript-angular/platform';
4 |
5 | import { AppModule } from './app.module';
6 |
7 | platformNativeScriptDynamic().bootstrapModule(AppModule);
8 |
--------------------------------------------------------------------------------
/App_Resources/Android/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #006968
4 | #005958
5 | #33B5E5
6 | #272734
7 | #FFFFFF
8 |
--------------------------------------------------------------------------------
/home/chats/chats.component.ios.scss:
--------------------------------------------------------------------------------
1 | @import '~nativescript-theme-core/scss/light';
2 | @import '~nativescript-theme-core/scss/index';
3 | @import 'chats.component.common';
4 |
5 | .unread {
6 | font-size: 10;
7 | border-radius: 50%;
8 | background-color: $blue;
9 | }
10 |
11 | .time {
12 | color: $grey-dark;
13 | font-size: 12;
14 | }
--------------------------------------------------------------------------------
/main.aot.ts:
--------------------------------------------------------------------------------
1 | // this import should be first in order to load some required settings
2 | // (like globals and reflect-metadata)
3 | import { platformNativeScript } from 'nativescript-angular/platform-static';
4 |
5 | import { AppModuleNgFactory } from './app.module.ngfactory';
6 |
7 | platformNativeScript().bootstrapModuleFactory(AppModuleNgFactory);
8 |
--------------------------------------------------------------------------------
/chat/chat.component.ios.css:
--------------------------------------------------------------------------------
1 | .wallpaper{background-image:url("~/assets/wallpaper.jpg")}.action-bar .back{margin:0;padding:0}.action-bar .action-bar-title .thumb{width:36;height:36;border-radius:50%;margin-right:10}.action-bar .action-bar-title .title{font-weight:bold;font-size:16}.action-bar .action-bar-title .subtitle{font-weight:100;font-size:12;color:#5c687c}
2 |
--------------------------------------------------------------------------------
/chat/message-box/_message-box.component.common.scss:
--------------------------------------------------------------------------------
1 | .message-box {
2 | width: 100%;
3 | align-items: flex-end;
4 |
5 | .icon {
6 | padding: 5;
7 | flex-grow: 0;
8 | border-radius: 50%;
9 | }
10 |
11 | .text-area {
12 | flex-grow: 1;
13 | align-items: flex-end;
14 |
15 | .text-view {
16 | flex-grow: 1;
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/App_Resources/Android/drawable-nodpi/splash_screen.xml:
--------------------------------------------------------------------------------
1 |
2 | -
3 |
4 |
5 | -
6 |
7 |
8 |
--------------------------------------------------------------------------------
/home/home.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, Inject, OnInit } from '@angular/core';
2 |
3 | @Component({
4 | moduleId: module.id,
5 | selector: 'ns-home',
6 | templateUrl: './home.component.html',
7 | styleUrls: ['./home.component.css'],
8 | })
9 | export class HomeComponent {
10 | constructor(
11 | @Inject('platform') public platform,
12 | ) {}
13 | }
14 |
--------------------------------------------------------------------------------
/core/index.ts:
--------------------------------------------------------------------------------
1 | export { CoreModule } from './core.module';
2 | export { ChatsService } from './chats.service';
3 |
4 | export { Message } from './models/message.model';
5 | export { ImageMessage } from './models/image-message.model';
6 | export { Chat } from './models/chat.model';
7 | export { Contact } from './models/contact.model';
8 | export { SentStatus } from './models/sent-status.model';
9 |
--------------------------------------------------------------------------------
/chat/message-box/message-box.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, Inject, Input } from '@angular/core';
2 |
3 | @Component({
4 | moduleId: module.id,
5 | selector: 'ns-message-box',
6 | templateUrl: './message-box.component.html',
7 | styleUrls: ['./message-box.component.css'],
8 | })
9 | export class MessageBoxComponent {
10 | constructor(@Inject('platform') public platform) {}
11 | }
12 |
--------------------------------------------------------------------------------
/core/core.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { NativeScriptModule } from 'nativescript-angular/nativescript.module';
3 |
4 | import { ChatsService } from './chats.service';
5 |
6 | @NgModule({
7 | imports: [
8 | NativeScriptModule,
9 | ],
10 | declarations: [],
11 | providers: [
12 | ChatsService,
13 | ],
14 | })
15 | export class CoreModule { }
16 |
--------------------------------------------------------------------------------
/home/tabs/tabs.component.android.scss:
--------------------------------------------------------------------------------
1 | .fab-button {
2 | height: 56;
3 | width: 56;
4 | margin: 15;
5 | background-color: #25D366;
6 | horizontal-align: right;
7 | vertical-align: bottom;
8 | }
9 | .tab-view {
10 | font-weight: bold;
11 | font-size: 14;
12 | tab-text-color: rgba(255, 255, 255, 0.5);
13 | selected-tab-text-color: white;
14 | android-selected-tab-highlight-color: white;
15 | }
--------------------------------------------------------------------------------
/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 = "__PACKAGE__"
12 | }
13 | aaptOptions {
14 | additionalParameters "--no-version-vectors"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/chat/chat.component.android.css:
--------------------------------------------------------------------------------
1 | .wallpaper{background-image:url("~/assets/wallpaper.jpg")}.action-bar .action-bar-title .thumb{width:40;height:40;border-radius:50%;margin-right:10}.action-bar .action-bar-title .title{font-weight:bold;font-size:17}.action-bar .action-bar-title .subtitle{font-weight:normal;font-size:12}.action-bar .action-item .icon{font-size:25;padding-right:15}.action-bar .action-item .icon.phone{padding-right:5}
2 |
--------------------------------------------------------------------------------
/core/models/image-message.model.ts:
--------------------------------------------------------------------------------
1 | import { Message } from './message.model';
2 |
3 | export class ImageMessage extends Message {
4 | url: string = '';
5 | thumbnail: string = '';
6 |
7 | /**
8 | * Method overriden
9 | * @returns String
10 | */
11 | toString(): string {
12 | return `Photo${super.toString()} ` +
13 | `- Url: ${this.url} ` +
14 | `- Thumbnail: ${this.thumbnail}`;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/home/chats/chats.component.android.scss:
--------------------------------------------------------------------------------
1 | @import '~nativescript-theme-core/scss/forest';
2 | @import '~nativescript-theme-core/scss/index';
3 | @import 'chats.component.common';
4 |
5 | $lightgreen: #25D366;
6 |
7 | .unread {
8 | font-size: 11;
9 | padding-top: 2;
10 | border-radius: 50%;
11 | background-color: $lightgreen;
12 | }
13 |
14 | .time {
15 | &-unread {
16 | color: $lightgreen;
17 | }
18 | color: $grey-dark;
19 | font-size: 12;
20 | }
--------------------------------------------------------------------------------
/chat/chat-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes } from '@angular/router';
3 | import { NativeScriptRouterModule } from 'nativescript-angular/router';
4 |
5 | import { ChatComponent } from './chat.component';
6 |
7 | const routes: Routes = [
8 | { path: '', component: ChatComponent },
9 | ];
10 |
11 | @NgModule({
12 | imports: [NativeScriptRouterModule.forChild(routes)],
13 | exports: [NativeScriptRouterModule],
14 | })
15 | export class ChatRoutingModule { }
16 |
--------------------------------------------------------------------------------
/core/models/message.model.ts:
--------------------------------------------------------------------------------
1 | import { Chat } from './chat.model';
2 | import { Contact } from './contact.model';
3 | import { SentStatus } from './sent-status.model';
4 |
5 | export class Message {
6 | id?: number;
7 | text: string = '';
8 | chat: Chat;
9 | sender: Contact;
10 | readonly created: number = Date.now();
11 | sent: SentStatus;
12 |
13 | toString(): string {
14 | const { created, text } = this;
15 | return `Message created at: ${created} - Text: ${text}`;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/home/home-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes } from '@angular/router';
3 | import { NativeScriptRouterModule } from 'nativescript-angular/router';
4 |
5 | import { HomeComponent } from './home.component';
6 |
7 | const routes: Routes = [
8 | { path: '', component: HomeComponent },
9 | ];
10 |
11 | @NgModule({
12 | imports: [NativeScriptRouterModule.forChild(routes)],
13 | exports: [NativeScriptRouterModule],
14 | })
15 | export class HomeRoutingModule { }
16 |
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "defaultSeverity": "error",
3 | "extends": [
4 | "tslint:recommended"
5 | ],
6 | "jsRules": {},
7 | "rules": {
8 | "quotemark": [
9 | true,
10 | "single"
11 | ],
12 | "max-line-length": [
13 | true,
14 | 80
15 | ],
16 | "object-literal-sort-keys": false,
17 | "member-access": [
18 | true,
19 | "no-public"
20 | ]
21 | },
22 | "rulesDirectory": []
23 | }
--------------------------------------------------------------------------------
/tools/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "defaultSeverity": "error",
3 | "extends": [
4 | "tslint:recommended"
5 | ],
6 | "jsRules": {},
7 | "rules": {
8 | "quotemark": [
9 | true,
10 | "single"
11 | ],
12 | "max-line-length": [
13 | true,
14 | 80
15 | ],
16 | "object-literal-sort-keys": false,
17 | "member-access": [
18 | true,
19 | "no-public"
20 | ]
21 | },
22 | "rulesDirectory": []
23 | }
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/chat/chat.component.ios.scss:
--------------------------------------------------------------------------------
1 | @import '~nativescript-theme-core/scss/light';
2 | @import 'chat.component.common';
3 |
4 | .action-bar {
5 | .back {
6 | margin: 0;
7 | padding: 0;
8 | }
9 | .action-bar-title {
10 | .thumb {
11 | width: 36;
12 | height: 36;
13 | border-radius: 50%;
14 | margin-right: 10;
15 | }
16 | .title {
17 | font-weight: bold;
18 | font-size: 16;
19 | }
20 | .subtitle {
21 | font-weight: 100;
22 | font-size: 12;
23 | color: $grey-dark;
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { Routes } from '@angular/router';
3 | import { NativeScriptRouterModule } from 'nativescript-angular/router';
4 |
5 | const routes: Routes = [
6 | { path: '', redirectTo: '/home', pathMatch: 'full' },
7 | { path: 'home', loadChildren: './home/home.module#HomeModule' },
8 | { path: 'chat/:index', loadChildren: './chat/chat.module#ChatModule' },
9 | ];
10 |
11 | @NgModule({
12 | imports: [NativeScriptRouterModule.forRoot(routes)],
13 | exports: [NativeScriptRouterModule],
14 | })
15 | export class AppRoutingModule { }
16 |
--------------------------------------------------------------------------------
/chat/chat.component.android.scss:
--------------------------------------------------------------------------------
1 | @import 'chat.component.common';
2 |
3 | .action-bar {
4 | .action-bar-title {
5 | .thumb {
6 | width: 40;
7 | height: 40;
8 | border-radius: 50%;
9 | margin-right: 10;
10 | }
11 | .title {
12 | font-weight: bold;
13 | font-size: 17;
14 | }
15 | .subtitle {
16 | font-weight: normal;
17 | font-size: 12;
18 | }
19 | }
20 | .action-item {
21 | .icon {
22 | font-size: 25;
23 | padding-right: 15;
24 |
25 | &.phone {
26 | padding-right: 5;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/core/models/contact.model.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var Contact = (function () {
4 | function Contact() {
5 | }
6 | return Contact;
7 | }());
8 | exports.Contact = Contact;
9 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRhY3QubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTtJQUFBO0lBSUEsQ0FBQztJQUFELGNBQUM7QUFBRCxDQUFDLEFBSkQsSUFJQztBQUpZLDBCQUFPIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIENvbnRhY3Qge1xuICBpZD86IG51bWJlcjtcbiAgYXZhdGFyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn1cbiJdfQ==
--------------------------------------------------------------------------------
/chat/message-box/message-box.component.android.scss:
--------------------------------------------------------------------------------
1 | @import '~nativescript-theme-core/scss/forest';
2 | @import '~nativescript-theme-core/scss/index';
3 | @import 'message-box.component.common';
4 |
5 | .message-box {
6 |
7 | .icon {
8 | font-size: 24;
9 | margin: 0 0 5 0;
10 | }
11 | .text-area {
12 | background: white;
13 | border-radius: 50%;
14 | padding: 0 5;
15 | margin: 5;
16 |
17 | .text-view {
18 | flex-grow: 1;
19 | border-color: transparent;
20 | background-color: transparent;
21 | }
22 | }
23 | .send {
24 | color: white;
25 | padding: 10;
26 | margin: 0 5 5 0;
27 | }
28 | }
--------------------------------------------------------------------------------
/home/tabs/tabs.component.android.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/core/models/chat.model.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var Chat = (function () {
4 | function Chat() {
5 | }
6 | return Chat;
7 | }());
8 | exports.Chat = Chat;
9 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNoYXQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTtJQUFBO0lBUUEsQ0FBQztJQUFELFdBQUM7QUFBRCxDQUFDLEFBUkQsSUFRQztBQVJZLG9CQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGFjdCB9IGZyb20gJy4vY29udGFjdC5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBDaGF0IHtcbiAgaWQ/OiBudW1iZXI7XG4gIGNvbnRhY3Q6IENvbnRhY3Q7XG4gIHR5cGU6IHN0cmluZztcbiAgd2hlbjogbnVtYmVyO1xuICBtdXRlZDogYm9vbGVhbjtcbiAgdW5yZWFkOiBudW1iZXI7XG4gIHRleHQ6IHN0cmluZztcbn1cbiJdfQ==
--------------------------------------------------------------------------------
/chat/message-box/message-box.component.ios.scss:
--------------------------------------------------------------------------------
1 | @import '~nativescript-theme-core/scss/light';
2 | @import '~nativescript-theme-core/scss/index';
3 | @import 'message-box.component.common';
4 |
5 | .message-box {
6 | background-color: #FAFAFA;
7 | border-top-color: #D6D3CD;
8 | border-top-width: 1;
9 |
10 | .icon {
11 | font-size: 28;
12 | color: $blue;
13 | opacity: .8;
14 | margin: 4;
15 | }
16 |
17 | .text-area {
18 |
19 | .text-view {
20 | border-radius: 50%;
21 | border-width: 1;
22 | border-color: #d8d8d8;
23 | font-size: 16;
24 | padding: 5;
25 | margin-bottom: 8;
26 | }
27 | .camera {
28 | height: 80%;
29 | }
30 | }
31 |
32 | .separator {
33 | margin-bottom: 15;
34 | opacity: .4;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/home/chats/chats.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | import { NavigationExtras } from '@angular/router';
3 | import { RouterExtensions } from 'nativescript-angular/router';
4 |
5 | import { ChatsService } from '../../core';
6 |
7 | @Component({
8 | moduleId: module.id,
9 | selector: 'ns-chats',
10 | templateUrl: './chats.component.html',
11 | styleUrls: ['./chats.component.css'],
12 | })
13 | export class ChatsComponent {
14 | chats = [];
15 | constructor(
16 | chatsService: ChatsService,
17 | private routerExtensions: RouterExtensions,
18 | ) {
19 | this.chats = chatsService.chats;
20 | }
21 |
22 | goToChat(args) {
23 | const extras: NavigationExtras = {
24 | queryParams: {
25 | unread: 2,
26 | },
27 | };
28 | this.routerExtensions.navigate([
29 | 'chat',
30 | args.index,
31 | ], extras);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/core/models/sent-status.model.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var SentStatus;
4 | (function (SentStatus) {
5 | SentStatus[SentStatus["NOT_SENT"] = 0] = "NOT_SENT";
6 | SentStatus[SentStatus["SENT"] = 1] = "SENT";
7 | SentStatus[SentStatus["RECEIVED"] = 2] = "RECEIVED";
8 | SentStatus[SentStatus["VIEWED"] = 3] = "VIEWED";
9 | })(SentStatus = exports.SentStatus || (exports.SentStatus = {}));
10 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudC1zdGF0dXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZW50LXN0YXR1cy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQixtREFBUSxDQUFBO0lBQ1IsMkNBQUksQ0FBQTtJQUNKLG1EQUFRLENBQUE7SUFDUiwrQ0FBTSxDQUFBO0FBQ1IsQ0FBQyxFQUxXLFVBQVUsR0FBVixrQkFBVSxLQUFWLGtCQUFVLFFBS3JCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gU2VudFN0YXR1cyB7XG4gIE5PVF9TRU5ULFxuICBTRU5ULFxuICBSRUNFSVZFRCxcbiAgVklFV0VELFxufVxuIl19
--------------------------------------------------------------------------------
/home/chats/chats.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/home/chats/short-when.pipe.ts:
--------------------------------------------------------------------------------
1 | import { DatePipe } from '@angular/common';
2 | import { Pipe, PipeTransform } from '@angular/core';
3 | import { device } from 'platform';
4 |
5 | import * as isToday from 'date-fns/is_today';
6 | import * as isYesterday from 'date-fns/is_yesterday';
7 | import * as parse from 'date-fns/parse';
8 |
9 | @Pipe({
10 | name: 'shortWhen',
11 | pure: true,
12 | })
13 | export class ShortWhenPipe implements PipeTransform {
14 |
15 | transform(value: number | string | Date): string {
16 | let language = device.language;
17 | if (device.region) {
18 | language += `-${device.region}`;
19 | }
20 | const datePipe = new DatePipe(language);
21 | const parsedDate = parse(value);
22 |
23 | if (isToday(parsedDate)) {
24 | return datePipe.transform(parsedDate, 'shortTime');
25 | }
26 |
27 | if (isYesterday(parsedDate)) {
28 | return 'yesterday';
29 | }
30 |
31 | return datePipe.transform(parsedDate, 'shortDate');
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/App_Resources/Android/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
10 |
11 |
14 |
15 |
16 |
19 |
20 |
23 |
--------------------------------------------------------------------------------
/home/home.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
2 | import { NativeScriptFormsModule } from 'nativescript-angular/forms';
3 | import { NativeScriptModule } from 'nativescript-angular/nativescript.module';
4 | import { TNSFontIconModule } from 'nativescript-ngx-fonticon';
5 |
6 | import { ChatsComponent } from './chats/chats.component';
7 | import { ShortWhenPipe } from './chats/short-when.pipe';
8 | import { HomeRoutingModule } from './home-routing.module';
9 | import { HomeComponent } from './home.component';
10 | import { TabsComponent } from './tabs/tabs.component';
11 |
12 | @NgModule({
13 | imports: [
14 | NativeScriptModule,
15 | NativeScriptFormsModule,
16 | HomeRoutingModule,
17 | TNSFontIconModule.forRoot({
18 | mdi: 'material-design-icons.css',
19 | }),
20 | ],
21 | declarations: [
22 | HomeComponent,
23 | TabsComponent,
24 | ChatsComponent,
25 | ShortWhenPipe,
26 | ],
27 | schemas: [
28 | NO_ERRORS_SCHEMA,
29 | ],
30 | })
31 | export class HomeModule { }
32 |
--------------------------------------------------------------------------------
/chat/messages-area/messages-area.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
13 |
14 |
17 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/chat/chat.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
2 | import { NativeScriptFormsModule } from 'nativescript-angular/forms';
3 | import { NativeScriptModule } from 'nativescript-angular/nativescript.module';
4 | import { TNSFontIconModule } from 'nativescript-ngx-fonticon';
5 |
6 | import { NgShadowModule } from 'nativescript-ng-shadow';
7 | import { ChatRoutingModule } from './chat-routing.module';
8 | import { ChatComponent } from './chat.component';
9 | import { MessageBoxComponent } from './message-box/message-box.component';
10 | import { MessagesAreaComponent } from './messages-area/messages-area.component';
11 |
12 | @NgModule({
13 | imports: [
14 | NativeScriptModule,
15 | NativeScriptFormsModule,
16 | ChatRoutingModule,
17 | NgShadowModule,
18 | TNSFontIconModule.forRoot({
19 | mdi: 'material-design-icons.css',
20 | }),
21 | ],
22 | declarations: [
23 | ChatComponent,
24 | MessagesAreaComponent,
25 | MessageBoxComponent,
26 | ],
27 | schemas: [
28 | NO_ERRORS_SCHEMA,
29 | ],
30 | })
31 | export class ChatModule { }
32 |
--------------------------------------------------------------------------------
/main.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | // this import should be first in order to load some required settings
4 | // (like globals and reflect-metadata)
5 | var platform_1 = require("nativescript-angular/platform");
6 | var app_module_1 = require("./app.module");
7 | platform_1.platformNativeScriptDynamic().bootstrapModule(app_module_1.AppModule);
8 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzRUFBc0U7QUFDdEUsc0NBQXNDO0FBQ3RDLDBEQUE0RTtBQUU1RSwyQ0FBeUM7QUFFekMsc0NBQTJCLEVBQUUsQ0FBQyxlQUFlLENBQUMsc0JBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdGhpcyBpbXBvcnQgc2hvdWxkIGJlIGZpcnN0IGluIG9yZGVyIHRvIGxvYWQgc29tZSByZXF1aXJlZCBzZXR0aW5nc1xuLy8gKGxpa2UgZ2xvYmFscyBhbmQgcmVmbGVjdC1tZXRhZGF0YSlcbmltcG9ydCB7IHBsYXRmb3JtTmF0aXZlU2NyaXB0RHluYW1pYyB9IGZyb20gJ25hdGl2ZXNjcmlwdC1hbmd1bGFyL3BsYXRmb3JtJztcblxuaW1wb3J0IHsgQXBwTW9kdWxlIH0gZnJvbSAnLi9hcHAubW9kdWxlJztcblxucGxhdGZvcm1OYXRpdmVTY3JpcHREeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4iXX0=
--------------------------------------------------------------------------------
/app.component.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var AppComponent = (function () {
5 | function AppComponent() {
6 | }
7 | AppComponent = __decorate([
8 | core_1.Component({
9 | selector: 'ns-app',
10 | templateUrl: 'app.component.html',
11 | })
12 | ], AppComponent);
13 | return AppComponent;
14 | }());
15 | exports.AppComponent = AppComponent;
16 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFwcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBMEM7QUFNMUM7SUFBQTtJQUNBLENBQUM7SUFEWSxZQUFZO1FBSnhCLGdCQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsUUFBUTtZQUNsQixXQUFXLEVBQUUsb0JBQW9CO1NBQ2xDLENBQUM7T0FDVyxZQUFZLENBQ3hCO0lBQUQsbUJBQUM7Q0FBQSxBQURELElBQ0M7QUFEWSxvQ0FBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICducy1hcHAnLFxuICB0ZW1wbGF0ZVVybDogJ2FwcC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XG59XG4iXX0=
--------------------------------------------------------------------------------
/app.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule, NgModuleFactoryLoader,
2 | NO_ERRORS_SCHEMA } from '@angular/core';
3 | import { NativeScriptModule } from 'nativescript-angular/nativescript.module';
4 | import { NSModuleFactoryLoader } from 'nativescript-angular/router';
5 | import * as platform from 'platform';
6 |
7 | import { AppRoutingModule } from './app-routing.module';
8 | import { AppComponent } from './app.component';
9 | import { CoreModule } from './core';
10 |
11 | import { registerElement } from 'nativescript-angular';
12 | import { Fab } from 'nativescript-floatingactionbutton';
13 |
14 | registerElement('Fab', () => Fab);
15 |
16 | @NgModule({
17 | bootstrap: [
18 | AppComponent,
19 | ],
20 | imports: [
21 | NativeScriptModule,
22 | AppRoutingModule,
23 | CoreModule,
24 | ],
25 | declarations: [
26 | AppComponent,
27 | ],
28 | providers: [
29 | { provide: NgModuleFactoryLoader, useClass: NSModuleFactoryLoader },
30 | { provide: 'platform', useValue: platform },
31 | ],
32 | schemas: [
33 | NO_ERRORS_SCHEMA,
34 | ],
35 | })
36 | export class AppModule { }
37 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (http://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # Typescript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 |
--------------------------------------------------------------------------------
/home/tabs/tabs.component.ios.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/home/tabs/tabs.component.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';
2 | import { AndroidActivityBackPressedEventData } from 'application';
3 | import * as application from 'application';
4 |
5 | @Component({
6 | moduleId: module.id,
7 | selector: 'ns-tabs',
8 | templateUrl: './tabs.component.html',
9 | styleUrls: ['./tabs.component.css'],
10 | })
11 | export class TabsComponent implements OnInit {
12 | selectedIndex: number;
13 | constructor(
14 | @Inject('platform') public platform,
15 | private changeDetectorRef: ChangeDetectorRef,
16 | ) {}
17 |
18 | ngOnInit(): void {
19 | this.selectedIndex = this.platform.isAndroid ? 1 : 3;
20 |
21 | if (this.platform.isAndroid) {
22 | application.android.on(
23 | application.AndroidApplication.activityBackPressedEvent,
24 | (args: AndroidActivityBackPressedEventData) => {
25 | if (this.selectedIndex !== 1) {
26 | this.selectedIndex = 1;
27 | args.cancel = true;
28 | this.changeDetectorRef.detectChanges();
29 | }
30 | },
31 | );
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/tools/preinstall.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 | const exec = require('child_process').exec;
4 |
5 | console.log('preinstall script running...');
6 |
7 | const tslintConfig = 'tslint.json';
8 |
9 | getAppRootFolder().then(appRootFolder =>
10 | copyConfig(tslintConfig, appRootFolder)
11 | ).then(appRootFolder => {
12 | fs.mkdir(path.join(appRootFolder, 'app'))
13 | });
14 |
15 | function copyConfig(configFilename, appRootFolder) {
16 | return new Promise((resolve, reject) => {
17 | const sourcePath = path.join(__dirname, configFilename);
18 | const destPath = path.join(appRootFolder, configFilename);
19 |
20 | console.log(`creating ${path.resolve(destPath)}...`);
21 | fs.rename(sourcePath, destPath, err => {
22 | if (err) {
23 | return reject(err);
24 | }
25 | resolve(appRootFolder);
26 | });
27 | });
28 | }
29 |
30 | function getAppRootFolder() {
31 | return new Promise((resolve, reject) => {
32 | // npm prefix returns the closest parent directory to contain a package.json file
33 | exec('cd .. && npm prefix', (err, stdout) => {
34 | if (err) {
35 | return reject(err);
36 | }
37 |
38 | resolve(stdout.toString().trim());
39 | });
40 | });
41 | }
42 |
--------------------------------------------------------------------------------
/home/home.component.html:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
12 |
13 |
16 |
17 |
20 |
21 |
24 |
25 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/chat/messages-area/messages-area.component.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component,
2 | Inject, Input, OnInit } from '@angular/core';
3 | import { Message, SentStatus } from '../../core';
4 |
5 | @Component({
6 | moduleId: module.id,
7 | selector: 'ns-messages-area',
8 | templateUrl: './messages-area.component.html',
9 | styleUrls: ['./messages-area.component.css'],
10 | changeDetection: ChangeDetectionStrategy.OnPush,
11 | })
12 | export class MessagesAreaComponent implements OnInit {
13 | @Input() messages: Message[];
14 |
15 | constructor(@Inject('platform') public platform) {}
16 |
17 | ngOnInit() {
18 | this.messages = this.messages.slice(0, 50);
19 | }
20 |
21 | isContinuation(idx: number) {
22 | return (!this.messages[idx].sender && this.messages[idx - 1] &&
23 | !this.messages[idx - 1].sender) ||
24 | (this.messages[idx].sender && this.messages[idx - 1] &&
25 | this.messages[idx - 1].sender);
26 | }
27 |
28 | getIcon(message: Message) {
29 | switch (message.sent) {
30 | case SentStatus.NOT_SENT:
31 | return 'mdi-access-time';
32 | case SentStatus.SENT:
33 | return 'mdi-done';
34 | default:
35 | return 'mdi-done-all';
36 | }
37 | }
38 |
39 | isViewed(message: Message) {
40 | return message.sent === SentStatus.VIEWED;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/chat/message-box/message-box.component.html:
--------------------------------------------------------------------------------
1 |
2 |
6 |
13 |
18 |
23 |
28 |
32 |
33 |
38 |
47 |
--------------------------------------------------------------------------------
/chat/chat.component.ts:
--------------------------------------------------------------------------------
1 | import { ChangeDetectionStrategy, Component,
2 | Inject, OnInit } from '@angular/core';
3 | import { ActivatedRoute } from '@angular/router';
4 | import { RouterExtensions } from 'nativescript-angular/router';
5 |
6 | import { Chat, ChatsService } from '../core';
7 | import {Message} from '../core/models/message.model';
8 |
9 | @Component({
10 | moduleId: module.id,
11 | selector: 'ns-chat',
12 | templateUrl: './chat.component.html',
13 | styleUrls: ['./chat.component.css'],
14 | changeDetection: ChangeDetectionStrategy.OnPush,
15 | })
16 | export class ChatComponent implements OnInit {
17 | chatIndex: number;
18 | chat: Chat;
19 | unread: number;
20 | messages: Message[];
21 |
22 | constructor(
23 | private route: ActivatedRoute,
24 | private chatsService: ChatsService,
25 | private router: RouterExtensions,
26 | @Inject('platform') public platform,
27 | ) {
28 | }
29 |
30 | ngOnInit() {
31 | this.route.params.subscribe((params) => {
32 | this.chatIndex = +params.index;
33 | this.chat = this.chatsService.chats[this.chatIndex];
34 | });
35 | this.route.queryParams.subscribe((params) => {
36 | this.unread = +params.unread;
37 | });
38 | this.getMessages();
39 | }
40 |
41 | getMessages() {
42 | this.messages = this.chatsService.getMessages(this.chat);
43 | }
44 |
45 | goBack() {
46 | this.router.back();
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/chat/messages-area/messages-area.component.css:
--------------------------------------------------------------------------------
1 | .messages-area{width:100%}.messages-area .messages{flex-direction:column;align-items:flex-start;padding:0 10 5 10}.messages-area .messages .message-bubble{margin:10 15 2 0;padding:0}.messages-area .messages .message-bubble.myself{align-self:flex-end;margin-right:0;margin-left:15}.messages-area .messages .message-bubble.myself .message-bubble-content{background-color:#dcf8c6}.messages-area .messages .message-bubble.continuation{margin-top:1}.messages-area .messages .message-bubble .message-bubble-content{align-items:flex-start;flex-wrap:wrap;justify-content:flex-end;border-radius:8;background-color:white}.messages-area .messages .message-bubble .message-bubble-content .message-text{color:#8D1B1B;font-size:15;margin:5}.messages-area .messages .message-bubble .message-bubble-content .meta{align-self:flex-end;justify-content:flex-end;margin:0 5 5 5}.messages-area .messages .message-bubble .message-bubble-content .meta .time{font-size:13;opacity:.7;margin-right:5}.messages-area .messages .message-bubble .message-bubble-content .meta .time.ios{font-size:11;opacity:.4}.messages-area .messages .message-bubble .message-bubble-content .meta .check{font-size:14;padding-top:2;margin-left:-4}.messages-area .messages .message-bubble .message-bubble-content .meta .check.ios{opacity:.6}.messages-area .messages .message-bubble .message-bubble-content .meta .check.blue{color:#52c5f7}.messages-area .messages .message-bubble .message-bubble-content .meta .check.blue.ios{color:#2F97F3;opacity:1}
2 |
--------------------------------------------------------------------------------
/App_Resources/Android/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 |
--------------------------------------------------------------------------------
/core/models/message.model.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var Message = (function () {
4 | function Message() {
5 | this.text = '';
6 | this.created = Date.now();
7 | }
8 | Message.prototype.toString = function () {
9 | var _a = this, created = _a.created, text = _a.text;
10 | return "Message created at: " + created + " - Text: " + text;
11 | };
12 | return Message;
13 | }());
14 | exports.Message = Message;
15 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1lc3NhZ2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFJQTtJQUFBO1FBRUUsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUdULFlBQU8sR0FBVyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFPeEMsQ0FBQztJQUpDLDBCQUFRLEdBQVI7UUFDUSxJQUFBLFNBQXdCLEVBQXRCLG9CQUFPLEVBQUUsY0FBSSxDQUFVO1FBQy9CLE1BQU0sQ0FBQyx5QkFBdUIsT0FBTyxpQkFBWSxJQUFNLENBQUM7SUFDMUQsQ0FBQztJQUNILGNBQUM7QUFBRCxDQUFDLEFBWkQsSUFZQztBQVpZLDBCQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhdCB9IGZyb20gJy4vY2hhdC5tb2RlbCc7XG5pbXBvcnQgeyBDb250YWN0IH0gZnJvbSAnLi9jb250YWN0Lm1vZGVsJztcbmltcG9ydCB7IFNlbnRTdGF0dXMgfSBmcm9tICcuL3NlbnQtc3RhdHVzLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIE1lc3NhZ2Uge1xuICBpZD86IG51bWJlcjtcbiAgdGV4dDogc3RyaW5nID0gJyc7XG4gIGNoYXQ6IENoYXQ7XG4gIHNlbmRlcjogQ29udGFjdDtcbiAgcmVhZG9ubHkgY3JlYXRlZDogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgc2VudDogU2VudFN0YXR1cztcblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgY3JlYXRlZCwgdGV4dCB9ID0gdGhpcztcbiAgICByZXR1cm4gYE1lc3NhZ2UgY3JlYXRlZCBhdDogJHtjcmVhdGVkfSAtIFRleHQ6ICR7dGV4dH1gO1xuICB9XG59XG4iXX0=
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/core/core.module.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var nativescript_module_1 = require("nativescript-angular/nativescript.module");
5 | var chats_service_1 = require("./chats.service");
6 | var CoreModule = (function () {
7 | function CoreModule() {
8 | }
9 | CoreModule = __decorate([
10 | core_1.NgModule({
11 | imports: [
12 | nativescript_module_1.NativeScriptModule,
13 | ],
14 | declarations: [],
15 | providers: [
16 | chats_service_1.ChatsService,
17 | ],
18 | })
19 | ], CoreModule);
20 | return CoreModule;
21 | }());
22 | exports.CoreModule = CoreModule;
23 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb3JlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUF5QztBQUN6QyxnRkFBOEU7QUFFOUUsaURBQStDO0FBVy9DO0lBQUE7SUFBMEIsQ0FBQztJQUFkLFVBQVU7UUFUdEIsZUFBUSxDQUFDO1lBQ1IsT0FBTyxFQUFFO2dCQUNQLHdDQUFrQjthQUNuQjtZQUNELFlBQVksRUFBRSxFQUFFO1lBQ2hCLFNBQVMsRUFBRTtnQkFDVCw0QkFBWTthQUNiO1NBQ0YsQ0FBQztPQUNXLFVBQVUsQ0FBSTtJQUFELGlCQUFDO0NBQUEsQUFBM0IsSUFBMkI7QUFBZCxnQ0FBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXRpdmVTY3JpcHRNb2R1bGUgfSBmcm9tICduYXRpdmVzY3JpcHQtYW5ndWxhci9uYXRpdmVzY3JpcHQubW9kdWxlJztcblxuaW1wb3J0IHsgQ2hhdHNTZXJ2aWNlIH0gZnJvbSAnLi9jaGF0cy5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIE5hdGl2ZVNjcmlwdE1vZHVsZSxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgQ2hhdHNTZXJ2aWNlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3JlTW9kdWxlIHsgfVxuIl19
--------------------------------------------------------------------------------
/chat/message-box/new-message.component.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var NewMessageComponent = (function () {
5 | function NewMessageComponent() {
6 | }
7 | NewMessageComponent.prototype.ngOnInit = function () {
8 | };
9 | return NewMessageComponent;
10 | }());
11 | NewMessageComponent = __decorate([
12 | core_1.Component({
13 | moduleId: module.id,
14 | selector: "ns-new-message",
15 | templateUrl: "./new-message.component.html",
16 | styleUrls: ["./new-message.component.css"]
17 | })
18 | ], NewMessageComponent);
19 | exports.NewMessageComponent = NewMessageComponent;
20 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LW1lc3NhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibmV3LW1lc3NhZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQWlFO0FBUWpFLElBQWEsbUJBQW1CO0lBQWhDO0lBSUEsQ0FBQztJQUZDLHNDQUFRLEdBQVI7SUFDQSxDQUFDO0lBQ0gsMEJBQUM7QUFBRCxDQUFDLEFBSkQsSUFJQztBQUpZLG1CQUFtQjtJQU4vQixnQkFBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1FBQ25CLFFBQVEsRUFBRSxnQkFBZ0I7UUFDMUIsV0FBVyxFQUFFLDhCQUE4QjtRQUMzQyxTQUFTLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztLQUMzQyxDQUFDO0dBQ1csbUJBQW1CLENBSS9CO0FBSlksa0RBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEluamVjdCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFwibnMtbmV3LW1lc3NhZ2VcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9uZXctbWVzc2FnZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vbmV3LW1lc3NhZ2UuY29tcG9uZW50LmNzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBOZXdNZXNzYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxufSJdfQ==
--------------------------------------------------------------------------------
/chat/messages-area/messages-area.component.scss:
--------------------------------------------------------------------------------
1 | .messages-area {
2 | width: 100%;
3 |
4 | .messages {
5 | flex-direction: column;
6 | align-items: flex-start;
7 | padding: 0 10 5 10;
8 |
9 | .message-bubble {
10 | margin: 10 15 2 0;
11 | padding: 0;
12 |
13 | &.myself {
14 | align-self: flex-end;
15 | margin-right: 0;
16 | margin-left: 15;
17 |
18 | .message-bubble-content {
19 | background-color: #dcf8c6;
20 | }
21 | }
22 |
23 | &.continuation {
24 | margin-top: 1;
25 | }
26 |
27 | .message-bubble-content {
28 | align-items: flex-start;
29 | flex-wrap: wrap;
30 | justify-content: flex-end;
31 | border-radius: 8;
32 | background-color: white;
33 |
34 | .message-text {
35 | color: #8D1B1B;
36 | font-size: 15;
37 | margin: 5;
38 | }
39 |
40 | .meta{
41 | align-self: flex-end;
42 | justify-content: flex-end;
43 | margin: 0 5 5 5;
44 |
45 | .time {
46 | font-size: 13;
47 | opacity: .7;
48 | margin-right: 5;
49 | &.ios {
50 | font-size: 11;
51 | opacity: .4;
52 | }
53 | }
54 |
55 | .check {
56 | font-size: 14;
57 | padding-top: 2;
58 | margin-left: -4;
59 |
60 | &.ios {
61 | opacity: .6;
62 | }
63 |
64 | &.blue {
65 | color: #52c5f7;
66 | &.ios {
67 | color: #2F97F3;
68 | opacity: 1;
69 | }
70 | }
71 | }
72 | }
73 | }
74 | }
75 | }
76 | }
--------------------------------------------------------------------------------
/home/home.component.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var HomeComponent = (function () {
5 | function HomeComponent(platform) {
6 | this.platform = platform;
7 | }
8 | HomeComponent = __decorate([
9 | core_1.Component({
10 | moduleId: module.id,
11 | selector: 'ns-home',
12 | templateUrl: './home.component.html',
13 | styleUrls: ['./home.component.css'],
14 | }),
15 | __param(0, core_1.Inject('platform')),
16 | __metadata("design:paramtypes", [Object])
17 | ], HomeComponent);
18 | return HomeComponent;
19 | }());
20 | exports.HomeComponent = HomeComponent;
21 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJob21lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUEwRDtBQVExRDtJQUNFLHVCQUM2QixRQUFRO1FBQVIsYUFBUSxHQUFSLFFBQVEsQ0FBQTtJQUNsQyxDQUFDO0lBSE8sYUFBYTtRQU56QixnQkFBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFdBQVcsRUFBRSx1QkFBdUI7WUFDcEMsU0FBUyxFQUFFLENBQUMsc0JBQXNCLENBQUM7U0FDdEMsQ0FBQztRQUdHLFdBQUEsYUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBOztPQUZWLGFBQWEsQ0FJekI7SUFBRCxvQkFBQztDQUFBLEFBSkQsSUFJQztBQUpZLHNDQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICAgIHNlbGVjdG9yOiAnbnMtaG9tZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hvbWUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2hvbWUuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBIb21lQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdCgncGxhdGZvcm0nKSBwdWJsaWMgcGxhdGZvcm0sXG4gICkge31cbn1cbiJdfQ==
--------------------------------------------------------------------------------
/core/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_module_1 = require("./core.module");
4 | exports.CoreModule = core_module_1.CoreModule;
5 | var chats_service_1 = require("./chats.service");
6 | exports.ChatsService = chats_service_1.ChatsService;
7 | var message_model_1 = require("./models/message.model");
8 | exports.Message = message_model_1.Message;
9 | var image_message_model_1 = require("./models/image-message.model");
10 | exports.ImageMessage = image_message_model_1.ImageMessage;
11 | var chat_model_1 = require("./models/chat.model");
12 | exports.Chat = chat_model_1.Chat;
13 | var contact_model_1 = require("./models/contact.model");
14 | exports.Contact = contact_model_1.Contact;
15 | var sent_status_model_1 = require("./models/sent-status.model");
16 | exports.SentStatus = sent_status_model_1.SentStatus;
17 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUEyQztBQUFsQyxtQ0FBQSxVQUFVLENBQUE7QUFDbkIsaURBQStDO0FBQXRDLHVDQUFBLFlBQVksQ0FBQTtBQUVyQix3REFBaUQ7QUFBeEMsa0NBQUEsT0FBTyxDQUFBO0FBQ2hCLG9FQUE0RDtBQUFuRCw2Q0FBQSxZQUFZLENBQUE7QUFDckIsa0RBQTJDO0FBQWxDLDRCQUFBLElBQUksQ0FBQTtBQUNiLHdEQUFpRDtBQUF4QyxrQ0FBQSxPQUFPLENBQUE7QUFDaEIsZ0VBQXdEO0FBQS9DLHlDQUFBLFVBQVUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICcuL2NvcmUubW9kdWxlJztcbmV4cG9ydCB7IENoYXRzU2VydmljZSB9IGZyb20gJy4vY2hhdHMuc2VydmljZSc7XG5cbmV4cG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL21vZGVscy9tZXNzYWdlLm1vZGVsJztcbmV4cG9ydCB7IEltYWdlTWVzc2FnZSB9IGZyb20gJy4vbW9kZWxzL2ltYWdlLW1lc3NhZ2UubW9kZWwnO1xuZXhwb3J0IHsgQ2hhdCB9IGZyb20gJy4vbW9kZWxzL2NoYXQubW9kZWwnO1xuZXhwb3J0IHsgQ29udGFjdCB9IGZyb20gJy4vbW9kZWxzL2NvbnRhY3QubW9kZWwnO1xuZXhwb3J0IHsgU2VudFN0YXR1cyB9IGZyb20gJy4vbW9kZWxzL3NlbnQtc3RhdHVzLm1vZGVsJztcbiJdfQ==
--------------------------------------------------------------------------------
/chat/message-box/message-box.component.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var MessageBoxComponent = (function () {
5 | function MessageBoxComponent(platform) {
6 | this.platform = platform;
7 | }
8 | MessageBoxComponent = __decorate([
9 | core_1.Component({
10 | moduleId: module.id,
11 | selector: 'ns-message-box',
12 | templateUrl: './message-box.component.html',
13 | styleUrls: ['./message-box.component.css'],
14 | }),
15 | __param(0, core_1.Inject('platform')),
16 | __metadata("design:paramtypes", [Object])
17 | ], MessageBoxComponent);
18 | return MessageBoxComponent;
19 | }());
20 | exports.MessageBoxComponent = MessageBoxComponent;
21 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWVzc2FnZS1ib3guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQXlEO0FBUXpEO0lBQ0UsNkJBQXVDLFFBQVE7UUFBUixhQUFRLEdBQVIsUUFBUSxDQUFBO0lBQUcsQ0FBQztJQUR4QyxtQkFBbUI7UUFOL0IsZ0JBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNuQixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLFdBQVcsRUFBRSw4QkFBOEI7WUFDM0MsU0FBUyxFQUFFLENBQUMsNkJBQTZCLENBQUM7U0FDM0MsQ0FBQztRQUVhLFdBQUEsYUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBOztPQURwQixtQkFBbUIsQ0FFL0I7SUFBRCwwQkFBQztDQUFBLEFBRkQsSUFFQztBQUZZLGtEQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6ICducy1tZXNzYWdlLWJveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLWJveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lc3NhZ2UtYm94LmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUJveENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoJ3BsYXRmb3JtJykgcHVibGljIHBsYXRmb3JtKSB7fVxufVxuIl19
--------------------------------------------------------------------------------
/App_Resources/Android/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
18 |
19 |
21 |
22 |
23 |
32 |
33 |
35 |
36 |
37 |
43 |
44 |
46 |
47 |
--------------------------------------------------------------------------------
/core/models/image-message.model.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var message_model_1 = require("./message.model");
4 | var ImageMessage = (function (_super) {
5 | __extends(ImageMessage, _super);
6 | function ImageMessage() {
7 | var _this = _super !== null && _super.apply(this, arguments) || this;
8 | _this.url = '';
9 | _this.thumbnail = '';
10 | return _this;
11 | }
12 | /**
13 | * Method overriden
14 | * @returns String
15 | */
16 | ImageMessage.prototype.toString = function () {
17 | return "Photo" + _super.prototype.toString.call(this) + " " +
18 | ("- Url: " + this.url + " ") +
19 | ("- Thumbnail: " + this.thumbnail);
20 | };
21 | return ImageMessage;
22 | }(message_model_1.Message));
23 | exports.ImageMessage = ImageMessage;
24 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtbWVzc2FnZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltYWdlLW1lc3NhZ2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpREFBMEM7QUFFMUM7SUFBa0MsZ0NBQU87SUFBekM7UUFBQSxxRUFhQztRQVpDLFNBQUcsR0FBVyxFQUFFLENBQUM7UUFDakIsZUFBUyxHQUFXLEVBQUUsQ0FBQzs7SUFXekIsQ0FBQztJQVRDOzs7T0FHRztJQUNILCtCQUFRLEdBQVI7UUFDRSxNQUFNLENBQUMsVUFBUSxpQkFBTSxRQUFRLFdBQUUsTUFBRzthQUMzQixZQUFVLElBQUksQ0FBQyxHQUFHLE1BQUcsQ0FBQTthQUNyQixrQkFBZ0IsSUFBSSxDQUFDLFNBQVcsQ0FBQSxDQUFDO0lBQzFDLENBQUM7SUFDSCxtQkFBQztBQUFELENBQUMsQUFiRCxDQUFrQyx1QkFBTyxHQWF4QztBQWJZLG9DQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vbWVzc2FnZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBJbWFnZU1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlIHtcbiAgdXJsOiBzdHJpbmcgPSAnJztcbiAgdGh1bWJuYWlsOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogTWV0aG9kIG92ZXJyaWRlblxuICAgKiBAcmV0dXJucyBTdHJpbmdcbiAgICovXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBQaG90byR7c3VwZXIudG9TdHJpbmcoKX0gYCArXG4gICAgICAgICAgIGAtIFVybDogJHt0aGlzLnVybH0gYCArXG4gICAgICAgICAgIGAtIFRodW1ibmFpbDogJHt0aGlzLnRodW1ibmFpbH1gO1xuICB9XG59XG4iXX0=
--------------------------------------------------------------------------------
/chat/chat-routing.module.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var router_1 = require("nativescript-angular/router");
5 | var chat_component_1 = require("./chat.component");
6 | var routes = [
7 | { path: '', component: chat_component_1.ChatComponent },
8 | ];
9 | var ChatRoutingModule = (function () {
10 | function ChatRoutingModule() {
11 | }
12 | ChatRoutingModule = __decorate([
13 | core_1.NgModule({
14 | imports: [router_1.NativeScriptRouterModule.forChild(routes)],
15 | exports: [router_1.NativeScriptRouterModule],
16 | })
17 | ], ChatRoutingModule);
18 | return ChatRoutingModule;
19 | }());
20 | exports.ChatRoutingModule = ChatRoutingModule;
21 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1yb3V0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNoYXQtcm91dGluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBeUM7QUFFekMsc0RBQXVFO0FBRXZFLG1EQUFpRDtBQUVqRCxJQUFNLE1BQU0sR0FBVztJQUNyQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLDhCQUFhLEVBQUU7Q0FDdkMsQ0FBQztBQU1GO0lBQUE7SUFBaUMsQ0FBQztJQUFyQixpQkFBaUI7UUFKN0IsZUFBUSxDQUFDO1lBQ1IsT0FBTyxFQUFFLENBQUMsaUNBQXdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELE9BQU8sRUFBRSxDQUFDLGlDQUF3QixDQUFDO1NBQ3BDLENBQUM7T0FDVyxpQkFBaUIsQ0FBSTtJQUFELHdCQUFDO0NBQUEsQUFBbEMsSUFBa0M7QUFBckIsOENBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOYXRpdmVTY3JpcHRSb3V0ZXJNb2R1bGUgfSBmcm9tICduYXRpdmVzY3JpcHQtYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBDaGF0Q29tcG9uZW50IH0gZnJvbSAnLi9jaGF0LmNvbXBvbmVudCc7XG5cbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICB7IHBhdGg6ICcnLCBjb21wb25lbnQ6IENoYXRDb21wb25lbnQgfSxcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtOYXRpdmVTY3JpcHRSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQocm91dGVzKV0sXG4gIGV4cG9ydHM6IFtOYXRpdmVTY3JpcHRSb3V0ZXJNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0Um91dGluZ01vZHVsZSB7IH1cbiJdfQ==
--------------------------------------------------------------------------------
/home/home-routing.module.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var router_1 = require("nativescript-angular/router");
5 | var home_component_1 = require("./home.component");
6 | var routes = [
7 | { path: '', component: home_component_1.HomeComponent },
8 | ];
9 | var HomeRoutingModule = (function () {
10 | function HomeRoutingModule() {
11 | }
12 | HomeRoutingModule = __decorate([
13 | core_1.NgModule({
14 | imports: [router_1.NativeScriptRouterModule.forChild(routes)],
15 | exports: [router_1.NativeScriptRouterModule],
16 | })
17 | ], HomeRoutingModule);
18 | return HomeRoutingModule;
19 | }());
20 | exports.HomeRoutingModule = HomeRoutingModule;
21 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS1yb3V0aW5nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvbWUtcm91dGluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBeUM7QUFFekMsc0RBQXVFO0FBRXZFLG1EQUFpRDtBQUVqRCxJQUFNLE1BQU0sR0FBVztJQUNyQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLDhCQUFhLEVBQUU7Q0FDdkMsQ0FBQztBQU1GO0lBQUE7SUFBaUMsQ0FBQztJQUFyQixpQkFBaUI7UUFKN0IsZUFBUSxDQUFDO1lBQ1IsT0FBTyxFQUFFLENBQUMsaUNBQXdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELE9BQU8sRUFBRSxDQUFDLGlDQUF3QixDQUFDO1NBQ3BDLENBQUM7T0FDVyxpQkFBaUIsQ0FBSTtJQUFELHdCQUFDO0NBQUEsQUFBbEMsSUFBa0M7QUFBckIsOENBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOYXRpdmVTY3JpcHRSb3V0ZXJNb2R1bGUgfSBmcm9tICduYXRpdmVzY3JpcHQtYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBIb21lQ29tcG9uZW50IH0gZnJvbSAnLi9ob21lLmNvbXBvbmVudCc7XG5cbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICB7IHBhdGg6ICcnLCBjb21wb25lbnQ6IEhvbWVDb21wb25lbnQgfSxcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtOYXRpdmVTY3JpcHRSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQocm91dGVzKV0sXG4gIGV4cG9ydHM6IFtOYXRpdmVTY3JpcHRSb3V0ZXJNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBIb21lUm91dGluZ01vZHVsZSB7IH1cbiJdfQ==
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nativescript-whatsapp-template",
3 | "version": "1.0.1",
4 | "main": "main.js",
5 | "scripts": {
6 | "tslint": "tslint",
7 | "preinstall": "node tools/preinstall.js",
8 | "postinstall": "node tools/postinstall.js"
9 | },
10 | "description": "NativeScript Template Similar to WhatsApp",
11 | "author": {
12 | "name": "Jose Berardo Cunha",
13 | "email": "josebeardo@gmail.com"
14 | },
15 | "repository": {
16 | "type": "git",
17 | "url": "https://github.com/Especializa/nativescript-whatsapp-template.git"
18 | },
19 | "bugs": {
20 | "url": "https://github.com/Especializa/nativescript-whatsapp-template/issues"
21 | },
22 | "license": "Apache-2.0",
23 | "homepage": "https://github.com/Especializa/nativescript-whatsapp-template",
24 | "android": {
25 | "v8Flags": "--expose_gc"
26 | },
27 | "readmeFilename": "README.md",
28 | "nativescript": {
29 | "id": "br.com.especializa.nativesapp",
30 | "tns-android": {
31 | "version": "3.2.0"
32 | },
33 | "tns-ios": {
34 | "version": "3.2.0"
35 | }
36 | },
37 | "dependencies": {
38 | "@angular/animations": "~4.3.6",
39 | "@angular/common": "~4.3.6",
40 | "@angular/compiler": "~4.3.6",
41 | "@angular/core": "~4.3.6",
42 | "@angular/forms": "~4.3.6",
43 | "@angular/http": "~4.3.6",
44 | "@angular/platform-browser": "~4.3.6",
45 | "@angular/router": "~4.3.6",
46 | "date-fns": "^1.28.5",
47 | "nativescript-angular": "~4.2.0",
48 | "nativescript-floatingactionbutton": "^4.1.0",
49 | "nativescript-material-icons": "^1.0.3",
50 | "nativescript-ng-shadow": "^1.1.2",
51 | "nativescript-ngx-fonticon": "^2.2.3",
52 | "nativescript-ripple": "^2.0.0",
53 | "nativescript-theme-core": "~1.0.4",
54 | "reflect-metadata": "~0.1.10",
55 | "rxjs": "~5.4.3",
56 | "sass-loader": "^6.0.6",
57 | "tns-core-modules": "^3.1.1",
58 | "zone.js": "~0.8.17"
59 | },
60 | "devDependencies": {
61 | "babel-traverse": "6.25.0",
62 | "babel-types": "6.25.0",
63 | "babylon": "6.17.4",
64 | "codelyzer": "^3.2.0",
65 | "lazy": "1.0.11",
66 | "nativescript-css-loader": "~0.26.0",
67 | "nativescript-dev-sass": "^1.3.0",
68 | "nativescript-dev-typescript": "~0.5.0",
69 | "tslint": "^5.7.0",
70 | "typescript": "~2.4.1"
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/app-routing.module.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var router_1 = require("nativescript-angular/router");
5 | var routes = [
6 | { path: '', redirectTo: '/home', pathMatch: 'full' },
7 | { path: 'home', loadChildren: './home/home.module#HomeModule' },
8 | { path: 'chat/:index', loadChildren: './chat/chat.module#ChatModule' },
9 | ];
10 | var AppRoutingModule = (function () {
11 | function AppRoutingModule() {
12 | }
13 | AppRoutingModule = __decorate([
14 | core_1.NgModule({
15 | imports: [router_1.NativeScriptRouterModule.forRoot(routes)],
16 | exports: [router_1.NativeScriptRouterModule],
17 | })
18 | ], AppRoutingModule);
19 | return AppRoutingModule;
20 | }());
21 | exports.AppRoutingModule = AppRoutingModule;
22 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXJvdXRpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwLXJvdXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQXlDO0FBRXpDLHNEQUF1RTtBQUV2RSxJQUFNLE1BQU0sR0FBVztJQUNyQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO0lBQ3BELEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsK0JBQStCLEVBQUU7SUFDL0QsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSwrQkFBK0IsRUFBRTtDQUN2RSxDQUFDO0FBTUY7SUFBQTtJQUFnQyxDQUFDO0lBQXBCLGdCQUFnQjtRQUo1QixlQUFRLENBQUM7WUFDUixPQUFPLEVBQUUsQ0FBQyxpQ0FBd0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkQsT0FBTyxFQUFFLENBQUMsaUNBQXdCLENBQUM7U0FDcEMsQ0FBQztPQUNXLGdCQUFnQixDQUFJO0lBQUQsdUJBQUM7Q0FBQSxBQUFqQyxJQUFpQztBQUFwQiw0Q0FBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE5hdGl2ZVNjcmlwdFJvdXRlck1vZHVsZSB9IGZyb20gJ25hdGl2ZXNjcmlwdC1hbmd1bGFyL3JvdXRlcic7XG5cbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICB7IHBhdGg6ICcnLCByZWRpcmVjdFRvOiAnL2hvbWUnLCBwYXRoTWF0Y2g6ICdmdWxsJyB9LFxuICB7IHBhdGg6ICdob21lJywgbG9hZENoaWxkcmVuOiAnLi9ob21lL2hvbWUubW9kdWxlI0hvbWVNb2R1bGUnIH0sXG4gIHsgcGF0aDogJ2NoYXQvOmluZGV4JywgbG9hZENoaWxkcmVuOiAnLi9jaGF0L2NoYXQubW9kdWxlI0NoYXRNb2R1bGUnIH0sXG5dO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbTmF0aXZlU2NyaXB0Um91dGVyTW9kdWxlLmZvclJvb3Qocm91dGVzKV0sXG4gIGV4cG9ydHM6IFtOYXRpdmVTY3JpcHRSb3V0ZXJNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBSb3V0aW5nTW9kdWxlIHsgfVxuIl19
--------------------------------------------------------------------------------
/chat/chat.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
18 |
19 |
22 |
23 |
26 |
27 |
30 |
31 |
34 |
35 |
38 |
39 |
42 |
43 |
46 |
47 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/core/chats.service.ts:
--------------------------------------------------------------------------------
1 | import { Injectable } from '@angular/core';
2 |
3 | import { Chat } from './models/chat.model';
4 | import { Message } from './models/message.model';
5 | import { SentStatus } from './models/sent-status.model';
6 |
7 | @Injectable()
8 | export class ChatsService {
9 | get chats(): Chat[] {
10 | return Array(200).fill('').map((ele, idx) => ({
11 | contact: {
12 | avatar: `https://randomuser.me/api/portraits/med/${
13 | idx % 2 === 0 ? 'women' : 'men'
14 | }/${idx}.jpg`,
15 | // Random names
16 | name: idx % 2 === 0 ?
17 | (['Leeanna Munoz', 'Yolanda Karlin', 'Trish Peer'][idx % 3])
18 | : (['Chuck Pulver', 'Oscar Blundell', 'Irwin Weathersby'][idx % 3]),
19 | },
20 | type: 'DIRECT',
21 | when: Date.now() - ((idx + 1) * 40 * 60 * 1000),
22 | muted: idx % 7 === 0,
23 | unread: parseInt(Math.random() * 10 + '', 10) - 3,
24 | // Non-sense phrases
25 | text: [
26 | '\u263A Yay, this course is amazing !!! \u270C',
27 | 'Sixty-four doesn\'t like paying taxes.',
28 | 'A river a thousand paces wide ever stuns the onlooker.',
29 | 'That stolen figurine is often one floor above you.',
30 | '\u263A Yay, this course is amazing !!! \u270C',
31 | 'Spam sat down once more.',
32 | 'Whiskey on the table set a treehouse on fire.',
33 | ][idx % 7],
34 | }));
35 | }
36 | getMessages(chat: Chat): Message[] {
37 | return Array(200).fill('').map((ele, idx) => ({
38 | // Non-sense phrases
39 | text: [
40 | '\u263A Yay, this course is amazing !!! \u270C',
41 | 'Sixty-four doesn\'t like paying taxes.',
42 | 'A river a thousand paces wide ever stuns the onlooker.',
43 | 'That stolen figurine is often one floor above you.',
44 | '\u263A Yay, this course is amazing !!! \u270C',
45 | 'Spam sat down once more!',
46 | 'Whiskey on the table set a treehouse on fire.',
47 | 'That memory we used to share stole the goods.',
48 | 'Clear water rains heavily',
49 | 'Style is interdependant on the relatedness of ' +
50 | 'motivation, subcultures, and management',
51 | ][Math.floor(Math.random() * 10)],
52 | chat,
53 | sender: Math.random() > .5 ? chat.contact : null,
54 | created: Date.now() - ((idx + 1) * 40 * 60 * 1000),
55 | sent: Math.floor(4 * Math.random()),
56 | }));
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/tools/postinstall.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 | const exec = require('child_process').exec;
4 |
5 | console.log('postinstall script running...');
6 |
7 | getPackageJson()
8 | .then(packageJsonData => {
9 | // results of glob parameter expansion can vary depending on shell, and its configuration
10 | // quote the parameter to use node glob syntax (using double quotes if you need it to run in Windows)
11 | addScriptCommand(packageJsonData, {
12 | commandName: 'lint',
13 | command: 'tslint \'app/**/*.ts\'',
14 | message: 'Updating package.json scripts for linting...'
15 | });
16 | addScriptCommand(packageJsonData, {
17 | commandName: 'lint:fix',
18 | command: 'tslint \'app/**/*.ts\' --fix',
19 | message: 'Updating package.json scripts for linting with auto fix...'
20 | });
21 | })
22 | .catch(err => {
23 | console.error(err);
24 | })
25 | .then(() => {
26 | // Remove tools folder including this script
27 | console.log('Removing tools directory...');
28 | deleteFolderSync(__dirname);
29 | });
30 |
31 | function getPackageJson() {
32 | return getAppRootFolder().then(appRootFolder => {
33 | const packageJsonPath = path.join(appRootFolder, 'package.json');
34 | const packageJson = require(packageJsonPath);
35 |
36 | if (!packageJson) {
37 | throw new Error('package.json file not found');
38 | }
39 |
40 | return {
41 | packageJson,
42 | packageJsonPath
43 | };
44 | });
45 | }
46 |
47 | function getAppRootFolder() {
48 | return new Promise((resolve, reject) => {
49 | // npm prefix returns the closest parent directory to contain a package.json file
50 | exec('cd .. && npm prefix', (err, stdout) => {
51 | if (err) {
52 | return reject(err);
53 | }
54 |
55 | resolve(stdout.toString().trim());
56 | });
57 | });
58 | }
59 |
60 | function addScriptCommand(packageJsonData, options) {
61 | return new Promise((resolve, reject) => {
62 | if (options.message) {
63 | console.log(options.message);
64 | }
65 |
66 | const { packageJson, packageJsonPath } = packageJsonData;
67 | if (!packageJson.scripts) {
68 | packageJson.scripts = {};
69 | }
70 |
71 | packageJson.scripts[options.commandName] = options.command;
72 |
73 | const updatedContent = JSON.stringify(packageJson);
74 | fs.writeFile(packageJsonPath, updatedContent, err => {
75 | if (err) {
76 | return reject(err);
77 | }
78 |
79 | resolve();
80 | });
81 | });
82 | }
83 |
84 | function deleteFolderSync(folderPath) {
85 | if (fs.statSync(folderPath).isDirectory()) {
86 | fs.readdirSync(folderPath).forEach(file => {
87 | const content = path.join(folderPath, file);
88 | const contentDirs = fs.statSync(content).isDirectory();
89 |
90 | if (contentDirs) {
91 | deleteFolderSync(content);
92 | } else {
93 | fs.unlinkSync(content);
94 | }
95 | });
96 |
97 | fs.rmdirSync(folderPath);
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------
/home/chats/chats.component.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var router_1 = require("nativescript-angular/router");
5 | var core_2 = require("../../core");
6 | var ChatsComponent = (function () {
7 | function ChatsComponent(chatsService, routerExtensions) {
8 | this.routerExtensions = routerExtensions;
9 | this.chats = [];
10 | this.chats = chatsService.chats;
11 | }
12 | ChatsComponent.prototype.goToChat = function (args) {
13 | var extras = {
14 | queryParams: {
15 | unread: 2,
16 | },
17 | };
18 | this.routerExtensions.navigate([
19 | 'chat',
20 | args.index,
21 | ], extras);
22 | };
23 | ChatsComponent = __decorate([
24 | core_1.Component({
25 | moduleId: module.id,
26 | selector: 'ns-chats',
27 | templateUrl: './chats.component.html',
28 | styleUrls: ['./chats.component.css'],
29 | }),
30 | __metadata("design:paramtypes", [core_2.ChatsService,
31 | router_1.RouterExtensions])
32 | ], ChatsComponent);
33 | return ChatsComponent;
34 | }());
35 | exports.ChatsComponent = ChatsComponent;
36 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2hhdHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQWtEO0FBRWxELHNEQUErRDtBQUUvRCxtQ0FBMEM7QUFRMUM7SUFFRSx3QkFDRSxZQUEwQixFQUNsQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUg1QyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBS1QsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxpQ0FBUSxHQUFSLFVBQVMsSUFBSTtRQUNYLElBQU0sTUFBTSxHQUFxQjtZQUMvQixXQUFXLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLENBQUM7YUFDVjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1lBQzdCLE1BQU07WUFDTixJQUFJLENBQUMsS0FBSztTQUNYLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDYixDQUFDO0lBbkJVLGNBQWM7UUFOMUIsZ0JBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNuQixRQUFRLEVBQUUsVUFBVTtZQUNwQixXQUFXLEVBQUUsd0JBQXdCO1lBQ3JDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixDQUFDO1NBQ3JDLENBQUM7eUNBSWdCLG1CQUFZO1lBQ0EseUJBQWdCO09BSmpDLGNBQWMsQ0FvQjFCO0lBQUQscUJBQUM7Q0FBQSxBQXBCRCxJQW9CQztBQXBCWSx3Q0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRXh0cmFzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvdXRlckV4dGVuc2lvbnMgfSBmcm9tICduYXRpdmVzY3JpcHQtYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBDaGF0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiAnbnMtY2hhdHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhdHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGF0cy5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENoYXRzQ29tcG9uZW50IHtcbiAgY2hhdHMgPSBbXTtcbiAgY29uc3RydWN0b3IoXG4gICAgY2hhdHNTZXJ2aWNlOiBDaGF0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXJFeHRlbnNpb25zOiBSb3V0ZXJFeHRlbnNpb25zLFxuICApIHtcbiAgICB0aGlzLmNoYXRzID0gY2hhdHNTZXJ2aWNlLmNoYXRzO1xuICB9XG5cbiAgZ29Ub0NoYXQoYXJncykge1xuICAgIGNvbnN0IGV4dHJhczogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIHVucmVhZDogMixcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLnJvdXRlckV4dGVuc2lvbnMubmF2aWdhdGUoW1xuICAgICAgJ2NoYXQnLFxuICAgICAgYXJncy5pbmRleCxcbiAgICBdLCBleHRyYXMpO1xuICB9XG59XG4iXX0=
--------------------------------------------------------------------------------
/home/home.module.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var forms_1 = require("nativescript-angular/forms");
5 | var nativescript_module_1 = require("nativescript-angular/nativescript.module");
6 | var nativescript_ngx_fonticon_1 = require("nativescript-ngx-fonticon");
7 | var chats_component_1 = require("./chats/chats.component");
8 | var short_when_pipe_1 = require("./chats/short-when.pipe");
9 | var home_routing_module_1 = require("./home-routing.module");
10 | var home_component_1 = require("./home.component");
11 | var tabs_component_1 = require("./tabs/tabs.component");
12 | var HomeModule = (function () {
13 | function HomeModule() {
14 | }
15 | HomeModule = __decorate([
16 | core_1.NgModule({
17 | imports: [
18 | nativescript_module_1.NativeScriptModule,
19 | forms_1.NativeScriptFormsModule,
20 | home_routing_module_1.HomeRoutingModule,
21 | nativescript_ngx_fonticon_1.TNSFontIconModule.forRoot({
22 | mdi: 'material-design-icons.css',
23 | }),
24 | ],
25 | declarations: [
26 | home_component_1.HomeComponent,
27 | tabs_component_1.TabsComponent,
28 | chats_component_1.ChatsComponent,
29 | short_when_pipe_1.ShortWhenPipe,
30 | ],
31 | schemas: [
32 | core_1.NO_ERRORS_SCHEMA,
33 | ],
34 | })
35 | ], HomeModule);
36 | return HomeModule;
37 | }());
38 | exports.HomeModule = HomeModule;
39 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJob21lLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUEyRDtBQUMzRCxvREFBcUU7QUFDckUsZ0ZBQThFO0FBQzlFLHVFQUE4RDtBQUU5RCwyREFBeUQ7QUFDekQsMkRBQXdEO0FBQ3hELDZEQUEwRDtBQUMxRCxtREFBaUQ7QUFDakQsd0RBQXNEO0FBcUJ0RDtJQUFBO0lBQTBCLENBQUM7SUFBZCxVQUFVO1FBbkJ0QixlQUFRLENBQUM7WUFDUixPQUFPLEVBQUU7Z0JBQ1Asd0NBQWtCO2dCQUNsQiwrQkFBdUI7Z0JBQ3ZCLHVDQUFpQjtnQkFDakIsNkNBQWlCLENBQUMsT0FBTyxDQUFDO29CQUN4QixHQUFHLEVBQUUsMkJBQTJCO2lCQUNqQyxDQUFDO2FBQ0g7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osOEJBQWE7Z0JBQ2IsOEJBQWE7Z0JBQ2IsZ0NBQWM7Z0JBQ2QsK0JBQWE7YUFDZDtZQUNELE9BQU8sRUFBRTtnQkFDUCx1QkFBZ0I7YUFDakI7U0FDRixDQUFDO09BQ1csVUFBVSxDQUFJO0lBQUQsaUJBQUM7Q0FBQSxBQUEzQixJQUEyQjtBQUFkLGdDQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIE5PX0VSUk9SU19TQ0hFTUEgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdGl2ZVNjcmlwdEZvcm1zTW9kdWxlIH0gZnJvbSAnbmF0aXZlc2NyaXB0LWFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmF0aXZlU2NyaXB0TW9kdWxlIH0gZnJvbSAnbmF0aXZlc2NyaXB0LWFuZ3VsYXIvbmF0aXZlc2NyaXB0Lm1vZHVsZSc7XG5pbXBvcnQgeyBUTlNGb250SWNvbk1vZHVsZSB9IGZyb20gJ25hdGl2ZXNjcmlwdC1uZ3gtZm9udGljb24nO1xuXG5pbXBvcnQgeyBDaGF0c0NvbXBvbmVudCB9IGZyb20gJy4vY2hhdHMvY2hhdHMuY29tcG9uZW50JztcbmltcG9ydCB7IFNob3J0V2hlblBpcGUgfSBmcm9tICcuL2NoYXRzL3Nob3J0LXdoZW4ucGlwZSc7XG5pbXBvcnQgeyBIb21lUm91dGluZ01vZHVsZSB9IGZyb20gJy4vaG9tZS1yb3V0aW5nLm1vZHVsZSc7XG5pbXBvcnQgeyBIb21lQ29tcG9uZW50IH0gZnJvbSAnLi9ob21lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJzQ29tcG9uZW50IH0gZnJvbSAnLi90YWJzL3RhYnMuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIE5hdGl2ZVNjcmlwdE1vZHVsZSxcbiAgICBOYXRpdmVTY3JpcHRGb3Jtc01vZHVsZSxcbiAgICBIb21lUm91dGluZ01vZHVsZSxcbiAgICBUTlNGb250SWNvbk1vZHVsZS5mb3JSb290KHtcbiAgICAgIG1kaTogJ21hdGVyaWFsLWRlc2lnbi1pY29ucy5jc3MnLFxuICAgIH0pLFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBIb21lQ29tcG9uZW50LFxuICAgIFRhYnNDb21wb25lbnQsXG4gICAgQ2hhdHNDb21wb25lbnQsXG4gICAgU2hvcnRXaGVuUGlwZSxcbiAgXSxcbiAgc2NoZW1hczogW1xuICAgIE5PX0VSUk9SU19TQ0hFTUEsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEhvbWVNb2R1bGUgeyB9XG4iXX0=
--------------------------------------------------------------------------------
/home/chats/short-when.pipe.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var common_1 = require("@angular/common");
4 | var core_1 = require("@angular/core");
5 | var platform_1 = require("platform");
6 | var isToday = require("date-fns/is_today");
7 | var isYesterday = require("date-fns/is_yesterday");
8 | var parse = require("date-fns/parse");
9 | var ShortWhenPipe = (function () {
10 | function ShortWhenPipe() {
11 | }
12 | ShortWhenPipe.prototype.transform = function (value) {
13 | var language = platform_1.device.language;
14 | if (platform_1.device.region) {
15 | language += "-" + platform_1.device.region;
16 | }
17 | var datePipe = new common_1.DatePipe(language);
18 | var parsedDate = parse(value);
19 | if (isToday(parsedDate)) {
20 | return datePipe.transform(parsedDate, 'shortTime');
21 | }
22 | if (isYesterday(parsedDate)) {
23 | return 'yesterday';
24 | }
25 | return datePipe.transform(parsedDate, 'shortDate');
26 | };
27 | ShortWhenPipe = __decorate([
28 | core_1.Pipe({
29 | name: 'shortWhen',
30 | pure: true,
31 | })
32 | ], ShortWhenPipe);
33 | return ShortWhenPipe;
34 | }());
35 | exports.ShortWhenPipe = ShortWhenPipe;
36 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnQtd2hlbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2hvcnQtd2hlbi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMENBQTJDO0FBQzNDLHNDQUFvRDtBQUNwRCxxQ0FBa0M7QUFFbEMsMkNBQTZDO0FBQzdDLG1EQUFxRDtBQUNyRCxzQ0FBd0M7QUFNeEM7SUFBQTtJQW9CQSxDQUFDO0lBbEJDLGlDQUFTLEdBQVQsVUFBVSxLQUE2QjtRQUNyQyxJQUFJLFFBQVEsR0FBRyxpQkFBTSxDQUFDLFFBQVEsQ0FBQztRQUMvQixFQUFFLENBQUMsQ0FBQyxpQkFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDbEIsUUFBUSxJQUFJLE1BQUksaUJBQU0sQ0FBQyxNQUFRLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQU0sUUFBUSxHQUFHLElBQUksaUJBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxJQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFuQlUsYUFBYTtRQUp6QixXQUFJLENBQUM7WUFDSixJQUFJLEVBQUUsV0FBVztZQUNqQixJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUM7T0FDVyxhQUFhLENBb0J6QjtJQUFELG9CQUFDO0NBQUEsQUFwQkQsSUFvQkM7QUFwQlksc0NBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZXZpY2UgfSBmcm9tICdwbGF0Zm9ybSc7XG5cbmltcG9ydCAqIGFzIGlzVG9kYXkgZnJvbSAnZGF0ZS1mbnMvaXNfdG9kYXknO1xuaW1wb3J0ICogYXMgaXNZZXN0ZXJkYXkgZnJvbSAnZGF0ZS1mbnMvaXNfeWVzdGVyZGF5JztcbmltcG9ydCAqIGFzIHBhcnNlIGZyb20gJ2RhdGUtZm5zL3BhcnNlJztcblxuQFBpcGUoe1xuICBuYW1lOiAnc2hvcnRXaGVuJyxcbiAgcHVyZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU2hvcnRXaGVuUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZSk6IHN0cmluZyB7XG4gICAgbGV0IGxhbmd1YWdlID0gZGV2aWNlLmxhbmd1YWdlO1xuICAgIGlmIChkZXZpY2UucmVnaW9uKSB7XG4gICAgICBsYW5ndWFnZSArPSBgLSR7ZGV2aWNlLnJlZ2lvbn1gO1xuICAgIH1cbiAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZShsYW5ndWFnZSk7XG4gICAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlKHZhbHVlKTtcblxuICAgIGlmIChpc1RvZGF5KHBhcnNlZERhdGUpKSB7XG4gICAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKHBhcnNlZERhdGUsICdzaG9ydFRpbWUnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNZZXN0ZXJkYXkocGFyc2VkRGF0ZSkpIHtcbiAgICAgIHJldHVybiAneWVzdGVyZGF5JztcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKHBhcnNlZERhdGUsICdzaG9ydERhdGUnKTtcbiAgfVxufVxuIl19
--------------------------------------------------------------------------------
/chat/chat.module.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var forms_1 = require("nativescript-angular/forms");
5 | var nativescript_module_1 = require("nativescript-angular/nativescript.module");
6 | var nativescript_ngx_fonticon_1 = require("nativescript-ngx-fonticon");
7 | var nativescript_ng_shadow_1 = require("nativescript-ng-shadow");
8 | var chat_routing_module_1 = require("./chat-routing.module");
9 | var chat_component_1 = require("./chat.component");
10 | var message_box_component_1 = require("./message-box/message-box.component");
11 | var messages_area_component_1 = require("./messages-area/messages-area.component");
12 | var ChatModule = (function () {
13 | function ChatModule() {
14 | }
15 | ChatModule = __decorate([
16 | core_1.NgModule({
17 | imports: [
18 | nativescript_module_1.NativeScriptModule,
19 | forms_1.NativeScriptFormsModule,
20 | chat_routing_module_1.ChatRoutingModule,
21 | nativescript_ng_shadow_1.NgShadowModule,
22 | nativescript_ngx_fonticon_1.TNSFontIconModule.forRoot({
23 | mdi: 'material-design-icons.css',
24 | }),
25 | ],
26 | declarations: [
27 | chat_component_1.ChatComponent,
28 | messages_area_component_1.MessagesAreaComponent,
29 | message_box_component_1.MessageBoxComponent,
30 | ],
31 | schemas: [
32 | core_1.NO_ERRORS_SCHEMA,
33 | ],
34 | })
35 | ], ChatModule);
36 | return ChatModule;
37 | }());
38 | exports.ChatModule = ChatModule;
39 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjaGF0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUEyRDtBQUMzRCxvREFBcUU7QUFDckUsZ0ZBQThFO0FBQzlFLHVFQUE4RDtBQUU5RCxpRUFBd0Q7QUFDeEQsNkRBQTBEO0FBQzFELG1EQUFpRDtBQUNqRCw2RUFBMEU7QUFDMUUsbUZBQWdGO0FBcUJoRjtJQUFBO0lBQTBCLENBQUM7SUFBZCxVQUFVO1FBbkJ0QixlQUFRLENBQUM7WUFDUixPQUFPLEVBQUU7Z0JBQ1Asd0NBQWtCO2dCQUNsQiwrQkFBdUI7Z0JBQ3ZCLHVDQUFpQjtnQkFDakIsdUNBQWM7Z0JBQ2QsNkNBQWlCLENBQUMsT0FBTyxDQUFDO29CQUN4QixHQUFHLEVBQUUsMkJBQTJCO2lCQUNqQyxDQUFDO2FBQ0g7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osOEJBQWE7Z0JBQ2IsK0NBQXFCO2dCQUNyQiwyQ0FBbUI7YUFDcEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsdUJBQWdCO2FBQ2pCO1NBQ0YsQ0FBQztPQUNXLFVBQVUsQ0FBSTtJQUFELGlCQUFDO0NBQUEsQUFBM0IsSUFBMkI7QUFBZCxnQ0FBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBOT19FUlJPUlNfU0NIRU1BIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXRpdmVTY3JpcHRGb3Jtc01vZHVsZSB9IGZyb20gJ25hdGl2ZXNjcmlwdC1hbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5hdGl2ZVNjcmlwdE1vZHVsZSB9IGZyb20gJ25hdGl2ZXNjcmlwdC1hbmd1bGFyL25hdGl2ZXNjcmlwdC5tb2R1bGUnO1xuaW1wb3J0IHsgVE5TRm9udEljb25Nb2R1bGUgfSBmcm9tICduYXRpdmVzY3JpcHQtbmd4LWZvbnRpY29uJztcblxuaW1wb3J0IHsgTmdTaGFkb3dNb2R1bGUgfSBmcm9tICduYXRpdmVzY3JpcHQtbmctc2hhZG93JztcbmltcG9ydCB7IENoYXRSb3V0aW5nTW9kdWxlIH0gZnJvbSAnLi9jaGF0LXJvdXRpbmcubW9kdWxlJztcbmltcG9ydCB7IENoYXRDb21wb25lbnQgfSBmcm9tICcuL2NoYXQuY29tcG9uZW50JztcbmltcG9ydCB7IE1lc3NhZ2VCb3hDb21wb25lbnQgfSBmcm9tICcuL21lc3NhZ2UtYm94L21lc3NhZ2UtYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZXNzYWdlc0FyZWFDb21wb25lbnQgfSBmcm9tICcuL21lc3NhZ2VzLWFyZWEvbWVzc2FnZXMtYXJlYS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgTmF0aXZlU2NyaXB0TW9kdWxlLFxuICAgIE5hdGl2ZVNjcmlwdEZvcm1zTW9kdWxlLFxuICAgIENoYXRSb3V0aW5nTW9kdWxlLFxuICAgIE5nU2hhZG93TW9kdWxlLFxuICAgIFROU0ZvbnRJY29uTW9kdWxlLmZvclJvb3Qoe1xuICAgICAgbWRpOiAnbWF0ZXJpYWwtZGVzaWduLWljb25zLmNzcycsXG4gICAgfSksXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIENoYXRDb21wb25lbnQsXG4gICAgTWVzc2FnZXNBcmVhQ29tcG9uZW50LFxuICAgIE1lc3NhZ2VCb3hDb21wb25lbnQsXG4gIF0sXG4gIHNjaGVtYXM6IFtcbiAgICBOT19FUlJPUlNfU0NIRU1BLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0TW9kdWxlIHsgfVxuIl19
--------------------------------------------------------------------------------
/app.module.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var nativescript_module_1 = require("nativescript-angular/nativescript.module");
5 | var router_1 = require("nativescript-angular/router");
6 | var platform = require("platform");
7 | var app_routing_module_1 = require("./app-routing.module");
8 | var app_component_1 = require("./app.component");
9 | var core_2 = require("./core");
10 | var nativescript_angular_1 = require("nativescript-angular");
11 | var nativescript_floatingactionbutton_1 = require("nativescript-floatingactionbutton");
12 | nativescript_angular_1.registerElement('Fab', function () { return nativescript_floatingactionbutton_1.Fab; });
13 | var AppModule = (function () {
14 | function AppModule() {
15 | }
16 | AppModule = __decorate([
17 | core_1.NgModule({
18 | bootstrap: [
19 | app_component_1.AppComponent,
20 | ],
21 | imports: [
22 | nativescript_module_1.NativeScriptModule,
23 | app_routing_module_1.AppRoutingModule,
24 | core_2.CoreModule,
25 | ],
26 | declarations: [
27 | app_component_1.AppComponent,
28 | ],
29 | providers: [
30 | { provide: core_1.NgModuleFactoryLoader, useClass: router_1.NSModuleFactoryLoader },
31 | { provide: 'platform', useValue: platform },
32 | ],
33 | schemas: [
34 | core_1.NO_ERRORS_SCHEMA,
35 | ],
36 | })
37 | ], AppModule);
38 | return AppModule;
39 | }());
40 | exports.AppModule = AppModule;
41 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFwcC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FDaUQ7QUFDakQsZ0ZBQThFO0FBQzlFLHNEQUFvRTtBQUNwRSxtQ0FBcUM7QUFFckMsMkRBQXdEO0FBQ3hELGlEQUErQztBQUMvQywrQkFBb0M7QUFFcEMsNkRBQXVEO0FBQ3ZELHVGQUF3RDtBQUV4RCxzQ0FBZSxDQUFDLEtBQUssRUFBRSxjQUFNLE9BQUEsdUNBQUcsRUFBSCxDQUFHLENBQUMsQ0FBQztBQXNCbEM7SUFBQTtJQUF5QixDQUFDO0lBQWIsU0FBUztRQXBCckIsZUFBUSxDQUFDO1lBQ04sU0FBUyxFQUFFO2dCQUNQLDRCQUFZO2FBQ2Y7WUFDRCxPQUFPLEVBQUU7Z0JBQ1Asd0NBQWtCO2dCQUNsQixxQ0FBZ0I7Z0JBQ2hCLGlCQUFVO2FBQ1g7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osNEJBQVk7YUFDYjtZQUNELFNBQVMsRUFBRTtnQkFDVCxFQUFFLE9BQU8sRUFBRSw0QkFBcUIsRUFBRSxRQUFRLEVBQUUsOEJBQXFCLEVBQUU7Z0JBQ25FLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO2FBQzVDO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLHVCQUFnQjthQUNqQjtTQUNKLENBQUM7T0FDVyxTQUFTLENBQUk7SUFBRCxnQkFBQztDQUFBLEFBQTFCLElBQTBCO0FBQWIsOEJBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTmdNb2R1bGVGYWN0b3J5TG9hZGVyLFxuICAgICAgICAgTk9fRVJST1JTX1NDSEVNQSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF0aXZlU2NyaXB0TW9kdWxlIH0gZnJvbSAnbmF0aXZlc2NyaXB0LWFuZ3VsYXIvbmF0aXZlc2NyaXB0Lm1vZHVsZSc7XG5pbXBvcnQgeyBOU01vZHVsZUZhY3RvcnlMb2FkZXIgfSBmcm9tICduYXRpdmVzY3JpcHQtYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0ICogYXMgcGxhdGZvcm0gZnJvbSAncGxhdGZvcm0nO1xuXG5pbXBvcnQgeyBBcHBSb3V0aW5nTW9kdWxlIH0gZnJvbSAnLi9hcHAtcm91dGluZy5tb2R1bGUnO1xuaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbmltcG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICcuL2NvcmUnO1xuXG5pbXBvcnQgeyByZWdpc3RlckVsZW1lbnQgfSBmcm9tICduYXRpdmVzY3JpcHQtYW5ndWxhcic7XG5pbXBvcnQgeyBGYWIgfSBmcm9tICduYXRpdmVzY3JpcHQtZmxvYXRpbmdhY3Rpb25idXR0b24nO1xuXG5yZWdpc3RlckVsZW1lbnQoJ0ZhYicsICgpID0+IEZhYik7XG5cbkBOZ01vZHVsZSh7XG4gICAgYm9vdHN0cmFwOiBbXG4gICAgICAgIEFwcENvbXBvbmVudCxcbiAgICBdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgIE5hdGl2ZVNjcmlwdE1vZHVsZSxcbiAgICAgIEFwcFJvdXRpbmdNb2R1bGUsXG4gICAgICBDb3JlTW9kdWxlLFxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICBBcHBDb21wb25lbnQsXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgIHsgcHJvdmlkZTogTmdNb2R1bGVGYWN0b3J5TG9hZGVyLCB1c2VDbGFzczogTlNNb2R1bGVGYWN0b3J5TG9hZGVyIH0sXG4gICAgICB7IHByb3ZpZGU6ICdwbGF0Zm9ybScsIHVzZVZhbHVlOiBwbGF0Zm9ybSB9LFxuICAgIF0sXG4gICAgc2NoZW1hczogW1xuICAgICAgTk9fRVJST1JTX1NDSEVNQSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBNb2R1bGUgeyB9XG4iXX0=
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/home/tabs/tabs.component.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var application = require("application");
5 | var TabsComponent = (function () {
6 | function TabsComponent(platform, changeDetectorRef) {
7 | this.platform = platform;
8 | this.changeDetectorRef = changeDetectorRef;
9 | }
10 | TabsComponent.prototype.ngOnInit = function () {
11 | var _this = this;
12 | this.selectedIndex = this.platform.isAndroid ? 1 : 3;
13 | if (this.platform.isAndroid) {
14 | application.android.on(application.AndroidApplication.activityBackPressedEvent, function (args) {
15 | if (_this.selectedIndex !== 1) {
16 | _this.selectedIndex = 1;
17 | args.cancel = true;
18 | _this.changeDetectorRef.detectChanges();
19 | }
20 | });
21 | }
22 | };
23 | TabsComponent = __decorate([
24 | core_1.Component({
25 | moduleId: module.id,
26 | selector: 'ns-tabs',
27 | templateUrl: './tabs.component.html',
28 | styleUrls: ['./tabs.component.css'],
29 | }),
30 | __param(0, core_1.Inject('platform')),
31 | __metadata("design:paramtypes", [Object, core_1.ChangeDetectorRef])
32 | ], TabsComponent);
33 | return TabsComponent;
34 | }());
35 | exports.TabsComponent = TabsComponent;
36 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0YWJzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUE2RTtBQUU3RSx5Q0FBMkM7QUFRM0M7SUFFRSx1QkFDNkIsUUFBUSxFQUMzQixpQkFBb0M7UUFEakIsYUFBUSxHQUFSLFFBQVEsQ0FBQTtRQUMzQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQzNDLENBQUM7SUFFSixnQ0FBUSxHQUFSO1FBQUEsaUJBZUM7UUFkQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFckQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzVCLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUNwQixXQUFXLENBQUMsa0JBQWtCLENBQUMsd0JBQXdCLEVBQ3ZELFVBQUMsSUFBeUM7Z0JBQ3hDLEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0IsS0FBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNuQixLQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBdEJVLGFBQWE7UUFOekIsZ0JBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNuQixRQUFRLEVBQUUsU0FBUztZQUNuQixXQUFXLEVBQUUsdUJBQXVCO1lBQ3BDLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO1NBQ3RDLENBQUM7UUFJRyxXQUFBLGFBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtpREFDUSx3QkFBaUI7T0FKbkMsYUFBYSxDQXVCekI7SUFBRCxvQkFBQztDQUFBLEFBdkJELElBdUJDO0FBdkJZLHNDQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuZHJvaWRBY3Rpdml0eUJhY2tQcmVzc2VkRXZlbnREYXRhIH0gZnJvbSAnYXBwbGljYXRpb24nO1xuaW1wb3J0ICogYXMgYXBwbGljYXRpb24gZnJvbSAnYXBwbGljYXRpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICAgIHNlbGVjdG9yOiAnbnMtdGFicycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdwbGF0Zm9ybScpIHB1YmxpYyBwbGF0Zm9ybSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMucGxhdGZvcm0uaXNBbmRyb2lkID8gMSA6IDM7XG5cbiAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0FuZHJvaWQpIHtcbiAgICAgIGFwcGxpY2F0aW9uLmFuZHJvaWQub24oXG4gICAgICAgIGFwcGxpY2F0aW9uLkFuZHJvaWRBcHBsaWNhdGlvbi5hY3Rpdml0eUJhY2tQcmVzc2VkRXZlbnQsXG4gICAgICAgIChhcmdzOiBBbmRyb2lkQWN0aXZpdHlCYWNrUHJlc3NlZEV2ZW50RGF0YSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggIT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDE7XG4gICAgICAgICAgICBhcmdzLmNhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # NativeScript WhatsApp Template  
2 |
3 | [![NPM version][npm-image]][npm-url]
4 | [![Downloads][downloads-image]][npm-url]
5 | [![Dependencies][dependencies-image]][npm-url]
6 | [![DevDependencies][dev-dependencies-image]][npm-url]
7 | [![Twitter Follow][twitter-image]][twitter-url]
8 |
9 | [npm-image]:http://img.shields.io/npm/v/nativescript-whatsapp-template.svg
10 | [npm-url]:https://npmjs.org/package/nativescript-whatsapp-template
11 | [downloads-image]:http://img.shields.io/npm/dt/nativescript-whatsapp-template.svg
12 | [dependencies-image]:https://david-dm.org/Especializa/nativescript-whatsapp-template/status.svg
13 | [dev-dependencies-image]:https://david-dm.org/Especializa/nativescript-whatsapp-template/dev-status.svg
14 | [twitter-image]:https://img.shields.io/twitter/follow/especializa.svg?style=social&label=Follow%20us
15 | [twitter-url]:https://twitter.com/especializa
16 |
17 | ## Installation
18 | From the command prompt, start a new Nativescript project doing:
19 | ```sh
20 | tns create your-project-name --template nativescript-whatsapp-template
21 | ```
22 | ## Introduction
23 | [](https://www.udemy.com/angular-native)
24 |
25 | This project is heavily based on [this repo](https://github.com/Especializa/nativesapp), created as part of the course:
26 | - [Aprenda Angular 2 + Nativescript e crie um WhatsApp](https://www.udemy.com/angular-native)
27 | **[CLICK HERE FOR ~90% OFF COUPON](https://www.udemy.com/angular-native/?couponCode=LANCAMENTO)**
28 |
29 | At the moment, only available in Portuguese, but English version is coming soon.
30 | Reach out to us on Twitter [![Twitter Follow][twitter-image]][twitter-url] if you want to push us to get it done sooner :)
31 |
32 | ### First run
33 | Right after creating a project and then npm install, it should be ready to go. Just move into your project's folder and execute the normal `tns` command to run any app:
34 | ```sh
35 | cd your-project-name
36 | npm i
37 | tns run
38 | ```
39 | Alternatively you can target any specifc platform:
40 | ```sh
41 | tns run android
42 | ```
43 | ```sh
44 | tns run ios
45 | ```
46 | That's pretty much what you should expect to see for the initial screen:
47 | #### - Screenshot 1: Chats tab (iOS / Android)
48 | [](https://www.udemy.com/angular-native)
49 |
50 | And that's the chat screen upon clicking on any chat item in the previous screen:
51 | #### - Screenshot 2: Chat screen (iOS / Android)
52 | [](https://www.udemy.com/angular-native)
53 | ### Removing initial data
54 | You might want to remove all the dummy data as well as some boilerplate code. The content shown relies upon the service `core/chats.services.ts` inside your `app` folder. Just replace the content returned there with what you need.
55 | #### Emptying chats.services.ts
56 | ```javascript
57 | import { Injectable } from '@angular/core';
58 |
59 | import { Chat } from './models/chat.model';
60 | import { Message } from './models/message.model';
61 |
62 | @Injectable()
63 | export class ChatsService {
64 | get chats(): Chat[] {
65 | return [];
66 | }
67 | getMessages(chat: Chat): Message[] {
68 | return [];
69 | }
70 | }
71 | ```
72 | Another advisable tweak is removing the line which slices the list of messages in the selected chat to get only a chunck of initial 50 ones. The reason for that is just to illustrate that not all messages should appear on landing on that screen, but we wouldn't like to sound too opinionated at this point telling you how to fetch and show your own data.
73 | #### Replace the slice command on messages-area.component.ts
74 | ```diff
75 | export class MessagesAreaComponent implements OnInit {
76 | // ...
77 | ngOnInit() {
78 | - this.messages = this.messages.slice(0, 50);
79 | + // your own code
80 | }
81 | // ...
82 | }
83 | ```
84 |
85 | ## Changelog
86 | - 1.0.0 Initial implementation
87 |
88 | ## License
89 | Apache License Version 2.0, January 2004
90 |
--------------------------------------------------------------------------------
/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "extent" : "full-screen",
5 | "idiom" : "iphone",
6 | "subtype" : "736h",
7 | "filename" : "Default-736h@3x.png",
8 | "minimum-system-version" : "8.0",
9 | "orientation" : "portrait",
10 | "scale" : "3x"
11 | },
12 | {
13 | "extent" : "full-screen",
14 | "idiom" : "iphone",
15 | "subtype" : "736h",
16 | "filename" : "Default-Landscape@3x.png",
17 | "minimum-system-version" : "8.0",
18 | "orientation" : "landscape",
19 | "scale" : "3x"
20 | },
21 | {
22 | "extent" : "full-screen",
23 | "idiom" : "iphone",
24 | "subtype" : "667h",
25 | "filename" : "Default-667h@2x.png",
26 | "minimum-system-version" : "8.0",
27 | "orientation" : "portrait",
28 | "scale" : "2x"
29 | },
30 | {
31 | "orientation" : "portrait",
32 | "idiom" : "iphone",
33 | "filename" : "Default@2x.png",
34 | "extent" : "full-screen",
35 | "minimum-system-version" : "7.0",
36 | "scale" : "2x"
37 | },
38 | {
39 | "extent" : "full-screen",
40 | "idiom" : "iphone",
41 | "subtype" : "retina4",
42 | "filename" : "Default-568h@2x.png",
43 | "minimum-system-version" : "7.0",
44 | "orientation" : "portrait",
45 | "scale" : "2x"
46 | },
47 | {
48 | "orientation" : "portrait",
49 | "idiom" : "ipad",
50 | "filename" : "Default-Portrait.png",
51 | "extent" : "full-screen",
52 | "minimum-system-version" : "7.0",
53 | "scale" : "1x"
54 | },
55 | {
56 | "orientation" : "landscape",
57 | "idiom" : "ipad",
58 | "filename" : "Default-Landscape.png",
59 | "extent" : "full-screen",
60 | "minimum-system-version" : "7.0",
61 | "scale" : "1x"
62 | },
63 | {
64 | "orientation" : "portrait",
65 | "idiom" : "ipad",
66 | "filename" : "Default-Portrait@2x.png",
67 | "extent" : "full-screen",
68 | "minimum-system-version" : "7.0",
69 | "scale" : "2x"
70 | },
71 | {
72 | "orientation" : "landscape",
73 | "idiom" : "ipad",
74 | "filename" : "Default-Landscape@2x.png",
75 | "extent" : "full-screen",
76 | "minimum-system-version" : "7.0",
77 | "scale" : "2x"
78 | },
79 | {
80 | "orientation" : "portrait",
81 | "idiom" : "iphone",
82 | "filename" : "Default.png",
83 | "extent" : "full-screen",
84 | "scale" : "1x"
85 | },
86 | {
87 | "orientation" : "portrait",
88 | "idiom" : "iphone",
89 | "filename" : "Default@2x.png",
90 | "extent" : "full-screen",
91 | "scale" : "2x"
92 | },
93 | {
94 | "orientation" : "portrait",
95 | "idiom" : "iphone",
96 | "filename" : "Default-568h@2x.png",
97 | "extent" : "full-screen",
98 | "subtype" : "retina4",
99 | "scale" : "2x"
100 | },
101 | {
102 | "orientation" : "portrait",
103 | "idiom" : "ipad",
104 | "extent" : "to-status-bar",
105 | "scale" : "1x"
106 | },
107 | {
108 | "orientation" : "portrait",
109 | "idiom" : "ipad",
110 | "filename" : "Default-Portrait.png",
111 | "extent" : "full-screen",
112 | "scale" : "1x"
113 | },
114 | {
115 | "orientation" : "landscape",
116 | "idiom" : "ipad",
117 | "extent" : "to-status-bar",
118 | "scale" : "1x"
119 | },
120 | {
121 | "orientation" : "landscape",
122 | "idiom" : "ipad",
123 | "filename" : "Default-Landscape.png",
124 | "extent" : "full-screen",
125 | "scale" : "1x"
126 | },
127 | {
128 | "orientation" : "portrait",
129 | "idiom" : "ipad",
130 | "extent" : "to-status-bar",
131 | "scale" : "2x"
132 | },
133 | {
134 | "orientation" : "portrait",
135 | "idiom" : "ipad",
136 | "filename" : "Default-Portrait@2x.png",
137 | "extent" : "full-screen",
138 | "scale" : "2x"
139 | },
140 | {
141 | "orientation" : "landscape",
142 | "idiom" : "ipad",
143 | "extent" : "to-status-bar",
144 | "scale" : "2x"
145 | },
146 | {
147 | "orientation" : "landscape",
148 | "idiom" : "ipad",
149 | "filename" : "Default-Landscape@2x.png",
150 | "extent" : "full-screen",
151 | "scale" : "2x"
152 | }
153 | ],
154 | "info" : {
155 | "version" : 1,
156 | "author" : "xcode"
157 | }
158 | }
--------------------------------------------------------------------------------
/chat/chat.component.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var router_1 = require("@angular/router");
5 | var router_2 = require("nativescript-angular/router");
6 | var core_2 = require("../core");
7 | var ChatComponent = (function () {
8 | function ChatComponent(route, chatsService, router, platform) {
9 | this.route = route;
10 | this.chatsService = chatsService;
11 | this.router = router;
12 | this.platform = platform;
13 | }
14 | ChatComponent.prototype.ngOnInit = function () {
15 | var _this = this;
16 | this.route.params.subscribe(function (params) {
17 | _this.chatIndex = +params.index;
18 | _this.chat = _this.chatsService.chats[_this.chatIndex];
19 | });
20 | this.route.queryParams.subscribe(function (params) {
21 | _this.unread = +params.unread;
22 | });
23 | this.getMessages();
24 | };
25 | ChatComponent.prototype.getMessages = function () {
26 | this.messages = this.chatsService.getMessages(this.chat);
27 | };
28 | ChatComponent.prototype.goBack = function () {
29 | this.router.back();
30 | };
31 | ChatComponent = __decorate([
32 | core_1.Component({
33 | moduleId: module.id,
34 | selector: 'ns-chat',
35 | templateUrl: './chat.component.html',
36 | styleUrls: ['./chat.component.css'],
37 | changeDetection: core_1.ChangeDetectionStrategy.OnPush,
38 | }),
39 | __param(3, core_1.Inject('platform')),
40 | __metadata("design:paramtypes", [router_1.ActivatedRoute,
41 | core_2.ChatsService,
42 | router_2.RouterExtensions, Object])
43 | ], ChatComponent);
44 | return ChatComponent;
45 | }());
46 | exports.ChatComponent = ChatComponent;
47 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjaGF0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUMrQztBQUMvQywwQ0FBaUQ7QUFDakQsc0RBQStEO0FBRS9ELGdDQUE2QztBQVU3QztJQU1FLHVCQUNVLEtBQXFCLEVBQ3JCLFlBQTBCLEVBQzFCLE1BQXdCLEVBQ0wsUUFBUTtRQUgzQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUNMLGFBQVEsR0FBUixRQUFRLENBQUE7SUFFckMsQ0FBQztJQUVELGdDQUFRLEdBQVI7UUFBQSxpQkFTQztRQVJDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFDLE1BQU07WUFDakMsS0FBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDL0IsS0FBSSxDQUFDLElBQUksR0FBRyxLQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBQyxNQUFNO1lBQ3RDLEtBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxtQ0FBVyxHQUFYO1FBQ0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELDhCQUFNLEdBQU47UUFDRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUEvQlUsYUFBYTtRQVB6QixnQkFBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFdBQVcsRUFBRSx1QkFBdUI7WUFDcEMsU0FBUyxFQUFFLENBQUMsc0JBQXNCLENBQUM7WUFDbkMsZUFBZSxFQUFFLDhCQUF1QixDQUFDLE1BQU07U0FDaEQsQ0FBQztRQVdHLFdBQUEsYUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO3lDQUhKLHVCQUFjO1lBQ1AsbUJBQVk7WUFDbEIseUJBQWdCO09BVHZCLGFBQWEsQ0FnQ3pCO0lBQUQsb0JBQUM7Q0FBQSxBQWhDRCxJQWdDQztBQWhDWSxzQ0FBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsXG4gICAgICAgICBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUm91dGVyRXh0ZW5zaW9ucyB9IGZyb20gJ25hdGl2ZXNjcmlwdC1hbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IENoYXQsIENoYXRzU2VydmljZSB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHtNZXNzYWdlfSBmcm9tICcuLi9jb3JlL21vZGVscy9tZXNzYWdlLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiAnbnMtY2hhdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGF0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhdC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY2hhdEluZGV4OiBudW1iZXI7XG4gIGNoYXQ6IENoYXQ7XG4gIHVucmVhZDogbnVtYmVyO1xuICBtZXNzYWdlczogTWVzc2FnZVtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgY2hhdHNTZXJ2aWNlOiBDaGF0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlckV4dGVuc2lvbnMsXG4gICAgQEluamVjdCgncGxhdGZvcm0nKSBwdWJsaWMgcGxhdGZvcm0sXG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgIHRoaXMuY2hhdEluZGV4ID0gK3BhcmFtcy5pbmRleDtcbiAgICAgIHRoaXMuY2hhdCA9IHRoaXMuY2hhdHNTZXJ2aWNlLmNoYXRzW3RoaXMuY2hhdEluZGV4XTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICB0aGlzLnVucmVhZCA9ICtwYXJhbXMudW5yZWFkO1xuICAgIH0pO1xuICAgIHRoaXMuZ2V0TWVzc2FnZXMoKTtcbiAgfVxuXG4gIGdldE1lc3NhZ2VzKCkge1xuICAgIHRoaXMubWVzc2FnZXMgPSB0aGlzLmNoYXRzU2VydmljZS5nZXRNZXNzYWdlcyh0aGlzLmNoYXQpO1xuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIHRoaXMucm91dGVyLmJhY2soKTtcbiAgfVxufVxuIl19
--------------------------------------------------------------------------------
/chat/messages-area/messages-area.component.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var core_2 = require("../../core");
5 | var MessagesAreaComponent = (function () {
6 | function MessagesAreaComponent(platform) {
7 | this.platform = platform;
8 | }
9 | MessagesAreaComponent.prototype.ngOnInit = function () {
10 | this.messages = this.messages.slice(0, 50);
11 | };
12 | MessagesAreaComponent.prototype.isContinuation = function (idx) {
13 | return (!this.messages[idx].sender && this.messages[idx - 1] &&
14 | !this.messages[idx - 1].sender) ||
15 | (this.messages[idx].sender && this.messages[idx - 1] &&
16 | this.messages[idx - 1].sender);
17 | };
18 | MessagesAreaComponent.prototype.getIcon = function (message) {
19 | switch (message.sent) {
20 | case core_2.SentStatus.NOT_SENT:
21 | return 'mdi-access-time';
22 | case core_2.SentStatus.SENT:
23 | return 'mdi-done';
24 | default:
25 | return 'mdi-done-all';
26 | }
27 | };
28 | MessagesAreaComponent.prototype.isViewed = function (message) {
29 | return message.sent === core_2.SentStatus.VIEWED;
30 | };
31 | __decorate([
32 | core_1.Input(),
33 | __metadata("design:type", Array)
34 | ], MessagesAreaComponent.prototype, "messages", void 0);
35 | MessagesAreaComponent = __decorate([
36 | core_1.Component({
37 | moduleId: module.id,
38 | selector: 'ns-messages-area',
39 | templateUrl: './messages-area.component.html',
40 | styleUrls: ['./messages-area.component.css'],
41 | changeDetection: core_1.ChangeDetectionStrategy.OnPush,
42 | }),
43 | __param(0, core_1.Inject('platform')),
44 | __metadata("design:paramtypes", [Object])
45 | ], MessagesAreaComponent);
46 | return MessagesAreaComponent;
47 | }());
48 | exports.MessagesAreaComponent = MessagesAreaComponent;
49 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMtYXJlYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtZXNzYWdlcy1hcmVhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUNzRDtBQUN0RCxtQ0FBaUQ7QUFTakQ7SUFHRSwrQkFBdUMsUUFBUTtRQUFSLGFBQVEsR0FBUixRQUFRLENBQUE7SUFBRyxDQUFDO0lBRW5ELHdDQUFRLEdBQVI7UUFDRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsOENBQWMsR0FBZCxVQUFlLEdBQVc7UUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDcEQsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDaEMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCx1Q0FBTyxHQUFQLFVBQVEsT0FBZ0I7UUFDdEIsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckIsS0FBSyxpQkFBVSxDQUFDLFFBQVE7Z0JBQ3RCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztZQUMzQixLQUFLLGlCQUFVLENBQUMsSUFBSTtnQkFDbEIsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUNwQjtnQkFDRSxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsd0NBQVEsR0FBUixVQUFTLE9BQWdCO1FBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLGlCQUFVLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUM7SUE1QlE7UUFBUixZQUFLLEVBQUU7OzJEQUFxQjtJQURsQixxQkFBcUI7UUFQakMsZ0JBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNuQixRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLFdBQVcsRUFBRSxnQ0FBZ0M7WUFDN0MsU0FBUyxFQUFFLENBQUMsK0JBQStCLENBQUM7WUFDNUMsZUFBZSxFQUFFLDhCQUF1QixDQUFDLE1BQU07U0FDaEQsQ0FBQztRQUlhLFdBQUEsYUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBOztPQUhwQixxQkFBcUIsQ0E4QmpDO0lBQUQsNEJBQUM7Q0FBQSxBQTlCRCxJQThCQztBQTlCWSxzREFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LFxuICAgICAgICAgSW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZXNzYWdlLCBTZW50U3RhdHVzIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogJ25zLW1lc3NhZ2VzLWFyZWEnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZXMtYXJlYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lc3NhZ2VzLWFyZWEuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZXNBcmVhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbWVzc2FnZXM6IE1lc3NhZ2VbXTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KCdwbGF0Zm9ybScpIHB1YmxpYyBwbGF0Zm9ybSkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlcy5zbGljZSgwLCA1MCk7XG4gIH1cblxuICBpc0NvbnRpbnVhdGlvbihpZHg6IG51bWJlcikge1xuICAgIHJldHVybiAoIXRoaXMubWVzc2FnZXNbaWR4XS5zZW5kZXIgJiYgdGhpcy5tZXNzYWdlc1tpZHggLSAxXSAmJlxuICAgICAgICAgICAgIXRoaXMubWVzc2FnZXNbaWR4IC0gMV0uc2VuZGVyKSB8fFxuICAgICAgICAgICAodGhpcy5tZXNzYWdlc1tpZHhdLnNlbmRlciAmJiB0aGlzLm1lc3NhZ2VzW2lkeCAtIDFdICYmXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzW2lkeCAtIDFdLnNlbmRlcik7XG4gIH1cblxuICBnZXRJY29uKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcbiAgICBzd2l0Y2ggKG1lc3NhZ2Uuc2VudCkge1xuICAgICAgY2FzZSBTZW50U3RhdHVzLk5PVF9TRU5UOlxuICAgICAgICByZXR1cm4gJ21kaS1hY2Nlc3MtdGltZSc7XG4gICAgICBjYXNlIFNlbnRTdGF0dXMuU0VOVDpcbiAgICAgICAgcmV0dXJuICdtZGktZG9uZSc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ21kaS1kb25lLWFsbCc7XG4gICAgfVxuICB9XG5cbiAgaXNWaWV3ZWQobWVzc2FnZTogTWVzc2FnZSkge1xuICAgIHJldHVybiBtZXNzYWdlLnNlbnQgPT09IFNlbnRTdGF0dXMuVklFV0VEO1xuICB9XG59XG4iXX0=
--------------------------------------------------------------------------------
/core/chats.service.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | var core_1 = require("@angular/core");
4 | var ChatsService = (function () {
5 | function ChatsService() {
6 | }
7 | Object.defineProperty(ChatsService.prototype, "chats", {
8 | get: function () {
9 | return Array(200).fill('').map(function (ele, idx) { return ({
10 | contact: {
11 | avatar: "https://randomuser.me/api/portraits/med/" + (idx % 2 === 0 ? 'women' : 'men') + "/" + idx + ".jpg",
12 | // Random names
13 | name: idx % 2 === 0 ?
14 | (['Leeanna Munoz', 'Yolanda Karlin', 'Trish Peer'][idx % 3])
15 | : (['Chuck Pulver', 'Oscar Blundell', 'Irwin Weathersby'][idx % 3]),
16 | },
17 | type: 'DIRECT',
18 | when: Date.now() - ((idx + 1) * 40 * 60 * 1000),
19 | muted: idx % 7 === 0,
20 | unread: parseInt(Math.random() * 10 + '', 10) - 3,
21 | // Non-sense phrases
22 | text: [
23 | '\u263A Yay, this course is amazing !!! \u270C',
24 | 'Sixty-four doesn\'t like paying taxes.',
25 | 'A river a thousand paces wide ever stuns the onlooker.',
26 | 'That stolen figurine is often one floor above you.',
27 | '\u263A Yay, this course is amazing !!! \u270C',
28 | 'Spam sat down once more.',
29 | 'Whiskey on the table set a treehouse on fire.',
30 | ][idx % 7],
31 | }); });
32 | },
33 | enumerable: true,
34 | configurable: true
35 | });
36 | ChatsService.prototype.getMessages = function (chat) {
37 | return Array(200).fill('').map(function (ele, idx) { return ({
38 | // Non-sense phrases
39 | text: [
40 | '\u263A Yay, this course is amazing !!! \u270C',
41 | 'Sixty-four doesn\'t like paying taxes.',
42 | 'A river a thousand paces wide ever stuns the onlooker.',
43 | 'That stolen figurine is often one floor above you.',
44 | '\u263A Yay, this course is amazing !!! \u270C',
45 | 'Spam sat down once more!',
46 | 'Whiskey on the table set a treehouse on fire.',
47 | 'That memory we used to share stole the goods.',
48 | 'Clear water rains heavily',
49 | 'Style is interdependant on the relatedness of ' +
50 | 'motivation, subcultures, and management',
51 | ][Math.floor(Math.random() * 10)],
52 | chat: chat,
53 | sender: Math.random() > .5 ? chat.contact : null,
54 | created: Date.now() - ((idx + 1) * 40 * 60 * 1000),
55 | sent: Math.floor(4 * Math.random()),
56 | }); });
57 | };
58 | ChatsService = __decorate([
59 | core_1.Injectable()
60 | ], ChatsService);
61 | return ChatsService;
62 | }());
63 | exports.ChatsService = ChatsService;
64 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNoYXRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBMkM7QUFPM0M7SUFBQTtJQWtEQSxDQUFDO0lBakRDLHNCQUFJLCtCQUFLO2FBQVQ7WUFDRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBQyxHQUFHLEVBQUUsR0FBRyxJQUFLLE9BQUEsQ0FBQztnQkFDNUMsT0FBTyxFQUFFO29CQUNQLE1BQU0sRUFBRSw4Q0FDRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEdBQUcsS0FBSyxVQUM3QixHQUFHLFNBQU07b0JBQ3JCLGVBQWU7b0JBQ2YsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzt3QkFDYixDQUFDLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQzswQkFDNUQsQ0FBQyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDeEU7Z0JBQ0QsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUMvQyxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUNwQixNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7Z0JBQ2pELG9CQUFvQjtnQkFDcEIsSUFBSSxFQUFFO29CQUNKLCtDQUErQztvQkFDL0Msd0NBQXdDO29CQUN4Qyx3REFBd0Q7b0JBQ3hELG9EQUFvRDtvQkFDcEQsK0NBQStDO29CQUMvQywwQkFBMEI7b0JBQzFCLCtDQUErQztpQkFDaEQsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2FBQ1gsQ0FBQyxFQXhCMkMsQ0F3QjNDLENBQUMsQ0FBQztRQUNOLENBQUM7OztPQUFBO0lBQ0Qsa0NBQVcsR0FBWCxVQUFZLElBQVU7UUFDcEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSyxPQUFBLENBQUM7WUFDNUMsb0JBQW9CO1lBQ3BCLElBQUksRUFBRTtnQkFDSiwrQ0FBK0M7Z0JBQy9DLHdDQUF3QztnQkFDeEMsd0RBQXdEO2dCQUN4RCxvREFBb0Q7Z0JBQ3BELCtDQUErQztnQkFDL0MsMEJBQTBCO2dCQUMxQiwrQ0FBK0M7Z0JBQy9DLCtDQUErQztnQkFDL0MsMkJBQTJCO2dCQUMzQixnREFBZ0Q7b0JBQzlDLHlDQUF5QzthQUM1QyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pDLElBQUksTUFBQTtZQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSTtZQUNoRCxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDbEQsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNwQyxDQUFDLEVBbkIyQyxDQW1CM0MsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQWpEVSxZQUFZO1FBRHhCLGlCQUFVLEVBQUU7T0FDQSxZQUFZLENBa0R4QjtJQUFELG1CQUFDO0NBQUEsQUFsREQsSUFrREM7QUFsRFksb0NBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENoYXQgfSBmcm9tICcuL21vZGVscy9jaGF0Lm1vZGVsJztcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL21vZGVscy9tZXNzYWdlLm1vZGVsJztcbmltcG9ydCB7IFNlbnRTdGF0dXMgfSBmcm9tICcuL21vZGVscy9zZW50LXN0YXR1cy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDaGF0c1NlcnZpY2Uge1xuICBnZXQgY2hhdHMoKTogQ2hhdFtdIHtcbiAgICByZXR1cm4gQXJyYXkoMjAwKS5maWxsKCcnKS5tYXAoKGVsZSwgaWR4KSA9PiAoe1xuICAgICAgY29udGFjdDoge1xuICAgICAgICBhdmF0YXI6IGBodHRwczovL3JhbmRvbXVzZXIubWUvYXBpL3BvcnRyYWl0cy9tZWQvJHtcbiAgICAgICAgICAgICAgICAgIGlkeCAlIDIgPT09IDAgPyAnd29tZW4nIDogJ21lbidcbiAgICAgICAgICAgICAgICB9LyR7aWR4fS5qcGdgLFxuICAgICAgICAvLyBSYW5kb20gbmFtZXNcbiAgICAgICAgbmFtZTogaWR4ICUgMiA9PT0gMCA/XG4gICAgICAgICAgICAgIChbJ0xlZWFubmEgTXVub3onLCAnWW9sYW5kYSBLYXJsaW4nLCAnVHJpc2ggUGVlciddW2lkeCAlIDNdKVxuICAgICAgICAgICAgOiAoWydDaHVjayBQdWx2ZXInLCAnT3NjYXIgQmx1bmRlbGwnLCAnSXJ3aW4gV2VhdGhlcnNieSddW2lkeCAlIDNdKSxcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnRElSRUNUJyxcbiAgICAgIHdoZW46IERhdGUubm93KCkgLSAoKGlkeCArIDEpICogNDAgKiA2MCAqIDEwMDApLFxuICAgICAgbXV0ZWQ6IGlkeCAlIDcgPT09IDAsXG4gICAgICB1bnJlYWQ6IHBhcnNlSW50KE1hdGgucmFuZG9tKCkgKiAxMCArICcnLCAxMCkgLSAzLFxuICAgICAgLy8gTm9uLXNlbnNlIHBocmFzZXNcbiAgICAgIHRleHQ6IFtcbiAgICAgICAgJ1xcdTI2M0EgWWF5LCB0aGlzIGNvdXJzZSBpcyBhbWF6aW5nICEhISBcXHUyNzBDJyxcbiAgICAgICAgJ1NpeHR5LWZvdXIgZG9lc25cXCd0IGxpa2UgcGF5aW5nIHRheGVzLicsXG4gICAgICAgICdBIHJpdmVyIGEgdGhvdXNhbmQgcGFjZXMgd2lkZSBldmVyIHN0dW5zIHRoZSBvbmxvb2tlci4nLFxuICAgICAgICAnVGhhdCBzdG9sZW4gZmlndXJpbmUgaXMgb2Z0ZW4gb25lIGZsb29yIGFib3ZlIHlvdS4nLFxuICAgICAgICAnXFx1MjYzQSBZYXksIHRoaXMgY291cnNlIGlzIGFtYXppbmcgISEhIFxcdTI3MEMnLFxuICAgICAgICAnU3BhbSBzYXQgZG93biBvbmNlIG1vcmUuJyxcbiAgICAgICAgJ1doaXNrZXkgb24gdGhlIHRhYmxlIHNldCBhIHRyZWVob3VzZSBvbiBmaXJlLicsXG4gICAgICBdW2lkeCAlIDddLFxuICAgIH0pKTtcbiAgfVxuICBnZXRNZXNzYWdlcyhjaGF0OiBDaGF0KTogTWVzc2FnZVtdIHtcbiAgICByZXR1cm4gQXJyYXkoMjAwKS5maWxsKCcnKS5tYXAoKGVsZSwgaWR4KSA9PiAoe1xuICAgICAgLy8gTm9uLXNlbnNlIHBocmFzZXNcbiAgICAgIHRleHQ6IFtcbiAgICAgICAgJ1xcdTI2M0EgWWF5LCB0aGlzIGNvdXJzZSBpcyBhbWF6aW5nICEhISBcXHUyNzBDJyxcbiAgICAgICAgJ1NpeHR5LWZvdXIgZG9lc25cXCd0IGxpa2UgcGF5aW5nIHRheGVzLicsXG4gICAgICAgICdBIHJpdmVyIGEgdGhvdXNhbmQgcGFjZXMgd2lkZSBldmVyIHN0dW5zIHRoZSBvbmxvb2tlci4nLFxuICAgICAgICAnVGhhdCBzdG9sZW4gZmlndXJpbmUgaXMgb2Z0ZW4gb25lIGZsb29yIGFib3ZlIHlvdS4nLFxuICAgICAgICAnXFx1MjYzQSBZYXksIHRoaXMgY291cnNlIGlzIGFtYXppbmcgISEhIFxcdTI3MEMnLFxuICAgICAgICAnU3BhbSBzYXQgZG93biBvbmNlIG1vcmUhJyxcbiAgICAgICAgJ1doaXNrZXkgb24gdGhlIHRhYmxlIHNldCBhIHRyZWVob3VzZSBvbiBmaXJlLicsXG4gICAgICAgICdUaGF0IG1lbW9yeSB3ZSB1c2VkIHRvIHNoYXJlIHN0b2xlIHRoZSBnb29kcy4nLFxuICAgICAgICAnQ2xlYXIgd2F0ZXIgcmFpbnMgaGVhdmlseScsXG4gICAgICAgICdTdHlsZSBpcyBpbnRlcmRlcGVuZGFudCBvbiB0aGUgcmVsYXRlZG5lc3Mgb2YgJyArXG4gICAgICAgICAgJ21vdGl2YXRpb24sIHN1YmN1bHR1cmVzLCBhbmQgbWFuYWdlbWVudCcsXG4gICAgICBdW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKV0sXG4gICAgICBjaGF0LFxuICAgICAgc2VuZGVyOiBNYXRoLnJhbmRvbSgpID4gLjUgPyBjaGF0LmNvbnRhY3QgOiBudWxsLFxuICAgICAgY3JlYXRlZDogRGF0ZS5ub3coKSAtICgoaWR4ICsgMSkgKiA0MCAqIDYwICogMTAwMCksXG4gICAgICBzZW50OiBNYXRoLmZsb29yKDQgKiBNYXRoLnJhbmRvbSgpKSxcbiAgICB9KSk7XG4gIH1cbn1cbiJdfQ==
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/home/chats/chats.component.css:
--------------------------------------------------------------------------------
1 | .c-white{color:#fff}.c-bg-white{background-color:#fff}.c-black{color:#000}.c-bg-black{background-color:#000}.c-aqua{color:#00caab}.c-bg-aqua{background-color:#00caab}.c-blue{color:#3d5afe}.c-bg-blue{background-color:#3d5afe}.c-charcoal{color:#303030}.c-bg-charcoal{background-color:#303030}.c-brown{color:#795548}.c-bg-brown{background-color:#795548}.c-forest{color:#006968}.c-bg-forest{background-color:#006968}.c-grey{color:#e0e0e0}.c-bg-grey{background-color:#e0e0e0}.c-grey-light{color:#bababa}.c-bg-grey-light{background-color:#bababa}.c-grey-dark{color:#5c687c}.c-bg-grey-dark{background-color:#5c687c}.c-purple{color:#8130ff}.c-bg-purple{background-color:#8130ff}.c-lemon{color:#ffea00}.c-bg-lemon{background-color:#ffea00}.c-lime{color:#aee406}.c-bg-lime{background-color:#aee406}.c-orange{color:#f57c00}.c-bg-orange{background-color:#f57c00}.c-ruby{color:#ff1744}.c-bg-ruby{background-color:#ff1744}.c-sky{color:#30bcff}.c-bg-sky{background-color:#30bcff}.w-full{width:100%}.w-100{width:100}.h-full{height:100%}.h-100{height:100}.m-0{margin:0}.m-t-0{margin-top:0}.m-r-0{margin-right:0}.m-b-0{margin-bottom:0}.m-l-0{margin-left:0}.m-x-0{margin-right:0;margin-left:0}.m-y-0{margin-top:0;margin-bottom:0}.m-2{margin:2}.m-t-2{margin-top:2}.m-r-2{margin-right:2}.m-b-2{margin-bottom:2}.m-l-2{margin-left:2}.m-x-2{margin-right:2;margin-left:2}.m-y-2{margin-top:2;margin-bottom:2}.m-4{margin:4}.m-t-4{margin-top:4}.m-r-4{margin-right:4}.m-b-4{margin-bottom:4}.m-l-4{margin-left:4}.m-x-4{margin-right:4;margin-left:4}.m-y-4{margin-top:4;margin-bottom:4}.m-5{margin:5}.m-t-5{margin-top:5}.m-r-5{margin-right:5}.m-b-5{margin-bottom:5}.m-l-5{margin-left:5}.m-x-5{margin-right:5;margin-left:5}.m-y-5{margin-top:5;margin-bottom:5}.m-8{margin:8}.m-t-8{margin-top:8}.m-r-8{margin-right:8}.m-b-8{margin-bottom:8}.m-l-8{margin-left:8}.m-x-8{margin-right:8;margin-left:8}.m-y-8{margin-top:8;margin-bottom:8}.m-10{margin:10}.m-t-10{margin-top:10}.m-r-10{margin-right:10}.m-b-10{margin-bottom:10}.m-l-10{margin-left:10}.m-x-10{margin-right:10;margin-left:10}.m-y-10{margin-top:10;margin-bottom:10}.m-12{margin:12}.m-t-12{margin-top:12}.m-r-12{margin-right:12}.m-b-12{margin-bottom:12}.m-l-12{margin-left:12}.m-x-12{margin-right:12;margin-left:12}.m-y-12{margin-top:12;margin-bottom:12}.m-15{margin:15}.m-t-15{margin-top:15}.m-r-15{margin-right:15}.m-b-15{margin-bottom:15}.m-l-15{margin-left:15}.m-x-15{margin-right:15;margin-left:15}.m-y-15{margin-top:15;margin-bottom:15}.m-16{margin:16}.m-t-16{margin-top:16}.m-r-16{margin-right:16}.m-b-16{margin-bottom:16}.m-l-16{margin-left:16}.m-x-16{margin-right:16;margin-left:16}.m-y-16{margin-top:16;margin-bottom:16}.m-20{margin:20}.m-t-20{margin-top:20}.m-r-20{margin-right:20}.m-b-20{margin-bottom:20}.m-l-20{margin-left:20}.m-x-20{margin-right:20;margin-left:20}.m-y-20{margin-top:20;margin-bottom:20}.m-24{margin:24}.m-t-24{margin-top:24}.m-r-24{margin-right:24}.m-b-24{margin-bottom:24}.m-l-24{margin-left:24}.m-x-24{margin-right:24;margin-left:24}.m-y-24{margin-top:24;margin-bottom:24}.m-25{margin:25}.m-t-25{margin-top:25}.m-r-25{margin-right:25}.m-b-25{margin-bottom:25}.m-l-25{margin-left:25}.m-x-25{margin-right:25;margin-left:25}.m-y-25{margin-top:25;margin-bottom:25}.m-28{margin:28}.m-t-28{margin-top:28}.m-r-28{margin-right:28}.m-b-28{margin-bottom:28}.m-l-28{margin-left:28}.m-x-28{margin-right:28;margin-left:28}.m-y-28{margin-top:28;margin-bottom:28}.m-30{margin:30}.m-t-30{margin-top:30}.m-r-30{margin-right:30}.m-b-30{margin-bottom:30}.m-l-30{margin-left:30}.m-x-30{margin-right:30;margin-left:30}.m-y-30{margin-top:30;margin-bottom:30}.p-0{padding:0}.p-t-0{padding-top:0}.p-r-0{padding-right:0}.p-b-0{padding-bottom:0}.p-l-0{padding-left:0}.p-x-0{padding-right:0;padding-left:0}.p-y-0{padding-top:0;padding-bottom:0}.p-2{padding:2}.p-t-2{padding-top:2}.p-r-2{padding-right:2}.p-b-2{padding-bottom:2}.p-l-2{padding-left:2}.p-x-2{padding-right:2;padding-left:2}.p-y-2{padding-top:2;padding-bottom:2}.p-4{padding:4}.p-t-4{padding-top:4}.p-r-4{padding-right:4}.p-b-4{padding-bottom:4}.p-l-4{padding-left:4}.p-x-4{padding-right:4;padding-left:4}.p-y-4{padding-top:4;padding-bottom:4}.p-5{padding:5}.p-t-5{padding-top:5}.p-r-5{padding-right:5}.p-b-5{padding-bottom:5}.p-l-5{padding-left:5}.p-x-5{padding-right:5;padding-left:5}.p-y-5{padding-top:5;padding-bottom:5}.p-8{padding:8}.p-t-8{padding-top:8}.p-r-8{padding-right:8}.p-b-8{padding-bottom:8}.p-l-8{padding-left:8}.p-x-8{padding-right:8;padding-left:8}.p-y-8{padding-top:8;padding-bottom:8}.p-10{padding:10}.p-t-10{padding-top:10}.p-r-10{padding-right:10}.p-b-10{padding-bottom:10}.p-l-10{padding-left:10}.p-x-10{padding-right:10;padding-left:10}.p-y-10{padding-top:10;padding-bottom:10}.p-12{padding:12}.p-t-12{padding-top:12}.p-r-12{padding-right:12}.p-b-12{padding-bottom:12}.p-l-12{padding-left:12}.p-x-12{padding-right:12;padding-left:12}.p-y-12{padding-top:12;padding-bottom:12}.p-15{padding:15}.p-t-15{padding-top:15}.p-r-15{padding-right:15}.p-b-15{padding-bottom:15}.p-l-15{padding-left:15}.p-x-15{padding-right:15;padding-left:15}.p-y-15{padding-top:15;padding-bottom:15}.p-16{padding:16}.p-t-16{padding-top:16}.p-r-16{padding-right:16}.p-b-16{padding-bottom:16}.p-l-16{padding-left:16}.p-x-16{padding-right:16;padding-left:16}.p-y-16{padding-top:16;padding-bottom:16}.p-20{padding:20}.p-t-20{padding-top:20}.p-r-20{padding-right:20}.p-b-20{padding-bottom:20}.p-l-20{padding-left:20}.p-x-20{padding-right:20;padding-left:20}.p-y-20{padding-top:20;padding-bottom:20}.p-24{padding:24}.p-t-24{padding-top:24}.p-r-24{padding-right:24}.p-b-24{padding-bottom:24}.p-l-24{padding-left:24}.p-x-24{padding-right:24;padding-left:24}.p-y-24{padding-top:24;padding-bottom:24}.p-25{padding:25}.p-t-25{padding-top:25}.p-r-25{padding-right:25}.p-b-25{padding-bottom:25}.p-l-25{padding-left:25}.p-x-25{padding-right:25;padding-left:25}.p-y-25{padding-top:25;padding-bottom:25}.p-28{padding:28}.p-t-28{padding-top:28}.p-r-28{padding-right:28}.p-b-28{padding-bottom:28}.p-l-28{padding-left:28}.p-x-28{padding-right:28;padding-left:28}.p-y-28{padding-top:28;padding-bottom:28}.p-30{padding:30}.p-t-30{padding-top:30}.p-r-30{padding-right:30}.p-b-30{padding-bottom:30}.p-l-30{padding-left:30}.p-x-30{padding-right:30;padding-left:30}.p-y-30{padding-top:30;padding-bottom:30}.hr-light{height:1;background-color:#e0e0e0;width:100%}.hr-dark{height:1;background-color:#303030;width:100%}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.font-weight-normal{font-weight:normal}.font-weight-bold{font-weight:bold}.font-italic{font-style:italic}.t-10{font-size:10}.t-12{font-size:12}.t-14{font-size:14}.t-15{font-size:15}.t-16{font-size:16}.t-17{font-size:17}.t-18{font-size:18}.t-19{font-size:19}.t-20{font-size:20}.t-25{font-size:25}.t-30{font-size:30}.img-rounded{border-radius:5}.img-circle{border-radius:20}.img-thumbnail{border-radius:0}.invisible{visibility:collapse}.pull-left{horizontal-align:left}.pull-right{horizontal-align:right}.m-x-auto{horizontal-align:center}.m-y-auto{vertical-align:center}.text-primary{color:#30bcff}.text-danger{color:#d50000}.text-muted{color:#9e9e9e}.bg-primary{background-color:#30bcff;color:#fff}.bg-danger{background-color:#d50000;color:#fff}.action-bar{background-color:#F8F8F8;color:#212121}.action-bar .action-bar-title{font-weight:bold;font-size:17;vertical-align:center}.action-bar .action-item{font-weight:normal}.activity-indicator{color:#30bcff;width:30;height:30}.btn{color:#30bcff;background-color:transparent;min-height:36;min-width:64;padding:10 10 10 10;font-size:18;margin:8 16 8 16}.btn.btn-active:highlighted{color:#fff;background-color:#c0ebff}.btn-primary{background-color:#30bcff;border-color:#30bcff;color:#fff}.btn-primary.btn-active:highlighted{background-color:#01a0ec;border-color:#01a0ec}.btn-primary.btn-aqua{background-color:#00caab}.btn-primary.btn-blue{background-color:#3d5afe}.btn-primary.btn-brown{background-color:#795548}.btn-primary.btn-forest{background-color:#006968}.btn-primary.btn-grey{background-color:#5c687c}.btn-primary.btn-lemon{background-color:#ffea00;color:#000}.btn-primary.btn-lime{background-color:#aee406;color:#000}.btn-primary.btn-orange{background-color:#f57c00}.btn-primary.btn-purple{background-color:#8130ff}.btn-primary.btn-ruby{background-color:#ff1744}.btn-primary.btn-sky{background-color:#30bcff}.btn-outline{background-color:transparent;border-color:#30bcff;color:#30bcff}.btn-outline.btn-active:highlighted{background-color:#c0ebff}.btn[isEnabled=false]{color:#a4a4a4;background-color:#e0e0e0;border-color:#e0e0e0}.fa{font-family:FontAwesome, fontawesome-webfont}.form .input{padding:16 8 16 8;background-color:transparent}.form .input.input-border{border-width:1;border-color:#e0e0e0;border-radius:2;padding:16}.form .input.input-rounded{border-width:1;border-color:#e0e0e0;border-radius:28;padding:16}.form .input[isEnabled='false']{background-color:#fafafa}.form .input-field{margin:8}.form .input-field .label{font-size:12;color:#bababa}.form .input-field .input{padding:0;margin:0 0 8 0}.form .input-field .hr-light.active,.form .input-field .hr-dark.active{background-color:#30bcff}.form .input-field.input-sides .label{font-size:18;margin:0 0 8 0}.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:4;font-weight:normal;color:#212121}.body,.body2,.footnote{font-weight:normal;color:#757575}.h1{font-size:32}.h2{font-size:22}.h3{font-size:15}.h4{font-size:12}.h5{font-size:11}.h6{font-size:10}.body{font-size:14}.body2{font-size:17}.footnote{font-size:13}.list-group .list-group-item{color:#212121;font-size:16;margin:0;padding:16}.list-group .list-group-item Label{vertical-align:center}.list-group .list-group-item .thumb{stretch:fill;width:40;height:40;margin-right:16}.list-group .list-group-item.active{background-color:#e0e0e0}.list-group .list-group-item .list-group-item-text{color:#757575;font-size:14}.page{background-color:#fff}.progress{color:#30bcff;background-color:#bababa}.segmented-bar{font-size:13;background-color:#fff;color:#212121;selected-background-color:#30bcff}.sidedrawer-left,.sidedrawer-center{background-color:#fafafa}.sidedrawer-header{background-color:#fafafa;height:148;width:100%}.sidedrawer-left .sidedrawer-header{padding:16 16 0 16}.sidedrawer-center .sidedrawer-header{padding:20 15 0 15}.sidedrawer-header-image{background-color:#e0e0e0}.sidedrawer-left .sidedrawer-header-image{height:64;width:64;border-radius:32;horizontal-align:left;margin-bottom:36}.sidedrawer-center .sidedrawer-header-image{height:74;width:74;border-radius:37;horizontal-align:center;margin-bottom:24}.sidedrawer-header-brand{color:#737373}.sidedrawer-left .sidedrawer-header-brand{horizontal-align:left;font-size:14}.sidedrawer-center .sidedrawer-header-brand{horizontal-align:center;font-size:15}.sidedrawer-list-item{height:48;horizontal-align:left;width:100%;orientation:horizontal}.sidedrawer-list-item .sidedrawer-list-item-icon{width:24;text-align:center;font-size:20;height:48;vertical-align:center}.sidedrawer-list-item.active{color:#fff;background-color:#30bcff}.sidedrawer-list-item.active .sidedrawer-list-item-icon{color:#fff}.sidedrawer-left .sidedrawer-list-item-icon{margin:0 16 0 16}.sidedrawer-center .sidedrawer-list-item-icon{margin:0 0 0 15}.sidedrawer-list-item-text{horizontal-align:left;text-align:left;font-size:15;background-color:transparent;border-width:0.1;width:80%;vertical-align:center}.sidedrawer-left .sidedrawer-list-item-text{padding-left:16}.sidedrawer-center .sidedrawer-list-item-text{padding-left:15}.slider{background-color:#30bcff}.slider[isEnabled=false]{background-color:#e0e0e0;color:#e0e0e0}.switch[checked=true]{background-color:#30bcff}.switch[checked=true][isEnabled=false]{background-color:#e0e0e0;color:#fff}.switch[isEnabled=false]{background-color:#e0e0e0;color:#e0e0e0}.tab-view{selected-color:#30bcff;tabs-background-color:#fff}.tab-view .tab-view-item{background-color:#fff;tabs-background-color:#fff}#login-background{margin-top:-20;background-size:cover;background-position:center}.login-wrap{padding:0 40}.logo-wrap{margin:60 0 10 0;padding:20 0}.logo-wrap .login-logo{text-align:center;font-size:30;font-weight:bold;margin-bottom:10;opacity:1;color:#212121;opacity:.9}.logo-wrap .login-logo-sub{color:#212121;opacity:.8;text-align:center}.login-wrapper{padding:20;background-color:#fff;border-radius:3}.login-wrapper TextField{padding:10 10;margin:10 0 0 0}.go-back{font-size:14;text-align:center;color:#212121;margin-top:10}.thumb{border-radius:50%}.muted{font-weight:normal;opacity:0.4;font-size:20}.unread{text-align:center;min-width:20;min-height:20;color:#fff}.unread{font-size:10;border-radius:50%;background-color:#3d5afe}.time{color:#5c687c;font-size:12}
2 |
--------------------------------------------------------------------------------
/home/chats/chats.component.ios.css:
--------------------------------------------------------------------------------
1 | .c-white{color:#fff}.c-bg-white{background-color:#fff}.c-black{color:#000}.c-bg-black{background-color:#000}.c-aqua{color:#00caab}.c-bg-aqua{background-color:#00caab}.c-blue{color:#3d5afe}.c-bg-blue{background-color:#3d5afe}.c-charcoal{color:#303030}.c-bg-charcoal{background-color:#303030}.c-brown{color:#795548}.c-bg-brown{background-color:#795548}.c-forest{color:#006968}.c-bg-forest{background-color:#006968}.c-grey{color:#e0e0e0}.c-bg-grey{background-color:#e0e0e0}.c-grey-light{color:#bababa}.c-bg-grey-light{background-color:#bababa}.c-grey-dark{color:#5c687c}.c-bg-grey-dark{background-color:#5c687c}.c-purple{color:#8130ff}.c-bg-purple{background-color:#8130ff}.c-lemon{color:#ffea00}.c-bg-lemon{background-color:#ffea00}.c-lime{color:#aee406}.c-bg-lime{background-color:#aee406}.c-orange{color:#f57c00}.c-bg-orange{background-color:#f57c00}.c-ruby{color:#ff1744}.c-bg-ruby{background-color:#ff1744}.c-sky{color:#30bcff}.c-bg-sky{background-color:#30bcff}.w-full{width:100%}.w-100{width:100}.h-full{height:100%}.h-100{height:100}.m-0{margin:0}.m-t-0{margin-top:0}.m-r-0{margin-right:0}.m-b-0{margin-bottom:0}.m-l-0{margin-left:0}.m-x-0{margin-right:0;margin-left:0}.m-y-0{margin-top:0;margin-bottom:0}.m-2{margin:2}.m-t-2{margin-top:2}.m-r-2{margin-right:2}.m-b-2{margin-bottom:2}.m-l-2{margin-left:2}.m-x-2{margin-right:2;margin-left:2}.m-y-2{margin-top:2;margin-bottom:2}.m-4{margin:4}.m-t-4{margin-top:4}.m-r-4{margin-right:4}.m-b-4{margin-bottom:4}.m-l-4{margin-left:4}.m-x-4{margin-right:4;margin-left:4}.m-y-4{margin-top:4;margin-bottom:4}.m-5{margin:5}.m-t-5{margin-top:5}.m-r-5{margin-right:5}.m-b-5{margin-bottom:5}.m-l-5{margin-left:5}.m-x-5{margin-right:5;margin-left:5}.m-y-5{margin-top:5;margin-bottom:5}.m-8{margin:8}.m-t-8{margin-top:8}.m-r-8{margin-right:8}.m-b-8{margin-bottom:8}.m-l-8{margin-left:8}.m-x-8{margin-right:8;margin-left:8}.m-y-8{margin-top:8;margin-bottom:8}.m-10{margin:10}.m-t-10{margin-top:10}.m-r-10{margin-right:10}.m-b-10{margin-bottom:10}.m-l-10{margin-left:10}.m-x-10{margin-right:10;margin-left:10}.m-y-10{margin-top:10;margin-bottom:10}.m-12{margin:12}.m-t-12{margin-top:12}.m-r-12{margin-right:12}.m-b-12{margin-bottom:12}.m-l-12{margin-left:12}.m-x-12{margin-right:12;margin-left:12}.m-y-12{margin-top:12;margin-bottom:12}.m-15{margin:15}.m-t-15{margin-top:15}.m-r-15{margin-right:15}.m-b-15{margin-bottom:15}.m-l-15{margin-left:15}.m-x-15{margin-right:15;margin-left:15}.m-y-15{margin-top:15;margin-bottom:15}.m-16{margin:16}.m-t-16{margin-top:16}.m-r-16{margin-right:16}.m-b-16{margin-bottom:16}.m-l-16{margin-left:16}.m-x-16{margin-right:16;margin-left:16}.m-y-16{margin-top:16;margin-bottom:16}.m-20{margin:20}.m-t-20{margin-top:20}.m-r-20{margin-right:20}.m-b-20{margin-bottom:20}.m-l-20{margin-left:20}.m-x-20{margin-right:20;margin-left:20}.m-y-20{margin-top:20;margin-bottom:20}.m-24{margin:24}.m-t-24{margin-top:24}.m-r-24{margin-right:24}.m-b-24{margin-bottom:24}.m-l-24{margin-left:24}.m-x-24{margin-right:24;margin-left:24}.m-y-24{margin-top:24;margin-bottom:24}.m-25{margin:25}.m-t-25{margin-top:25}.m-r-25{margin-right:25}.m-b-25{margin-bottom:25}.m-l-25{margin-left:25}.m-x-25{margin-right:25;margin-left:25}.m-y-25{margin-top:25;margin-bottom:25}.m-28{margin:28}.m-t-28{margin-top:28}.m-r-28{margin-right:28}.m-b-28{margin-bottom:28}.m-l-28{margin-left:28}.m-x-28{margin-right:28;margin-left:28}.m-y-28{margin-top:28;margin-bottom:28}.m-30{margin:30}.m-t-30{margin-top:30}.m-r-30{margin-right:30}.m-b-30{margin-bottom:30}.m-l-30{margin-left:30}.m-x-30{margin-right:30;margin-left:30}.m-y-30{margin-top:30;margin-bottom:30}.p-0{padding:0}.p-t-0{padding-top:0}.p-r-0{padding-right:0}.p-b-0{padding-bottom:0}.p-l-0{padding-left:0}.p-x-0{padding-right:0;padding-left:0}.p-y-0{padding-top:0;padding-bottom:0}.p-2{padding:2}.p-t-2{padding-top:2}.p-r-2{padding-right:2}.p-b-2{padding-bottom:2}.p-l-2{padding-left:2}.p-x-2{padding-right:2;padding-left:2}.p-y-2{padding-top:2;padding-bottom:2}.p-4{padding:4}.p-t-4{padding-top:4}.p-r-4{padding-right:4}.p-b-4{padding-bottom:4}.p-l-4{padding-left:4}.p-x-4{padding-right:4;padding-left:4}.p-y-4{padding-top:4;padding-bottom:4}.p-5{padding:5}.p-t-5{padding-top:5}.p-r-5{padding-right:5}.p-b-5{padding-bottom:5}.p-l-5{padding-left:5}.p-x-5{padding-right:5;padding-left:5}.p-y-5{padding-top:5;padding-bottom:5}.p-8{padding:8}.p-t-8{padding-top:8}.p-r-8{padding-right:8}.p-b-8{padding-bottom:8}.p-l-8{padding-left:8}.p-x-8{padding-right:8;padding-left:8}.p-y-8{padding-top:8;padding-bottom:8}.p-10{padding:10}.p-t-10{padding-top:10}.p-r-10{padding-right:10}.p-b-10{padding-bottom:10}.p-l-10{padding-left:10}.p-x-10{padding-right:10;padding-left:10}.p-y-10{padding-top:10;padding-bottom:10}.p-12{padding:12}.p-t-12{padding-top:12}.p-r-12{padding-right:12}.p-b-12{padding-bottom:12}.p-l-12{padding-left:12}.p-x-12{padding-right:12;padding-left:12}.p-y-12{padding-top:12;padding-bottom:12}.p-15{padding:15}.p-t-15{padding-top:15}.p-r-15{padding-right:15}.p-b-15{padding-bottom:15}.p-l-15{padding-left:15}.p-x-15{padding-right:15;padding-left:15}.p-y-15{padding-top:15;padding-bottom:15}.p-16{padding:16}.p-t-16{padding-top:16}.p-r-16{padding-right:16}.p-b-16{padding-bottom:16}.p-l-16{padding-left:16}.p-x-16{padding-right:16;padding-left:16}.p-y-16{padding-top:16;padding-bottom:16}.p-20{padding:20}.p-t-20{padding-top:20}.p-r-20{padding-right:20}.p-b-20{padding-bottom:20}.p-l-20{padding-left:20}.p-x-20{padding-right:20;padding-left:20}.p-y-20{padding-top:20;padding-bottom:20}.p-24{padding:24}.p-t-24{padding-top:24}.p-r-24{padding-right:24}.p-b-24{padding-bottom:24}.p-l-24{padding-left:24}.p-x-24{padding-right:24;padding-left:24}.p-y-24{padding-top:24;padding-bottom:24}.p-25{padding:25}.p-t-25{padding-top:25}.p-r-25{padding-right:25}.p-b-25{padding-bottom:25}.p-l-25{padding-left:25}.p-x-25{padding-right:25;padding-left:25}.p-y-25{padding-top:25;padding-bottom:25}.p-28{padding:28}.p-t-28{padding-top:28}.p-r-28{padding-right:28}.p-b-28{padding-bottom:28}.p-l-28{padding-left:28}.p-x-28{padding-right:28;padding-left:28}.p-y-28{padding-top:28;padding-bottom:28}.p-30{padding:30}.p-t-30{padding-top:30}.p-r-30{padding-right:30}.p-b-30{padding-bottom:30}.p-l-30{padding-left:30}.p-x-30{padding-right:30;padding-left:30}.p-y-30{padding-top:30;padding-bottom:30}.hr-light{height:1;background-color:#e0e0e0;width:100%}.hr-dark{height:1;background-color:#303030;width:100%}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.font-weight-normal{font-weight:normal}.font-weight-bold{font-weight:bold}.font-italic{font-style:italic}.t-10{font-size:10}.t-12{font-size:12}.t-14{font-size:14}.t-15{font-size:15}.t-16{font-size:16}.t-17{font-size:17}.t-18{font-size:18}.t-19{font-size:19}.t-20{font-size:20}.t-25{font-size:25}.t-30{font-size:30}.img-rounded{border-radius:5}.img-circle{border-radius:20}.img-thumbnail{border-radius:0}.invisible{visibility:collapse}.pull-left{horizontal-align:left}.pull-right{horizontal-align:right}.m-x-auto{horizontal-align:center}.m-y-auto{vertical-align:center}.text-primary{color:#30bcff}.text-danger{color:#d50000}.text-muted{color:#9e9e9e}.bg-primary{background-color:#30bcff;color:#fff}.bg-danger{background-color:#d50000;color:#fff}.action-bar{background-color:#F8F8F8;color:#212121}.action-bar .action-bar-title{font-weight:bold;font-size:17;vertical-align:center}.action-bar .action-item{font-weight:normal}.activity-indicator{color:#30bcff;width:30;height:30}.btn{color:#30bcff;background-color:transparent;min-height:36;min-width:64;padding:10 10 10 10;font-size:18;margin:8 16 8 16}.btn.btn-active:highlighted{color:#fff;background-color:#c0ebff}.btn-primary{background-color:#30bcff;border-color:#30bcff;color:#fff}.btn-primary.btn-active:highlighted{background-color:#01a0ec;border-color:#01a0ec}.btn-primary.btn-aqua{background-color:#00caab}.btn-primary.btn-blue{background-color:#3d5afe}.btn-primary.btn-brown{background-color:#795548}.btn-primary.btn-forest{background-color:#006968}.btn-primary.btn-grey{background-color:#5c687c}.btn-primary.btn-lemon{background-color:#ffea00;color:#000}.btn-primary.btn-lime{background-color:#aee406;color:#000}.btn-primary.btn-orange{background-color:#f57c00}.btn-primary.btn-purple{background-color:#8130ff}.btn-primary.btn-ruby{background-color:#ff1744}.btn-primary.btn-sky{background-color:#30bcff}.btn-outline{background-color:transparent;border-color:#30bcff;color:#30bcff}.btn-outline.btn-active:highlighted{background-color:#c0ebff}.btn[isEnabled=false]{color:#a4a4a4;background-color:#e0e0e0;border-color:#e0e0e0}.fa{font-family:FontAwesome, fontawesome-webfont}.form .input{padding:16 8 16 8;background-color:transparent}.form .input.input-border{border-width:1;border-color:#e0e0e0;border-radius:2;padding:16}.form .input.input-rounded{border-width:1;border-color:#e0e0e0;border-radius:28;padding:16}.form .input[isEnabled='false']{background-color:#fafafa}.form .input-field{margin:8}.form .input-field .label{font-size:12;color:#bababa}.form .input-field .input{padding:0;margin:0 0 8 0}.form .input-field .hr-light.active,.form .input-field .hr-dark.active{background-color:#30bcff}.form .input-field.input-sides .label{font-size:18;margin:0 0 8 0}.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:4;font-weight:normal;color:#212121}.body,.body2,.footnote{font-weight:normal;color:#757575}.h1{font-size:32}.h2{font-size:22}.h3{font-size:15}.h4{font-size:12}.h5{font-size:11}.h6{font-size:10}.body{font-size:14}.body2{font-size:17}.footnote{font-size:13}.list-group .list-group-item{color:#212121;font-size:16;margin:0;padding:16}.list-group .list-group-item Label{vertical-align:center}.list-group .list-group-item .thumb{stretch:fill;width:40;height:40;margin-right:16}.list-group .list-group-item.active{background-color:#e0e0e0}.list-group .list-group-item .list-group-item-text{color:#757575;font-size:14}.page{background-color:#fff}.progress{color:#30bcff;background-color:#bababa}.segmented-bar{font-size:13;background-color:#fff;color:#212121;selected-background-color:#30bcff}.sidedrawer-left,.sidedrawer-center{background-color:#fafafa}.sidedrawer-header{background-color:#fafafa;height:148;width:100%}.sidedrawer-left .sidedrawer-header{padding:16 16 0 16}.sidedrawer-center .sidedrawer-header{padding:20 15 0 15}.sidedrawer-header-image{background-color:#e0e0e0}.sidedrawer-left .sidedrawer-header-image{height:64;width:64;border-radius:32;horizontal-align:left;margin-bottom:36}.sidedrawer-center .sidedrawer-header-image{height:74;width:74;border-radius:37;horizontal-align:center;margin-bottom:24}.sidedrawer-header-brand{color:#737373}.sidedrawer-left .sidedrawer-header-brand{horizontal-align:left;font-size:14}.sidedrawer-center .sidedrawer-header-brand{horizontal-align:center;font-size:15}.sidedrawer-list-item{height:48;horizontal-align:left;width:100%;orientation:horizontal}.sidedrawer-list-item .sidedrawer-list-item-icon{width:24;text-align:center;font-size:20;height:48;vertical-align:center}.sidedrawer-list-item.active{color:#fff;background-color:#30bcff}.sidedrawer-list-item.active .sidedrawer-list-item-icon{color:#fff}.sidedrawer-left .sidedrawer-list-item-icon{margin:0 16 0 16}.sidedrawer-center .sidedrawer-list-item-icon{margin:0 0 0 15}.sidedrawer-list-item-text{horizontal-align:left;text-align:left;font-size:15;background-color:transparent;border-width:0.1;width:80%;vertical-align:center}.sidedrawer-left .sidedrawer-list-item-text{padding-left:16}.sidedrawer-center .sidedrawer-list-item-text{padding-left:15}.slider{background-color:#30bcff}.slider[isEnabled=false]{background-color:#e0e0e0;color:#e0e0e0}.switch[checked=true]{background-color:#30bcff}.switch[checked=true][isEnabled=false]{background-color:#e0e0e0;color:#fff}.switch[isEnabled=false]{background-color:#e0e0e0;color:#e0e0e0}.tab-view{selected-color:#30bcff;tabs-background-color:#fff}.tab-view .tab-view-item{background-color:#fff;tabs-background-color:#fff}#login-background{margin-top:-20;background-size:cover;background-position:center}.login-wrap{padding:0 40}.logo-wrap{margin:60 0 10 0;padding:20 0}.logo-wrap .login-logo{text-align:center;font-size:30;font-weight:bold;margin-bottom:10;opacity:1;color:#212121;opacity:.9}.logo-wrap .login-logo-sub{color:#212121;opacity:.8;text-align:center}.login-wrapper{padding:20;background-color:#fff;border-radius:3}.login-wrapper TextField{padding:10 10;margin:10 0 0 0}.go-back{font-size:14;text-align:center;color:#212121;margin-top:10}.thumb{border-radius:50%}.muted{font-weight:normal;opacity:0.4;font-size:20}.unread{text-align:center;min-width:20;min-height:20;color:#fff}.unread{font-size:10;border-radius:50%;background-color:#3d5afe}.time{color:#5c687c;font-size:12}
2 |
--------------------------------------------------------------------------------