Compare commits

..

85 Commits

Author SHA1 Message Date
Sercan Yemen
0e2dca00c0 Merge branch 'master' into skeleton 2018-06-15 18:42:25 +03:00
Sercan Yemen
c93cecdddd Merge branch 'master' into skeleton
# Conflicts:
#	angular.json
#	src/app/app.module.ts
#	src/app/fake-db/academy.ts
#	src/app/fake-db/calendar.ts
#	src/app/fake-db/chat.ts
#	src/app/fake-db/contacts.ts
#	src/app/fake-db/dashboard-analytics.ts
#	src/app/fake-db/dashboard-project.ts
#	src/app/fake-db/e-commerce.ts
#	src/app/fake-db/fake-db.service.ts
#	src/app/fake-db/faq.ts
#	src/app/fake-db/file-manager.ts
#	src/app/fake-db/icons.ts
#	src/app/fake-db/invoice.ts
#	src/app/fake-db/knowledge-base.ts
#	src/app/fake-db/mail.ts
#	src/app/fake-db/profile.ts
#	src/app/fake-db/quick-panel.ts
#	src/app/fake-db/scrumboard.ts
#	src/app/fake-db/search.ts
#	src/app/fake-db/todo.ts
#	src/app/main/angular-material-elements/angular-material-elements.component.html
#	src/app/main/angular-material-elements/angular-material-elements.component.scss
#	src/app/main/angular-material-elements/example-components.ts
#	src/app/main/angular-material-elements/example-viewer/example-viewer.html
#	src/app/main/angular-material-elements/example-viewer/example-viewer.scss
#	src/app/main/angular-material-elements/material.module.ts
#	src/app/main/apps/academy/academy.module.ts
#	src/app/main/apps/academy/course.service.ts
#	src/app/main/apps/academy/course/course.component.scss
#	src/app/main/apps/academy/courses.service.ts
#	src/app/main/apps/academy/courses/courses.component.html
#	src/app/main/apps/academy/courses/courses.component.scss
#	src/app/main/apps/calendar/calendar.component.html
#	src/app/main/apps/calendar/calendar.component.scss
#	src/app/main/apps/calendar/calendar.component.ts
#	src/app/main/apps/calendar/calendar.module.ts
#	src/app/main/apps/calendar/calendar.service.ts
#	src/app/main/apps/calendar/event-form/event-form.component.html
#	src/app/main/apps/calendar/event-form/event-form.component.scss
#	src/app/main/apps/calendar/event-form/event-form.component.ts
#	src/app/main/apps/calendar/event.model.ts
#	src/app/main/apps/chat/chat-start/chat-start.component.scss
#	src/app/main/apps/chat/chat-start/chat-start.component.ts
#	src/app/main/apps/chat/chat-view/chat-view.component.html
#	src/app/main/apps/chat/chat-view/chat-view.component.scss
#	src/app/main/apps/chat/chat.component.html
#	src/app/main/apps/chat/chat.component.scss
#	src/app/main/apps/chat/chat.service.ts
#	src/app/main/apps/chat/sidenavs/left/chats/chats.component.html
#	src/app/main/apps/chat/sidenavs/left/chats/chats.component.scss
#	src/app/main/apps/chat/sidenavs/left/left.component.scss
#	src/app/main/apps/chat/sidenavs/left/user/user.component.html
#	src/app/main/apps/chat/sidenavs/left/user/user.component.scss
#	src/app/main/apps/chat/sidenavs/right/contact/contact.component.html
#	src/app/main/apps/chat/sidenavs/right/contact/contact.component.scss
#	src/app/main/apps/chat/sidenavs/right/right.component.scss
#	src/app/main/apps/contacts/contact-form/contact-form.component.html
#	src/app/main/apps/contacts/contact-form/contact-form.component.scss
#	src/app/main/apps/contacts/contact-form/contact-form.component.ts
#	src/app/main/apps/contacts/contact-list/contact-list.component.html
#	src/app/main/apps/contacts/contact-list/contact-list.component.scss
#	src/app/main/apps/contacts/contact.model.ts
#	src/app/main/apps/contacts/contacts.component.html
#	src/app/main/apps/contacts/contacts.service.ts
#	src/app/main/apps/contacts/selected-bar/selected-bar.component.html
#	src/app/main/apps/contacts/selected-bar/selected-bar.component.scss
#	src/app/main/apps/contacts/sidebars/main/main.component.html
#	src/app/main/apps/contacts/sidebars/main/main.component.scss
#	src/app/main/apps/dashboards/analytics/analytics.component.html
#	src/app/main/apps/dashboards/analytics/analytics.component.scss
#	src/app/main/apps/dashboards/analytics/analytics.component.ts
#	src/app/main/apps/dashboards/analytics/analytics.module.ts
#	src/app/main/apps/dashboards/analytics/analytics.service.ts
#	src/app/main/apps/dashboards/project/project.component.ts
#	src/app/main/apps/dashboards/project/project.module.ts
#	src/app/main/apps/dashboards/project/project.service.ts
#	src/app/main/apps/e-commerce/dashboard/dashboard.component.html
#	src/app/main/apps/e-commerce/dashboard/dashboard.component.scss
#	src/app/main/apps/e-commerce/dashboard/dashboard.component.ts
#	src/app/main/apps/e-commerce/dashboard/dashboard.service.ts
#	src/app/main/apps/e-commerce/e-commerce.module.ts
#	src/app/main/apps/e-commerce/order/order-statuses.ts
#	src/app/main/apps/e-commerce/order/order.component.html
#	src/app/main/apps/e-commerce/order/order.component.scss
#	src/app/main/apps/e-commerce/order/order.model.ts
#	src/app/main/apps/e-commerce/order/order.service.ts
#	src/app/main/apps/e-commerce/orders/orders.component.html
#	src/app/main/apps/e-commerce/orders/orders.component.scss
#	src/app/main/apps/e-commerce/orders/orders.service.ts
#	src/app/main/apps/e-commerce/product/product.component.html
#	src/app/main/apps/e-commerce/product/product.component.scss
#	src/app/main/apps/e-commerce/product/product.model.ts
#	src/app/main/apps/e-commerce/product/product.service.ts
#	src/app/main/apps/e-commerce/products/products.component.html
#	src/app/main/apps/e-commerce/products/products.component.scss
#	src/app/main/apps/e-commerce/products/products.service.ts
#	src/app/main/apps/file-manager/file-list/file-list.component.html
#	src/app/main/apps/file-manager/file-list/file-list.component.scss
#	src/app/main/apps/file-manager/file-manager.service.ts
#	src/app/main/apps/file-manager/sidebars/details/details.component.html
#	src/app/main/apps/file-manager/sidebars/details/details.component.scss
#	src/app/main/apps/file-manager/sidebars/main/main.component.html
#	src/app/main/apps/file-manager/sidebars/main/main.component.scss
#	src/app/main/apps/file-manager/sidebars/main/main.component.ts
#	src/app/main/apps/mail-ngrx/dialogs/compose/compose.component.html
#	src/app/main/apps/mail-ngrx/dialogs/compose/compose.component.scss
#	src/app/main/apps/mail-ngrx/i18n/en.ts
#	src/app/main/apps/mail-ngrx/i18n/tr.ts
#	src/app/main/apps/mail-ngrx/mail-details/mail-details.component.html
#	src/app/main/apps/mail-ngrx/mail-details/mail-details.component.scss
#	src/app/main/apps/mail-ngrx/mail-list/mail-list-item/mail-list-item.component.html
#	src/app/main/apps/mail-ngrx/mail-list/mail-list-item/mail-list-item.component.scss
#	src/app/main/apps/mail-ngrx/mail-list/mail-list-item/mail-list-item.component.ts
#	src/app/main/apps/mail-ngrx/mail-list/mail-list.component.html
#	src/app/main/apps/mail-ngrx/mail-list/mail-list.component.scss
#	src/app/main/apps/mail-ngrx/mail.component.scss
#	src/app/main/apps/mail-ngrx/mail.model.ts
#	src/app/main/apps/mail-ngrx/sidebars/main/main-sidebar.component.html
#	src/app/main/apps/mail-ngrx/sidebars/main/main-sidebar.component.scss
#	src/app/main/apps/mail-ngrx/store/actions/filters.actions.ts
#	src/app/main/apps/mail-ngrx/store/actions/folders.actions.ts
#	src/app/main/apps/mail-ngrx/store/actions/index.ts
#	src/app/main/apps/mail-ngrx/store/actions/labels.actions.ts
#	src/app/main/apps/mail-ngrx/store/actions/mails.actions.ts
#	src/app/main/apps/mail-ngrx/store/effects/filters.effects.ts
#	src/app/main/apps/mail-ngrx/store/effects/folders.effects.ts
#	src/app/main/apps/mail-ngrx/store/effects/index.ts
#	src/app/main/apps/mail-ngrx/store/effects/labels.effects.ts
#	src/app/main/apps/mail-ngrx/store/effects/mails.effects.ts
#	src/app/main/apps/mail-ngrx/store/guards/index.ts
#	src/app/main/apps/mail-ngrx/store/guards/resolve.guard.ts
#	src/app/main/apps/mail-ngrx/store/index.ts
#	src/app/main/apps/mail-ngrx/store/reducers/filters.reducer.ts
#	src/app/main/apps/mail-ngrx/store/reducers/folders.reducer.ts
#	src/app/main/apps/mail-ngrx/store/reducers/index.ts
#	src/app/main/apps/mail-ngrx/store/reducers/labels.reducer.ts
#	src/app/main/apps/mail-ngrx/store/reducers/mails.reducer.ts
#	src/app/main/apps/mail-ngrx/store/selectors/filters.selectors.ts
#	src/app/main/apps/mail-ngrx/store/selectors/folders.selectors.ts
#	src/app/main/apps/mail-ngrx/store/selectors/index.ts
#	src/app/main/apps/mail-ngrx/store/selectors/labels.selectors.ts
#	src/app/main/apps/mail-ngrx/store/selectors/mails.selectors.ts
#	src/app/main/apps/mail-ngrx/store/store.module.ts
#	src/app/main/apps/mail/dialogs/compose/compose.component.html
#	src/app/main/apps/mail/dialogs/compose/compose.component.scss
#	src/app/main/apps/mail/dialogs/compose/compose.component.ts
#	src/app/main/apps/mail/i18n/en.ts
#	src/app/main/apps/mail/i18n/tr.ts
#	src/app/main/apps/mail/mail-details/mail-details.component.html
#	src/app/main/apps/mail/mail-details/mail-details.component.scss
#	src/app/main/apps/mail/mail-list/mail-list-item/mail-list-item.component.html
#	src/app/main/apps/mail/mail-list/mail-list-item/mail-list-item.component.scss
#	src/app/main/apps/mail/mail-list/mail-list.component.scss
#	src/app/main/apps/mail/mail.component.scss
#	src/app/main/apps/mail/mail.model.ts
#	src/app/main/apps/mail/mail.module.ts
#	src/app/main/apps/mail/mail.service.ts
#	src/app/main/apps/mail/sidebars/main/main-sidebar.component.html
#	src/app/main/apps/mail/sidebars/main/main-sidebar.component.scss
#	src/app/main/apps/scrumboard/board.model.ts
#	src/app/main/apps/scrumboard/board/add-list/add-list.component.html
#	src/app/main/apps/scrumboard/board/add-list/add-list.component.scss
#	src/app/main/apps/scrumboard/board/board.component.html
#	src/app/main/apps/scrumboard/board/board.component.scss
#	src/app/main/apps/scrumboard/board/dialogs/card/card.component.html
#	src/app/main/apps/scrumboard/board/dialogs/card/card.component.scss
#	src/app/main/apps/scrumboard/board/dialogs/card/card.component.ts
#	src/app/main/apps/scrumboard/board/dialogs/card/label-selector/label-selector.component.html
#	src/app/main/apps/scrumboard/board/dialogs/card/label-selector/label-selector.component.scss
#	src/app/main/apps/scrumboard/board/edit-board-name/edit-board-name.component.html
#	src/app/main/apps/scrumboard/board/edit-board-name/edit-board-name.component.scss
#	src/app/main/apps/scrumboard/board/edit-board-name/edit-board-name.component.ts
#	src/app/main/apps/scrumboard/board/list/add-card/add-card.component.html
#	src/app/main/apps/scrumboard/board/list/add-card/add-card.component.scss
#	src/app/main/apps/scrumboard/board/list/card/card.component.html
#	src/app/main/apps/scrumboard/board/list/card/card.component.scss
#	src/app/main/apps/scrumboard/board/list/edit-list-name/edit-list-name.component.html
#	src/app/main/apps/scrumboard/board/list/edit-list-name/edit-list-name.component.scss
#	src/app/main/apps/scrumboard/board/list/list.component.html
#	src/app/main/apps/scrumboard/board/list/list.component.scss
#	src/app/main/apps/scrumboard/board/sidenavs/settings/board-color-selector/board-color-selector.component.html
#	src/app/main/apps/scrumboard/board/sidenavs/settings/board-color-selector/board-color-selector.component.scss
#	src/app/main/apps/scrumboard/board/sidenavs/settings/settings.component.html
#	src/app/main/apps/scrumboard/board/sidenavs/settings/settings.component.scss
#	src/app/main/apps/scrumboard/card.model.ts
#	src/app/main/apps/scrumboard/list.model.ts
#	src/app/main/apps/scrumboard/scrumboard.component.html
#	src/app/main/apps/scrumboard/scrumboard.component.scss
#	src/app/main/apps/scrumboard/scrumboard.service.ts
#	src/app/main/apps/todo/sidebars/main/main-sidebar.component.html
#	src/app/main/apps/todo/sidebars/main/main-sidebar.component.scss
#	src/app/main/apps/todo/todo-details/todo-details.component.html
#	src/app/main/apps/todo/todo-details/todo-details.component.scss
#	src/app/main/apps/todo/todo-list/todo-list-item/todo-list-item.component.html
#	src/app/main/apps/todo/todo-list/todo-list-item/todo-list-item.component.scss
#	src/app/main/apps/todo/todo-list/todo-list.component.scss
#	src/app/main/apps/todo/todo.component.scss
#	src/app/main/apps/todo/todo.model.ts
#	src/app/main/apps/todo/todo.module.ts
#	src/app/main/apps/todo/todo.service.ts
#	src/app/main/content/pages/authentication/mail-confirm/mail-confirm.module.ts
#	src/app/main/content/sample/sample.component.html
#	src/app/main/content/sample/sample.module.ts
#	src/app/main/content/ui/page-layouts/blank/blank.component.html
#	src/app/main/documentation/components-third-party/components-third-party.module.ts
#	src/app/main/documentation/components-third-party/datatable/ngx-datatable.component.html
#	src/app/main/documentation/components-third-party/datatable/ngx-datatable.component.scss
#	src/app/main/documentation/components-third-party/google-maps/google-maps.component.scss
#	src/app/main/documentation/components-third-party/google-maps/google-maps.module.ts
#	src/app/main/documentation/components/cards/cards.component.html
#	src/app/main/documentation/components/cards/cards.component.scss
#	src/app/main/documentation/components/countdown/countdown.component.scss
#	src/app/main/documentation/components/countdown/countdown.component.ts
#	src/app/main/documentation/components/highlight/highlight.component.scss
#	src/app/main/documentation/components/highlight/highlight.component.ts
#	src/app/main/documentation/components/material-color-picker/material-color-picker.component.scss
#	src/app/main/documentation/components/material-color-picker/material-color-picker.component.ts
#	src/app/main/documentation/components/navigation/navigation.component.scss
#	src/app/main/documentation/components/search-bar/search-bar.component.scss
#	src/app/main/documentation/components/search-bar/search-bar.component.ts
#	src/app/main/documentation/components/shortcuts/shortcuts.component.scss
#	src/app/main/documentation/components/shortcuts/shortcuts.component.ts
#	src/app/main/documentation/components/sidebar/sidebar.component.html
#	src/app/main/documentation/components/sidebar/sidebar.component.scss
#	src/app/main/documentation/components/sidebar/sidebar.component.ts
#	src/app/main/documentation/components/widget/widget.component.scss
#	src/app/main/documentation/components/widget/widget.component.ts
#	src/app/main/documentation/directives/fuseIfOnDom/fuse-if-on-dom.component.scss
#	src/app/main/documentation/services/config/config.component.scss
#	src/app/main/documentation/services/config/config.component.ts
#	src/app/main/documentation/services/services.module.ts
#	src/app/main/documentation/services/splash-screen/splash-screen.component.scss
#	src/app/main/documentation/services/splash-screen/splash-screen.component.ts
#	src/app/main/documentation/working-with-fuse/multi-language/multi-language.component.ts
#	src/app/main/pages/authentication/forgot-password-2/forgot-password-2.component.html
#	src/app/main/pages/authentication/forgot-password-2/forgot-password-2.component.scss
#	src/app/main/pages/authentication/forgot-password-2/forgot-password-2.module.ts
#	src/app/main/pages/authentication/forgot-password/forgot-password.component.html
#	src/app/main/pages/authentication/forgot-password/forgot-password.component.scss
#	src/app/main/pages/authentication/forgot-password/forgot-password.module.ts
#	src/app/main/pages/authentication/lock/lock.component.html
#	src/app/main/pages/authentication/lock/lock.component.scss
#	src/app/main/pages/authentication/lock/lock.module.ts
#	src/app/main/pages/authentication/login-2/login-2.component.html
#	src/app/main/pages/authentication/login-2/login-2.component.scss
#	src/app/main/pages/authentication/login-2/login-2.module.ts
#	src/app/main/pages/authentication/login/login.component.html
#	src/app/main/pages/authentication/login/login.component.scss
#	src/app/main/pages/authentication/login/login.module.ts
#	src/app/main/pages/authentication/mail-confirm/mail-confirm.component.html
#	src/app/main/pages/authentication/mail-confirm/mail-confirm.component.scss
#	src/app/main/pages/authentication/mail-confirm/mail-confirm.module.ts
#	src/app/main/pages/authentication/register-2/register-2.component.html
#	src/app/main/pages/authentication/register-2/register-2.component.scss
#	src/app/main/pages/authentication/register-2/register-2.module.ts
#	src/app/main/pages/authentication/register/register.component.html
#	src/app/main/pages/authentication/register/register.component.scss
#	src/app/main/pages/authentication/register/register.module.ts
#	src/app/main/pages/authentication/reset-password-2/reset-password-2.component.html
#	src/app/main/pages/authentication/reset-password-2/reset-password-2.component.scss
#	src/app/main/pages/authentication/reset-password-2/reset-password-2.module.ts
#	src/app/main/pages/authentication/reset-password/reset-password.component.html
#	src/app/main/pages/authentication/reset-password/reset-password.component.scss
#	src/app/main/pages/authentication/reset-password/reset-password.module.ts
#	src/app/main/pages/coming-soon/coming-soon.component.html
#	src/app/main/pages/coming-soon/coming-soon.component.scss
#	src/app/main/pages/coming-soon/coming-soon.module.ts
#	src/app/main/pages/errors/404/error-404.component.html
#	src/app/main/pages/errors/404/error-404.component.scss
#	src/app/main/pages/errors/404/error-404.module.ts
#	src/app/main/pages/errors/500/error-500.component.html
#	src/app/main/pages/errors/500/error-500.component.scss
#	src/app/main/pages/errors/500/error-500.module.ts
#	src/app/main/pages/faq/faq.component.html
#	src/app/main/pages/faq/faq.component.scss
#	src/app/main/pages/faq/faq.module.ts
#	src/app/main/pages/faq/faq.service.ts
#	src/app/main/pages/invoices/compact/compact.component.html
#	src/app/main/pages/invoices/compact/compact.component.scss
#	src/app/main/pages/invoices/compact/compact.module.ts
#	src/app/main/pages/invoices/invoice.service.ts
#	src/app/main/pages/invoices/modern/modern.component.html
#	src/app/main/pages/invoices/modern/modern.component.scss
#	src/app/main/pages/invoices/modern/modern.module.ts
#	src/app/main/pages/knowledge-base/dialogs/article/article.component.html
#	src/app/main/pages/knowledge-base/dialogs/article/article.component.scss
#	src/app/main/pages/knowledge-base/knowledge-base.component.html
#	src/app/main/pages/knowledge-base/knowledge-base.component.scss
#	src/app/main/pages/knowledge-base/knowledge-base.module.ts
#	src/app/main/pages/knowledge-base/knowledge-base.service.ts
#	src/app/main/pages/maintenance/maintenance.component.html
#	src/app/main/pages/maintenance/maintenance.component.scss
#	src/app/main/pages/maintenance/maintenence.module.ts
#	src/app/main/pages/pricing/pricing.module.ts
#	src/app/main/pages/pricing/style-1/style-1.component.html
#	src/app/main/pages/pricing/style-1/style-1.component.scss
#	src/app/main/pages/pricing/style-1/style-1.component.ts
#	src/app/main/pages/pricing/style-2/style-2.component.html
#	src/app/main/pages/pricing/style-2/style-2.component.scss
#	src/app/main/pages/pricing/style-2/style-2.component.ts
#	src/app/main/pages/pricing/style-3/style-3.component.html
#	src/app/main/pages/pricing/style-3/style-3.component.scss
#	src/app/main/pages/pricing/style-3/style-3.component.ts
#	src/app/main/pages/profile/profile.component.html
#	src/app/main/pages/profile/profile.component.scss
#	src/app/main/pages/profile/profile.component.ts
#	src/app/main/pages/profile/profile.module.ts
#	src/app/main/pages/profile/profile.service.ts
#	src/app/main/pages/profile/tabs/about/about.component.html
#	src/app/main/pages/profile/tabs/about/about.component.scss
#	src/app/main/pages/profile/tabs/photos-videos/photos-videos.component.html
#	src/app/main/pages/profile/tabs/photos-videos/photos-videos.component.scss
#	src/app/main/pages/profile/tabs/timeline/timeline.component.html
#	src/app/main/pages/profile/tabs/timeline/timeline.component.scss
#	src/app/main/pages/search/search.component.html
#	src/app/main/pages/search/search.component.scss
#	src/app/main/pages/search/search.component.ts
#	src/app/main/pages/search/search.module.ts
#	src/app/main/pages/search/search.service.ts
#	src/app/main/pages/search/tabs/classic/classic.component.html
#	src/app/main/pages/search/tabs/classic/classic.component.scss
#	src/app/main/pages/search/tabs/table/table.component.html
#	src/app/main/quick-panel/quick-panel.component.ts
#	src/app/main/ui/colors/colors.component.html
#	src/app/main/ui/colors/colors.component.scss
#	src/app/main/ui/colors/colors.module.ts
#	src/app/main/ui/forms/forms.component.html
#	src/app/main/ui/forms/forms.component.scss
#	src/app/main/ui/forms/forms.component.ts
#	src/app/main/ui/forms/forms.module.ts
#	src/app/main/ui/helper-classes/helper-classes.component.html
#	src/app/main/ui/helper-classes/helper-classes.component.scss
#	src/app/main/ui/helper-classes/helper-classes.component.ts
#	src/app/main/ui/helper-classes/helper-classes.module.ts
#	src/app/main/ui/helper-classes/tabs/padding-margin/padding-margin.component.html
#	src/app/main/ui/helper-classes/tabs/padding-margin/padding-margin.component.scss
#	src/app/main/ui/helper-classes/tabs/padding-margin/padding-margin.component.ts
#	src/app/main/ui/helper-classes/tabs/width-height/width-height.component.html
#	src/app/main/ui/helper-classes/tabs/width-height/width-height.component.scss
#	src/app/main/ui/helper-classes/tabs/width-height/width-height.component.ts
#	src/app/main/ui/icons/icons.component.html
#	src/app/main/ui/icons/icons.component.scss
#	src/app/main/ui/icons/icons.module.ts
#	src/app/main/ui/page-layouts/blank/blank.component.html
#	src/app/main/ui/page-layouts/blank/blank.component.ts
#	src/app/main/ui/page-layouts/carded/full-width-1/full-width-1.component.html
#	src/app/main/ui/page-layouts/carded/full-width-2/full-width-2.component.html
#	src/app/main/ui/page-layouts/simple/full-width-1/full-width-1.component.html
#	src/app/main/ui/page-layouts/simple/full-width-tabbed-1/full-width-tabbed-1.component.html
#	src/app/main/ui/typography/tabs/blockquotes-lists/blockquotes-lists.component.html
#	src/app/main/ui/typography/tabs/blockquotes-lists/blockquotes-lists.component.scss
#	src/app/main/ui/typography/tabs/blockquotes-lists/blockquotes-lists.component.ts
#	src/app/main/ui/typography/tabs/headings/headings.component.html
#	src/app/main/ui/typography/tabs/headings/headings.component.scss
#	src/app/main/ui/typography/tabs/headings/headings.component.ts
#	src/app/main/ui/typography/tabs/helpers/helpers.component.html
#	src/app/main/ui/typography/tabs/helpers/helpers.component.scss
#	src/app/main/ui/typography/tabs/helpers/helpers.component.ts
#	src/app/main/ui/typography/tabs/inline-text-elements/inline-text-elements.component.html
#	src/app/main/ui/typography/tabs/inline-text-elements/inline-text-elements.component.scss
#	src/app/main/ui/typography/tabs/inline-text-elements/inline-text-elements.component.ts
#	src/app/main/ui/typography/typography.component.html
#	src/app/main/ui/typography/typography.component.scss
#	src/app/main/ui/typography/typography.component.ts
#	src/app/navigation/navigation.ts
#	src/app/store/actions/router.action.ts
#	src/app/store/effects/router.effect.ts
#	src/app/store/reducers/index.ts
#	src/app/store/store.module.ts
2018-06-15 18:36:24 +03:00
Sercan Yemen
3bd2ad9519 Merge branch 'master' into skeleton 2018-05-09 18:18:30 +03:00
Sercan Yemen
eb231c5ca8 angular.json for skeleton 2018-05-06 14:47:26 +03:00
Sercan Yemen
954d61b73a Merge branch 'master' into skeleton 2018-05-06 14:47:07 +03:00
Sercan Yemen
46c37042a2 Merge branch 'master' into skeleton 2018-04-04 14:42:49 +03:00
Sercan Yemen
47ee65a980 Merge branch 'master' into skeleton 2018-03-31 13:22:27 +03:00
Sercan Yemen
5f974c4ed2 Merge branch 'master' into skeleton 2018-03-11 18:27:10 +03:00
Sercan Yemen
605f4d9463 Merge branch 'master' into skeleton 2018-03-10 14:35:24 +03:00
Sercan Yemen
4be77a19ed Removed unnecessary lines from angular-cli.json file 2018-03-09 20:17:38 +03:00
Sercan Yemen
8374c7d059 Merge branch 'master' into skeleton 2018-03-09 20:14:36 +03:00
Sercan Yemen
da615585d0 Merge branch 'master' into skeleton 2018-03-09 20:03:43 +03:00
Sercan Yemen
7c50487164 Removed unnecessary Angular Material example files, fixes AoT builds 2018-03-09 06:30:59 +03:00
Sercan Yemen
97c7f136bf Merge branch 'master' into skeleton 2018-03-08 12:44:21 +03:00
Sercan Yemen
1cddda02b1 Merge branch 'master' into skeleton 2018-03-08 12:42:14 +03:00
Sercan Yemen
c178eeedaa Merge branch 'master' into skeleton 2018-03-08 12:38:51 +03:00
Sercan Yemen
43b22e609e Merge branch 'master' into skeleton 2018-02-08 11:06:42 +03:00
Sercan Yemen
a914ad6dc1 Merge branch 'master' into skeleton 2018-02-05 17:17:24 +03:00
Sercan Yemen
b2e840cb60 Merge branch 'master' into skeleton 2018-01-23 17:03:44 +03:00
Sercan Yemen
d7c67ca5a8 Updated package-lock.json file 2018-01-18 13:34:27 +03:00
Sercan Yemen
cf7ab3861d Merge branch 'master' into skeleton 2018-01-18 13:21:58 +03:00
Sercan Yemen
ab4ed81cfc Merge branch 'master' into skeleton 2018-01-18 13:19:38 +03:00
Sercan Yemen
2022b7307e Merge branch 'master' into skeleton 2018-01-11 13:37:32 +03:00
Sercan Yemen
46de82a7fa Merge branch 'master' into skeleton 2018-01-11 13:37:03 +03:00
Sercan Yemen
bc2b2c75fa Merge branch 'master' into skeleton 2018-01-08 16:41:04 +03:00
Sercan Yemen
02653cd0f4 Merge branch 'master' into skeleton 2018-01-08 16:40:33 +03:00
Sercan Yemen
ff14879a94 Merge branch 'master' into skeleton 2018-01-08 16:11:29 +03:00
Sercan Yemen
49c49c46d1 Merge branch 'master' into skeleton 2018-01-08 16:09:12 +03:00
Sercan Yemen
915e9203ef Merge branch 'master' into skeleton 2018-01-08 16:08:56 +03:00
Sercan Yemen
33d295f42c Merge branch 'master' into skeleton 2018-01-02 12:37:12 +03:00
Sercan Yemen
91e277ce3f Merge branch 'master' into skeleton 2018-01-02 12:32:01 +03:00
Sercan Yemen
b7a3d35eb8 Updated package-lock.json 2017-12-28 10:52:40 +03:00
Sercan Yemen
f29f11232f Merge branch 'master' into skeleton 2017-12-28 10:51:09 +03:00
Sercan Yemen
16ffb09350 Merge branch 'master' into skeleton 2017-12-26 10:49:15 +03:00
Sercan Yemen
643a129a46 Merge branch 'master' into skeleton 2017-12-21 10:06:16 +03:00
Sercan Yemen
de16f4f866 Merge branch 'master' into skeleton 2017-12-18 12:25:56 +03:00
Sercan Yemen
415d7cebfa Skeleton updates 2017-12-14 16:20:52 +03:00
Sercan Yemen
f7d1995f63 Merge branch 'master' into skeleton 2017-12-14 16:06:32 +03:00
Sercan Yemen
3741abc063 Skeleton package updates 2017-12-14 16:03:34 +03:00
Sercan Yemen
54ccdd7de2 Merge branch 'master' into skeleton 2017-12-14 16:01:09 +03:00
Sercan Yemen
8b2e6b95b1 Merge branch 'master' into skeleton 2017-11-30 15:56:00 +03:00
Sercan Yemen
e86cea1e73 Merge branch 'master' into skeleton 2017-11-30 10:38:03 +03:00
Sercan Yemen
b81638690e Merge branch 'master' into skeleton 2017-11-30 10:23:19 +03:00
Sercan Yemen
20ac3abb25 Merge branch 'master' into skeleton 2017-11-27 17:21:38 +03:00
Sercan Yemen
f634cb06a7 Merge branch 'master' into skeleton 2017-11-27 14:42:23 +03:00
Sercan Yemen
7d67a481ff Merge branch 'master' into skeleton 2017-11-27 14:35:37 +03:00
Sercan Yemen
4659da7390 Added missing variables that prevents skeleton from building as it is 2017-11-13 12:30:11 +03:00
Sercan Yemen
2a5d15694c Merge branch 'master' into skeleton 2017-11-13 11:09:27 +03:00
Sercan Yemen
8e6024c3ee Fixes #44 : Removed angular material elements assets 2017-11-08 15:11:20 +03:00
Sercan Yemen
f4c47daadc Merge branch 'master' into skeleton 2017-11-08 15:10:51 +03:00
Sercan Yemen
381bc6c0fe Merge branch 'master' into skeleton 2017-11-04 16:50:03 +03:00
Sercan Yemen
b5a139f81d Merge branch 'master' into skeleton 2017-11-04 16:32:29 +03:00
Sercan Yemen
914477da41 Merge branch 'master' into skeleton 2017-11-04 16:25:09 +03:00
Sercan Yemen
410802808e Merge branch 'master' into skeleton 2017-11-04 16:20:46 +03:00
Sercan Yemen
56dbc58d5e Merge branch 'master' into skeleton
+ Added translation example to the sample page
2017-10-27 12:01:09 +03:00
Sercan Yemen
d7c6b2d617 Merge branch 'master' into skeleton 2017-10-27 11:49:31 +03:00
Sercan Yemen
80627bdde9 removed fake-db thingy 2017-10-16 10:50:57 +03:00
Sercan Yemen
6595975f2b Merge branch 'master' into skeleton 2017-10-16 10:45:27 +03:00
Sercan Yemen
dcb8032758 Merge branch 'master' into skeleton 2017-10-16 10:10:06 +03:00
Sercan Yemen
fb214da5fe Merge branch 'master' into skeleton 2017-10-14 18:53:08 +03:00
Sercan Yemen
e20687034f Merge branch 'master' into skeleton 2017-10-14 18:53:00 +03:00
Sercan Yemen
f9bda99deb Merge branch 'master' into skeleton 2017-10-02 10:15:00 +03:00
Sercan Yemen
1d81e37a0f removed markdown module imports 2017-09-28 13:00:44 +03:00
Sercan Yemen
83f0ed5ec1 Merge branch 'master' into skeleton 2017-09-28 12:52:59 +03:00
Sercan Yemen
e486413872 remove unnecessary stuff from skeleton 2017-09-28 12:51:15 +03:00
Sercan Yemen
576e167ef1 Merge branch 'master' into skeleton 2017-09-28 12:49:18 +03:00
Sercan Yemen
cf9e9fc209 Merge branch 'master' into skeleton 2017-09-22 16:45:47 +03:00
Sercan Yemen
ff0f2933d9 Merge branch 'master' into skeleton 2017-09-22 16:45:23 +03:00
Sercan Yemen
62467c8ddf Merge branch 'master' into skeleton 2017-09-12 16:06:21 +03:00
Sercan Yemen
024ab15b25 Merge branch 'master' into skeleton 2017-09-11 16:34:07 +03:00
Sercan Yemen
915ad52863 Merge branch 'master' into skeleton 2017-09-11 16:21:05 +03:00
Sercan Yemen
97bfaa9979 Merge branch 'master' into skeleton 2017-09-11 13:06:42 +03:00
Sercan Yemen
6ae3e154c3 Merge branch 'master' into skeleton 2017-09-11 12:59:36 +03:00
Sercan Yemen
49b6ff7292 navigation model for horizontal nav 2017-09-11 12:58:24 +03:00
Sercan Yemen
903688ab43 Merge branch 'master' into skeleton 2017-09-11 12:57:59 +03:00
Sercan Yemen
19f822cbab removed unnecessary md2 from skeleton 2017-09-01 09:05:56 +03:00
Sercan Yemen
1d21a14d0e Merge branch 'master' into skeleton 2017-08-30 20:52:23 +03:00
Sercan Yemen
4bf2ba73ad merge 'master' into skeleton 2017-08-30 20:08:12 +03:00
Sercan Yemen
6a3972fff8 Merge branch 'master' into skeleton 2017-08-30 14:43:10 +03:00
Sercan Yemen
dca16238eb Merge branch 'master' into skeleton 2017-08-30 14:41:30 +03:00
Sercan Yemen
2b91119d00 Merge branch 'master' into skeleton 2017-08-30 11:50:56 +03:00
Sercan Yemen
ff4899e8d2 Merge branch 'master' into skeleton
# Conflicts:
#	src/app/app.module.ts
#	src/app/main/content/apps/calendar/calendar.component.html
#	src/app/main/content/apps/contacts/contact-list/contact-list.component.html
#	src/app/main/content/apps/contacts/contacts.component.html
#	src/app/main/content/apps/contacts/contacts.component.scss
#	src/app/main/content/apps/contacts/contacts.module.ts
#	src/app/main/content/apps/contacts/contacts.service.ts
#	src/app/main/content/apps/contacts/selected-bar/selected-bar.component.html
#	src/app/main/content/apps/mail/sidenavs/main/main-sidenav.component.html
#	src/app/navigation.model.ts
2017-08-24 11:18:24 +03:00
Sercan Yemen
e818c53f1d navbar fixes 2017-08-22 16:05:32 +03:00
Sercan Yemen
ca96fffadf removed fuse fake db 2017-08-22 15:58:35 +03:00
Sercan Yemen
d7003711ee skeleton branch 2017-08-22 15:55:48 +03:00
1195 changed files with 1023 additions and 72720 deletions

View File

@@ -24,8 +24,7 @@
"tsConfig": "src/tsconfig.app.json", "tsConfig": "src/tsconfig.app.json",
"assets": [ "assets": [
"src/favicon.ico", "src/favicon.ico",
"src/assets", "src/assets"
"src/app/main/angular-material-elements"
], ],
"styles": [ "styles": [
"src/styles.scss" "src/styles.scss"
@@ -49,18 +48,6 @@
"extractLicenses": true, "extractLicenses": true,
"vendorChunk": false, "vendorChunk": false,
"buildOptimizer": true "buildOptimizer": true
},
"ec": {
"sourceMap": true,
"extractCss": true
},
"hmr": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.hmr.ts"
}
]
} }
} }
}, },
@@ -75,10 +62,12 @@
}, },
"hmr": { "hmr": {
"hmr": true, "hmr": true,
"browserTarget": "fuse:build:hmr" "fileReplacements": [
}, {
"ec": { "replace": "src/environments/environment.ts",
"browserTarget": "fuse:build:ec" "with": "src/environments/environment.hmr.ts"
}
]
} }
} }
}, },
@@ -113,9 +102,7 @@
"src/tsconfig.spec.json" "src/tsconfig.spec.json"
], ],
"exclude": [ "exclude": [
"**/node_modules/**", "**/node_modules/**"
"**/src/app/fake-db/**/*",
"**/src/assets/angular-material-examples/**/*"
] ]
} }
} }
@@ -137,9 +124,7 @@
"options": { "options": {
"tsConfig": "e2e/tsconfig.e2e.json", "tsConfig": "e2e/tsconfig.e2e.json",
"exclude": [ "exclude": [
"**/node_modules/**", "**/node_modules/**"
"**/src/app/fake-db/**/*",
"**/src/assets/angular-material-examples/**/*"
] ]
} }
} }

484
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{ {
"name": "fuse", "name": "fuse",
"version": "6.2.2", "version": "6.1.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@@ -91,9 +91,9 @@
}, },
"dependencies": { "dependencies": {
"typescript": { "typescript": {
"version": "2.9.2", "version": "2.9.1",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz",
"integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==",
"dev": true "dev": true
} }
} }
@@ -121,17 +121,17 @@
} }
}, },
"@angular/animations": { "@angular/animations": {
"version": "6.0.7", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.7.tgz", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.5.tgz",
"integrity": "sha512-yOig45sxzpEmlXy+eFgh2v2yxoE/Hh9rn7BX82uj71yobSpCYoe58AEOay1cu0FCcLi/P5qltHepDrRRxNxPMw==", "integrity": "sha512-zW/qX3CvsuRDOcTNFFSf7uXktvq1jRrfKR8LdGQ/DER1GU3o8pR3z3H8gHy8lAFc3PESfETtzXinKUNzvTDfpA==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/cdk": { "@angular/cdk": {
"version": "6.3.3", "version": "6.2.1",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-6.3.3.tgz", "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-6.2.1.tgz",
"integrity": "sha512-cfUwvnGGByZy/poA75/vsELBq68eDUYJe3qi0WvSbtFzbQlsxeqaBiaxVYqmHJkPlSF5nsUhg5KvDowED3a4sA==", "integrity": "sha512-uwW4eIGJKqOkR+ew6YcEAh1J4SP98jdyDpsZ4IEMkV9+jXcKfcwcxGFpZvs9wJsAvAr8EgNmZ8h+iuZLwJsvmA==",
"requires": { "requires": {
"tslib": "^1.7.1" "tslib": "^1.7.1"
} }
@@ -174,25 +174,25 @@
} }
}, },
"@angular/common": { "@angular/common": {
"version": "6.0.7", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-6.0.7.tgz", "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.0.5.tgz",
"integrity": "sha512-MUCCs3FLwqyp5wuvkUTHVGMTd3bNGDxD5IJNvaLgVliGe4r0IlETRXYqyRPs7gdVFPbiJ97P1DUONArj9xL9XA==", "integrity": "sha512-xL4Aq+uGQcmHYs90WSKsS9vBC1XO042hM5lSVz+zyYtYzYHdt/Qg1CIuR3zkP+8DG+mf1QZqbg5YtQx5XykmgA==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/compiler": { "@angular/compiler": {
"version": "6.0.7", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.0.7.tgz", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.0.5.tgz",
"integrity": "sha512-J9I2U4NiWIBXl0ZOJkBW5G7xXhphggSirTwFLD4yKCTeJXgyldZytJZRkDUx1uouZtI2/PycvaOZoRr85N67AA==", "integrity": "sha512-Oe0VRCyKfHLatalRuXjCdgaY6hhiMXEL/ueknMJFC0+xA73mEchmLYXj64/1ed753cjnLOM2qbVVwqhc26tmEg==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/compiler-cli": { "@angular/compiler-cli": {
"version": "6.0.7", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.0.7.tgz", "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.0.5.tgz",
"integrity": "sha512-nDIo4TtE3oXgZiQ5vJEcr5fi3FuXRDJQSOeOQinpCrtEt3s4pU5WAX5DLFGPSD2C/EXRDvHZgF9OTJeu5U4ErQ==", "integrity": "sha512-onRlVLWo1mTdyxLMRtW4iPntTUglJl9T0hacRlscKKlAUT8jaSfqIyknCF3jEXJrTnfKdypen053U7g2ajifrA==",
"dev": true, "dev": true,
"requires": { "requires": {
"chokidar": "^1.4.2", "chokidar": "^1.4.2",
@@ -335,9 +335,9 @@
} }
}, },
"@angular/core": { "@angular/core": {
"version": "6.0.7", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-6.0.7.tgz", "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.0.5.tgz",
"integrity": "sha512-aZ0NvbYsMGqg0zUu7+9vuDxnGzwe++RsBBhlwHZHz1ZZwJmU6VJhUhaI+MuKC7rHyFFr9vUxvJ7ilhGaK2+J7A==", "integrity": "sha512-yG4Qz5wHWgFYOCtX62F8MmJ1wZwZA1ALbyQC+WAZfi7Y8Asx8TShJ+3QKUDYwO1jj530pqNbfauDTCmPzzPvaQ==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
@@ -351,72 +351,63 @@
} }
}, },
"@angular/forms": { "@angular/forms": {
"version": "6.0.7", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.0.7.tgz", "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.0.5.tgz",
"integrity": "sha512-bFRdWxLmTiG7z0yZaq22oBHTgVSpJwUJEbZ5ieu21JqTgIDYne+YR/xCJrPj+P2S5NDlEK84g/4y4GoNt/thhQ==", "integrity": "sha512-d1SdhAQ/W1n3vtm1lp5y16EaUylcZ2wftLUj6MSne3bH/2MJ6JsxJKwX+MfPcQCo+DCfG5bF0UMCa1KAwUQthQ==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/http": { "@angular/http": {
"version": "6.0.7", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/@angular/http/-/http-6.0.7.tgz", "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.0.5.tgz",
"integrity": "sha512-zk/kjsfEXjEQIRpmsjuJO5wgFNxj7JGY6Bq0nianZuyCuj/mlm0zflww2NLX4O22IMnvVSun2Kx+kDY44n4hfw==", "integrity": "sha512-N9lx1s1h4wki1ob4qne3FdyAWG3TcCAGnUAjDmZ1+c/hhxtcv0iEJ22nBrGkPIsUxIPXg0JgsD1hKhu5DGEbWg==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/language-service": { "@angular/language-service": {
"version": "6.0.7", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-6.0.7.tgz", "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-6.0.5.tgz",
"integrity": "sha512-R96kTy9Hpy5QPHirJz+5JjnzjJZdwbGwZ6rpq79Fe15RYaYfMjFTAAhmmOgWrnTFBug0QWBWyKV7950JcJIr3Q==", "integrity": "sha512-PH06chMTcWTLfVxZqpXksIx9969N/azEghYx0U+MzlGomeaaBXr7RuZWHRVn/lD5XljrqdWAQSMc+abbn1oKgg==",
"dev": true "dev": true
}, },
"@angular/material": { "@angular/material": {
"version": "6.3.3", "version": "6.2.1",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-6.3.3.tgz", "resolved": "https://registry.npmjs.org/@angular/material/-/material-6.2.1.tgz",
"integrity": "sha512-3qTZ8+pjc8P1D+TLr9ETGfFyMYO+BAQlFiVs3oV8rw5y0Wzkz6G1JHfKQ2oOd8/npXP6rJQldssUM4IBbSOxIQ==", "integrity": "sha512-SBoUXxHknkgwzp5pNDHW0jyrTM0d0Tk4lVyDbtEX8VEPtXqG5nL3BSgyjpJbTvqlmy2kOooUu3qgAmt87VH9lw==",
"requires": { "requires": {
"parse5": "^5.0.0",
"tslib": "^1.7.1" "tslib": "^1.7.1"
},
"dependencies": {
"parse5": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-5.0.0.tgz",
"integrity": "sha512-0ywuiUOnpWWeil5grH2rxjyTJoeQVwyBuO2si6QIU9dWtj2npjuyK1HaY1RbLnVfDhEbhyAPNUBKRK0Xj2xE0w==",
"optional": true
}
} }
}, },
"@angular/material-moment-adapter": { "@angular/material-moment-adapter": {
"version": "6.3.3", "version": "6.2.1",
"resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-6.3.3.tgz", "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-6.2.1.tgz",
"integrity": "sha512-YFi1iED8gcHhCwkWGMkyJtHX/tWAsQWnRNrh1AwbWl4JW1739vPAM/OimdIijeGAZ5dVVZX4A4EscCBb74b4dA==", "integrity": "sha512-mZA/gUDI/B6lnKBx0Qov3920MdNhOvVk0oQq/wrxgt2I25AVbpKZO2d8PSCBATQzWjqUwN3GKtcQFx0bPtvNCQ==",
"requires": { "requires": {
"tslib": "^1.7.1" "tslib": "^1.7.1"
} }
}, },
"@angular/platform-browser": { "@angular/platform-browser": {
"version": "6.0.7", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.0.7.tgz", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.0.5.tgz",
"integrity": "sha512-CASH1CDr2DD+aBrWN9qpDDFTI3H6p/oqH23h28bEV+LZl7F57r4sj8KXKgaE+mcrOFRQqXTAlPoq3hRCLmhtVA==", "integrity": "sha512-FSsA9C3cJa7S4SPUAhypKlTQf4uA4hiqx/h65v7frDiyRVHv22oWKX7aKmyyb9oP5FHN/TDeQiRn4m8XNqG6AQ==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/platform-browser-dynamic": { "@angular/platform-browser-dynamic": {
"version": "6.0.7", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.7.tgz", "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.5.tgz",
"integrity": "sha512-8G45A9w8UJvX3vPEHqeJHt/sd0zu6w1M+rsnOCo78r35SjsLbrmDNhc4VkLZFJ+iNjgPWtNtdpeXQqtTHE46yw==", "integrity": "sha512-TTSLOMVrgRXI29xmBWsnSp8187vbWnbj0YEehuyup2FmltUl+H5Vms7poWV9/6fI3RnW3Yg9Ziv3T5iKqsiADQ==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
}, },
"@angular/router": { "@angular/router": {
"version": "6.0.7", "version": "6.0.5",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-6.0.7.tgz", "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.0.5.tgz",
"integrity": "sha512-KuQBeIgfiwV3bLafepMhYVJQIAF8cTckCudFh5Z0OqckJgGsWSgtvEdtBctPi+lzt7OQBi7Ym2rOv3X0dOvu0Q==", "integrity": "sha512-M3cb5CDX+WvkM2xmFeP64zPwLJ6by6cyzl5OCfEQjoTGKOFY7N2B4kHAOw5KJN3nIEd0PersSBgf11Y9g7GPwA==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
@@ -546,9 +537,9 @@
} }
}, },
"@types/lodash": { "@types/lodash": {
"version": "4.14.110", "version": "4.14.109",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.110.tgz", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.109.tgz",
"integrity": "sha512-iXYLa6olt4tnsCA+ZXeP6eEW3tk1SulWeYyP/yooWfAtXjozqXgtX4+XUtMuOCfYjKGz3F34++qUc3Q+TJuIIw==", "integrity": "sha512-hop8SdPUEzbcJm6aTsmuwjIYQo1tqLseKCM+s2bBqTU2gErwI4fE+aqUVOlscPSQbKHKgtMMPoC+h4AIGOJYvw==",
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
@@ -804,9 +795,9 @@
} }
}, },
"acorn": { "acorn": {
"version": "5.7.1", "version": "5.5.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
"integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
"dev": true "dev": true
}, },
"acorn-dynamic-import": { "acorn-dynamic-import": {
@@ -899,9 +890,9 @@
} }
}, },
"angular-draggable-droppable": { "angular-draggable-droppable": {
"version": "3.0.1", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/angular-draggable-droppable/-/angular-draggable-droppable-3.0.1.tgz", "resolved": "https://registry.npmjs.org/angular-draggable-droppable/-/angular-draggable-droppable-3.0.0.tgz",
"integrity": "sha512-+GYYq4U5rPcoNwaCdoY3sNBBKd80JT7+R8n4QINJKvtToisyGpsXmX68SkKfHsNtXyTzoxX/h/37XJgE0y8KLw==", "integrity": "sha512-plPrP1voXfV0w13LSvKadMIl4UMsP+eVAqZM73VowB/c6YZyIRb50+MXML2UOX2Or1dFGBIJA4pWpcT623Xktw==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
@@ -912,9 +903,9 @@
"integrity": "sha512-+i2bH9T/S4gTQdJLt264H4JMKXNpik33pMatSOvPSqFQ0vImnTBVbvijfmy75OgwKPJ8OZw0R76CrLjp2EYX2A==" "integrity": "sha512-+i2bH9T/S4gTQdJLt264H4JMKXNpik33pMatSOvPSqFQ0vImnTBVbvijfmy75OgwKPJ8OZw0R76CrLjp2EYX2A=="
}, },
"angular-resizable-element": { "angular-resizable-element": {
"version": "3.1.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/angular-resizable-element/-/angular-resizable-element-3.1.0.tgz", "resolved": "https://registry.npmjs.org/angular-resizable-element/-/angular-resizable-element-3.0.0.tgz",
"integrity": "sha512-moVRSGnCgwCKofswHlNGSQWMz9OCC2JRxz4duJ6wC3g3WBMen2NpFSnoueEIMWoo/DJZjCuF3k/kFoTC4Ett3A==", "integrity": "sha512-5fpklah0P48S0W89k839WwB7sj7Slik39+EcfKlAgrXgXuwEwPjeXX6mduDYtFDFNkVb081SjEfPbNW/nborJA==",
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
} }
@@ -941,19 +932,13 @@
}, },
"dependencies": { "dependencies": {
"color-convert": { "color-convert": {
"version": "1.9.2", "version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
"integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"color-name": "1.1.1" "color-name": "^1.1.1"
} }
},
"color-name": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
"integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
"dev": true
} }
} }
}, },
@@ -1191,13 +1176,13 @@
"dev": true "dev": true
}, },
"autoprefixer": { "autoprefixer": {
"version": "8.6.3", "version": "8.6.2",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.3.tgz", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.2.tgz",
"integrity": "sha512-KkQyCHBxma7R2eoEkjja/RHUBw+Fc1nY46LdV62fzJI5D7i8mLLCtAZ/AVR3UbXhDZ8mUz4C/PF4lZrbiHa1ZQ==", "integrity": "sha512-cv9v1mYYBcAnZq4MHseJ9AIdjQmNahnpCpPO46oTkQJS2GggsBp2azHjNpAuQ95Epvsg+AIsyjYhfI9YwFxGSA==",
"dev": true, "dev": true,
"requires": { "requires": {
"browserslist": "^3.2.8", "browserslist": "^3.2.8",
"caniuse-lite": "^1.0.30000856", "caniuse-lite": "^1.0.30000851",
"normalize-range": "^0.1.2", "normalize-range": "^0.1.2",
"num2fraction": "^1.2.2", "num2fraction": "^1.2.2",
"postcss": "^6.0.22", "postcss": "^6.0.22",
@@ -1568,12 +1553,12 @@
"dev": true "dev": true
}, },
"boom": { "boom": {
"version": "2.10.1", "version": "4.3.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"dev": true, "dev": true,
"requires": { "requires": {
"hoek": "2.x.x" "hoek": "4.x.x"
} }
}, },
"brace-expansion": { "brace-expansion": {
@@ -1713,9 +1698,9 @@
} }
}, },
"buffer-from": { "buffer-from": {
"version": "1.1.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
"integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==",
"dev": true "dev": true
}, },
"buffer-indexof": { "buffer-indexof": {
@@ -1851,9 +1836,9 @@
} }
}, },
"caniuse-lite": { "caniuse-lite": {
"version": "1.0.30000856", "version": "1.0.30000851",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000856.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000851.tgz",
"integrity": "sha512-x3mYcApHMQemyaHuH/RyqtKCGIYTgEA63fdi+VBvDz8xUSmRiVWTLeyKcoGQCGG6UPR9/+4qG4OKrTa6aSQRKg==", "integrity": "sha512-Y1ecA1cL9wg0vni8t33nBw/poX8ypm+2c3fbwAESj8cm4ufK9CBFQ1+nUK8Dp5dtFo5Fc3JzkI5DKmQbuIo6hQ==",
"dev": true "dev": true
}, },
"caseless": { "caseless": {
@@ -1928,30 +1913,29 @@
} }
}, },
"check-types": { "check-types": {
"version": "7.4.0", "version": "7.3.0",
"resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.3.0.tgz",
"integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", "integrity": "sha1-Ro9XGkQ1wkJI9f0MsOjYfDw0Hn0=",
"dev": true "dev": true
}, },
"chokidar": { "chokidar": {
"version": "2.0.4", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz",
"integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==",
"dev": true, "dev": true,
"requires": { "requires": {
"anymatch": "^2.0.0", "anymatch": "^2.0.0",
"async-each": "^1.0.0", "async-each": "^1.0.0",
"braces": "^2.3.0", "braces": "^2.3.0",
"fsevents": "^1.2.2", "fsevents": "^1.1.2",
"glob-parent": "^3.1.0", "glob-parent": "^3.1.0",
"inherits": "^2.0.1", "inherits": "^2.0.1",
"is-binary-path": "^1.0.0", "is-binary-path": "^1.0.0",
"is-glob": "^4.0.0", "is-glob": "^4.0.0",
"lodash.debounce": "^4.0.8",
"normalize-path": "^2.1.1", "normalize-path": "^2.1.1",
"path-is-absolute": "^1.0.0", "path-is-absolute": "^1.0.0",
"readdirp": "^2.0.0", "readdirp": "^2.0.0",
"upath": "^1.0.5" "upath": "^1.0.0"
} }
}, },
"chownr": { "chownr": {
@@ -2460,12 +2444,23 @@
} }
}, },
"cryptiles": { "cryptiles": {
"version": "2.0.5", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
"integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
"dev": true, "dev": true,
"requires": { "requires": {
"boom": "2.x.x" "boom": "5.x.x"
},
"dependencies": {
"boom": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"dev": true,
"requires": {
"hoek": "4.x.x"
}
}
} }
}, },
"crypto-browserify": { "crypto-browserify": {
@@ -2573,9 +2568,9 @@
} }
}, },
"d3": { "d3": {
"version": "5.5.0", "version": "5.4.0",
"resolved": "https://registry.npmjs.org/d3/-/d3-5.5.0.tgz", "resolved": "https://registry.npmjs.org/d3/-/d3-5.4.0.tgz",
"integrity": "sha512-HRDSYvT3n7kMvJH7Avp7iR0Xsz97bkCFka9aOg04EdyXyiAP8yQzUpLH3712y9R7ffVo1g94t1OYFHBB0yI9vQ==", "integrity": "sha1-CQGZqFadHeI9BKP/B/4TYJX+p04=",
"requires": { "requires": {
"d3-array": "1", "d3-array": "1",
"d3-axis": "1", "d3-axis": "1",
@@ -2611,9 +2606,9 @@
}, },
"dependencies": { "dependencies": {
"d3-scale": { "d3-scale": {
"version": "2.1.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.1.0.tgz", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.0.0.tgz",
"integrity": "sha512-Bb2N3ZgzPdKVEoWGkt8lPV6R7YdpSBWI70Xf26NQHOVjs77a6gLUmBOOPt9d9nB8JiQhwXY1RHCa+eSyWCJZIQ==", "integrity": "sha512-Sa2Ny6CoJT7x6dozxPnvUQT61epGWsgppFvnNl8eJEzfJBG0iDBBTJAtz2JKem7Mb+NevnaZiDiIDHsuWkv6vg==",
"requires": { "requires": {
"d3-array": "^1.2.0", "d3-array": "^1.2.0",
"d3-collection": "1", "d3-collection": "1",
@@ -2723,9 +2718,9 @@
} }
}, },
"d3-format": { "d3-format": {
"version": "1.3.0", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.0.tgz", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz",
"integrity": "sha512-ycfLEIzHVZC3rOvuBOKVyQXSiUyCDjeAPIj9n/wugrr+s5AcTQC2Bz6aKkubG7rQaQF0SGW/OV4UEJB9nfioFg==" "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw=="
}, },
"d3-geo": { "d3-geo": {
"version": "1.10.0", "version": "1.10.0",
@@ -3421,9 +3416,9 @@
} }
}, },
"error-ex": { "error-ex": {
"version": "1.3.2", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
"dev": true, "dev": true,
"requires": { "requires": {
"is-arrayish": "^0.2.1" "is-arrayish": "^0.2.1"
@@ -4087,9 +4082,9 @@
} }
}, },
"follow-redirects": { "follow-redirects": {
"version": "1.5.0", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.0.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz",
"integrity": "sha512-fdrt472/9qQ6Kgjvb935ig6vJCuofpBUD14f9Vb+SLlm7xIe4Qva5gey8EKtv8lp7ahE1wilg3xL1znpVGtZIA==", "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==",
"dev": true, "dev": true,
"requires": { "requires": {
"debug": "^3.1.0" "debug": "^3.1.0"
@@ -4203,14 +4198,14 @@
"dev": true "dev": true
}, },
"fsevents": { "fsevents": {
"version": "1.2.4", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.3.tgz",
"integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "integrity": "sha512-X+57O5YkDTiEQGiw8i7wYc2nQgweIekqkepI8Q3y4wVlurgBt2SuwxTeYUYMZIGpLZH3r/TsMjczCMXE5ZOt7Q==",
"dev": true, "dev": true,
"optional": true, "optional": true,
"requires": { "requires": {
"nan": "^2.9.2", "nan": "^2.9.2",
"node-pre-gyp": "^0.10.0" "node-pre-gyp": "^0.9.0"
}, },
"dependencies": { "dependencies": {
"abbrev": { "abbrev": {
@@ -4291,7 +4286,7 @@
} }
}, },
"deep-extend": { "deep-extend": {
"version": "0.5.1", "version": "0.4.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true "optional": true
@@ -4469,7 +4464,7 @@
} }
}, },
"node-pre-gyp": { "node-pre-gyp": {
"version": "0.10.0", "version": "0.9.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
@@ -4578,12 +4573,12 @@
"optional": true "optional": true
}, },
"rc": { "rc": {
"version": "1.2.7", "version": "1.2.6",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
"requires": { "requires": {
"deep-extend": "^0.5.1", "deep-extend": "~0.4.0",
"ini": "~1.3.0", "ini": "~1.3.0",
"minimist": "^1.2.0", "minimist": "^1.2.0",
"strip-json-comments": "~2.0.1" "strip-json-comments": "~2.0.1"
@@ -5140,9 +5135,9 @@
} }
}, },
"hash.js": { "hash.js": {
"version": "1.1.4", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.4.tgz", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
"integrity": "sha512-A6RlQvvZEtFS5fLU43IDu0QUmBy+fDO9VMdTXvufKwIkt/rFfvICAViCax5fbDO4zdNzaC3/27ZhKUok5bAJyw==", "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
"dev": true, "dev": true,
"requires": { "requires": {
"inherits": "^2.0.3", "inherits": "^2.0.3",
@@ -5150,15 +5145,15 @@
} }
}, },
"hawk": { "hawk": {
"version": "3.1.3", "version": "6.0.2",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
"integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"boom": "2.x.x", "boom": "4.x.x",
"cryptiles": "2.x.x", "cryptiles": "3.x.x",
"hoek": "2.x.x", "hoek": "4.x.x",
"sntp": "1.x.x" "sntp": "2.x.x"
} }
}, },
"he": { "he": {
@@ -5179,9 +5174,9 @@
} }
}, },
"hoek": { "hoek": {
"version": "2.16.3", "version": "4.2.1",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
"dev": true "dev": true
}, },
"hosted-git-info": { "hosted-git-info": {
@@ -5484,9 +5479,9 @@
"dev": true "dev": true
}, },
"install": { "install": {
"version": "0.11.2", "version": "0.11.0",
"resolved": "https://registry.npmjs.org/install/-/install-0.11.2.tgz", "resolved": "https://registry.npmjs.org/install/-/install-0.11.0.tgz",
"integrity": "sha512-vm3WeuqkmCK/jD56s7pWLKl4QoHMdcIwLlsMAFYV3XAbrz+RdyOJvtIQn/A1LiaNz2djUdwec01/90KLSIaUGg==" "integrity": "sha512-30UqvWKr/59SStU2/bRye4wT1S3mzjwa0oV+BxusB0neGqhxUrwLlnXDbt6QtIfBxCNWFqg+ARnGNjFj8XuV5A=="
}, },
"internal-ip": { "internal-ip": {
"version": "1.2.0", "version": "1.2.0",
@@ -6140,9 +6135,9 @@
"dev": true "dev": true
}, },
"js-yaml": { "js-yaml": {
"version": "3.12.0", "version": "3.11.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz",
"integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
"dev": true, "dev": true,
"requires": { "requires": {
"argparse": "^1.0.7", "argparse": "^1.0.7",
@@ -6665,12 +6660,6 @@
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
"dev": true "dev": true
}, },
"lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
"dev": true
},
"lodash.mergewith": { "lodash.mergewith": {
"version": "4.6.1", "version": "4.6.1",
"resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
@@ -7177,9 +7166,9 @@
} }
}, },
"ngx-color-picker": { "ngx-color-picker": {
"version": "6.4.0", "version": "6.3.3",
"resolved": "https://registry.npmjs.org/ngx-color-picker/-/ngx-color-picker-6.4.0.tgz", "resolved": "https://registry.npmjs.org/ngx-color-picker/-/ngx-color-picker-6.3.3.tgz",
"integrity": "sha512-u4UeeSdZoaGmHJCSlFQGe0xhOLB63rms35IjI7HhHz9MS4VeCQa4UiFMK9Dgjg1FuGt2nEyj/4Fs6tpQfgXEXQ==" "integrity": "sha512-0uoxt+3BtanTTbQj9elpsZe/6a/BWAl8jdl0m6OyrCXlCiO3q4zGZjWee4905RF0NXGxQvDWT27coqmDeXGsvw=="
}, },
"ngx-cookie-service": { "ngx-cookie-service": {
"version": "1.0.10", "version": "1.0.10",
@@ -7247,6 +7236,25 @@
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"boom": {
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true,
"requires": {
"hoek": "2.x.x"
}
},
"cryptiles": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
"integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
"dev": true,
"optional": true,
"requires": {
"boom": "2.x.x"
}
},
"form-data": { "form-data": {
"version": "2.1.4", "version": "2.1.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
@@ -7277,6 +7285,25 @@
"har-schema": "^1.0.5" "har-schema": "^1.0.5"
} }
}, },
"hawk": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
"integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
"dev": true,
"optional": true,
"requires": {
"boom": "2.x.x",
"cryptiles": "2.x.x",
"hoek": "2.x.x",
"sntp": "1.x.x"
}
},
"hoek": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
"dev": true
},
"http-signature": { "http-signature": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
@@ -7340,6 +7367,16 @@
"integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
"dev": true, "dev": true,
"optional": true "optional": true
},
"sntp": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
"integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
"dev": true,
"optional": true,
"requires": {
"hoek": "2.x.x"
}
} }
} }
}, },
@@ -7430,6 +7467,15 @@
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"boom": {
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true,
"requires": {
"hoek": "2.x.x"
}
},
"caseless": { "caseless": {
"version": "0.11.0", "version": "0.11.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
@@ -7450,6 +7496,16 @@
"supports-color": "^2.0.0" "supports-color": "^2.0.0"
} }
}, },
"cryptiles": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
"integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
"dev": true,
"optional": true,
"requires": {
"boom": "2.x.x"
}
},
"form-data": { "form-data": {
"version": "2.1.4", "version": "2.1.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
@@ -7475,6 +7531,25 @@
"pinkie-promise": "^2.0.0" "pinkie-promise": "^2.0.0"
} }
}, },
"hawk": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
"integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
"dev": true,
"optional": true,
"requires": {
"boom": "2.x.x",
"cryptiles": "2.x.x",
"hoek": "2.x.x",
"sntp": "1.x.x"
}
},
"hoek": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
"dev": true
},
"http-signature": { "http-signature": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
@@ -7523,6 +7598,16 @@
"uuid": "^3.0.0" "uuid": "^3.0.0"
} }
}, },
"sntp": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
"integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
"dev": true,
"optional": true,
"requires": {
"hoek": "2.x.x"
}
},
"supports-color": { "supports-color": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
@@ -11861,9 +11946,9 @@
} }
}, },
"object-keys": { "object-keys": {
"version": "1.0.12", "version": "1.0.11",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
"integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
"dev": true "dev": true
}, },
"object-visit": { "object-visit": {
@@ -12476,9 +12561,9 @@
} }
}, },
"prismjs": { "prismjs": {
"version": "1.15.0", "version": "1.14.0",
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.14.0.tgz",
"integrity": "sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA==", "integrity": "sha512-sa2s4m60bXs+kU3jcuUwx3ZCrUH7o0kuqnOOINbODqlRrDB7KY8SRx+xR/D7nHLlgfDdG7zXbRO8wJ+su5Ls0A==",
"requires": { "requires": {
"clipboard": "^2.0.0" "clipboard": "^2.0.0"
} }
@@ -12535,9 +12620,9 @@
}, },
"dependencies": { "dependencies": {
"@types/node": { "@types/node": {
"version": "6.0.113", "version": "6.0.110",
"resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.113.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.110.tgz",
"integrity": "sha512-f9XXUWFqryzjkZA1EqFvJHSFyqyasV17fq8zCDIzbRV4ctL7RrJGKvG+lcex86Rjbzd1GrER9h9VmF5sSjV0BQ==", "integrity": "sha512-LiaH3mF+OAqR+9Wo1OTJDbZDtCewAVjTbMhF1ZgUJ3fc8xqOJq6VqbpBh9dJVCVzByGmYIg2fREbuXNX0TKiJA==",
"dev": true "dev": true
}, },
"adm-zip": { "adm-zip": {
@@ -12956,9 +13041,9 @@
"dev": true "dev": true
}, },
"regenerate": { "regenerate": {
"version": "1.4.0", "version": "1.3.3",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
"integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
"dev": true "dev": true
}, },
"regenerator-runtime": { "regenerator-runtime": {
@@ -13075,9 +13160,9 @@
} }
}, },
"request": { "request": {
"version": "2.87.0", "version": "2.85.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz",
"integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
"dev": true, "dev": true,
"requires": { "requires": {
"aws-sign2": "~0.7.0", "aws-sign2": "~0.7.0",
@@ -13088,6 +13173,7 @@
"forever-agent": "~0.6.1", "forever-agent": "~0.6.1",
"form-data": "~2.3.1", "form-data": "~2.3.1",
"har-validator": "~5.0.3", "har-validator": "~5.0.3",
"hawk": "~6.0.2",
"http-signature": "~1.2.0", "http-signature": "~1.2.0",
"is-typedarray": "~1.0.0", "is-typedarray": "~1.0.0",
"isstream": "~0.1.2", "isstream": "~0.1.2",
@@ -13097,6 +13183,7 @@
"performance-now": "^2.1.0", "performance-now": "^2.1.0",
"qs": "~6.5.1", "qs": "~6.5.1",
"safe-buffer": "^5.1.1", "safe-buffer": "^5.1.1",
"stringstream": "~0.0.5",
"tough-cookie": "~2.3.3", "tough-cookie": "~2.3.3",
"tunnel-agent": "^0.6.0", "tunnel-agent": "^0.6.0",
"uuid": "^3.1.0" "uuid": "^3.1.0"
@@ -13127,9 +13214,9 @@
"dev": true "dev": true
}, },
"resolve": { "resolve": {
"version": "1.8.1", "version": "1.7.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
"integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==",
"dev": true, "dev": true,
"requires": { "requires": {
"path-parse": "^1.0.5" "path-parse": "^1.0.5"
@@ -13724,12 +13811,12 @@
} }
}, },
"sntp": { "sntp": {
"version": "1.0.9", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
"integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
"dev": true, "dev": true,
"requires": { "requires": {
"hoek": "2.x.x" "hoek": "4.x.x"
} }
}, },
"socket.io": { "socket.io": {
@@ -13935,9 +14022,9 @@
} }
}, },
"source-map-support": { "source-map-support": {
"version": "0.5.6", "version": "0.5.5",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz",
"integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==",
"dev": true, "dev": true,
"requires": { "requires": {
"buffer-from": "^1.0.0", "buffer-from": "^1.0.0",
@@ -14035,9 +14122,9 @@
"dev": true "dev": true
}, },
"sshpk": { "sshpk": {
"version": "1.14.2", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
"integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
"dev": true, "dev": true,
"requires": { "requires": {
"asn1": "~0.2.3", "asn1": "~0.2.3",
@@ -14047,7 +14134,6 @@
"ecc-jsbn": "~0.1.1", "ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1", "getpass": "^0.1.1",
"jsbn": "~0.1.0", "jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0" "tweetnacl": "~0.14.0"
} }
}, },
@@ -14166,9 +14252,9 @@
} }
}, },
"stringstream": { "stringstream": {
"version": "0.0.6", "version": "0.0.5",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
"integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
"dev": true "dev": true
}, },
"strip-ansi": { "strip-ansi": {
@@ -14543,9 +14629,9 @@
} }
}, },
"tslib": { "tslib": {
"version": "1.9.2", "version": "1.9.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.2.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz",
"integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==" "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ=="
}, },
"tslint": { "tslint": {
"version": "5.9.1", "version": "5.9.1",
@@ -14581,9 +14667,9 @@
} }
}, },
"tsutils": { "tsutils": {
"version": "2.27.1", "version": "2.26.2",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.27.1.tgz", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.26.2.tgz",
"integrity": "sha512-AE/7uzp32MmaHvNNFES85hhUDHFdFZp6OAiZcd6y4ZKKIg6orJTm8keYWBhIhrJQH3a4LzNKat7ZPXZt5aTf6w==", "integrity": "sha512-uzwnhmrSbyinPCiwfzGsOY3IulBTwoky7r83HmZdz9QNCjhSCzavkh47KLWuU0zF2F2WbpmmzoJUIEiYyd+jEQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"tslib": "^1.8.1" "tslib": "^1.8.1"
@@ -15386,9 +15472,9 @@
} }
}, },
"webpack-merge": { "webpack-merge": {
"version": "4.1.3", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.3.tgz", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.2.tgz",
"integrity": "sha512-zxwAIGK7nKdu5CIZL0BjTQoq3elV0t0MfB7rUC1zj668geid52abs6hN/ACwZdK6LeMS8dC9B6WmtF978zH5mg==", "integrity": "sha512-/0QYwW/H1N/CdXYA2PNPVbsxO3u2Fpz34vs72xm03SRfg6bMNGfMJIQEpQjKRvkG2JvT6oRJFpDtSrwbX8Jzvw==",
"dev": true, "dev": true,
"requires": { "requires": {
"lodash": "^4.17.5" "lodash": "^4.17.5"
@@ -15444,9 +15530,9 @@
"dev": true "dev": true
}, },
"which": { "which": {
"version": "1.3.1", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
"dev": true, "dev": true,
"requires": { "requires": {
"isexe": "^2.0.0" "isexe": "^2.0.0"

View File

@@ -1,12 +1,12 @@
{ {
"name": "fuse", "name": "fuse",
"version": "6.2.2", "version": "6.1.0",
"license": "https://themeforest.net/licenses/terms/regular", "license": "https://themeforest.net/licenses/terms/regular",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve --open", "start": "ng serve --open",
"start-hmr": "ng serve --configuration hmr --source-map=false --hmr-warning=false", "start-hmr": "ng serve --configuration hmr -sm=false",
"start-hmr-sourcemaps": "ng serve --configuration hmr --source-map=true --hmr-warning=false", "start-hmr-sourcemaps": "ng serve --hmr -e=hmr",
"build": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --dev", "build": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --dev",
"build-stats": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --dev --stats-json", "build-stats": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --dev --stats-json",
"build-prod": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --prod", "build-prod": "node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build --prod",
@@ -19,19 +19,19 @@
"private": true, "private": true,
"dependencies": { "dependencies": {
"@agm/core": "1.0.0-beta.3", "@agm/core": "1.0.0-beta.3",
"@angular/animations": "6.0.7", "@angular/animations": "6.0.5",
"@angular/cdk": "6.3.3", "@angular/cdk": "6.2.1",
"@angular/common": "6.0.7", "@angular/common": "6.0.5",
"@angular/compiler": "6.0.7", "@angular/compiler": "6.0.5",
"@angular/core": "6.0.7", "@angular/core": "6.0.5",
"@angular/flex-layout": "6.0.0-beta.16", "@angular/flex-layout": "6.0.0-beta.16",
"@angular/forms": "6.0.7", "@angular/forms": "6.0.5",
"@angular/http": "6.0.7", "@angular/http": "6.0.5",
"@angular/material": "6.3.3", "@angular/material": "6.2.1",
"@angular/material-moment-adapter": "6.3.3", "@angular/material-moment-adapter": "6.2.1",
"@angular/platform-browser": "6.0.7", "@angular/platform-browser": "6.0.5",
"@angular/platform-browser-dynamic": "6.0.7", "@angular/platform-browser-dynamic": "6.0.5",
"@angular/router": "6.0.7", "@angular/router": "6.0.5",
"@ngrx/effects": "6.0.1", "@ngrx/effects": "6.0.1",
"@ngrx/router-store": "6.0.1", "@ngrx/router-store": "6.0.1",
"@ngrx/store": "6.0.1", "@ngrx/store": "6.0.1",
@@ -46,16 +46,16 @@
"chart.js": "2.7.2", "chart.js": "2.7.2",
"classlist.js": "1.1.20150312", "classlist.js": "1.1.20150312",
"core-js": "2.5.7", "core-js": "2.5.7",
"d3": "5.5.0", "d3": "5.4.0",
"hammerjs": "2.0.8", "hammerjs": "2.0.8",
"lodash": "4.17.10", "lodash": "4.17.10",
"moment": "2.22.2", "moment": "2.22.2",
"ng2-charts": "1.6.0", "ng2-charts": "1.6.0",
"ngrx-store-freeze": "0.2.4", "ngrx-store-freeze": "0.2.4",
"ngx-color-picker": "6.4.0", "ngx-color-picker": "6.3.3",
"ngx-cookie-service": "1.0.10", "ngx-cookie-service": "1.0.10",
"perfect-scrollbar": "1.4.0", "perfect-scrollbar": "1.4.0",
"prismjs": "1.15.0", "prismjs": "1.14.0",
"rxjs": "6.2.1", "rxjs": "6.2.1",
"rxjs-compat": "6.2.1", "rxjs-compat": "6.2.1",
"web-animations-js": "2.3.1", "web-animations-js": "2.3.1",
@@ -63,13 +63,13 @@
}, },
"devDependencies": { "devDependencies": {
"@angular/cli": "6.0.8", "@angular/cli": "6.0.8",
"@angular/compiler-cli": "6.0.7", "@angular/compiler-cli": "6.0.5",
"@angular/language-service": "6.0.7", "@angular/language-service": "6.0.5",
"@angular-devkit/build-angular": "0.6.8", "@angular-devkit/build-angular": "0.6.8",
"@angularclass/hmr": "2.1.3", "@angularclass/hmr": "2.1.3",
"@types/jasmine": "2.8.8", "@types/jasmine": "2.8.8",
"@types/jasminewd2": "2.0.3", "@types/jasminewd2": "2.0.3",
"@types/lodash": "4.14.110", "@types/lodash": "4.14.109",
"@types/node": "8.9.5", "@types/node": "8.9.5",
"codelyzer": "4.2.1", "codelyzer": "4.2.1",
"jasmine-core": "2.99.1", "jasmine-core": "2.99.1",

View File

@@ -1,42 +1,26 @@
<ng-container *ngIf="!item.hidden"> <ng-container *ngIf="!item.hidden">
<!-- normal collapse --> <!-- normal collapse -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && !item.function" matRipple> <a class="nav-link" *ngIf="!item.url && !item.function" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a> </a>
<!-- item.url --> <!-- item.url -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function" <a class="nav-link" *ngIf="item.url && !item.function"
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']" [routerLink]="[item.url]" routerLinkActive="active"
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a>
<!-- item.externalUrl -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function"
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a>
<!-- item.function -->
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function"
(click)="item.function()" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
</span>
<!-- item.url && item.function -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function"
(click)="item.function()"
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple> [routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a> </a>
<!-- item.externalUrl && item.function --> <!-- item.function -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function" <span class="nav-link" *ngIf="!item.url && item.function" (click)="item.function()" matRipple>
(click)="item.function()" <ng-container *ngTemplateOutlet="itemContent"></ng-container>
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple> </span>
<!-- item.url && item.function -->
<a class="nav-link" *ngIf="item.url && item.function" (click)="item.function()"
[routerLink]="[item.url]" routerLinkActive="active"
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a> </a>

View File

@@ -1,38 +1,20 @@
<ng-container *ngIf="!item.hidden"> <ng-container *ngIf="!item.hidden">
<!-- item.url --> <!-- item.url -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function" <a class="nav-link" *ngIf="item.url" [routerLink]="[item.url]" routerLinkActive="active"
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']" [routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple>
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a>
<!-- item.externalUrl -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function"
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a> </a>
<!-- item.function --> <!-- item.function -->
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function" <span class="nav-link" *ngIf="item.function" (click)="item.function()" matRipple>
(click)="item.function()" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</span> </span>
<!-- item.url && item.function --> <!-- item.url && item.function -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function" <a class="nav-link" *ngIf="item.url && item.function" (click)="item.function()"
(click)="item.function()" [routerLink]="[item.url]" routerLinkActive="active"
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']" [routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple>
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a>
<!-- item.externalUrl && item.function -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function"
(click)="item.function()"
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a> </a>
@@ -45,4 +27,4 @@
</span> </span>
</ng-template> </ng-template>
</ng-container> </ng-container>

View File

@@ -1,4 +1,5 @@
<div class="nav" [ngClass]="{'horizontal':layout === 'horizontal', 'vertical':layout === 'vertical'}"> <div id="main-navigation" class="nav"
[ngClass]="{'horizontal':layout === 'horizontal', 'vertical':layout === 'vertical'}">
<!-- Vertical Navigation Layout --> <!-- Vertical Navigation Layout -->
<ng-container *ngIf="layout === 'vertical'"> <ng-container *ngIf="layout === 'vertical'">
@@ -20,8 +21,7 @@
<ng-container *ngFor="let item of navigation"> <ng-container *ngFor="let item of navigation">
<fuse-nav-horizontal-collapsable *ngIf="item.type=='group'" [item]="item"></fuse-nav-horizontal-collapsable> <fuse-nav-horizontal-collapsable *ngIf="item.type=='group'" [item]="item"></fuse-nav-horizontal-collapsable>
<fuse-nav-horizontal-collapsable *ngIf="item.type=='collapse'" <fuse-nav-horizontal-collapsable *ngIf="item.type=='collapse'" [item]="item"></fuse-nav-horizontal-collapsable>
[item]="item"></fuse-nav-horizontal-collapsable>
<fuse-nav-horizontal-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-horizontal-item> <fuse-nav-horizontal-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-horizontal-item>
</ng-container> </ng-container>

View File

@@ -4,7 +4,7 @@ fuse-navigation {
display: flex; display: flex;
flex: 1 0 auto; flex: 1 0 auto;
> .nav { #main-navigation {
margin: 0; margin: 0;
padding: 0; padding: 0;
width: 100%; width: 100%;

View File

@@ -1,13 +1,11 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable, Subject } from 'rxjs'; import { BehaviorSubject, Observable, Subject } from 'rxjs';
import { FuseNavigationItem } from '@fuse/types'; @Injectable()
@Injectable({
providedIn: 'root'
})
export class FuseNavigationService export class FuseNavigationService
{ {
flatNavigation: any[] = [];
onItemCollapsed: Subject<any>; onItemCollapsed: Subject<any>;
onItemCollapseToggled: Subject<any>; onItemCollapseToggled: Subject<any>;
@@ -140,30 +138,39 @@ export class FuseNavigationService
* Get flattened navigation array * Get flattened navigation array
* *
* @param navigation * @param navigation
* @param flatNavigation
* @returns {any[]} * @returns {any[]}
*/ */
getFlatNavigation(navigation, flatNavigation: FuseNavigationItem[] = []): any getFlatNavigation(navigation): any
{ {
for ( const item of navigation ) for ( const navItem of navigation )
{ {
if ( item.type === 'item' ) if ( navItem.type === 'item' )
{ {
flatNavigation.push(item); this.flatNavigation.push({
id : navItem.id || null,
title : navItem.title || null,
translate : navItem.translate || null,
type : navItem.type,
icon : navItem.icon || null,
url : navItem.url || null,
function : navItem.function || null,
exactMatch: navItem.exactMatch || false,
badge : navItem.badge || null
});
continue; continue;
} }
if ( item.type === 'collapsable' || item.type === 'group' ) if ( navItem.type === 'collapse' || navItem.type === 'group' )
{ {
if ( item.children ) if ( navItem.children )
{ {
this.getFlatNavigation(item.children, flatNavigation); this.getFlatNavigation(navItem.children);
} }
} }
} }
return flatNavigation; return this.flatNavigation;
} }
/** /**

View File

@@ -1,14 +1,12 @@
<ng-container *ngIf="!item.hidden"> <ng-container *ngIf="!item.hidden">
<!-- normal collapse --> <!-- normal collapse -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && !item.function" <a class="nav-link" *ngIf="!item.url && !item.function" (click)="toggleOpen($event)" matRipple>
(click)="toggleOpen($event)" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a> </a>
<!-- item.url --> <!-- item.url -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function" <a class="nav-link" *ngIf="item.url && !item.externalUrl && !item.function" (click)="toggleOpen($event)"
(click)="toggleOpen($event)"
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']" [routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" [routerLinkActiveOptions]="{exact: item.exactMatch || false}"
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple> [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
@@ -16,20 +14,19 @@
</a> </a>
<!-- item.externalUrl --> <!-- item.externalUrl -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function" <a class="nav-link" *ngIf="item.url && item.externalUrl && !item.function" (click)="toggleOpen($event)"
(click)="toggleOpen($event)"
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple> [href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a> </a>
<!-- item.function --> <!-- item.function -->
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function" <span class="nav-link" *ngIf="!item.url && item.function"
(click)="toggleOpen($event);item.function()" matRipple> (click)="toggleOpen($event);item.function()" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</span> </span>
<!-- item.url && item.function --> <!-- item.url && item.function -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function" <a class="nav-link" *ngIf="item.url && !item.externalUrl && item.function"
(click)="toggleOpen($event);item.function()" (click)="toggleOpen($event);item.function()"
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']" [routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple> [routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple>
@@ -37,7 +34,7 @@
</a> </a>
<!-- item.externalUrl && item.function --> <!-- item.externalUrl && item.function -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function" <a class="nav-link" *ngIf="item.url && item.externalUrl && item.function"
(click)="toggleOpen($event);item.function()" (click)="toggleOpen($event);item.function()"
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple> [href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>

View File

@@ -1,6 +1,6 @@
<ng-container *ngIf="!item.hidden"> <ng-container *ngIf="!item.hidden">
<div class="group-title" [ngClass]="item.classes"> <div class="group-title">
<span class="hint-text" [translate]="item.translate">{{ item.title }}</span> <span class="hint-text" [translate]="item.translate">{{ item.title }}</span>
</div> </div>

View File

@@ -1,7 +1,7 @@
<ng-container *ngIf="!item.hidden"> <ng-container *ngIf="!item.hidden">
<!-- item.url --> <!-- item.url -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function" <a class="nav-link" *ngIf="item.url && !item.externalUrl && !item.function"
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']" [routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" [routerLinkActiveOptions]="{exact: item.exactMatch || false}"
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple> [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
@@ -9,20 +9,19 @@
</a> </a>
<!-- item.externalUrl --> <!-- item.externalUrl -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function" <a class="nav-link" *ngIf="item.url && item.externalUrl && !item.function"
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple> [href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a> </a>
<!-- item.function --> <!-- item.function -->
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function" <span class="nav-link" *ngIf="!item.url && item.function"
(click)="item.function()" matRipple> (click)="item.function()" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</span> </span>
<!-- item.url && item.function --> <!-- item.url && item.function -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function" <a class="nav-link" *ngIf="item.url && !item.externalUrl && item.function" (click)="item.function()"
(click)="item.function()"
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']" [routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" [routerLinkActiveOptions]="{exact: item.exactMatch || false}"
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple> [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
@@ -30,8 +29,7 @@
</a> </a>
<!-- item.externalUrl && item.function --> <!-- item.externalUrl && item.function -->
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function" <a class="nav-link" *ngIf="item.url && item.externalUrl && item.function" (click)="item.function()"
(click)="item.function()"
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple> [href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
<ng-container *ngTemplateOutlet="itemContent"></ng-container> <ng-container *ngTemplateOutlet="itemContent"></ng-container>
</a> </a>

View File

@@ -9,7 +9,7 @@
height: 64px; height: 64px;
font-size: 13px; font-size: 13px;
@include media-breakpoint-down('xs') { @include media-breakpoint-down('sm') {
height: 56px; height: 56px;
} }
@@ -28,7 +28,7 @@
height: 64px !important; height: 64px !important;
line-height: 64px !important; line-height: 64px !important;
@include media-breakpoint-down('xs') { @include media-breakpoint-down('sm') {
height: 56px !important; height: 56px !important;
line-height: 56px !important; line-height: 56px !important;
} }
@@ -39,7 +39,7 @@
height: 64px !important; height: 64px !important;
line-height: 64px !important; line-height: 64px !important;
@include media-breakpoint-down('xs') { @include media-breakpoint-down('sm') {
height: 56px !important; height: 56px !important;
line-height: 56px !important; line-height: 56px !important;
} }

View File

@@ -1,5 +1,3 @@
@import "src/@fuse/scss/fuse";
fuse-sidebar { fuse-sidebar {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -16,12 +14,6 @@ fuse-sidebar {
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.35); box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.35);
background: white; background: white;
@include media-breakpoint-down('xs') {
min-width: 0 !important;
max-width: 80vw !important;
width: 80vw !important;
}
&.left-positioned { &.left-positioned {
left: 0; left: 0;
transform: translateX(-100%); transform: translateX(-100%);
@@ -45,6 +37,12 @@ fuse-sidebar {
position: absolute !important; position: absolute !important;
top: 0; top: 0;
bottom: 0; bottom: 0;
&:not(.unfolded) {
width: 64px;
min-width: 64px;
max-width: 64px;
}
} }
&.animations-enabled { &.animations-enabled {

View File

@@ -1,12 +1,12 @@
import { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnDestroy, OnInit, Output, Renderer2, RendererStyleFlags2, ViewEncapsulation } from '@angular/core'; import { ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Input, OnDestroy, OnInit, Renderer2, RendererStyleFlags2, ViewEncapsulation } from '@angular/core';
import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations'; import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';
import { ObservableMedia } from '@angular/flex-layout'; import { ObservableMedia } from '@angular/flex-layout';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { FuseSidebarService } from './sidebar.service'; import { FuseSidebarService } from './sidebar.service';
import { FuseMatchMediaService } from '@fuse/services/match-media.service'; import { FuseMatchMediaService } from '@fuse/services/match-media.service';
import { FuseConfigService } from '@fuse/services/config.service'; import { FuseConfigService } from '@fuse/services/config.service';
import { takeUntil } from 'rxjs/internal/operators';
@Component({ @Component({
selector : 'fuse-sidebar', selector : 'fuse-sidebar',
@@ -20,10 +20,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
@Input() @Input()
name: string; name: string;
// Key
@Input()
key: string;
// Position // Position
@Input() @Input()
position: 'left' | 'right'; position: 'left' | 'right';
@@ -40,14 +36,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
@HostBinding('class.locked-open') @HostBinding('class.locked-open')
isLockedOpen: boolean; isLockedOpen: boolean;
// Folded width
@Input()
foldedWidth: number;
// Folded auto trigger on hover
@Input()
foldedAutoTriggerOnHover: boolean;
// Folded unfolded // Folded unfolded
@HostBinding('class.unfolded') @HostBinding('class.unfolded')
unfolded: boolean; unfolded: boolean;
@@ -56,19 +44,10 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
@Input() @Input()
invisibleOverlay: boolean; invisibleOverlay: boolean;
// Folded changed
@Output()
foldedChanged: EventEmitter<boolean>;
// Opened changed
@Output()
openedChanged: EventEmitter<boolean>;
// Private // Private
private _folded: boolean; private _folded: boolean;
private _fuseConfig: any; private _fuseConfig: any;
private _wasActive: boolean; private _wasActive: boolean;
private _wasFolded: boolean;
private _backdrop: HTMLElement | null = null; private _backdrop: HTMLElement | null = null;
private _player: AnimationPlayer; private _player: AnimationPlayer;
private _unsubscribeAll: Subject<any>; private _unsubscribeAll: Subject<any>;
@@ -100,17 +79,13 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
) )
{ {
// Set the defaults // Set the defaults
this.foldedAutoTriggerOnHover = true; this.folded = false;
this.foldedWidth = 64;
this.foldedChanged = new EventEmitter();
this.openedChanged = new EventEmitter();
this.opened = false; this.opened = false;
this.position = 'left'; this.position = 'left';
this.invisibleOverlay = false; this.invisibleOverlay = false;
// Set the private defaults // Set the private defaults
this._animationsEnabled = false; this._animationsEnabled = false;
this._folded = false;
this._unsubscribeAll = new Subject(); this._unsubscribeAll = new Subject();
} }
@@ -118,40 +93,37 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// @ Accessors // @ Accessors
// ----------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------
/** // Folded
* Folded @HostBinding('class.folded')
*
* @param {boolean} value
*/
@Input() @Input()
set folded(value: boolean) set folded(value: boolean)
{ {
// Set the folded // Only work if the sidebar is not closed
this._folded = value;
// Return if the sidebar is closed
if ( !this.opened ) if ( !this.opened )
{ {
return; return;
} }
// Programmatically add/remove padding to the element // Set the folded
this._folded = value;
// Programmatically add/remove margin to the element
// that comes after or before based on the position // that comes after or before based on the position
let sibling, let sibling,
styleRule; styleRule;
const styleValue = this.foldedWidth + 'px'; const styleValue = '64px';
// Get the sibling and set the style rule // Get the sibling and set the style rule
if ( this.position === 'left' ) if ( this.position === 'left' )
{ {
sibling = this._elementRef.nativeElement.nextElementSibling; sibling = this._elementRef.nativeElement.nextElementSibling;
styleRule = 'padding-left'; styleRule = 'margin-left';
} }
else else
{ {
sibling = this._elementRef.nativeElement.previousElementSibling; sibling = this._elementRef.nativeElement.previousElementSibling;
styleRule = 'padding-right'; styleRule = 'margin-right';
} }
// If there is no sibling, return... // If there is no sibling, return...
@@ -163,36 +135,15 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// If folded... // If folded...
if ( value ) if ( value )
{ {
// Fold the sidebar // Set the style
this.fold();
// Set the folded width
this._renderer.setStyle(this._elementRef.nativeElement, 'width', styleValue);
this._renderer.setStyle(this._elementRef.nativeElement, 'min-width', styleValue);
this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', styleValue);
// Set the style and class
this._renderer.setStyle(sibling, styleRule, styleValue, RendererStyleFlags2.Important + RendererStyleFlags2.DashCase); this._renderer.setStyle(sibling, styleRule, styleValue, RendererStyleFlags2.Important + RendererStyleFlags2.DashCase);
this._renderer.addClass(this._elementRef.nativeElement, 'folded');
} }
// If unfolded... // If unfolded...
else else
{ {
// Unfold the sidebar // Remove the style
this.unfold();
// Remove the folded width
this._renderer.removeStyle(this._elementRef.nativeElement, 'width');
this._renderer.removeStyle(this._elementRef.nativeElement, 'min-width');
this._renderer.removeStyle(this._elementRef.nativeElement, 'max-width');
// Remove the style and class
this._renderer.removeStyle(sibling, styleRule); this._renderer.removeStyle(sibling, styleRule);
this._renderer.removeClass(this._elementRef.nativeElement, 'folded');
} }
// Emit the 'foldedChanged' event
this.foldedChanged.emit(this.folded);
} }
get folded(): boolean get folded(): boolean
@@ -227,9 +178,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// Setup lockedOpen // Setup lockedOpen
this._setupLockedOpen(); this._setupLockedOpen();
// Setup folded
this._setupFolded();
} }
/** /**
@@ -305,9 +253,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// Set the wasActive for the first time // Set the wasActive for the first time
this._wasActive = false; this._wasActive = false;
// Set the wasFolded
this._wasFolded = this.folded;
// Show the sidebar // Show the sidebar
this._showSidebar(); this._showSidebar();
@@ -337,20 +282,11 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// Force the the opened status to true // Force the the opened status to true
this.opened = true; this.opened = true;
// Emit the 'openedChanged' event // Read the folded setting from the config
this.openedChanged.emit(this.opened); // and fold the sidebar if it's true
if ( this._fuseConfig.layout.navbar.folded )
// If the sidebar was folded, forcefully fold it again
if ( this._wasFolded )
{ {
// Enable the animations this.fold();
this._enableAnimations();
// Fold
this.folded = true;
// Mark for check
this._changeDetectorRef.markForCheck();
} }
// Hide the backdrop if any exists // Hide the backdrop if any exists
@@ -368,9 +304,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// Force the the opened status to close // Force the the opened status to close
this.opened = false; this.opened = false;
// Emit the 'openedChanged' event
this.openedChanged.emit(this.opened);
// Hide the sidebar // Hide the sidebar
this._hideSidebar(); this._hideSidebar();
} }
@@ -380,63 +313,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
}); });
} }
/**
* Setup the initial folded status
*
* @private
*/
private _setupFolded(): void
{
// Return, if sidebar is not folded
if ( !this.folded )
{
return;
}
// Return if the sidebar is closed
if ( !this.opened )
{
return;
}
// Programmatically add/remove padding to the element
// that comes after or before based on the position
let sibling,
styleRule;
const styleValue = this.foldedWidth + 'px';
// Get the sibling and set the style rule
if ( this.position === 'left' )
{
sibling = this._elementRef.nativeElement.nextElementSibling;
styleRule = 'padding-left';
}
else
{
sibling = this._elementRef.nativeElement.previousElementSibling;
styleRule = 'padding-right';
}
// If there is no sibling, return...
if ( !sibling )
{
return;
}
// Fold the sidebar
this.fold();
// Set the folded width
this._renderer.setStyle(this._elementRef.nativeElement, 'width', styleValue);
this._renderer.setStyle(this._elementRef.nativeElement, 'min-width', styleValue);
this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', styleValue);
// Set the style and class
this._renderer.setStyle(sibling, styleRule, styleValue, RendererStyleFlags2.Important + RendererStyleFlags2.DashCase);
this._renderer.addClass(this._elementRef.nativeElement, 'folded');
}
/** /**
* Show the backdrop * Show the backdrop
* *
@@ -605,9 +481,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// Set the opened status // Set the opened status
this.opened = true; this.opened = true;
// Emit the 'openedChanged' event
this.openedChanged.emit(this.opened);
// Mark for check // Mark for check
this._changeDetectorRef.markForCheck(); this._changeDetectorRef.markForCheck();
} }
@@ -631,9 +504,6 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// Set the opened status // Set the opened status
this.opened = false; this.opened = false;
// Emit the 'openedChanged' event
this.openedChanged.emit(this.opened);
// Hide the sidebar // Hide the sidebar
this._hideSidebar(); this._hideSidebar();
@@ -662,13 +532,20 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
@HostListener('mouseenter') @HostListener('mouseenter')
onMouseEnter(): void onMouseEnter(): void
{ {
// Only work if the auto trigger is enabled // Only work if the sidebar is folded
if ( !this.foldedAutoTriggerOnHover ) if ( !this.folded )
{ {
return; return;
} }
this.unfoldTemporarily(); // Enable the animations
this._enableAnimations();
// Unfold the sidebar temporarily
this.unfolded = true;
// Mark for check
this._changeDetectorRef.markForCheck();
} }
/** /**
@@ -677,13 +554,20 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
@HostListener('mouseleave') @HostListener('mouseleave')
onMouseLeave(): void onMouseLeave(): void
{ {
// Only work if the auto trigger is enabled // Only work if the sidebar is folded
if ( !this.foldedAutoTriggerOnHover ) if ( !this.folded )
{ {
return; return;
} }
this.foldTemporarily(); // Enable the animations
this._enableAnimations();
// Fold the sidebar back
this.unfolded = false;
// Mark for check
this._changeDetectorRef.markForCheck();
} }
/** /**
@@ -742,58 +626,4 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
this.fold(); this.fold();
} }
} }
/**
* Fold the temporarily unfolded sidebar back
*/
foldTemporarily(): void
{
// Only work if the sidebar is folded
if ( !this.folded )
{
return;
}
// Enable the animations
this._enableAnimations();
// Fold the sidebar back
this.unfolded = false;
// Set the folded width
const styleValue = this.foldedWidth + 'px';
this._renderer.setStyle(this._elementRef.nativeElement, 'width', styleValue);
this._renderer.setStyle(this._elementRef.nativeElement, 'min-width', styleValue);
this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', styleValue);
// Mark for check
this._changeDetectorRef.markForCheck();
}
/**
* Unfold the sidebar temporarily
*/
unfoldTemporarily(): void
{
// Only work if the sidebar is folded
if ( !this.folded )
{
return;
}
// Enable the animations
this._enableAnimations();
// Unfold the sidebar temporarily
this.unfolded = true;
// Remove the folded width
this._renderer.removeStyle(this._elementRef.nativeElement, 'width');
this._renderer.removeStyle(this._elementRef.nativeElement, 'min-width');
this._renderer.removeStyle(this._elementRef.nativeElement, 'max-width');
// Mark for check
this._changeDetectorRef.markForCheck();
}
} }

View File

@@ -2,9 +2,7 @@ import { Injectable } from '@angular/core';
import { FuseSidebarComponent } from './sidebar.component'; import { FuseSidebarComponent } from './sidebar.component';
@Injectable({ @Injectable()
providedIn: 'root'
})
export class FuseSidebarService export class FuseSidebarService
{ {
// Private // Private

View File

@@ -73,17 +73,6 @@
<mat-radio-button class="mb-16" value="right">Right</mat-radio-button> <mat-radio-button class="mb-16" value="right">Right</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-8">Variant:</h3>
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="variant">
<mat-radio-button class="mb-16" value="vertical-style-1">Style 1</mat-radio-button>
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
</mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.navbar.background">
</fuse-material-color-picker>
</div> </div>
<!-- TOOLBAR --> <!-- TOOLBAR -->
@@ -102,11 +91,6 @@
<mat-radio-button class="mb-12" value="below-fixed">Below Fixed</mat-radio-button> <mat-radio-button class="mb-12" value="below-fixed">Below Fixed</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.toolbar.background">
</fuse-material-color-picker>
</div> </div>
<!-- FOOTER --> <!-- FOOTER -->
@@ -125,28 +109,6 @@
<mat-radio-button class="mb-12" value="below-fixed">Below Fixed</mat-radio-button> <mat-radio-button class="mb-12" value="below-fixed">Below Fixed</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.footer.background">
</fuse-material-color-picker>
</div>
<!-- SIDE PANEL -->
<div class="group" formGroupName="sidepanel">
<h2>Side Panel</h2>
<mat-slide-toggle formControlName="hidden">
Hide
</mat-slide-toggle>
<h3 class="mt-24">Position:</h3>
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="position">
<mat-radio-button class="mb-12" value="left">Left</mat-radio-button>
<mat-radio-button class="mb-12" value="right">Right</mat-radio-button>
</mat-radio-group>
</div> </div>
</ng-container> </ng-container>
@@ -184,17 +146,6 @@
<mat-radio-button class="mb-16" value="right">Right</mat-radio-button> <mat-radio-button class="mb-16" value="right">Right</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-8">Variant:</h3>
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="variant">
<mat-radio-button class="mb-16" value="vertical-style-1">Style 1</mat-radio-button>
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
</mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.navbar.background">
</fuse-material-color-picker>
</div> </div>
<!-- TOOLBAR --> <!-- TOOLBAR -->
@@ -213,11 +164,6 @@
<mat-radio-button class="mb-12" value="below">Below</mat-radio-button> <mat-radio-button class="mb-12" value="below">Below</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.toolbar.background">
</fuse-material-color-picker>
</div> </div>
<!-- FOOTER --> <!-- FOOTER -->
@@ -236,28 +182,6 @@
<mat-radio-button class="mb-12" value="below">Below</mat-radio-button> <mat-radio-button class="mb-12" value="below">Below</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.footer.background">
</fuse-material-color-picker>
</div>
<!-- SIDE PANEL -->
<div class="group" formGroupName="sidepanel">
<h2>Side Panel</h2>
<mat-slide-toggle formControlName="hidden">
Hide
</mat-slide-toggle>
<h3 class="mt-24">Position:</h3>
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="position">
<mat-radio-button class="mb-12" value="left">Left</mat-radio-button>
<mat-radio-button class="mb-12" value="right">Right</mat-radio-button>
</mat-radio-group>
</div> </div>
</ng-container> </ng-container>
@@ -295,17 +219,6 @@
<mat-radio-button class="mb-16" value="right">Right</mat-radio-button> <mat-radio-button class="mb-16" value="right">Right</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-8">Variant:</h3>
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="variant">
<mat-radio-button class="mb-16" value="vertical-style-1">Style 1</mat-radio-button>
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
</mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.navbar.background">
</fuse-material-color-picker>
</div> </div>
<!-- TOOLBAR --> <!-- TOOLBAR -->
@@ -323,11 +236,6 @@
<mat-radio-button class="mb-12" value="above-fixed">Above Fixed</mat-radio-button> <mat-radio-button class="mb-12" value="above-fixed">Above Fixed</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.toolbar.background">
</fuse-material-color-picker>
</div> </div>
<!-- FOOTER --> <!-- FOOTER -->
@@ -345,28 +253,6 @@
<mat-radio-button class="mb-12" value="above-fixed">Above Fixed</mat-radio-button> <mat-radio-button class="mb-12" value="above-fixed">Above Fixed</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.footer.background">
</fuse-material-color-picker>
</div>
<!-- SIDE PANEL -->
<div class="group" formGroupName="sidepanel">
<h2>Side Panel</h2>
<mat-slide-toggle formControlName="hidden">
Hide
</mat-slide-toggle>
<h3 class="mt-24">Position:</h3>
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="position">
<mat-radio-button class="mb-12" value="left">Left</mat-radio-button>
<mat-radio-button class="mb-12" value="right">Right</mat-radio-button>
</mat-radio-group>
</div> </div>
</ng-container> </ng-container>
@@ -399,17 +285,6 @@
<mat-radio-button class="mb-16" value="top">Top</mat-radio-button> <mat-radio-button class="mb-16" value="top">Top</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-8">Variant (Vertical):</h3>
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="variant">
<mat-radio-button class="mb-16" value="vertical-style-1">Style 1</mat-radio-button>
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
</mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.navbar.background">
</fuse-material-color-picker>
</div> </div>
<!-- TOOLBAR --> <!-- TOOLBAR -->
@@ -427,11 +302,6 @@
<mat-radio-button class="mb-12" value="below">Below</mat-radio-button> <mat-radio-button class="mb-12" value="below">Below</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.toolbar.background">
</fuse-material-color-picker>
</div> </div>
<!-- FOOTER --> <!-- FOOTER -->
@@ -449,28 +319,6 @@
<mat-radio-button class="mb-12" value="above-static">Above Static</mat-radio-button> <mat-radio-button class="mb-12" value="above-static">Above Static</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<h3 class="mt-24 mb-8">Color:</h3>
<fuse-material-color-picker class="mb-16"
[(selectedClass)]="fuseConfig.layout.footer.background">
</fuse-material-color-picker>
</div>
<!-- SIDE PANEL -->
<div class="group" formGroupName="sidepanel">
<h2>Side Panel</h2>
<mat-slide-toggle formControlName="hidden">
Hide
</mat-slide-toggle>
<h3 class="mt-24">Position:</h3>
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="position">
<mat-radio-button class="mb-12" value="left">Left</mat-radio-button>
<mat-radio-button class="mb-12" value="right">Right</mat-radio-button>
</mat-radio-group>
</div> </div>
</ng-container> </ng-container>
@@ -490,6 +338,35 @@
</div> </div>
<!-- COLORS -->
<div class="group">
<h2>Colors</h2>
<div class="colors">
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
<h4 class="mr-8">Toolbar Color</h4>
<fuse-material-color-picker
[(selectedClass)]="fuseConfig.layout.toolbar.background"></fuse-material-color-picker>
</div>
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
<h4 class="mr-8">Navbar Color</h4>
<fuse-material-color-picker
[(selectedClass)]="fuseConfig.layout.navbar.background"></fuse-material-color-picker>
</div>
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
<h4 class="mr-8">Footer Color</h4>
<fuse-material-color-picker
[(selectedClass)]="fuseConfig.layout.footer.background"></fuse-material-color-picker>
</div>
</div>
</div>
</form> </form>
</div> </div>

View File

@@ -73,6 +73,11 @@
} }
} }
} }
.colors {
display: block !important;
width: 100%;
}
} }
} }
} }

View File

@@ -62,28 +62,23 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
// noinspection TypeScriptValidateTypes // noinspection TypeScriptValidateTypes
this.form = this._formBuilder.group({ this.form = this._formBuilder.group({
layout : this._formBuilder.group({ layout : this._formBuilder.group({
style : new FormControl(), style : new FormControl(),
width : new FormControl(), width : new FormControl(),
navbar : this._formBuilder.group({ navbar : this._formBuilder.group({
background: new FormControl(),
folded : new FormControl(),
hidden : new FormControl(), hidden : new FormControl(),
position : new FormControl(), position : new FormControl(),
variant : new FormControl() folded : new FormControl(),
background: new FormControl()
}), }),
toolbar : this._formBuilder.group({ toolbar: this._formBuilder.group({
background: new FormControl(),
hidden : new FormControl(), hidden : new FormControl(),
position : new FormControl() position : new FormControl(),
background: new FormControl()
}), }),
footer : this._formBuilder.group({ footer : this._formBuilder.group({
background: new FormControl(),
hidden : new FormControl(), hidden : new FormControl(),
position : new FormControl() position : new FormControl(),
}), background: new FormControl()
sidepanel: this._formBuilder.group({
hidden: new FormControl(),
position : new FormControl()
}) })
}), }),
customScrollbars: new FormControl() customScrollbars: new FormControl()
@@ -179,21 +174,20 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
layout: { layout: {
width : 'fullwidth', width : 'fullwidth',
navbar : { navbar : {
background: 'mat-fuse-dark-700-bg',
folded : false,
hidden : false, hidden : false,
position : 'left', position : 'left',
variant : 'vertical-style-1' folded : false,
background: 'mat-fuse-dark-700-bg'
}, },
toolbar: { toolbar: {
background: 'mat-white-500-bg',
hidden : false, hidden : false,
position : 'below-static' position : 'below-static',
background: 'mat-white-500-bg'
}, },
footer : { footer : {
background: 'mat-fuse-dark-900-bg',
hidden : false, hidden : false,
position : 'below-static' position : 'below-static',
background: 'mat-fuse-dark-900-bg'
} }
} }
}); });
@@ -208,21 +202,20 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
layout: { layout: {
width : 'fullwidth', width : 'fullwidth',
navbar : { navbar : {
background: 'mat-fuse-dark-700-bg',
folded : false,
hidden : false, hidden : false,
position : 'left', position : 'left',
variant : 'vertical-style-1' folded : false,
background: 'mat-fuse-dark-700-bg'
}, },
toolbar: { toolbar: {
background: 'mat-white-500-bg',
hidden : false, hidden : false,
position : 'below' position : 'below',
background: 'mat-white-500-bg'
}, },
footer : { footer : {
background: 'mat-fuse-dark-900-bg',
hidden : false, hidden : false,
position : 'below' position : 'below',
background: 'mat-fuse-dark-900-bg'
} }
} }
}); });
@@ -237,21 +230,20 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
layout: { layout: {
width : 'fullwidth', width : 'fullwidth',
navbar : { navbar : {
background: 'mat-fuse-dark-700-bg',
folded : false,
hidden : false, hidden : false,
position : 'left', position : 'left',
layout : 'vertical-style-1' folded : false,
background: 'mat-fuse-dark-700-bg'
}, },
toolbar: { toolbar: {
background: 'mat-white-500-bg',
hidden : false, hidden : false,
position : 'above-static' position : 'above-static',
background: 'mat-white-500-bg'
}, },
footer : { footer : {
background: 'mat-fuse-dark-900-bg',
hidden : false, hidden : false,
position : 'above-static' position : 'above-static',
background: 'mat-fuse-dark-900-bg'
} }
} }
}); });
@@ -266,21 +258,20 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
layout: { layout: {
width : 'fullwidth', width : 'fullwidth',
navbar : { navbar : {
background: 'mat-fuse-dark-700-bg',
folded : false,
hidden : false, hidden : false,
position : 'top', position : 'top',
variant : 'vertical-style-1' folded : false,
background: 'mat-fuse-dark-700-bg'
}, },
toolbar: { toolbar: {
background: 'mat-white-500-bg',
hidden : false, hidden : false,
position : 'above' position : 'above',
background: 'mat-white-500-bg'
}, },
footer : { footer : {
background: 'mat-fuse-dark-900-bg',
hidden : false, hidden : false,
position : 'above-fixed' position : 'above-fixed',
background: 'mat-fuse-dark-900-bg'
} }
} }
}); });

View File

@@ -1,9 +1,7 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { MatSidenav } from '@angular/material'; import { MatSidenav } from '@angular/material';
@Injectable({ @Injectable()
providedIn: 'root'
})
export class FuseMatSidenavHelperService export class FuseMatSidenavHelperService
{ {
sidenavInstances: MatSidenav[]; sidenavInstances: MatSidenav[];

View File

@@ -1,8 +1,27 @@
import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core'; import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';
import { FUSE_CONFIG } from '@fuse/services/config.service'; import { FUSE_CONFIG, FuseConfigService } from '@fuse/services/config.service';
import { FuseCopierService } from '@fuse/services/copier.service';
import { FuseMatchMediaService } from '@fuse/services/match-media.service';
import { FuseMatSidenavHelperService } from '@fuse/directives/fuse-mat-sidenav/fuse-mat-sidenav.service';
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
import { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';
import { FuseSplashScreenService } from '@fuse/services/splash-screen.service';
import { FuseTranslationLoaderService } from '@fuse/services/translation-loader.service';
@NgModule() @NgModule({
entryComponents: [],
providers : [
FuseConfigService,
FuseCopierService,
FuseMatchMediaService,
FuseMatSidenavHelperService,
FuseNavigationService,
FuseSidebarService,
FuseSplashScreenService,
FuseTranslationLoaderService
]
})
export class FuseModule export class FuseModule
{ {
constructor(@Optional() @SkipSelf() parentModule: FuseModule) constructor(@Optional() @SkipSelf() parentModule: FuseModule)

View File

@@ -14,7 +14,7 @@ i {
} }
// Material colors map // Material colors map
$matPalettes: ( $matColorsMap: (
primary: $primary, primary: $primary,
accent: $accent, accent: $accent,
warn: $warn, warn: $warn,
@@ -43,91 +43,75 @@ $matPalettes: (
); );
// Material color hues list // Material color hues list
$matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A700; $matColorHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A700;
// Text color levels generator mixin // Text color levels generator mixin
@mixin generateTextColorLevels($classes, $contrast) { @mixin generateTextColorLevels($baseTextColor) {
// If the contrast is dark... // If the base text color is black...
@if ($contrast == 'dark') { @if (rgba(black, 1) == rgba($baseTextColor, 1)) {
// Put down the color classes i,
#{$classes} { .icon {
color: rgba(0, 0, 0, 0.54);
}
i, &.secondary-text,
.icon { .secondary-text {
color: rgba(0, 0, 0, 0.54); color: rgba(0, 0, 0, 0.54) !important;
} }
&.secondary-text, &.hint-text,
.secondary-text { .hint-text,
color: rgba(0, 0, 0, 0.54) !important; &.disabled-text,
} .disabled-text {
color: rgba(0, 0, 0, 0.38) !important;
}
&.hint-text, &.divider,
.hint-text, .divider {
&.disabled-text, color: rgba(0, 0, 0, 0.12) !important;
.disabled-text { }
color: rgba(0, 0, 0, 0.38) !important;
}
&.divider, .mat-ripple-element {
.divider { background: rgba(0, 0, 0, 0.1);
color: rgba(0, 0, 0, 0.12) !important;
}
.mat-ripple-element {
background: rgba(0, 0, 0, 0.1);
}
.adaptive-border-color {
border-color: rgba(0, 0, 0, 0.12);
}
} }
} }
// If the base text color is white... // If the base text color is white...
@else { @else {
// Put down the color classes i,
#{$classes} { .icon {
color: rgba(255, 255, 255, 1);
}
i, &.secondary-text,
.icon { .secondary-text {
color: rgba(255, 255, 255, 1); color: rgba(255, 255, 255, 0.70) !important;
} }
&.secondary-text, &.hint-text,
.secondary-text { .hint-text,
color: rgba(255, 255, 255, 0.70) !important; &.disabled-text,
} .disabled-text {
color: rgba(255, 255, 255, 0.50) !important;
}
&.hint-text, &.divider,
.hint-text, .divider {
&.disabled-text, color: rgba(255, 255, 255, 0.12) !important;
.disabled-text { }
color: rgba(255, 255, 255, 0.50) !important;
}
&.divider, .mat-ripple-element {
.divider { background: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.12) !important;
}
.mat-ripple-element {
background: rgba(255, 255, 255, 0.1);
}
.adaptive-border-color {
border-color: rgba(255, 255, 255, 0.12);
}
} }
} }
} }
@mixin generateMaterialElementColors($classes, $contrast) { @mixin generateMaterialElementColors($contrastColor) {
// If the contrast color is light... // If the contrast color is white...
$fuseForeground: ( $fuseForeground: (
base: white, base: white,
text: white, text: white,
@@ -135,8 +119,8 @@ $matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A70
divider: rgba(white, 0.12), divider: rgba(white, 0.12),
); );
// If the contrast color is dark... // If the contrast color is black...
@if ($contrast == 'dark') { @if (rgba(black, 1) == rgba($contrastColor, 1)) {
$fuseForeground: ( $fuseForeground: (
base: black, base: black,
@@ -145,47 +129,43 @@ $matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A70
); );
} }
// Put down the color classes // Native Input
#{$classes} { input[type="text"] {
color: map_get($fuseForeground, base);
}
// Native Input // Input
input[type="text"] { .mat-form-field-label {
color: map_get($fuseForeground, base); color: map_get($fuseForeground, hint-text);
} }
// Input .mat-form-field-underline {
.mat-form-field-label { background-color: map_get($fuseForeground, divider);
color: map_get($fuseForeground, hint-text); }
}
.mat-form-field-underline { // Select
background-color: map_get($fuseForeground, divider); .mat-select-trigger,
} .mat-select-arrow {
color: map_get($fuseForeground, hint-text);
}
// Select .mat-select-underline {
.mat-select-trigger, background-color: map_get($fuseForeground, divider);
.mat-select-arrow { }
color: map_get($fuseForeground, hint-text);
}
.mat-select-underline { .mat-select-disabled .mat-select-value,
background-color: map_get($fuseForeground, divider); .mat-select-arrow,
} .mat-select-trigger {
color: map_get($fuseForeground, hint-text);
}
.mat-select-disabled .mat-select-value, .mat-select-content,
.mat-select-arrow, .mat-select-panel-done-animating {
.mat-select-trigger { background: map_get($background, card);
color: map_get($fuseForeground, hint-text); }
}
.mat-select-content, .mat-select-value {
.mat-select-panel-done-animating { color: map_get($fuseForeground, text);
background: map_get($background, card);
}
.mat-select-value {
color: map_get($fuseForeground, text);
}
} }
} }
@@ -200,6 +180,14 @@ $matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A70
background-color: $color !important; background-color: $color !important;
color: $contrastColor !important; color: $contrastColor !important;
// Generate text color levels
// based on current contrast color
@include generateTextColorLevels($contrastColor);
// Generate material element colors
// based on current contrast color
@include generateMaterialElementColors($contrastColor);
&[disabled] { &[disabled] {
background-color: rgba($color, .12) !important; background-color: rgba($color, .12) !important;
color: rgba($contrastColor, .26) !important; color: rgba($contrastColor, .26) !important;
@@ -208,6 +196,14 @@ $matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A70
.#{$colorName}#{$hue}-fg { .#{$colorName}#{$hue}-fg {
color: $color !important; color: $color !important;
// Generate text color levels
// based on current contrast color
@include generateTextColorLevels($color);
// Generate material element colors
// based on current contrast color
@include generateMaterialElementColors($color);
} }
.#{$colorName}#{$hue}-border { .#{$colorName}#{$hue}-border {
@@ -233,126 +229,49 @@ $matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A70
@mixin generateFuseColorClasses($primary, $accent, $warn) { @mixin generateFuseColorClasses($primary, $accent, $warn) {
$palettes: ( $colorMap: (
primary: $primary, primary: $primary,
accent: $accent, accent: $accent,
warn: $warn warn: $warn
); );
// Define contrast lists
$light-contrasting-classes: ();
$dark-contrasting-classes: ();
// Generate the color classes... // Generate the color classes...
@each $paletteName, $palette in $palettes { @each $name, $map in $colorMap {
// Get the contrasts map @each $hue in $matColorHues {
$contrasts: map-get($palette, 'contrast');
@each $hue in $matHues { $color: map-get($map, $hue);
$contrastColor: map-get(map-get($map, 'contrast'), $hue);
// Get the color and the contrasting color @if ($color != null and $contrastColor != null) {
$color: map-get($palette, $hue);
$contrast: map-get($contrasts, $hue);
@if ($color != null and $contrast != null) { @include generateColorClasses($name, $color, $contrastColor, '-#{$hue}');
// Generate color classes
@include generateColorClasses($paletteName, $color, $contrast, '-#{$hue}');
// If the contrast color is dark
@if (rgba(black, 1) == rgba($contrast, 1)) {
$dark-contrasting-classes: append($dark-contrasting-classes, unquote('.mat-#{$paletteName}-#{$hue}-bg'), 'comma');
}
// if the contrast color is light
@else {
$light-contrasting-classes: append($light-contrasting-classes, unquote('.mat-#{$paletteName}-#{$hue}-bg'), 'comma');
}
// Run the generator one more time for default values (500) // Run the generator one more time for default values (500)
@if ($hue == 500) { @if ($hue == 500) {
@include generateColorClasses($name, $color, $contrastColor, '');
// Generate color classes
@include generateColorClasses($paletteName, $color, $contrast, '');
// Add color to the correct list depending on the contrasting color
// If the contrast color is dark
@if (rgba(black, 1) == rgba($contrast, 1)) {
$dark-contrasting-classes: append($dark-contrasting-classes, unquote('.mat-#{$paletteName}-bg'), 'comma');
}
// if the contrast color is light
@else {
$light-contrasting-classes: append($light-contrasting-classes, unquote('.mat-#{$paletteName}-bg'), 'comma');
}
} }
} }
} }
} }
// Generate contrasting colors
@include generateTextColorLevels($dark-contrasting-classes, 'dark');
@include generateTextColorLevels($light-contrasting-classes, 'light');
@include generateMaterialElementColors($dark-contrasting-classes, 'dark');
@include generateMaterialElementColors($light-contrasting-classes, 'light');
} }
// Generate the color classes... // Generate the color classes...
@each $colorName, $colorMap in $matColorsMap {
// Define contrast lists @each $hue in $matColorHues {
$light-contrasting-classes: ();
$dark-contrasting-classes: ();
@each $paletteName, $palette in $matPalettes { $color: map-get($colorMap, $hue);
$contrastColor: map-get(map-get($colorMap, 'contrast'), $hue);
// Get the contrasts map @if ($color != null and $contrastColor != null) {
$contrasts: map-get($palette, 'contrast');
@each $hue in $matHues { @include generateColorClasses($colorName, $color, $contrastColor, '-#{$hue}');
// Get the color and the contrasting color
$color: map-get($palette, $hue);
$contrast: map-get($contrasts, $hue);
@if ($color != null and $contrast != null) {
// Generate color classes
@include generateColorClasses($paletteName, $color, $contrast, '-#{$hue}');
// Add color to the correct list depending on the contrasting color
// If the contrast color is dark
@if (rgba(black, 1) == rgba($contrast, 1)) {
$dark-contrasting-classes: append($dark-contrasting-classes, unquote('.mat-#{$paletteName}-#{$hue}-bg'), 'comma');
}
// if the contrast color is light
@else {
$light-contrasting-classes: append($light-contrasting-classes, unquote('.mat-#{$paletteName}-#{$hue}-bg'), 'comma');
}
// Run the generator one more time for default values (500) // Run the generator one more time for default values (500)
@if ($hue == 500) { @if ($hue == 500) {
@include generateColorClasses($colorName, $color, $contrastColor, '');
// Generate color classes
@include generateColorClasses($paletteName, $color, $contrast, '');
// Add color to the correct list depending on the contrasting color
// If the contrast color is dark
@if (rgba(black, 1) == rgba($contrast, 1)) {
$dark-contrasting-classes: append($dark-contrasting-classes, unquote('.mat-#{$paletteName}-bg'), 'comma');
}
// if the contrast color is light
@else {
$light-contrasting-classes: append($light-contrasting-classes, unquote('.mat-#{$paletteName}-bg'), 'comma');
}
} }
} }
} }
} }
// Generate contrasting colors
@include generateTextColorLevels($dark-contrasting-classes, 'dark');
@include generateTextColorLevels($light-contrasting-classes, 'light');
@include generateMaterialElementColors($dark-contrasting-classes, 'dark');
@include generateMaterialElementColors($light-contrasting-classes, 'light');

View File

@@ -219,26 +219,4 @@
} }
} }
} }
// Material style
&.material {
.nav-subheader {
border-top: 1px solid rgba(0, 0, 0, 0.12);
&:first-child {
border-top: none;
}
}
.nav-item {
.nav-link {
height: 40px;
padding: 0 16px;
margin: 4px 8px;
border-radius: 4px;
}
}
}
} }

View File

@@ -36,11 +36,11 @@
/* General styles */ /* General styles */
app { app {
fuse-sidebar, fuse-navbar-vertical,
navbar, fuse-navbar-horizontal,
toolbar, fuse-toolbar,
footer, fuse-footer,
.theme-options-button, fuse-quick-panel,
fuse-theme-options, fuse-theme-options,
.ps > .ps__rail-x, .ps > .ps__rail-x,
.ps > .ps__rail-y { .ps > .ps__rail-y {

View File

@@ -8,9 +8,7 @@ import * as _ from 'lodash';
// Create the injection token for the custom settings // Create the injection token for the custom settings
export const FUSE_CONFIG = new InjectionToken('fuseCustomConfig'); export const FUSE_CONFIG = new InjectionToken('fuseCustomConfig');
@Injectable({ @Injectable()
providedIn: 'root'
})
export class FuseConfigService export class FuseConfigService
{ {
// Private // Private

View File

@@ -1,15 +1,14 @@
/** /**
* This class is based on the code in the following projects: * This class is based on the code in the following projects:
* https://github.com/zenorocha/select *
* https://github.com/zenorocha/clipboard.js/ * - https://github.com/zenorocha/select
* - https://github.com/zenorocha/clipboard.js/
* *
* Both released under MIT license - © Zeno Rocha * Both released under MIT license - © Zeno Rocha
*/ */
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
@Injectable({ @Injectable()
providedIn: 'root'
})
export class FuseCopierService export class FuseCopierService
{ {
private textarea: HTMLTextAreaElement; private textarea: HTMLTextAreaElement;

View File

@@ -1,91 +0,0 @@
import { Injectable } from '@angular/core';
import { NavigationEnd, NavigationStart, Router } from '@angular/router';
import { BehaviorSubject, Observable } from 'rxjs';
import { filter } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class FuseLoadingBarService
{
// Private
private _visible: BehaviorSubject<boolean>;
/**
* Constructor
*
* @param {Router} _router
*/
constructor(
private _router: Router
)
{
// Initialize the service
this._init();
}
// -----------------------------------------------------------------------------------------------------
// @ Accessors
// -----------------------------------------------------------------------------------------------------
get visible(): Observable<any>
{
// Return the _visible as observable
return this._visible.asObservable();
}
// -----------------------------------------------------------------------------------------------------
// @ Private methods
// -----------------------------------------------------------------------------------------------------
/**
* Initialize
*
* @private
*/
private _init(): void
{
// Initialize the behavior subject
this._visible = new BehaviorSubject(false);
// Subscribe to the router events to show/hide the loading bar
this._router.events
.pipe(
filter((event) => event instanceof NavigationStart)
)
.subscribe(() => {
this.showLoadingBar();
});
this._router.events
.pipe(
filter((event) => event instanceof NavigationEnd)
)
.subscribe(() => {
this.hideLoadingBar();
});
}
// -----------------------------------------------------------------------------------------------------
// @ Public methods
// -----------------------------------------------------------------------------------------------------
/**
* Show the loading bar
*/
showLoadingBar(): void
{
// Show
this._visible.next(true);
}
/**
* Hide the loading bar
*/
hideLoadingBar(): void
{
// Hide
this._visible.next(false);
}
}

View File

@@ -2,9 +2,7 @@ import { MediaChange, ObservableMedia } from '@angular/flex-layout';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs'; import { BehaviorSubject } from 'rxjs';
@Injectable({ @Injectable()
providedIn: 'root'
})
export class FuseMatchMediaService export class FuseMatchMediaService
{ {
activeMediaQuery: string; activeMediaQuery: string;

View File

@@ -3,9 +3,7 @@ import { DOCUMENT } from '@angular/common';
import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations'; import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';
import { NavigationEnd, Router } from '@angular/router'; import { NavigationEnd, Router } from '@angular/router';
@Injectable({ @Injectable()
providedIn: 'root'
})
export class FuseSplashScreenService export class FuseSplashScreenService
{ {
splashScreenEl: any; splashScreenEl: any;

View File

@@ -7,9 +7,7 @@ export interface Locale
data: Object; data: Object;
} }
@Injectable({ @Injectable()
providedIn: 'root'
})
export class FuseTranslationLoaderService export class FuseTranslationLoaderService
{ {
/** /**

View File

@@ -4,25 +4,20 @@ export interface FuseConfig
style: string, style: string,
width: 'fullwidth' | 'boxed', width: 'fullwidth' | 'boxed',
navbar: { navbar: {
background: string,
hidden: boolean, hidden: boolean,
folded: boolean, folded: boolean,
position: 'left' | 'right' | 'top', position: 'left' | 'right' | 'top',
variant: string background: string
}, },
toolbar: { toolbar: {
background: string,
hidden: boolean, hidden: boolean,
position: 'above' | 'above-static' | 'above-fixed' | 'below' | 'below-static' | 'below-fixed' position: 'above' | 'above-static' | 'above-fixed' | 'below' | 'below-static' | 'below-fixed',
background: string
} }
footer: { footer: {
background: string,
hidden: boolean, hidden: boolean,
position: 'above' | 'above-static' | 'above-fixed' | 'below' | 'below-static' | 'below-fixed' position: 'above' | 'above-static' | 'above-fixed' | 'below' | 'below-static' | 'below-fixed',
}, background: string
sidepanel: {
hidden: boolean,
position: 'left' | 'right'
} }
}; };
customScrollbars: boolean; customScrollbars: boolean;

View File

@@ -7,7 +7,6 @@ export interface FuseNavigationItem
icon?: string; icon?: string;
hidden?: boolean; hidden?: boolean;
url?: string; url?: string;
classes?: string;
exactMatch?: boolean; exactMatch?: boolean;
externalUrl?: boolean; externalUrl?: boolean;
openInNewTab?: boolean; openInNewTab?: boolean;

View File

@@ -20,8 +20,6 @@
<!-- THEME OPTIONS PANEL --> <!-- THEME OPTIONS PANEL -->
<button mat-icon-button class="mat-primary-bg mat-elevation-z2 theme-options-button" <button mat-icon-button class="mat-primary-bg mat-elevation-z2 theme-options-button"
[ngClass]="{'right-side-panel': fuseConfig.layout.sidepanel.position === 'right',
'side-panel-hidden': fuseConfig.layout.sidepanel.hidden === true}"
(click)="toggleSidebarOpen('themeOptionsPanel')"> (click)="toggleSidebarOpen('themeOptionsPanel')">
<mat-icon>settings</mat-icon> <mat-icon>settings</mat-icon>
</button> </button>

View File

@@ -1,5 +1,3 @@
@import "src/@fuse/scss/fuse";
:host { :host {
position: relative; position: relative;
display: flex; display: flex;
@@ -20,20 +18,9 @@
border-radius: 0; border-radius: 0;
margin: 0; margin: 0;
pointer-events: auto; pointer-events: auto;
opacity: .90; opacity: .75;
z-index: 998; z-index: 998;
&.right-side-panel {
@include media-breakpoint-up('lg') {
right: 70px;
}
}
&.side-panel-hidden {
right: 0 !important;
}
mat-icon { mat-icon {
animation: rotating 3s linear infinite; animation: rotating 3s linear infinite;
} }

View File

@@ -1,6 +1,4 @@
import { Component, Inject, OnDestroy, OnInit } from '@angular/core'; import { Component, OnDestroy, OnInit } from '@angular/core';
import { DOCUMENT } from '@angular/common';
import { Platform } from '@angular/cdk/platform';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators'; import { takeUntil } from 'rxjs/operators';
@@ -31,24 +29,20 @@ export class AppComponent implements OnInit, OnDestroy
/** /**
* Constructor * Constructor
* *
* @param {DOCUMENT} document
* @param {FuseConfigService} _fuseConfigService * @param {FuseConfigService} _fuseConfigService
* @param {FuseNavigationService} _fuseNavigationService * @param {FuseNavigationService} _fuseNavigationService
* @param {FuseSidebarService} _fuseSidebarService * @param {FuseSidebarService} _fuseSidebarService
* @param {FuseSplashScreenService} _fuseSplashScreenService * @param {FuseSplashScreenService} _fuseSplashScreenService
* @param {FuseTranslationLoaderService} _fuseTranslationLoaderService * @param {FuseTranslationLoaderService} _fuseTranslationLoaderService
* @param {Platform} _platform
* @param {TranslateService} _translateService * @param {TranslateService} _translateService
*/ */
constructor( constructor(
@Inject(DOCUMENT) private document: any,
private _fuseConfigService: FuseConfigService, private _fuseConfigService: FuseConfigService,
private _fuseNavigationService: FuseNavigationService, private _fuseNavigationService: FuseNavigationService,
private _fuseSidebarService: FuseSidebarService, private _fuseSidebarService: FuseSidebarService,
private _fuseSplashScreenService: FuseSplashScreenService, private _fuseSplashScreenService: FuseSplashScreenService,
private _fuseTranslationLoaderService: FuseTranslationLoaderService, private _fuseTranslationLoaderService: FuseTranslationLoaderService,
private _translateService: TranslateService, private _translateService: TranslateService
private _platform: Platform
) )
{ {
// Get default navigation // Get default navigation
@@ -72,12 +66,6 @@ export class AppComponent implements OnInit, OnDestroy
// Use a language // Use a language
this._translateService.use('en'); this._translateService.use('en');
// Add is-mobile class to the body if the platform is mobile
if ( this._platform.ANDROID || this._platform.IOS )
{
this.document.body.className += ' is-mobile';
}
// Set the private defaults // Set the private defaults
this._unsubscribeAll = new Subject(); this._unsubscribeAll = new Subject();
} }

View File

@@ -5,7 +5,6 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { RouterModule, Routes } from '@angular/router'; import { RouterModule, Routes } from '@angular/router';
import { MatMomentDateModule } from '@angular/material-moment-adapter'; import { MatMomentDateModule } from '@angular/material-moment-adapter';
import { MatButtonModule, MatIconModule } from '@angular/material'; import { MatButtonModule, MatIconModule } from '@angular/material';
import { InMemoryWebApiModule } from 'angular-in-memory-web-api';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import 'hammerjs'; import 'hammerjs';
@@ -15,35 +14,14 @@ import { FuseSidebarModule, FuseThemeOptionsModule } from '@fuse/components';
import { fuseConfig } from 'app/fuse-config'; import { fuseConfig } from 'app/fuse-config';
import { FakeDbService } from 'app/fake-db/fake-db.service';
import { AppComponent } from 'app/app.component'; import { AppComponent } from 'app/app.component';
import { AppStoreModule } from 'app/store/store.module';
import { LayoutModule } from 'app/layout/layout.module'; import { LayoutModule } from 'app/layout/layout.module';
import { SampleModule } from 'app/main/sample/sample.module';
const appRoutes: Routes = [ const appRoutes: Routes = [
{
path : 'apps',
loadChildren: './main/apps/apps.module#AppsModule'
},
{
path : 'pages',
loadChildren: './main/pages/pages.module#PagesModule'
},
{
path : 'ui',
loadChildren: './main/ui/ui.module#UIModule'
},
{
path : 'documentation',
loadChildren: './main/documentation/documentation.module#DocumentationModule'
},
{
path : 'angular-material-elements',
loadChildren: './main/angular-material-elements/angular-material-elements.module#AngularMaterialElementsModule'
},
{ {
path : '**', path : '**',
redirectTo: 'apps/dashboards/analytics' redirectTo: 'sample'
} }
]; ];
@@ -58,10 +36,6 @@ const appRoutes: Routes = [
RouterModule.forRoot(appRoutes), RouterModule.forRoot(appRoutes),
TranslateModule.forRoot(), TranslateModule.forRoot(),
InMemoryWebApiModule.forRoot(FakeDbService, {
delay : 0,
passThruUnknownUrl: true
}),
// Material moment date module // Material moment date module
MatMomentDateModule, MatMomentDateModule,
@@ -78,7 +52,7 @@ const appRoutes: Routes = [
// App modules // App modules
LayoutModule, LayoutModule,
AppStoreModule SampleModule
], ],
bootstrap : [ bootstrap : [
AppComponent AppComponent

View File

@@ -1,773 +0,0 @@
export class AcademyFakeDb
{
public static courses = [
{
'id' : '15459251a6d6b397565',
'title' : 'Basics of Angular',
'slug' : 'basics-of-angular',
'category': 'web',
'length' : 30,
'updated' : 'Jun 28, 2017'
},
{
'id' : '154588a0864d2881124',
'title' : 'Basics of TypeScript',
'slug' : 'basics-of-typeScript',
'category': 'web',
'length' : 60,
'updated' : 'Nov 01, 2017'
},
{
'id' : '15453ba60d3baa5daaf',
'title' : 'Android N: Quick Settings',
'slug' : 'android-n-quick-settings',
'category': 'android',
'length' : 120,
'updated' : 'Jun 28, 2017'
},
{
'id' : '15453a06c08fb021776',
'title' : 'Keep Sensitive Data Safe and Private',
'slug' : 'keep-sensitive-data-safe-and-private',
'category': 'android',
'length' : 45,
'updated' : 'Jun 28, 2017'
},
{
'id' : '15427f4c1b7f3953234',
'title' : 'Building a gRPC Service with Java',
'slug' : 'building-a-grpc-service-with-java',
'category': 'cloud',
'length' : 30,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1542d75d929a603125',
'title' : 'Build a PWA Using Workbox',
'slug' : 'build-a-pwa-using-workbox',
'category': 'web',
'length' : 120,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1543ee3a5b43e0f9f45',
'title' : 'Build an App for the Google Assistant with Firebase and Dialogflow',
'slug' : 'build-an-app-for-the-google-assistant-with-firebase-and-dialogflow',
'category': 'firebase',
'length' : 30,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1543cc4515df3146112',
'title' : 'Cloud Functions for Firebase',
'slug' : 'cloud-functions-for-firebase',
'category': 'firebase',
'length' : 45,
'updated' : 'Jun 28, 2017'
},
{
'id' : '154398a4770d7aaf9a2',
'title' : 'Manage Your Pivotal Cloud Foundry App\'s Using Apigee Edge',
'slug' : 'manage-your-pivotal-cloud-foundry-apps-using-apigee-Edge',
'category': 'cloud',
'length' : 90,
'updated' : 'Jun 28, 2017'
},
{
'id' : '15438351f87dcd68567',
'title' : 'Building Beautiful UIs with Flutter',
'your' : 'building-beautiful-uis-with-flutter',
'category': 'web',
'length' : 90,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1544e43dcdae6ebf876',
'title' : 'Cloud Firestore',
'slug' : 'cloud-firestore',
'category': 'firebase',
'length' : 90,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1541ca7af66da284177',
'title' : 'Customize Network Topology with Subnetworks',
'slug' : 'customize-network-topology-with-subnetworks',
'category': 'web',
'length' : 45,
'updated' : 'Jun 28, 2017'
},
{
'id' : '154297167e781781745',
'title' : 'Looking at Campaign Finance with BigQuery',
'slug' : 'looking-at-campaign-finance-with-bigquery',
'category': 'cloud',
'length' : 60,
'updated' : 'Jun 28, 2017'
},
{
'id' : '154537435d5b32bf11a',
'title' : 'Firebase Android',
'slug' : 'firebase-android',
'category': 'android',
'length' : 45,
'updated' : 'Jun 28, 2017'
},
{
'id' : '154204e45a59b168453',
'title' : 'Simulating a Thread Network Using OpenThread',
'slug' : 'simulating-a-thread-network-using-openthread',
'category': 'web',
'length' : 45,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1541dd1e05dfc439216',
'title' : 'Your First Progressive Web App',
'slug' : 'your-first-progressive-web-app',
'category': 'web',
'length' : 30,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1532dfc67e704e48515',
'title' : 'Launch Cloud Datalab',
'slug' : 'launch-cloud-datalab',
'category': 'cloud',
'length' : 60,
'updated' : 'Jun 28, 2017'
},
{
'id' : '1542e43dfaae6ebf226',
'title' : 'Personalize Your iOS App with Firebase User Management',
'slug' : 'personalize-your-ios-app-with-firebase-user-management',
'category': 'firebase',
'length' : 90,
'updated' : 'Jun 28, 2017'
}
];
public static categories = [
{
'id' : 0,
'value': 'web',
'label': 'Web'
},
{
'id' : 1,
'value': 'firebase',
'label': 'Firebase'
},
{
'id' : 2,
'value': 'cloud',
'label': 'Cloud'
},
{
'id' : 3,
'value': 'android',
'label': 'Android'
}
];
private static demoSteps = [
{
'title' : 'Introduction',
'content': '<h1>Step 1 - Introduction</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Get the sample code',
'content': '<h1>Step 2 - Get the sample code</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Create a Firebase project and Set up your app',
'content': '<h1>Step 3 - Create a Firebase project and Set up your app</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Install the Firebase Command Line Interface',
'content': '<h1>Step 4 - Install the Firebase Command Line Interface</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Deploy and run the web app',
'content': '<h1>Step 5 - Deploy and run the web app</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'The Functions Directory',
'content': '<h1>Step 6 - The Functions Directory</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Import the Cloud Functions and Firebase Admin modules',
'content': '<h1>Step 7 - Import the Cloud Functions and Firebase Admin modules</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Welcome New Users',
'content': '<h1>Step 8 - Welcome New Users</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Images moderation',
'content': '<h1>Step 9 - Images moderation</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'New Message Notifications',
'content': '<h1>Step 10 - New Message Notifications</h1>' +
'<br>' +
'This is an example step of the course. You can put anything in here from example codes to videos.' +
'<br><br>' +
'To install the CLI you need to have installed <b>npm</b> which typically comes with <b>NodeJS</b>.' +
'To install or upgrade the CLI run the following <b>npm</b> command:' +
'<br><br>' +
'<code>npm -g install @angular/cli</code>' +
'<br><br>' +
'To verify that the CLI has been installed correctly, open a console and run:' +
'<br><br>' +
'<code>ng version</code>' +
'<br><br>' +
'<h2>Install dependencies</h2>' +
'<br>' +
'To moderate the images we\'ll need a few Node.js packages:' +
'<br><br>' +
'<ul>' +
'<li>' +
'The Google Cloud Vision Client Library for Node.js: @google-cloud/vision to run the image through the Cloud Vision API to detect inappropriate images.' +
'</li>' +
'<br>' +
'<li>' +
'The Google Cloud Storage Client Library for Node.js: @google-cloud/storage to download and upload the images from Cloud Storage.' +
'</li>' +
'<br>' +
'<li>' +
'A Node.js library allowing us to run processes: child-process-promise to run ImageMagick since the ImageMagick command-line tool comes pre-installed on all Functions instances.' +
'</li>' +
'</ul>' +
'<br>' +
'To install these three packages into your Cloud Functions app, run the following npm install --save command. Make sure that you do this from the functions directory.' +
'<br><br>' +
'<code>npm install --save @google-cloud/vision @google-cloud/storage child-process-promise</code>' +
'<br><br>' +
'This will install the three packages locally and add them as declared dependencies in your package.js file.'
},
{
'title' : 'Congratulations!',
'content': '<h1>Step 11 - Congratulations!</h1>' +
'<br>' +
'You\'ve built a full-fidelity, offline-capable progressive web app by leveraging the power of reusable Web Components and Firebase. Why bother with a native app when you know how to do all that?!'
}
];
public static course = [
{
'id' : '15459251a6d6b397565',
'title' : 'Basics of Angular',
'slug' : 'basics-of-angular',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 30,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '154588a0864d2881124',
'title' : 'Basics of TypeScript',
'slug' : 'basics-of-typeScript',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 60,
'totalSteps' : 11,
'updated' : 'Nov 01, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '15453ba60d3baa5daaf',
'title' : 'Android N: Quick Settings',
'slug' : 'android-n-quick-settings',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'android',
'length' : 120,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '15453a06c08fb021776',
'title' : 'Keep Sensitive Data Safe and Private',
'slug' : 'keep-sensitive-data-safe-and-private',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'android',
'length' : 45,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '15427f4c1b7f3953234',
'title' : 'Building a gRPC Service with Java',
'slug' : 'building-a-grpc-service-with-java',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'cloud',
'length' : 30,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1542d75d929a603125',
'title' : 'Build a PWA Using Workbox',
'slug' : 'build-a-pwa-using-workbox',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 120,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1543ee3a5b43e0f9f45',
'title' : 'Build an App for the Google Assistant with Firebase and Dialogflow',
'slug' : 'build-an-app-for-the-google-assistant-with-firebase-and-dialogflow',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'firebase',
'length' : 30,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1543cc4515df3146112',
'title' : 'Cloud Functions for Firebase',
'slug' : 'cloud-functions-for-firebase',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'firebase',
'length' : 45,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '154398a4770d7aaf9a2',
'title' : 'Manage Your Pivotal Cloud Foundry App\'s Using Apigee Edge',
'slug' : 'manage-your-pivotal-cloud-foundry-apps-using-apigee-Edge',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'cloud',
'length' : 90,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '15438351f87dcd68567',
'title' : 'Building Beautiful UIs with Flutter',
'your' : 'building-beautiful-uis-with-flutter',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 90,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1544e43dcdae6ebf876',
'title' : 'Cloud Firestore',
'slug' : 'cloud-firestore',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'firebase',
'length' : 90,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1541ca7af66da284177',
'title' : 'Customize Network Topology with Subnetworks',
'slug' : 'customize-network-topology-with-subnetworks',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 45,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '154297167e781781745',
'title' : 'Looking at Campaign Finance with BigQuery',
'slug' : 'looking-at-campaign-finance-with-bigquery',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'cloud',
'length' : 60,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '154537435d5b32bf11a',
'title' : 'Firebase Android',
'slug' : 'firebase-android',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'android',
'length' : 45,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '154204e45a59b168453',
'title' : 'Simulating a Thread Network Using OpenThread',
'slug' : 'simulating-a-thread-network-using-openthread',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 45,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1541dd1e05dfc439216',
'title' : 'Your First Progressive Web App',
'slug' : 'your-first-progressive-web-app',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'web',
'length' : 30,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1532dfc67e704e48515',
'title' : 'Launch Cloud Datalab',
'slug' : 'launch-cloud-datalab',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'cloud',
'length' : 60,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
},
{
'id' : '1542e43dfaae6ebf226',
'title' : 'Personalize Your iOS App with Firebase User Management',
'slug' : 'personalize-your-ios-app-with-firebase-user-management',
'description': 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'category' : 'firebase',
'length' : 90,
'totalSteps' : 11,
'updated' : 'Jun 28, 2017',
'steps' : AcademyFakeDb.demoSteps
}
];
}

View File

@@ -1,97 +0,0 @@
import {
startOfDay,
endOfDay,
subDays,
addDays,
endOfMonth,
isSameDay,
isSameMonth,
addHours
} from 'date-fns';
export class CalendarFakeDb
{
public static data = [
{
id : 'events',
data: [
{
start : subDays(startOfDay(new Date()), 1),
end : addDays(new Date(), 1),
title : 'A 3 day event',
allDay : false,
color : {
primary : '#ad2121',
secondary: '#FAE3E3'
},
resizable: {
beforeStart: true,
afterEnd : true
},
draggable: true,
meta : {
location: 'Los Angeles',
notes : 'Eos eu verear adipiscing, ex ornatus denique iracundia sed, quodsi oportere appellantur an pri.'
}
},
{
start : startOfDay(new Date()),
title : 'An event with no end date',
allDay : false,
color : {
primary : '#e3bc08',
secondary: '#FDF1BA'
},
resizable: {
beforeStart: true,
afterEnd : true
},
draggable: true,
meta : {
location: 'Los Angeles',
notes : 'Eos eu verear adipiscing, ex ornatus denique iracundia sed, quodsi oportere appellantur an pri.'
}
},
{
start : subDays(endOfMonth(new Date()), 3),
end : addDays(endOfMonth(new Date()), 3),
title : 'A long event that spans 2 months',
allDay : false,
color : {
primary : '#1e90ff',
secondary: '#D1E8FF'
},
resizable: {
beforeStart: true,
afterEnd : true
},
draggable: true,
meta : {
location: 'Los Angeles',
notes : 'Eos eu verear adipiscing, ex ornatus denique iracundia sed, quodsi oportere appellantur an pri.'
}
},
{
start : addHours(startOfDay(new Date()), 2),
end : new Date(),
title : 'A draggable and resizable event',
allDay : false,
color : {
primary : '#e3bc08',
secondary: '#FDF1BA'
},
resizable: {
beforeStart: true,
afterEnd : true
},
draggable: true,
meta : {
location: 'Los Angeles',
notes : 'Eos eu verear adipiscing, ex ornatus denique iracundia sed, quodsi oportere appellantur an pri.'
}
}
]
}
];
}

View File

@@ -1,343 +0,0 @@
export class ChatPanelFakeDb
{
public static contacts = [
{
'id' : '5725a680b3249760ea21de52',
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
'unread': '2'
},
{
'id' : '5725a680606588342058356d',
'name' : 'Arnold',
'avatar': 'assets/images/avatars/Arnold.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a68009e20d0a9e9acf2a',
'name' : 'Barrera',
'avatar': 'assets/images/avatars/Barrera.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a6809fdd915739187ed5',
'name' : 'Blair',
'avatar': 'assets/images/avatars/Blair.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
'unread': '3'
},
{
'id' : '5725a68007920cf75051da64',
'name' : 'Boyle',
'avatar': 'assets/images/avatars/Boyle.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
'unread': '1'
},
{
'id' : '5725a68031fdbb1db2c1af47',
'name' : 'Christy',
'avatar': 'assets/images/avatars/Christy.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680bc670af746c435e2',
'name' : 'Copeland',
'avatar': 'assets/images/avatars/Copeland.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680e7eb988a58ddf303',
'name' : 'Estes',
'avatar': 'assets/images/avatars/Estes.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680dcb077889f758961',
'name' : 'Harper',
'avatar': 'assets/images/avatars/Harper.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a6806acf030f9341e925',
'name' : 'Helen',
'avatar': 'assets/images/avatars/Helen.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680ae1ae9a3c960d487',
'name' : 'Henderson',
'avatar': 'assets/images/avatars/Henderson.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680b8d240c011dd224b',
'name' : 'Josefina',
'avatar': 'assets/images/avatars/Josefina.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a68034cb3968e1f79eac',
'name' : 'Katina',
'avatar': 'assets/images/avatars/Katina.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a6801146cce777df2a08',
'name' : 'Lily',
'avatar': 'assets/images/avatars/Lily.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
'unread': '10'
},
{
'id' : '5725a6808a178bfd034d6ecf',
'name' : 'Mai',
'avatar': 'assets/images/avatars/Mai.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680653c265f5c79b5a9',
'name' : 'Nancy',
'avatar': 'assets/images/avatars/Nancy.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680bbcec3cc32a8488a',
'name' : 'Nora',
'avatar': 'assets/images/avatars/Nora.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
'unread': '7'
},
{
'id' : '5725a6803d87f1b77e17b62b',
'name' : 'Odessa',
'avatar': 'assets/images/avatars/Odessa.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
'unread': '1'
},
{
'id' : '5725a680e87cb319bd9bd673',
'name' : 'Reyna',
'avatar': 'assets/images/avatars/Reyna.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a6802d10e277a0f35775',
'name' : 'Shauna',
'avatar': 'assets/images/avatars/Shauna.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680aef1e5cf26dd3d1f',
'name' : 'Shepard',
'avatar': 'assets/images/avatars/Shepard.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680cd7efa56a45aea5d',
'name' : 'Tillman',
'avatar': 'assets/images/avatars/Tillman.jpg',
'status': 'do-not-disturb',
'mood' : '',
'unread': '99+'
},
{
'id' : '5725a680fb65c91a82cb35e2',
'name' : 'Trevino',
'avatar': 'assets/images/avatars/Trevino.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a68018c663044be49cbf',
'name' : 'Tyson',
'avatar': 'assets/images/avatars/Tyson.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a6809413bf8a0a5272b1',
'name' : 'Velazquez',
'avatar': 'assets/images/avatars/Velazquez.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
}
];
public static chats = [
{
'id' : '1725a680b3249760ea21de52',
'dialog': [
{
'who' : '5725a680b3249760ea21de52',
'message': 'Quickly come to the meeting room 1B, we have a big server issue',
'time' : '2017-03-22T08:54:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Im having breakfast right now, cant you wait for 10 minutes?',
'time' : '2017-03-22T08:55:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Im having breakfast right now, cant you wait for 10 minutes?',
'time' : '2017-03-22T08:55:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:00:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:02:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T09:05:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:15:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T09:05:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:15:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:20:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T09:22:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:25:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:27:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T09:33:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T09:33:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:35:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:45:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T10:00:28.299Z'
}
]
},
{
'id' : '2725a680b8d240c011dd2243',
'dialog': [
{
'who' : '5725a680606588342058356d',
'message': 'Quickly come to the meeting room 1B, we have a big server issue',
'time' : '2017-04-22T01:00:00.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Im having breakfast right now, cant you wait for 10 minutes?',
'time' : '2017-04-22T01:05:00.299Z'
},
{
'who' : '5725a680606588342058356d',
'message': 'We are losing money! Quick!',
'time' : '2017-04-22T01:10:00.299Z'
}
]
},
{
'id' : '3725a6809413bf8a0a5272b4',
'dialog': [
{
'who' : '5725a68009e20d0a9e9acf2a',
'message': 'Quickly come to the meeting room 1B, we have a big server issue',
'time' : '2017-04-22T02:10:00.299Z'
}
]
}
];
public static user = [
{
'id' : '5725a6802d10e277a0f35724',
'name' : 'John Doe',
'avatar' : 'assets/images/avatars/profile.jpg',
'status' : 'online',
'mood' : '',
'chatList': [
{
'chatId' : '1725a680b3249760ea21de52',
'contactId' : '5725a680b3249760ea21de52',
'lastMessageTime': '2017-06-12T02:10:18.931Z'
},
{
'chatId' : '2725a680b8d240c011dd2243',
'contactId' : '5725a680606588342058356d',
'lastMessageTime': '2017-02-18T10:30:18.931Z'
},
{
'chatId' : '3725a6809413bf8a0a5272b4',
'contactId' : '5725a68009e20d0a9e9acf2a',
'lastMessageTime': '2017-03-18T12:30:18.931Z'
}
]
}
];
}

View File

@@ -1,325 +0,0 @@
export class ChatFakeDb
{
public static contacts = [
{
'id' : '5725a680b3249760ea21de52',
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680606588342058356d',
'name' : 'Arnold',
'avatar': 'assets/images/avatars/Arnold.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a68009e20d0a9e9acf2a',
'name' : 'Barrera',
'avatar': 'assets/images/avatars/Barrera.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
'unread': null
},
{
'id' : '5725a6809fdd915739187ed5',
'name' : 'Blair',
'avatar': 'assets/images/avatars/Blair.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
'unread': 3
},
{
'id' : '5725a68007920cf75051da64',
'name' : 'Boyle',
'avatar': 'assets/images/avatars/Boyle.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a68031fdbb1db2c1af47',
'name' : 'Christy',
'avatar': 'assets/images/avatars/Christy.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680bc670af746c435e2',
'name' : 'Copeland',
'avatar': 'assets/images/avatars/Copeland.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680e7eb988a58ddf303',
'name' : 'Estes',
'avatar': 'assets/images/avatars/Estes.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680dcb077889f758961',
'name' : 'Harper',
'avatar': 'assets/images/avatars/Harper.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a6806acf030f9341e925',
'name' : 'Helen',
'avatar': 'assets/images/avatars/Helen.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680ae1ae9a3c960d487',
'name' : 'Henderson',
'avatar': 'assets/images/avatars/Henderson.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680b8d240c011dd224b',
'name' : 'Josefina',
'avatar': 'assets/images/avatars/Josefina.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a68034cb3968e1f79eac',
'name' : 'Katina',
'avatar': 'assets/images/avatars/Katina.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a6801146cce777df2a08',
'name' : 'Lily',
'avatar': 'assets/images/avatars/Lily.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a6808a178bfd034d6ecf',
'name' : 'Mai',
'avatar': 'assets/images/avatars/Mai.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680653c265f5c79b5a9',
'name' : 'Nancy',
'avatar': 'assets/images/avatars/Nancy.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680bbcec3cc32a8488a',
'name' : 'Nora',
'avatar': 'assets/images/avatars/Nora.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a6803d87f1b77e17b62b',
'name' : 'Odessa',
'avatar': 'assets/images/avatars/Odessa.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680e87cb319bd9bd673',
'name' : 'Reyna',
'avatar': 'assets/images/avatars/Reyna.jpg',
'status': 'offline',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a6802d10e277a0f35775',
'name' : 'Shauna',
'avatar': 'assets/images/avatars/Shauna.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
'unread': null
},
{
'id' : '5725a680aef1e5cf26dd3d1f',
'name' : 'Shepard',
'avatar': 'assets/images/avatars/Shepard.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a680cd7efa56a45aea5d',
'name' : 'Tillman',
'avatar': 'assets/images/avatars/Tillman.jpg',
'status': 'do-not-disturb',
'mood' : ''
},
{
'id' : '5725a680fb65c91a82cb35e2',
'name' : 'Trevino',
'avatar': 'assets/images/avatars/Trevino.jpg',
'status': 'away',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a68018c663044be49cbf',
'name' : 'Tyson',
'avatar': 'assets/images/avatars/Tyson.jpg',
'status': 'do-not-disturb',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
},
{
'id' : '5725a6809413bf8a0a5272b1',
'name' : 'Velazquez',
'avatar': 'assets/images/avatars/Velazquez.jpg',
'status': 'online',
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
}
];
public static chats = [
{
'id' : '1725a680b3249760ea21de52',
'dialog': [
{
'who' : '5725a680b3249760ea21de52',
'message': 'Quickly come to the meeting room 1B, we have a big server issue',
'time' : '2017-03-22T08:54:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Im having breakfast right now, cant you wait for 10 minutes?',
'time' : '2017-03-22T08:55:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:00:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:02:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T09:05:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:15:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:20:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T09:22:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:25:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:27:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T09:33:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'We are losing money! Quick!',
'time' : '2017-03-22T09:35:28.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Its not my money, you know. I will eat my breakfast and then I will come to the meeting room.',
'time' : '2017-03-22T09:45:28.299Z'
},
{
'who' : '5725a680b3249760ea21de52',
'message': 'You are the worst!',
'time' : '2017-03-22T10:00:28.299Z'
}
]
},
{
'id' : '2725a680b8d240c011dd2243',
'dialog': [
{
'who' : '5725a680b8d240c011dd224b',
'message': 'Quickly come to the meeting room 1B, we have a big server issue',
'time' : '2017-04-22T01:00:00.299Z'
},
{
'who' : '5725a6802d10e277a0f35724',
'message': 'Im having breakfast right now, cant you wait for 10 minutes?',
'time' : '2017-04-22T01:05:00.299Z'
},
{
'who' : '5725a680b8d240c011dd224b',
'message': 'We are losing money! Quick!',
'time' : '2017-04-22T01:10:00.299Z'
}
]
},
{
'id' : '3725a6809413bf8a0a5272b4',
'dialog': [
{
'who' : '5725a6809413bf8a0a5272b1',
'message': 'Quickly come to the meeting room 1B, we have a big server issue',
'time' : '2017-04-22T02:10:00.299Z'
}
]
}
];
public static user = [
{
'id' : '5725a6802d10e277a0f35724',
'name' : 'John Doe',
'avatar' : 'assets/images/avatars/profile.jpg',
'status' : 'online',
'mood' : 'it\'s a status....not your diary...',
'chatList': [
{
'id' : '1725a680b3249760ea21de52',
'contactId' : '5725a680b3249760ea21de52',
'name' : 'Alice Freeman',
'unread' : 4,
'lastMessageTime': '2017-06-12T02:10:18.931Z'
},
{
'id' : '2725a680b8d240c011dd2243',
'contactId' : '5725a680b8d240c011dd224b',
'name' : 'Josefina',
'unread' : null,
'lastMessageTime': '2017-02-18T10:30:18.931Z'
},
{
'id' : '3725a6809413bf8a0a5272b4',
'contactId' : '5725a6809413bf8a0a5272b1',
'name' : 'Velazquez',
'unread' : 2,
'lastMessageTime': '2017-03-18T12:30:18.931Z'
}
]
}
];
}

View File

@@ -1,411 +0,0 @@
export class ContactsFakeDb
{
public static contacts = [
{
'id' : '5725a680b3249760ea21de52',
'name' : 'Abbott',
'lastName': 'Keitch',
'avatar' : 'assets/images/avatars/Abbott.jpg',
'nickname': 'Royalguard',
'company' : 'Saois',
'jobTitle': 'Digital Archivist',
'email' : 'abbott@withinpixels.com',
'phone' : '+1-202-555-0175',
'address' : '933 8th Street Stamford, CT 06902',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680606588342058356d',
'name' : 'Arnold',
'lastName': 'Matlock',
'avatar' : 'assets/images/avatars/Arnold.jpg',
'nickname': 'Wanderer',
'company' : 'Laotcone',
'jobTitle': 'Graphic Artist',
'email' : 'arnold@withinpixels.com',
'phone' : '+1-202-555-0141',
'address' : '906 Valley Road Michigan City, IN 46360',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a68009e20d0a9e9acf2a',
'name' : 'Barrera',
'lastName': 'Bradbury',
'avatar' : 'assets/images/avatars/Barrera.jpg',
'nickname': 'Jackal',
'company' : 'Unizim',
'jobTitle': 'Graphic Designer',
'email' : 'barrera@withinpixels.com',
'phone' : '+1-202-555-0196',
'address' : '183 River Street Passaic, NJ 07055',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6809fdd915739187ed5',
'name' : 'Blair',
'lastName': 'Strangeway',
'avatar' : 'assets/images/avatars/Blair.jpg',
'nickname': 'Knight',
'company' : 'Conedubdax',
'jobTitle': 'Visual Designer',
'email' : 'blair@withinpixels.com',
'phone' : '+1-202-555-0118',
'address' : '143 Jones Street Eau Claire, WI 54701',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a68007920cf75051da64',
'name' : 'Boyle',
'lastName': 'Winters',
'avatar' : 'assets/images/avatars/Boyle.jpg',
'nickname': 'Jester',
'company' : 'Newo',
'jobTitle': 'Catalogue Illustrator',
'email' : 'boyle@withinpixels.com',
'phone' : '+1-202-555-0177',
'address' : '218 Pearl Street Brandon, FL 33510',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a68031fdbb1db2c1af47',
'name' : 'Christy',
'lastName': 'Camacho',
'avatar' : 'assets/images/avatars/Christy.jpg',
'nickname': 'Mist',
'company' : 'uniway',
'jobTitle': '3D Animator',
'email' : 'christy@withinpixels.com',
'phone' : '+1-202-555-0136',
'address' : '329 Bridge Street Desoto, TX 75115',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680bc670af746c435e2',
'name' : 'Copeland',
'lastName': 'Redcliff',
'avatar' : 'assets/images/avatars/Copeland.jpg',
'nickname': 'Cloudlaw',
'company' : 'Tempron',
'jobTitle': 'Multimedia Artist',
'email' : 'copeland@withinpixels.com',
'phone' : '+1-202-555-0107',
'address' : '956 6th Avenue North Bergen, NJ 0704',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680e7eb988a58ddf303',
'name' : 'Estes',
'lastName': 'Stevens',
'avatar' : 'assets/images/avatars/Estes.jpg',
'nickname': 'Roamer',
'company' : 'nam-dex',
'jobTitle': 'Special Effects Artist',
'email' : 'estes@withinpixels.com',
'phone' : '+1-202-555-0113',
'address' : '664 York Street Cambridge, MA 02138',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680dcb077889f758961',
'name' : 'Harper',
'lastName': 'MacGuffin',
'avatar' : 'assets/images/avatars/Harper.jpg',
'nickname': 'Tempest',
'company' : 'runcane',
'jobTitle': 'Application Developer',
'email' : 'harper@withinpixels.com',
'phone' : '+1-202-555-0173',
'address' : '738 Route 11 Cornelius, NC 28031',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6806acf030f9341e925',
'name' : 'Helen',
'lastName': 'Sheridan',
'avatar' : 'assets/images/avatars/Helen.jpg',
'nickname': 'Magicbattler',
'company' : 'Subhow',
'jobTitle': 'Content Developer',
'email' : 'helen@withinpixels.com',
'phone' : '+1-202-555-0163',
'address' : '194 Washington Avenue Saint Petersburg, FL 33702',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680ae1ae9a3c960d487',
'name' : 'Henderson',
'lastName': 'Cambias',
'avatar' : 'assets/images/avatars/Henderson.jpg',
'nickname': 'Blizzard',
'company' : 'Howcom',
'jobTitle': 'Web Designer',
'email' : 'henderson@withinpixels.com',
'phone' : '+1-202-555-0151',
'address' : '686 Roosevelt Avenue Oviedo, FL 32765',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680b8d240c011dd224b',
'name' : 'Josefina',
'lastName': 'Lakefield',
'avatar' : 'assets/images/avatars/Josefina.jpg',
'nickname': 'Violet',
'company' : 'Gecko',
'jobTitle': 'Web Developer',
'email' : 'josefina@withinpixels.com',
'phone' : '+1-202-555-0160',
'address' : '202 Hartford Road Lynchburg, VA 24502',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a68034cb3968e1f79eac',
'name' : 'Katina',
'lastName': 'Bletchley',
'avatar' : 'assets/images/avatars/Katina.jpg',
'nickname': 'Rose',
'company' : 'Lexicom',
'jobTitle': 'Software Designer',
'email' : 'katina@withinpixels.com',
'phone' : '+1-202-555-0186',
'address' : '219 Woodland Road Valrico, FL 33594',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6801146cce777df2a08',
'name' : 'Lily',
'lastName': 'Peasegood',
'avatar' : 'assets/images/avatars/Lily.jpg',
'nickname': 'Star',
'company' : 'zooflex',
'jobTitle': 'Software Specialist',
'email' : 'lily@withinpixels.com',
'phone' : '+1-202-555-0115',
'address' : '305 Willow Drive Superior, WI 54880',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6808a178bfd034d6ecf',
'name' : 'Mai',
'lastName': 'Nox',
'avatar' : 'assets/images/avatars/Mai.jpg',
'nickname': 'Violetmage',
'company' : 'quadzone',
'jobTitle': 'Software Engineer',
'email' : 'mai@withinpixels.com',
'phone' : '+1-202-555-0199',
'address' : '148 Heather Lane Mcminnville, TN 37110',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680653c265f5c79b5a9',
'name' : 'Nancy',
'lastName': 'Jaggers',
'avatar' : 'assets/images/avatars/Nancy.jpg',
'nickname': 'Silverwarden',
'company' : 'Opetamnix',
'jobTitle': 'Software Architect',
'email' : 'nancy@withinpixels.com',
'phone' : '+1-202-555-0120',
'address' : '345 Laurel Lane Union City, NJ 07087',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680bbcec3cc32a8488a',
'name' : 'Nora',
'lastName': 'Franklin',
'avatar' : 'assets/images/avatars/Nora.jpg',
'nickname': 'Katanachanter',
'company' : 'Saoway',
'jobTitle': 'Database Coordinator',
'email' : 'nora@withinpixels.com',
'phone' : '+1-202-555-0172',
'address' : '572 Rose Street Summerfield, FL 34491',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6803d87f1b77e17b62b',
'name' : 'Odessa',
'lastName': 'Goodman',
'avatar' : 'assets/images/avatars/Odessa.jpg',
'nickname': 'Rose',
'company' : 'transace',
'jobTitle': 'Database Administration Manager',
'email' : 'odessa@withinpixels.com',
'phone' : '+1-202-555-0190',
'address' : '527 Jefferson Court Conyers, GA 30012',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680e87cb319bd9bd673',
'name' : 'Reyna',
'lastName': 'Preece',
'avatar' : 'assets/images/avatars/Reyna.jpg',
'nickname': 'Holydawn',
'company' : 'Dingex',
'jobTitle': 'Data Processing Planner',
'email' : 'reyna@withinpixels.com',
'phone' : '+1-202-555-0116',
'address' : '297 Strawberry Lane Faribault, MN 55021',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6802d10e277a0f35775',
'name' : 'Shauna',
'lastName': 'Atherton',
'avatar' : 'assets/images/avatars/Shauna.jpg',
'nickname': 'Faunasoul',
'company' : 'Vivaflex',
'jobTitle': 'Art Director',
'email' : 'shauna@withinpixels.com',
'phone' : '+1-202-555-0159',
'address' : '928 Canterbury Court Pittsburgh, PA 15206',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680aef1e5cf26dd3d1f',
'name' : 'Shepard',
'lastName': 'Rosco',
'avatar' : 'assets/images/avatars/Shepard.jpg',
'nickname': 'Fireking',
'company' : 'Goldenla',
'jobTitle': 'Magazine Designer',
'email' : 'shepard@withinpixels.com',
'phone' : '+1-202-555-0173',
'address' : '904 Ridge Road Pickerington, OH 43147',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680cd7efa56a45aea5d',
'name' : 'Tillman',
'lastName': 'Lee',
'avatar' : 'assets/images/avatars/Tillman.jpg',
'nickname': 'Gust',
'company' : 'K-techno',
'jobTitle': 'News Photographer',
'email' : 'tillman@withinpixels.com',
'phone' : '+1-202-555-0183',
'address' : '447 Charles Street Dorchester, MA 02125',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a680fb65c91a82cb35e2',
'name' : 'Trevino',
'lastName': 'Bush',
'avatar' : 'assets/images/avatars/Trevino.jpg',
'nickname': 'Wolf',
'company' : 'Dalthex',
'jobTitle': 'Photojournalist',
'email' : 'trevino@withinpixels.com',
'phone' : '+1-202-555-0138',
'address' : '84 Valley View Road Norman, OK 73072',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a68018c663044be49cbf',
'name' : 'Tyson',
'lastName': 'Marshall',
'avatar' : 'assets/images/avatars/Tyson.jpg',
'nickname': 'Honordread',
'company' : 'Geocon',
'jobTitle': 'Manuscript Editor',
'email' : 'tyson@withinpixels.com',
'phone' : '+1-202-555-0146',
'address' : '204 Clark Street Monsey, NY 10952',
'birthday': null,
'notes' : ''
},
{
'id' : '5725a6809413bf8a0a5272b1',
'name' : 'Velazquez',
'lastName': 'Smethley',
'avatar' : 'assets/images/avatars/Velazquez.jpg',
'nickname': 'Strifedream',
'company' : 'ranex',
'jobTitle': 'Publications Editor',
'email' : 'velezquez@withinpixels.com',
'phone' : '+1-202-555-0146',
'address' : '261 Cleveland Street Riverside, NJ 08075',
'birthday': null,
'notes' : ''
}
];
public static user = [
{
'id' : '5725a6802d10e277a0f35724',
'name' : 'John Doe',
'avatar' : 'assets/images/avatars/profile.jpg',
'starred' : [
'5725a680ae1ae9a3c960d487',
'5725a6801146cce777df2a08',
'5725a680bbcec3cc32a8488a',
'5725a680bc670af746c435e2',
'5725a68009e20d0a9e9acf2a'
],
'frequentContacts': [
'5725a6809fdd915739187ed5',
'5725a68031fdbb1db2c1af47',
'5725a680606588342058356d',
'5725a680e7eb988a58ddf303',
'5725a6806acf030f9341e925',
'5725a68034cb3968e1f79eac',
'5725a6801146cce777df2a08',
'5725a680653c265f5c79b5a9'
],
'groups' : [
{
'id' : '5725a6802d10e277a0f35739',
'name' : 'Friends',
'contactIds': [
'5725a680bbcec3cc32a8488a',
'5725a680e87cb319bd9bd673',
'5725a6802d10e277a0f35775'
]
},
{
'id' : '5725a6802d10e277a0f35749',
'name' : 'Clients',
'contactIds': [
'5725a680cd7efa56a45aea5d',
'5725a68018c663044be49cbf',
'5725a6809413bf8a0a5272b1',
'5725a6803d87f1b77e17b62b'
]
},
{
'id' : '5725a6802d10e277a0f35329',
'name' : 'Recent Workers',
'contactIds': [
'5725a680bbcec3cc32a8488a',
'5725a680653c265f5c79b5a9',
'5725a6808a178bfd034d6ecf',
'5725a6801146cce777df2a08'
]
}
]
}
];
}

View File

@@ -1,602 +0,0 @@
export class AnalyticsDashboardDb
{
public static widgets = {
widget1: {
chartType: 'line',
datasets : {
'2015': [
{
label: 'Sales',
data : [1.9, 3, 3.4, 2.2, 2.9, 3.9, 2.5, 3.8, 4.1, 3.8, 3.2, 2.9],
fill : 'start'
}
],
'2016': [
{
label: 'Sales',
data : [2.2, 2.9, 3.9, 2.5, 3.8, 3.2, 2.9, 1.9, 3, 3.4, 4.1, 3.8],
fill : 'start'
}
],
'2017': [
{
label: 'Sales',
data : [3.9, 2.5, 3.8, 4.1, 1.9, 3, 3.8, 3.2, 2.9, 3.4, 2.2, 2.9],
fill : 'start'
}
]
},
labels : ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'],
colors : [
{
borderColor : '#42a5f5',
backgroundColor : '#42a5f5',
pointBackgroundColor : '#1e88e5',
pointHoverBackgroundColor: '#1e88e5',
pointBorderColor : '#ffffff',
pointHoverBorderColor : '#ffffff'
}
],
options : {
spanGaps : false,
legend : {
display: false
},
maintainAspectRatio: false,
layout : {
padding: {
top : 32,
left : 32,
right: 32
}
},
elements : {
point: {
radius : 4,
borderWidth : 2,
hoverRadius : 4,
hoverBorderWidth: 2
},
line : {
tension: 0
}
},
scales : {
xAxes: [
{
gridLines: {
display : false,
drawBorder : false,
tickMarkLength: 18
},
ticks : {
fontColor: '#ffffff'
}
}
],
yAxes: [
{
display: false,
ticks : {
min : 1.5,
max : 5,
stepSize: 0.5
}
}
]
},
plugins : {
filler : {
propagate: false
},
xLabelsOnTop: {
active: true
}
}
}
},
widget2: {
conversion: {
value : 492,
ofTarget: 13
},
chartType : 'bar',
datasets : [
{
label: 'Conversion',
data : [221, 428, 492, 471, 413, 344, 294]
}
],
labels : ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
colors : [
{
borderColor : '#42a5f5',
backgroundColor: '#42a5f5'
}
],
options : {
spanGaps : false,
legend : {
display: false
},
maintainAspectRatio: false,
layout : {
padding: {
top : 24,
left : 16,
right : 16,
bottom: 16
}
},
scales : {
xAxes: [
{
display: false
}
],
yAxes: [
{
display: false,
ticks : {
min: 100,
max: 500
}
}
]
}
}
},
widget3: {
impressions: {
value : '87k',
ofTarget: 12
},
chartType : 'line',
datasets : [
{
label: 'Impression',
data : [67000, 54000, 82000, 57000, 72000, 57000, 87000, 72000, 89000, 98700, 112000, 136000, 110000, 149000, 98000],
fill : false
}
],
labels : ['Jan 1', 'Jan 2', 'Jan 3', 'Jan 4', 'Jan 5', 'Jan 6', 'Jan 7', 'Jan 8', 'Jan 9', 'Jan 10', 'Jan 11', 'Jan 12', 'Jan 13', 'Jan 14', 'Jan 15'],
colors : [
{
borderColor: '#5c84f1'
}
],
options : {
spanGaps : false,
legend : {
display: false
},
maintainAspectRatio: false,
elements : {
point: {
radius : 2,
borderWidth : 1,
hoverRadius : 2,
hoverBorderWidth: 1
},
line : {
tension: 0
}
},
layout : {
padding: {
top : 24,
left : 16,
right : 16,
bottom: 16
}
},
scales : {
xAxes: [
{
display: false
}
],
yAxes: [
{
display: false,
ticks : {
// min: 100,
// max: 500
}
}
]
}
}
},
widget4: {
visits : {
value : 882,
ofTarget: -9
},
chartType: 'bar',
datasets : [
{
label: 'Visits',
data : [432, 428, 327, 363, 456, 267, 231]
}
],
labels : ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
colors : [
{
borderColor : '#f44336',
backgroundColor: '#f44336'
}
],
options : {
spanGaps : false,
legend : {
display: false
},
maintainAspectRatio: false,
layout : {
padding: {
top : 24,
left : 16,
right : 16,
bottom: 16
}
},
scales : {
xAxes: [
{
display: false
}
],
yAxes: [
{
display: false,
ticks : {
min: 150,
max: 500
}
}
]
}
}
},
widget5: {
chartType: 'line',
datasets : {
'yesterday': [
{
label: 'Visitors',
data : [190, 300, 340, 220, 290, 390, 250, 380, 410, 380, 320, 290],
fill : 'start'
},
{
label: 'Page views',
data : [2200, 2900, 3900, 2500, 3800, 3200, 2900, 1900, 3000, 3400, 4100, 3800],
fill : 'start'
}
],
'today' : [
{
label: 'Visitors',
data : [410, 380, 320, 290, 190, 390, 250, 380, 300, 340, 220, 290],
fill : 'start'
},
{
label: 'Page Views',
data : [3000, 3400, 4100, 3800, 2200, 3200, 2900, 1900, 2900, 3900, 2500, 3800],
fill : 'start'
}
]
},
labels : ['12am', '2am', '4am', '6am', '8am', '10am', '12pm', '2pm', '4pm', '6pm', '8pm', '10pm'],
colors : [
{
borderColor : '#3949ab',
backgroundColor : '#3949ab',
pointBackgroundColor : '#3949ab',
pointHoverBackgroundColor: '#3949ab',
pointBorderColor : '#ffffff',
pointHoverBorderColor : '#ffffff'
},
{
borderColor : 'rgba(30, 136, 229, 0.87)',
backgroundColor : 'rgba(30, 136, 229, 0.87)',
pointBackgroundColor : 'rgba(30, 136, 229, 0.87)',
pointHoverBackgroundColor: 'rgba(30, 136, 229, 0.87)',
pointBorderColor : '#ffffff',
pointHoverBorderColor : '#ffffff'
}
],
options : {
spanGaps : false,
legend : {
display: false
},
maintainAspectRatio: false,
tooltips : {
position : 'nearest',
mode : 'index',
intersect: false
},
layout : {
padding: {
left : 24,
right: 32
}
},
elements : {
point: {
radius : 4,
borderWidth : 2,
hoverRadius : 4,
hoverBorderWidth: 2
}
},
scales : {
xAxes: [
{
gridLines: {
display: false
},
ticks : {
fontColor: 'rgba(0,0,0,0.54)'
}
}
],
yAxes: [
{
gridLines: {
tickMarkLength: 16
},
ticks : {
stepSize: 1000
}
}
]
},
plugins : {
filler: {
propagate: false
}
}
}
},
widget6: {
markers: [
{
lat : 52,
lng : -73,
label: '120'
},
{
lat : 37,
lng : -104,
label: '498'
},
{
lat : 21,
lng : -7,
label: '443'
},
{
lat : 55,
lng : 75,
label: '332'
},
{
lat : 51,
lng : 7,
label: '50'
},
{
lat : 31,
lng : 12,
label: '221'
},
{
lat : 45,
lng : 44,
label: '455'
},
{
lat : -26,
lng : 134,
label: '231'
},
{
lat : -9,
lng : -60,
label: '67'
},
{
lat : 33,
lng : 104,
label: '665'
}
],
styles : [
{
'featureType': 'administrative',
'elementType': 'labels.text.fill',
'stylers' : [
{
'color': '#444444'
}
]
},
{
'featureType': 'landscape',
'elementType': 'all',
'stylers' : [
{
'color': '#f2f2f2'
}
]
},
{
'featureType': 'poi',
'elementType': 'all',
'stylers' : [
{
'visibility': 'off'
}
]
},
{
'featureType': 'road',
'elementType': 'all',
'stylers' : [
{
'saturation': -100
},
{
'lightness': 45
}
]
},
{
'featureType': 'road.highway',
'elementType': 'all',
'stylers' : [
{
'visibility': 'simplified'
}
]
},
{
'featureType': 'road.arterial',
'elementType': 'labels.icon',
'stylers' : [
{
'visibility': 'off'
}
]
},
{
'featureType': 'transit',
'elementType': 'all',
'stylers' : [
{
'visibility': 'off'
}
]
},
{
'featureType': 'water',
'elementType': 'all',
'stylers' : [
{
'color': '#039be5'
},
{
'visibility': 'on'
}
]
}
]
},
widget7: {
scheme : {
domain: ['#4867d2', '#5c84f1', '#89a9f4']
},
devices: [
{
name : 'Desktop',
value : 92.8,
change: -0.6
},
{
name : 'Mobile',
value : 6.1,
change: 0.7
},
{
name : 'Tablet',
value : 1.1,
change: 0.1
}
]
},
widget8: {
scheme : {
domain: ['#5c84f1']
},
today : '12,540',
change : {
value : 321,
percentage: 2.05
},
data : [
{
name : 'Sales',
series: [
{
name : 'Jan 1',
value: 540
},
{
name : 'Jan 2',
value: 539
},
{
name : 'Jan 3',
value: 538
},
{
name : 'Jan 4',
value: 539
},
{
name : 'Jan 5',
value: 540
},
{
name : 'Jan 6',
value: 539
},
{
name : 'Jan 7',
value: 540
}
]
}
],
dataMin: 538,
dataMax: 541
},
widget9: {
rows: [
{
title : 'Holiday Travel',
clicks : 3621,
conversion: 90
},
{
title : 'Get Away Deals',
clicks : 703,
conversion: 7
},
{
title : 'Airfare',
clicks : 532,
conversion: 0
},
{
title : 'Vacation',
clicks : 201,
conversion: 8
},
{
title : 'Hotels',
clicks : 94,
conversion: 4
}
]
}
};
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,103 +0,0 @@
import { InMemoryDbService } from 'angular-in-memory-web-api';
import { ProjectDashboardDb } from 'app/fake-db/dashboard-project';
import { AnalyticsDashboardDb } from 'app/fake-db/dashboard-analytics';
import { CalendarFakeDb } from 'app/fake-db/calendar';
import { ECommerceFakeDb } from 'app/fake-db/e-commerce';
import { AcademyFakeDb } from 'app/fake-db/academy';
import { MailFakeDb } from 'app/fake-db/mail';
import { ChatFakeDb } from 'app/fake-db/chat';
import { FileManagerFakeDb } from 'app/fake-db/file-manager';
import { ContactsFakeDb } from 'app/fake-db/contacts';
import { TodoFakeDb } from 'app/fake-db/todo';
import { ScrumboardFakeDb } from 'app/fake-db/scrumboard';
import { InvoiceFakeDb } from 'app/fake-db/invoice';
import { ProfileFakeDb } from 'app/fake-db/profile';
import { SearchFakeDb } from 'app/fake-db/search';
import { FaqFakeDb } from 'app/fake-db/faq';
import { KnowledgeBaseFakeDb } from 'app/fake-db/knowledge-base';
import { IconsFakeDb } from 'app/fake-db/icons';
import { ChatPanelFakeDb } from 'app/fake-db/chat-panel';
import { QuickPanelFakeDb } from 'app/fake-db/quick-panel';
export class FakeDbService implements InMemoryDbService
{
createDb(): any
{
return {
// Dashboards
'project-dashboard-projects' : ProjectDashboardDb.projects,
'project-dashboard-widgets' : ProjectDashboardDb.widgets,
'analytics-dashboard-widgets': AnalyticsDashboardDb.widgets,
// Calendar
'calendar': CalendarFakeDb.data,
// E-Commerce
'e-commerce-dashboard': ECommerceFakeDb.dashboard,
'e-commerce-products' : ECommerceFakeDb.products,
'e-commerce-orders' : ECommerceFakeDb.orders,
// Academy
'academy-categories': AcademyFakeDb.categories,
'academy-courses' : AcademyFakeDb.courses,
'academy-course' : AcademyFakeDb.course,
// Mail
'mail-mails' : MailFakeDb.mails,
'mail-folders': MailFakeDb.folders,
'mail-filters': MailFakeDb.filters,
'mail-labels' : MailFakeDb.labels,
// Chat
'chat-contacts': ChatFakeDb.contacts,
'chat-chats' : ChatFakeDb.chats,
'chat-user' : ChatFakeDb.user,
// File Manager
'file-manager': FileManagerFakeDb.files,
// Contacts
'contacts-contacts': ContactsFakeDb.contacts,
'contacts-user' : ContactsFakeDb.user,
// Todo
'todo-todos' : TodoFakeDb.todos,
'todo-filters': TodoFakeDb.filters,
'todo-tags' : TodoFakeDb.tags,
// Scrumboard
'scrumboard-boards': ScrumboardFakeDb.boards,
// Invoice
'invoice': InvoiceFakeDb.invoice,
// Profile
'profile-timeline' : ProfileFakeDb.timeline,
'profile-photos-videos': ProfileFakeDb.photosVideos,
'profile-about' : ProfileFakeDb.about,
// Search
'search-classic': SearchFakeDb.classic,
'search-table' : SearchFakeDb.table,
// FAQ
'faq': FaqFakeDb.data,
// Knowledge base
'knowledge-base': KnowledgeBaseFakeDb.data,
// Icons
'icons': IconsFakeDb.icons,
// Chat Panel
'chat-panel-contacts' : ChatPanelFakeDb.contacts,
'chat-panel-chats': ChatPanelFakeDb.chats,
'chat-panel-user': ChatPanelFakeDb.user,
// Quick Panel
'quick-panel-notes' : QuickPanelFakeDb.notes,
'quick-panel-events': QuickPanelFakeDb.events
};
}
}

View File

@@ -1,61 +0,0 @@
export class FaqFakeDb
{
public static data = [
{
'question': 'Proident tempor est nulla irure ad est?',
'answer': 'Id nulla nulla proident deserunt deserunt proident in quis. Cillum reprehenderit labore id anim laborum.'
},
{
'question': 'Ullamco duis commodo sint ad aliqua aute?',
'answer': 'Sunt laborum enim nostrud ea fugiat cillum mollit aliqua exercitation ad elit.'
},
{
'question': 'Eiusmod non occaecat pariatur Lorem in ex?',
'answer': 'Nostrud anim mollit incididunt qui qui sit commodo duis. Anim amet irure aliquip duis nostrud sit quis fugiat ullamco non dolor labore. Lorem sunt voluptate laboris culpa proident. Aute eiusmod aliqua exercitation irure exercitation qui laboris mollit occaecat eu occaecat fugiat.'
},
{
'question': 'Lorem magna cillum consequat consequat mollit?',
'answer': 'Velit ipsum proident ea incididunt et. Consectetur eiusmod laborum voluptate duis occaecat ullamco sint enim proident.'
},
{
'question': 'Quis irure cupidatat ad consequat reprehenderit excepteur?',
'answer': 'Esse nisi mollit aliquip mollit aute consequat adipisicing. Do excepteur dolore proident cupidatat pariatur irure consequat incididunt.'
},
{
'question': 'Officia voluptate tempor ut mollit ea cillum?',
'answer': 'Deserunt veniam reprehenderit do elit magna ut.'
},
{
'question': 'Sunt fugiat officia nisi minim sunt duis?',
'answer': 'Eiusmod eiusmod sint aliquip exercitation cillum. Magna nulla officia ex consectetur ea ad excepteur in qui.'
},
{
'question': 'Non cupidatat enim quis aliquip minim laborum?',
'answer': 'Qui cillum eiusmod nostrud sunt dolore velit nostrud labore voluptate ad dolore. Eu Lorem anim pariatur aliqua. Ullamco ut dolor velit esse occaecat dolore eu cillum commodo qui. Nulla dolor consequat voluptate magna ut commodo magna consectetur non aute proident.'
},
{
'question': 'Dolor ex occaecat magna labore laboris qui?',
'answer': 'Incididunt qui excepteur eiusmod elit cillum occaecat voluptate cillum nostrud. Dolor ullamco ullamco eiusmod do sunt adipisicing pariatur. In esse esse labore id reprehenderit sint do. Pariatur culpa dolor tempor qui excepteur duis do anim minim ipsum.'
},
{
'question': 'Nisi et ullamco minim ea proident tempor?',
'answer': 'Dolor veniam dolor cillum Lorem magna nisi in occaecat nulla dolor ea eiusmod.'
},
{
'question': 'Amet sunt et quis amet commodo quis?',
'answer': 'Nulla dolore consequat aliqua sint consequat elit qui occaecat et.'
},
{
'question': 'Ut eiusmod ex ea eiusmod culpa incididunt?',
'answer': 'Fugiat non incididunt officia ex incididunt occaecat. Voluptate nostrud culpa aliquip mollit incididunt non dolore.'
},
{
'question': 'Proident reprehenderit laboris pariatur ut et nisi?',
'answer': 'Reprehenderit proident ut ad cillum quis velit quis aliqua ut aliquip tempor ullamco.'
},
{
'question': 'Aliqua aliquip aliquip aliquip et exercitation aute?',
'answer': 'Adipisicing Lorem tempor ex anim. Labore tempor laboris nostrud dolore voluptate ullamco. Fugiat ex deserunt anim minim esse velit laboris aute ea duis incididunt. Elit irure id Lorem incididunt laborum aliquip consectetur est irure sunt. Ut labore anim nisi aliqua tempor laborum nulla cillum. Duis irure consequat cillum magna cillum eiusmod ut. Et exercitation voluptate quis deserunt elit quis dolor deserunt ex ex esse ex.'
}
];
}

View File

@@ -1,146 +0,0 @@
export class FileManagerFakeDb
{
public static files = [
{
'name' : 'Work Documents',
'type' : 'folder',
'owner' : 'me',
'size' : '',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true
},
{
'name' : 'Public Documents',
'type' : 'folder',
'owner' : 'public',
'size' : '',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true
},
{
'name' : 'Private Documents',
'type' : 'folder',
'owner' : 'me',
'size' : '',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true
},
{
'name' : 'Ongoing projects',
'type' : 'document',
'owner' : 'Emily Bennett',
'size' : '1.2 Mb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Shopping list',
'type' : 'document',
'owner' : 'Emily Bennett',
'size' : '980 Kb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Invoices',
'type' : 'spreadsheet',
'owner' : 'Emily Bennett',
'size' : '750 Kb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Crash logs',
'type' : 'document',
'owner' : 'Emily Bennett',
'size' : '980 Mb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'System logs',
'type' : 'document',
'owner' : 'Emily Bennett',
'size' : '52 Kb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Prices',
'type' : 'spreadsheet',
'owner' : 'Emily Bennett',
'size' : '27 Mb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Anabelle Manual',
'type' : 'document',
'owner' : 'Emily Bennett',
'size' : '1.1 Kb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
},
{
'name' : 'Steam summer sale budget',
'type' : 'spreadsheet',
'owner' : 'Emily Bennett',
'size' : '505 Kb',
'modified' : 'July 8, 2017',
'opened' : 'July 8, 2017',
'created' : 'July 8, 2017',
'extention': '',
'location' : 'My Files > Documents',
'offline' : true,
'preview' : 'assets/images/etc/sample-file-preview.jpg'
}
];
}

View File

@@ -1,938 +0,0 @@
export class IconsFakeDb
{
public static icons = [
'3d_rotation',
'ac_unit',
'access_alarm',
'access_alarms',
'access_time',
'accessibility',
'accessible',
'account_balance',
'account_balance_wallet',
'account_box',
'account_circle',
'adb',
'add',
'add_a_photo',
'add_alarm',
'add_alert',
'add_box',
'add_circle',
'add_circle_outline',
'add_location',
'add_shopping_cart',
'add_to_photos',
'add_to_queue',
'adjust',
'airline_seat_flat',
'airline_seat_flat_angled',
'airline_seat_individual_suite',
'airline_seat_legroom_extra',
'airline_seat_legroom_normal',
'airline_seat_legroom_reduced',
'airline_seat_recline_extra',
'airline_seat_recline_normal',
'airplanemode_active',
'airplanemode_inactive',
'airplay',
'airport_shuttle',
'alarm',
'alarm_add',
'alarm_off',
'alarm_on',
'album',
'all_inclusive',
'all_out',
'android',
'announcement',
'apps',
'archive',
'arrow_back',
'arrow_downward',
'arrow_drop_down',
'arrow_drop_down_circle',
'arrow_drop_up',
'arrow_forward',
'arrow_upward',
'art_track',
'aspect_ratio',
'assessment',
'assignment',
'assignment_ind',
'assignment_late',
'assignment_return',
'assignment_returned',
'assignment_turned_in',
'assistant',
'assistant_photo',
'attach_file',
'attach_money',
'attachment',
'audiotrack',
'autorenew',
'av_timer',
'backspace',
'backup',
'battery_alert',
'battery_charging_full',
'battery_full',
'battery_std',
'battery_unknown',
'beach_access',
'beenhere',
'block',
'bluetooth',
'bluetooth_audio',
'bluetooth_connected',
'bluetooth_disabled',
'bluetooth_searching',
'blur_circular',
'blur_linear',
'blur_off',
'blur_on',
'book',
'bookmark',
'bookmark_border',
'border_all',
'border_bottom',
'border_clear',
'border_color',
'border_horizontal',
'border_inner',
'border_left',
'border_outer',
'border_right',
'border_style',
'border_top',
'border_vertical',
'branding_watermark',
'brightness_1',
'brightness_2',
'brightness_3',
'brightness_4',
'brightness_5',
'brightness_6',
'brightness_7',
'brightness_auto',
'brightness_high',
'brightness_low',
'brightness_medium',
'broken_image',
'brush',
'bubble_chart',
'bug_report',
'build',
'burst_mode',
'business',
'business_center',
'cached',
'cake',
'call',
'call_end',
'call_made',
'call_merge',
'call_missed',
'call_missed_outgoing',
'call_received',
'call_split',
'call_to_action',
'camera',
'camera_alt',
'camera_enhance',
'camera_front',
'camera_rear',
'camera_roll',
'cancel',
'card_giftcard',
'card_membership',
'card_travel',
'casino',
'cast',
'cast_connected',
'center_focus_strong',
'center_focus_weak',
'change_history',
'chat',
'chat_bubble',
'chat_bubble_outline',
'check',
'check_box',
'check_box_outline_blank',
'check_circle',
'chevron_left',
'chevron_right',
'child_care',
'child_friendly',
'chrome_reader_mode',
'class',
'clear',
'clear_all',
'close',
'closed_caption',
'cloud',
'cloud_circle',
'cloud_done',
'cloud_download',
'cloud_off',
'cloud_queue',
'cloud_upload',
'code',
'collections',
'collections_bookmark',
'color_lens',
'colorize',
'comment',
'compare',
'compare_arrows',
'computer',
'confirmation_number',
'contact_mail',
'contact_phone',
'contacts',
'content_copy',
'content_cut',
'content_paste',
'control_point',
'control_point_duplicate',
'copyright',
'create',
'create_new_folder',
'credit_card',
'crop',
'crop_16_9',
'crop_3_2',
'crop_5_4',
'crop_7_5',
'crop_din',
'crop_free',
'crop_landscape',
'crop_original',
'crop_portrait',
'crop_rotate',
'crop_square',
'dashboard',
'data_usage',
'date_range',
'dehaze',
'delete',
'delete_forever',
'delete_sweep',
'description',
'desktop_mac',
'desktop_windows',
'details',
'developer_board',
'developer_mode',
'device_hub',
'devices',
'devices_other',
'dialer_sip',
'dialpad',
'directions',
'directions_bike',
'directions_boat',
'directions_bus',
'directions_car',
'directions_railway',
'directions_run',
'directions_subway',
'directions_transit',
'directions_walk',
'disc_full',
'dns',
'do_not_disturb',
'do_not_disturb_alt',
'do_not_disturb_off',
'do_not_disturb_on',
'dock',
'domain',
'done',
'done_all',
'donut_large',
'donut_small',
'drafts',
'drag_handle',
'drive_eta',
'dvr',
'edit',
'edit_location',
'eject',
'email',
'enhanced_encryption',
'equalizer',
'error',
'error_outline',
'euro_symbol',
'ev_station',
'event',
'event_available',
'event_busy',
'event_note',
'event_seat',
'exit_to_app',
'expand_less',
'expand_more',
'explicit',
'explore',
'exposure',
'exposure_neg_1',
'exposure_neg_2',
'exposure_plus_1',
'exposure_plus_2',
'exposure_zero',
'extension',
'face',
'fast_forward',
'fast_rewind',
'favorite',
'favorite_border',
'featured_play_list',
'featured_video',
'feedback',
'fiber_dvr',
'fiber_manual_record',
'fiber_new',
'fiber_pin',
'fiber_smart_record',
'file_download',
'file_upload',
'filter',
'filter_1',
'filter_2',
'filter_3',
'filter_4',
'filter_5',
'filter_6',
'filter_7',
'filter_8',
'filter_9',
'filter_9_plus',
'filter_b_and_w',
'filter_center_focus',
'filter_drama',
'filter_frames',
'filter_hdr',
'filter_list',
'filter_none',
'filter_tilt_shift',
'filter_vintage',
'find_in_page',
'find_replace',
'fingerprint',
'first_page',
'fitness_center',
'flag',
'flare',
'flash_auto',
'flash_off',
'flash_on',
'flight',
'flight_land',
'flight_takeoff',
'flip',
'flip_to_back',
'flip_to_front',
'folder',
'folder_open',
'folder_shared',
'folder_special',
'font_download',
'format_align_center',
'format_align_justify',
'format_align_left',
'format_align_right',
'format_bold',
'format_clear',
'format_color_fill',
'format_color_reset',
'format_color_text',
'format_indent_decrease',
'format_indent_increase',
'format_italic',
'format_line_spacing',
'format_list_bulleted',
'format_list_numbered',
'format_paint',
'format_quote',
'format_shapes',
'format_size',
'format_strikethrough',
'format_textdirection_l_to_r',
'format_textdirection_r_to_l',
'format_underlined',
'forum',
'forward',
'forward_10',
'forward_30',
'forward_5',
'free_breakfast',
'fullscreen',
'fullscreen_exit',
'functions',
'g_translate',
'gamepad',
'games',
'gavel',
'gesture',
'get_app',
'gif',
'golf_course',
'gps_fixed',
'gps_not_fixed',
'gps_off',
'grade',
'gradient',
'grain',
'graphic_eq',
'grid_off',
'grid_on',
'group',
'group_add',
'group_work',
'hd',
'hdr_off',
'hdr_on',
'hdr_strong',
'hdr_weak',
'headset',
'headset_mic',
'healing',
'hearing',
'help',
'help_outline',
'high_quality',
'highlight',
'highlight_off',
'history',
'home',
'hot_tub',
'hotel',
'hourglass_empty',
'hourglass_full',
'http',
'https',
'image',
'image_aspect_ratio',
'import_contacts',
'import_export',
'important_devices',
'inbox',
'indeterminate_check_box',
'info',
'info_outline',
'input',
'insert_chart',
'insert_comment',
'insert_drive_file',
'insert_emoticon',
'insert_invitation',
'insert_link',
'insert_photo',
'invert_colors',
'invert_colors_off',
'iso',
'keyboard',
'keyboard_arrow_down',
'keyboard_arrow_left',
'keyboard_arrow_right',
'keyboard_arrow_up',
'keyboard_backspace',
'keyboard_capslock',
'keyboard_hide',
'keyboard_return',
'keyboard_tab',
'keyboard_voice',
'kitchen',
'label',
'label_outline',
'landscape',
'language',
'laptop',
'laptop_chromebook',
'laptop_mac',
'laptop_windows',
'last_page',
'launch',
'layers',
'layers_clear',
'leak_add',
'leak_remove',
'lens',
'library_add',
'library_books',
'library_music',
'lightbulb_outline',
'line_style',
'line_weight',
'linear_scale',
'link',
'linked_camera',
'list',
'live_help',
'live_tv',
'local_activity',
'local_airport',
'local_atm',
'local_bar',
'local_cafe',
'local_car_wash',
'local_convenience_store',
'local_dining',
'local_drink',
'local_florist',
'local_gas_station',
'local_grocery_store',
'local_hospital',
'local_hotel',
'local_laundry_service',
'local_library',
'local_mall',
'local_movies',
'local_offer',
'local_parking',
'local_pharmacy',
'local_phone',
'local_pizza',
'local_play',
'local_post_office',
'local_printshop',
'local_see',
'local_shipping',
'local_taxi',
'location_city',
'location_disabled',
'location_off',
'location_on',
'location_searching',
'lock',
'lock_open',
'lock_outline',
'looks',
'looks_3',
'looks_4',
'looks_5',
'looks_6',
'looks_one',
'looks_two',
'loop',
'loupe',
'low_priority',
'loyalty',
'mail',
'mail_outline',
'map',
'markunread',
'markunread_mailbox',
'memory',
'menu',
'merge_type',
'message',
'mic',
'mic_none',
'mic_off',
'mms',
'mode_comment',
'mode_edit',
'monetization_on',
'money_off',
'monochrome_photos',
'mood',
'mood_bad',
'more',
'more_horiz',
'more_vert',
'motorcycle',
'mouse',
'move_to_inbox',
'movie',
'movie_creation',
'movie_filter',
'multiline_chart',
'music_note',
'music_video',
'my_location',
'nature',
'nature_people',
'navigate_before',
'navigate_next',
'navigation',
'near_me',
'network_cell',
'network_check',
'network_locked',
'network_wifi',
'new_releases',
'next_week',
'nfc',
'no_encryption',
'no_sim',
'not_interested',
'note',
'note_add',
'notifications',
'notifications_active',
'notifications_none',
'notifications_off',
'notifications_paused',
'offline_pin',
'ondemand_video',
'opacity',
'open_in_browser',
'open_in_new',
'open_with',
'pages',
'pageview',
'palette',
'pan_tool',
'panorama',
'panorama_fish_eye',
'panorama_horizontal',
'panorama_vertical',
'panorama_wide_angle',
'party_mode',
'pause',
'pause_circle_filled',
'pause_circle_outline',
'payment',
'people',
'people_outline',
'perm_camera_mic',
'perm_contact_calendar',
'perm_data_setting',
'perm_device_information',
'perm_identity',
'perm_media',
'perm_phone_msg',
'perm_scan_wifi',
'person',
'person_add',
'person_outline',
'person_pin',
'person_pin_circle',
'personal_video',
'pets',
'phone',
'phone_android',
'phone_bluetooth_speaker',
'phone_forwarded',
'phone_in_talk',
'phone_iphone',
'phone_locked',
'phone_missed',
'phone_paused',
'phonelink',
'phonelink_erase',
'phonelink_lock',
'phonelink_off',
'phonelink_ring',
'phonelink_setup',
'photo',
'photo_album',
'photo_camera',
'photo_filter',
'photo_library',
'photo_size_select_actual',
'photo_size_select_large',
'photo_size_select_small',
'picture_as_pdf',
'picture_in_picture',
'picture_in_picture_alt',
'pie_chart',
'pie_chart_outlined',
'pin_drop',
'place',
'play_arrow',
'play_circle_filled',
'play_circle_outline',
'play_for_work',
'playlist_add',
'playlist_add_check',
'playlist_play',
'plus_one',
'poll',
'polymer',
'pool',
'portable_wifi_off',
'portrait',
'power',
'power_input',
'power_settings_new',
'pregnant_woman',
'present_to_all',
'print',
'priority_high',
'public',
'publish',
'query_builder',
'question_answer',
'queue',
'queue_music',
'queue_play_next',
'radio',
'radio_button_checked',
'radio_button_unchecked',
'rate_review',
'receipt',
'recent_actors',
'record_voice_over',
'redeem',
'redo',
'refresh',
'remove',
'remove_circle',
'remove_circle_outline',
'remove_from_queue',
'remove_red_eye',
'remove_shopping_cart',
'reorder',
'repeat',
'repeat_one',
'replay',
'replay_10',
'replay_30',
'replay_5',
'reply',
'reply_all',
'report',
'report_problem',
'restaurant',
'restaurant_menu',
'restore',
'restore_page',
'ring_volume',
'room',
'room_service',
'rotate_90_degrees_ccw',
'rotate_left',
'rotate_right',
'rounded_corner',
'router',
'rowing',
'rss_feed',
'rv_hookup',
'satellite',
'save',
'scanner',
'schedule',
'school',
'screen_lock_landscape',
'screen_lock_portrait',
'screen_lock_rotation',
'screen_rotation',
'screen_share',
'sd_card',
'sd_storage',
'search',
'security',
'select_all',
'send',
'sentiment_dissatisfied',
'sentiment_neutral',
'sentiment_satisfied',
'sentiment_very_dissatisfied',
'sentiment_very_satisfied',
'settings',
'settings_applications',
'settings_backup_restore',
'settings_bluetooth',
'settings_brightness',
'settings_cell',
'settings_ethernet',
'settings_input_antenna',
'settings_input_component',
'settings_input_composite',
'settings_input_hdmi',
'settings_input_svideo',
'settings_overscan',
'settings_phone',
'settings_power',
'settings_remote',
'settings_system_daydream',
'settings_voice',
'share',
'shop',
'shop_two',
'shopping_basket',
'shopping_cart',
'short_text',
'show_chart',
'shuffle',
'signal_cellular_4_bar',
'signal_cellular_connected_no_internet_4_bar',
'signal_cellular_no_sim',
'signal_cellular_null',
'signal_cellular_off',
'signal_wifi_4_bar',
'signal_wifi_4_bar_lock',
'signal_wifi_off',
'sim_card',
'sim_card_alert',
'skip_next',
'skip_previous',
'slideshow',
'slow_motion_video',
'smartphone',
'smoke_free',
'smoking_rooms',
'sms',
'sms_failed',
'snooze',
'sort',
'sort_by_alpha',
'spa',
'space_bar',
'speaker',
'speaker_group',
'speaker_notes',
'speaker_notes_off',
'speaker_phone',
'spellcheck',
'star',
'star_border',
'star_half',
'stars',
'stay_current_landscape',
'stay_current_portrait',
'stay_primary_landscape',
'stay_primary_portrait',
'stop',
'stop_screen_share',
'storage',
'store',
'store_mall_directory',
'straighten',
'streetview',
'strikethrough_s',
'style',
'subdirectory_arrow_left',
'subdirectory_arrow_right',
'subject',
'subscriptions',
'subtitles',
'subway',
'supervisor_account',
'surround_sound',
'swap_calls',
'swap_horiz',
'swap_vert',
'swap_vertical_circle',
'switch_camera',
'switch_video',
'sync',
'sync_disabled',
'sync_problem',
'system_update',
'system_update_alt',
'tab',
'tab_unselected',
'tablet',
'tablet_android',
'tablet_mac',
'tag_faces',
'tap_and_play',
'terrain',
'text_fields',
'text_format',
'textsms',
'texture',
'theaters',
'thumb_down',
'thumb_up',
'thumbs_up_down',
'time_to_leave',
'timelapse',
'timeline',
'timer',
'timer_10',
'timer_3',
'timer_off',
'title',
'toc',
'today',
'toll',
'tonality',
'touch_app',
'toys',
'track_changes',
'traffic',
'train',
'tram',
'transfer_within_a_station',
'transform',
'translate',
'trending_down',
'trending_flat',
'trending_up',
'tune',
'turned_in',
'turned_in_not',
'tv',
'unarchive',
'undo',
'unfold_less',
'unfold_more',
'update',
'usb',
'verified_user',
'vertical_align_bottom',
'vertical_align_center',
'vertical_align_top',
'vibration',
'video_call',
'video_label',
'video_library',
'videocam',
'videocam_off',
'videogame_asset',
'view_agenda',
'view_array',
'view_carousel',
'view_column',
'view_comfy',
'view_compact',
'view_day',
'view_headline',
'view_list',
'view_module',
'view_quilt',
'view_stream',
'view_week',
'vignette',
'visibility',
'visibility_off',
'voice_chat',
'voicemail',
'volume_down',
'volume_mute',
'volume_off',
'volume_up',
'vpn_key',
'vpn_lock',
'wallpaper',
'warning',
'watch',
'watch_later',
'wb_auto',
'wb_cloudy',
'wb_incandescent',
'wb_iridescent',
'wb_sunny',
'wc',
'web',
'web_asset',
'weekend',
'whatshot',
'widgets',
'wifi',
'wifi_lock',
'wifi_tethering',
'work',
'wrap_text',
'youtube_searched_for',
'zoom_in',
'zoom_out',
'zoom_out_map'
];
}

View File

@@ -1,59 +0,0 @@
export class InvoiceFakeDb
{
public static invoice = {
'from' : {
'title' : 'Fuse Inc.',
'address': '2810 Country Club Road Cranford, NJ 07016',
'phone' : '+66 123 455 87',
'email' : 'hello@fuseinc.com',
'website': 'www.fuseinc.com'
},
'client' : {
'title' : 'John Doe',
'address': '9301 Wood Street Philadelphia, PA 19111',
'phone' : '+55 552 455 87',
'email' : 'johndoe@mail.com'
},
'number' : 'P9-0004',
'date' : 'Jul 19, 2015',
'dueDate' : 'Aug 24, 2015',
'services': [
{
'title' : 'Prototype & Design',
'detail' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus accumsan, quam sed eleifend imperdiet.',
'unit' : 'Hour',
'unitPrice': '12.00',
'quantity' : '240',
'total' : '2880'
},
{
'title' : 'Coding',
'detail' : 'Vestibulum ligula sem, rutrum et libero id, porta vehicula metus. Cras dapibus neque sit amet laoreet vestibulum.',
'unit' : 'Hour',
'unitPrice': '10.50',
'quantity' : '350',
'total' : '3675'
},
{
'title' : 'Testing',
'detail' : 'Pellentesque luctus efficitur neque in finibus. Integer ut nunc in augue maximus porttitor id id nulla. In vitae erat.',
'unit' : 'Hour',
'unitPrice': '4.00',
'quantity' : '50',
'total' : '200'
},
{
'title' : 'Documentation & Training',
'detail' : 'Pellentesque luctus efficitur neque in finibus. Integer ut nunc in augue maximus porttitor id id nulla. In vitae erat.',
'unit' : 'Hour',
'unitPrice': '6.50',
'quantity' : '260',
'total' : '1690'
}
],
'subtotal': '8445',
'tax' : '675.60',
'discount': '120.60',
'total' : '9000'
};
}

View File

@@ -1,113 +0,0 @@
export class KnowledgeBaseFakeDb
{
public static data = [
{
'title' : 'Your Account',
'path' : '/pages/knowledge-base',
'articlesCount' : 17,
'featuredArticles': [
{
'title' : 'Account limits',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How do I change my username?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How do I change my password?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How do I change my email address?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How do I close my account?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
}
]
},
{
'title' : 'Selling',
'path' : '/pages/knowledge-base',
'articlesCount' : 12,
'featuredArticles': [
{
'title' : 'A guide to the upload process',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Author collaboration',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Exclusivity policy',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Promises you make as an author',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'An authors introduction',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
}
]
},
{
'title' : 'Buying',
'path' : '/pages/knowledge-base',
'articlesCount' : 19,
'featuredArticles': [
{
'title' : 'Where is my purchase code?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Can I get a refund?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Contact us',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How do I purchase an item?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'I\'m trying to find a specific item',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
}
]
},
{
'title' : 'Item Support',
'path' : '/pages/knowledge-base',
'articlesCount' : 24,
'featuredArticles': [
{
'title' : 'What is Item Support?',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'How to contact an author',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Rating or review removal policy',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Purchasing unsupported items',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
},
{
'title' : 'Item installation guide',
'content': '<p><b>The standard Lorem Ipsum passage, used since the 1500s</b></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</p>\n<p><b>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</b></p>\n<p>Sed ut perspiciatis unde omnis iste natus error sit\n voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et\n quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit\n aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est,\n qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt\n ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam\n corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui\n in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla\n pariatur?\n</p>\n<p><b>1914 translation by H. Rackham</b></p>\n<p>\n But I must explain to you how all this mistaken idea of denouncing pleasure\n and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of\n the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure\n itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter\n consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of\n itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some\n great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain\n some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no\n annoying consequences, or one who avoids a pain that produces no resultant pleasure?\n</p>\n'
}
]
}
];
}

View File

@@ -1,483 +0,0 @@
export class MailFakeDb
{
public static mails = [
{
'id' : '15459251a6d6b397565',
'from' : {
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg',
'email' : 'alicefreeman@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '28 Jun',
'read' : false,
'starred' : false,
'important' : true,
'hasAttachments': true,
'attachments' : [
{
'type' : 'image',
'fileName': 'flowers',
'preview' : 'assets/images/etc/flowers-thumb.jpg',
'url' : '',
'size' : '1.1Mb'
},
{
'type' : 'image',
'fileName': 'snow',
'preview' : 'assets/images/etc/snow-thumb.jpg',
'url' : '',
'size' : '380kb'
},
{
'type' : 'image',
'fileName': 'sunrise',
'preview' : 'assets/images/etc/sunrise-thumb.jpg',
'url' : 'assets/images/etc/early-sunrise.jpg',
'size' : '17Mb'
}
],
'labels' : [
1
],
'folder' : 0
},
{
'id' : '154588a0864d2881124',
'from' : {
'name' : 'Lawrence Collins',
'avatar': 'assets/images/avatars/vincent.jpg',
'email' : 'lawrencecollins@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '28 Jun',
'read' : false,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '15453ba60d3baa5daaf',
'from' : {
'name' : 'Judith Burton',
'avatar': 'assets/images/avatars/joyce.jpg',
'email' : 'judithburton@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '28 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [
3,
2
],
'folder' : 0
},
{
'id' : '15453a06c08fb021776',
'from' : {
'name' : 'Danielle Obrien',
'avatar': 'assets/images/avatars/danielle.jpg',
'email' : 'danielleobrien@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '28 Jun',
'read' : true,
'starred' : true,
'important' : false,
'hasAttachments': false,
'labels' : [
1,
3
],
'folder' : 0
},
{
'id' : '154537435d5b32bf11a',
'from' : {
'name' : 'Brian Flores',
'avatar': '',
'email' : 'brianflores@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '26 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '1544e43dcdae6ebf876',
'from' : {
'name' : 'Charles Kim',
'avatar': 'assets/images/avatars/garry.jpg',
'email' : 'charleskim@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '18 Jun',
'read' : true,
'starred' : false,
'important' : true,
'hasAttachments': false,
'labels' : [
2
],
'folder' : 0
},
{
'id' : '1543ee3a5b43e0f9f45',
'from' : {
'name' : 'Patricia White',
'avatar': '',
'email' : 'patriciawhite@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '15 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '1543cc4515df3146112',
'from' : {
'name' : 'Juan Carpenter',
'avatar': 'assets/images/avatars/james.jpg',
'email' : 'juancarpenter@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '11 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '154398a4770d7aaf9a2',
'from' : {
'name' : 'Maria Gilbert',
'avatar': 'assets/images/avatars/danielle.jpg',
'email' : 'mariagilbert@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '5 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '15438351f87dcd68567',
'from' : {
'name' : 'Tammy Brooks',
'avatar': '',
'email' : 'tammybrooks@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p>',
'time' : '1 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '1542d75d929a603125',
'from' : {
'name' : 'Kathy Price',
'avatar': '',
'email' : 'kathyprice@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '1 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '1541ca7af66da284177',
'from' : {
'name' : 'Alan Coleman',
'avatar': '',
'email' : 'alancoleman@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '28 June',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '154297167e781781745',
'from' : {
'name' : 'Thomas Silva',
'avatar': '',
'email' : 'thomassilva@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '16 Jun',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 0
},
{
'id' : '15427f4c1b7f3953234',
'from' : {
'name' : 'Jessica Robertson',
'avatar': '',
'email' : 'jessicarobertson@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '19 May',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 3
},
{
'id' : '154204e45a59b168453',
'from' : {
'name' : 'John Palmer',
'avatar': '',
'email' : 'johnpalmer@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '8 May',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 3
},
{
'id' : '1541dd1e05dfc439216',
'from' : {
'name' : 'David Butler',
'avatar': '',
'email' : 'davidbutler@creapond.com'
},
'to' : [
{
'name' : 'me',
'email': 'johndoe@creapond.com'
}
],
'subject' : 'Commits that need to be pushed lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'message' : '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce lorem diam, pulvinar id nisl non, ultrices maximus nibh. Suspendisse ut justo velit. Nullam ac ultrices risus, quis auctor orci. Vestibulum volutpat nisi et neque porta ullamcorper. Maecenas porttitor porta erat ac suscipit. Sed cursus leo ut elementum fringilla. Maecenas semper viverra erat, vel ullamcorper dui efficitur in. Vestibulum placerat imperdiet tellus, et tincidunt eros posuere eget. Proin sit amet facilisis libero. Nulla eget est ut erat aliquet rhoncus. Quisque ac urna vitae dui hendrerit sollicitudin vel id sem. </p><p> In eget ante sapien. Quisque consequat velit non ante finibus, vel placerat erat ultricies. Aliquam bibendum justo erat, ultrices vehicula dolor elementum a. Mauris eu nisl feugiat ligula molestie eleifend. Aliquam efficitur venenatis velit ac porta. Vivamus vitae pulvinar tellus. Donec odio enim, auctor eget nibh mattis, ultricies dignissim lacus. Phasellus non tincidunt dui. Nulla eu arcu lorem. </p><p> Donec non hendrerit augue, lobortis sollicitudin odio. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis sit amet euismod enim, eget vestibulum justo. Fusce a placerat lectus, eget feugiat purus. Cras risus ante, faucibus eget justo commodo, volutpat tempor ante. Donec sit amet leo venenatis, gravida quam sit amet, blandit dui. In quam ante, elementum ut faucibus nec, tristique vitae dui. Praesent vel erat at enim placerat luctus vel ut ipsum. In congue tempor mi, non ornare lectus condimentum at. Aenean libero diam, finibus eget sapien et, tristique fermentum lorem. </p> ',
'time' : '7 May',
'read' : true,
'starred' : false,
'important' : false,
'hasAttachments': false,
'labels' : [],
'folder' : 3
}
];
public static folders = [
{
'id' : 0,
'handle': 'inbox',
'title' : 'Inbox',
'icon' : 'inbox'
},
{
'id' : 1,
'handle': 'sent',
'title' : 'Sent',
'icon' : 'send'
},
{
'id' : 2,
'handle': 'drafts',
'title' : 'Drafts',
'icon' : 'email_open'
},
{
'id' : 3,
'handle': 'spam',
'title' : 'Spam',
'icon' : 'error'
},
{
'id' : 4,
'handle': 'trash',
'title' : 'Trash',
'icon' : 'delete'
}
];
public static filters = [
{
'id' : 0,
'handle': 'starred',
'title' : 'Starred',
'icon' : 'star',
'color' : 'amber-fg'
},
{
'id' : 1,
'handle': 'important',
'title' : 'Important',
'icon' : 'label',
'color' : 'red-fg'
}
];
public static labels = [
{
'id' : 0,
'handle': 'note',
'title' : 'Note',
'color' : '#7cb342'
},
{
'id' : 1,
'handle': 'paypal',
'title' : 'Paypal',
'color' : '#d84315'
},
{
'id' : 2,
'handle': 'invoice',
'title' : 'Invoice',
'color' : '#607d8b'
},
{
'id' : 3,
'handle': 'amazon',
'title' : 'Amazon',
'color' : '#03a9f4'
}
];
}

View File

@@ -1,360 +0,0 @@
export class ProfileFakeDb
{
public static timeline = {
activities: [
{
'user' : {
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
'message': 'started following you.',
'time' : '13 mins. ago'
},
{
'user' : {
'name' : 'Andrew Green',
'avatar': 'assets/images/avatars/andrew.jpg'
},
'message': 'sent you a message.',
'time' : 'June 10,2015'
},
{
'user' : {
'name' : 'Garry Newman',
'avatar': 'assets/images/avatars/garry.jpg'
},
'message': 'shared a public post with your group.',
'time' : 'June 9,2015'
},
{
'user' : {
'name' : 'Carl Henderson',
'avatar': 'assets/images/avatars/carl.jpg'
},
'message': 'wants to play Fallout Shelter with you.',
'time' : 'June 8,2015'
},
{
'user' : {
'name' : 'Jane Dean',
'avatar': 'assets/images/avatars/jane.jpg'
},
'message': 'started following you.',
'time' : 'June 7,2015'
},
{
'user' : {
'name' : 'Juan Carpenter',
'avatar': 'assets/images/avatars/james.jpg'
},
'message': 'sent you a message.',
'time' : 'June 6,2015'
},
{
'user' : {
'name' : 'Judith Burton',
'avatar': 'assets/images/avatars/joyce.jpg'
},
'message': 'shared a photo with you.',
'time' : 'June 5,2015'
},
{
'user' : {
'name' : 'Vincent Munoz',
'avatar': 'assets/images/avatars/vincent.jpg'
},
'message': 'shared a photo with you.',
'time' : 'June 4,2015'
}
],
posts : [
{
'user' : {
'name' : 'Garry Newman',
'avatar': 'assets/images/avatars/garry.jpg'
},
'message' : 'Remember the place we were talking about the other night? Found it!',
'time' : '32 minutes ago',
'type' : 'post',
'like' : 5,
'share' : 21,
'media' : {
'type' : 'image',
'preview': 'assets/images/etc/early-sunrise.jpg'
},
'comments': [
{
'user' : {
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
'time' : 'June 10, 2015',
'message': 'Thats a wonderful place. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat.'
}
]
},
{
'user' : {
'name' : 'Andrew Green',
'avatar': 'assets/images/avatars/andrew.jpg'
},
'message' : 'Hey, man! Check this, its pretty awesome!',
'time' : 'June 12, 2015',
'type' : 'article',
'like' : 98,
'share' : 6,
'article' : {
'title' : 'The Fallout 4 Pip-Boy Edition Is Back In Stock Now',
'subtitle': 'Kotaku',
'excerpt' : 'The Fallout 4 Pip-Boy edition is back in stock at Gamestop, for all 3 platforms. Additionally, Walmart also has it in stock for the PS4 and Xbox One as of this writing, as does Best Buy.',
'media' : {
'type' : 'image',
'preview': 'assets/images/etc/fallout.jpg'
}
},
'comments': [
{
'user' : {
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
'time' : 'June 10, 2015',
'message': 'Thats a wonderful place. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat.'
}
]
},
{
'user' : {
'name' : 'Carl Henderson',
'avatar': 'assets/images/avatars/carl.jpg'
},
'message': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat. Aenean lorem ex, ultrices sit amet ligula sed...',
'time' : 'June 10, 2015',
'type' : 'something',
'like' : 4,
'share' : 1
}
]
};
public static photosVideos = [
{
'name' : 'June 2015',
'info' : '5 Photos',
'media': [
{
'type' : 'photo',
'title' : 'Mountain Sunset',
'preview': 'assets/images/etc/mountain-sunset.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Lake',
'preview': 'assets/images/etc/mountain-lake.jpg'
},
{
'type' : 'photo',
'title' : 'Hot air balloons',
'preview': 'assets/images/etc/air-balloons.jpg'
},
{
'type' : 'photo',
'title' : 'Cactus',
'preview': 'assets/images/etc/cactus.jpg'
},
{
'type' : 'photo',
'title' : 'Road Trip',
'preview': 'assets/images/etc/road-trip.jpg'
}
]
},
{
'name' : 'May 2015',
'info' : '7 Photos, 3 Videos',
'media': [
{
'type' : 'photo',
'title' : 'Mountain Sunset',
'preview': 'assets/images/etc/mountain-sunset.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Lake',
'preview': 'assets/images/etc/mountain-lake.jpg'
},
{
'type' : 'photo',
'title' : 'Hot air balloons',
'preview': 'assets/images/etc/air-balloons.jpg'
},
{
'type' : 'photo',
'title' : 'Cactus',
'preview': 'assets/images/etc/cactus.jpg'
},
{
'type' : 'photo',
'title' : 'Road Trip',
'preview': 'assets/images/etc/road-trip.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Sunset',
'preview': 'assets/images/etc/mountain-sunset.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Lake',
'preview': 'assets/images/etc/mountain-lake.jpg'
},
{
'type' : 'photo',
'title' : 'Hot air balloons',
'preview': 'assets/images/etc/air-balloons.jpg'
},
{
'type' : 'photo',
'title' : 'Cactus',
'preview': 'assets/images/etc/cactus.jpg'
},
{
'type' : 'photo',
'title' : 'Road Trip',
'preview': 'assets/images/etc/road-trip.jpg'
}
]
},
{
'name' : 'April 2015',
'info' : '5 Photos',
'media': [
{
'type' : 'photo',
'title' : 'Mountain Sunset',
'preview': 'assets/images/etc/mountain-sunset.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Lake',
'preview': 'assets/images/etc/mountain-lake.jpg'
},
{
'type' : 'photo',
'title' : 'Hot air balloons',
'preview': 'assets/images/etc/air-balloons.jpg'
},
{
'type' : 'photo',
'title' : 'Cactus',
'preview': 'assets/images/etc/cactus.jpg'
},
{
'type' : 'photo',
'title' : 'Road Trip',
'preview': 'assets/images/etc/road-trip.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Sunset',
'preview': 'assets/images/etc/mountain-sunset.jpg'
},
{
'type' : 'photo',
'title' : 'Mountain Lake',
'preview': 'assets/images/etc/mountain-lake.jpg'
}
]
}
];
public static about = {
'general': {
'gender' : 'Female',
'birthday' : 'May 8th, 1988',
'locations': [
'Istanbul, Turkey',
'New York, USA'
],
'about' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis eget pharetra felis, sed ullamcorper dui. Sed et elementum neque. Vestibulum pellente viverra ultrices. Etiam justo augue, vehicula ac gravida a, interdum sit amet nisl. Integer vitae nisi id nibh dictum mollis in vitae tortor.'
},
'work' : {
'occupation': 'Developer',
'skills' : 'C#, PHP, Javascript, Angular, JS, HTML, CSS',
'jobs' : [
{
'company': 'Self-Employed',
'date' : '2010 - Now'
},
{
'company': 'Google',
'date' : '2008 - 2010'
}
]
},
'contact': {
'address' : 'Ut pharetra luctus est quis sodales. Duis nisi tortor, bibendum eget tincidunt, aliquam ac elit. Mauris nec euismod odio.',
'tel' : [
'+6 555 6600',
'+9 555 5255'
],
'websites': [
'withinpixels.com'
],
'emails' : [
'mail@withinpixels.com',
'mail@creapond.com'
]
},
'groups' : [
{
'logo' : 'assets/images/logos/android.png',
'name' : 'Android',
'category': 'Technology',
'members' : '1.856.546'
},
{
'logo' : 'assets/images/logos/google.png',
'name' : 'Google',
'category': 'Web',
'members' : '1.226.121'
},
{
'logo' : 'assets/images/logos/fallout.png',
'name' : 'Fallout',
'category': 'Games',
'members' : '526.142'
}
],
'friends': [
{
'name' : 'Garry Newman',
'avatar': 'assets/images/avatars/garry.jpg'
},
{
'name' : 'Carl Henderson',
'avatar': 'assets/images/avatars/carl.jpg'
},
{
'name' : 'Jane Dean',
'avatar': 'assets/images/avatars/jane.jpg'
},
{
'name' : 'Garry Arnold',
'avatar': 'assets/images/avatars/garry.jpg'
},
{
'name' : 'Vincent Munoz',
'avatar': 'assets/images/avatars/vincent.jpg'
},
{
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
{
'name' : 'Andrew Green',
'avatar': 'assets/images/avatars/andrew.jpg'
}
]
};
}

View File

@@ -1,32 +0,0 @@
export class QuickPanelFakeDb
{
public static notes = [
{
'title' : 'Best songs to listen while working',
'detail': 'Last edit: May 8th, 2015'
},
{
'title' : 'Useful subreddits',
'detail': 'Last edit: January 12th, 2015'
}
];
public static events = [
{
'title' : 'Group Meeting',
'detail': 'In 32 Minutes, Room 1B'
},
{
'title' : 'Public Beta Release',
'detail': '11:00 PM'
},
{
'title' : 'Dinner with David',
'detail': '17:30 PM'
},
{
'title' : 'Q&A Session',
'detail': '20:30 PM'
}
];
}

View File

@@ -1,787 +0,0 @@
export class ScrumboardFakeDb
{
public static boards = [
{
'id' : '32gfhaf2',
'name' : 'ACME Frontend Application',
'uri' : 'acme-frontend-application',
'settings': {
'color' : 'fuse-dark',
'subscribed' : false,
'cardCoverImages': true
},
'lists' : [
{
'id' : '56027cf5a2ca3839a5d36103',
'name' : 'Design',
'idCards': [
'5603a2a3cab0c8300f6096b3',
'44d1.2b51ea6cc2b5d.21f4a3412e857.8ffa2d8b44ad9.ac87215ed53a1.67d4921ad8f8d.9f318bcb2'
]
},
{
'id' : '56127cf2a2ca3539g7d36103',
'name' : 'Development',
'idCards': [
'2837273da9b93dd84243s0f9',
'5787b7e4740c57bf0dffd5b6',
'5637273da9b93bb84743a0f9',
'7987.9740ba532b0d4.f9d12243f7362.507c0738dc561.87fba0a03df6e.75e6508cacf10.7a9835b54'
]
},
{
'id' : 'faf244627326f1249525763d',
'name' : 'Upcoming Features',
'idCards': [
'd9005a4b89ed2aadca48a6ad',
'f6b9d7a9247e5d794a081927',
'80ed.24ad3b18e2668.f28fbbceeeff9.5a834620a42f1.5909be19a2bf2.6c4a54947ce2d.da356b0c1',
'0ad2.7862f947bc456.f42b446df54cb.d1dd9e93601a1.9deb1406d1404.0b3c278fc7001.733341b42',
'bad3.51be8ad33acaf.9540ecb37f7e8.6bee596cfe7d3.44c68bee289c4.b96ed0b9f0af7.e14846035'
]
},
{
'id' : 'ad7d.9fffac5dff412.c83bca6853767.8fd7549b2b1ca.ceda8a01774c4.a5cf3976e87e4.ce79eeeea',
'name' : 'Known Bugs',
'idCards': [
'acc6.9c673cd2f5e35.521e91d8d5991.4b2a95e0539d1.027930c0743c5.7ad1ea7bea476.e8fbe6347',
'3279.3d69b40cc0b75.690252b6bea08.1e1789b0b7c2e.2f264b8661ce2.84d5f56910e23.429be5e8a',
'ba01.8e1a43f92a03a.0022bd5cbb9ba.275c64d911d8c.880e0846a3966.f75ff43e53ad.48ad612e7'
]
}
],
'cards' : [
{
'id' : '2837273da9b93dd84243s0f9',
'name' : 'Update generators',
'description' : 'Current generator doesn\'t support Node.js 6 and above.',
'idAttachmentCover': '',
'idMembers' : [
'26027s1930450d8bf7b10828'
],
'idLabels' : [
'26022e4129ad3a5sc28b36cd'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'AngularCLI could be a nice alternative.',
'time' : 'now'
}
],
'activities' : [],
'due' : null
},
{
'id' : '5603a2a3cab0c8300f6096b3',
'name' : 'Change background colors',
'description' : '',
'idAttachmentCover': '67027cahbe3b52ecf2dc631c',
'idMembers' : [
'76027g1930450d8bf7b10958'
],
'idLabels' : [
'56027e4119ad3a5dc28b36cd',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [
{
'id' : '67027cahbe3b52ecf2dc631c',
'name': 'mail.jpg',
'src' : 'assets/images/scrumboard/mail.jpg',
'time': 'Added Nov 3 at 15:22AM',
'type': 'image'
},
{
'id' : '56027cfcbe1b72ecf1fc452a',
'name': 'calendar.jpg',
'src' : 'assets/images/scrumboard/calendar.jpg',
'time': 'Added Nov 1 at 12:34PM',
'type': 'image'
}
],
'subscribed' : true,
'checklists' : [
{
'id' : '63021cfdbe1x72wcf1fc451v',
'name' : 'Checklist',
'checkItemsChecked': 1,
'checkItems' : [
{
'name' : 'Implement a calendar library',
'checked': false
},
{
'name' : 'Replace event colors with Material Design colors',
'checked': true
},
{
'name' : 'Replace icons with Material Design icons',
'checked': false
},
{
'name' : 'Use moment.js',
'checked': false
}
]
},
{
'name' : 'Checklist 2',
'id' : '74031cfdbe1x72wcz1dc166z',
'checkItemsChecked': 1,
'checkItems' : [
{
'name' : 'Replace event colors with Material Design colors',
'checked': true
},
{
'name' : 'Replace icons with Material Design icons',
'checked': false
},
{
'name' : 'Use moment.js',
'checked': false
}
]
}
],
'checkItems' : 7,
'checkItemsChecked': 2,
'comments' : [
{
'idMember': '56027c1930450d8bf7b10758',
'message' : 'We should be able to add moment.js without any problems',
'time' : '12 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'I added a link for a page that might help us deciding the colors',
'time' : '30 mins. ago'
}
],
'activities' : [
{
'idMember': '56027c1930450d8bf7b10758',
'message' : 'added a comment',
'time' : '12 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'added a comment',
'time' : '30 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'attached a link',
'time' : '45 mins. ago'
}
],
'due' : '2017-08-29T10:16:34.000Z'
},
{
'id' : '5637273da9b93bb84743a0f9',
'name' : 'Fix splash screen bugs',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'56027c1930450d8bf7b10758'
],
'idLabels' : [
'5640635e19ad3a5dc21416b2'
],
'attachments' : [],
'subscribed' : true,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : 'd9005a4b89ed2aadca48a6ad',
'name' : 'Add alternative authentication pages',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'36027j1930450d8bf7b10158'
],
'idLabels' : [
'6540635g19ad3s5dc31412b2',
'56027e4119ad3a5dc28b36cd'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [
{
'id' : 'dbfb.99bd0ad37dabc.e05046f0c824d.18f26bb524c96.78bebc8488634.240c0ee6a5e45.4cb872965',
'name' : 'Pages',
'checkItemsChecked': 2,
'checkItems' : [
{
'name' : 'Login',
'checked': true
},
{
'name' : 'Register',
'checked': true
},
{
'name' : 'Lost Password',
'checked': false
},
{
'name' : 'Recover Password',
'checked': false
},
{
'name' : 'Activate Account',
'checked': false
}
]
}
],
'checkItems' : 5,
'checkItemsChecked': 2,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : '5787b7e4740c57bf0dffd5b6',
'name' : 'Fix the console',
'description' : 'We need to fix the console asap!',
'idAttachmentCover': '',
'idMembers' : [],
'idLabels' : [
'26022e4129ad3a5sc28b36cd'
],
'attachments' : [],
'subscribed' : true,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'I\'m on it!',
'time' : 'now'
}
],
'activities' : [],
'due' : '2018-09-07T12:00:00.000Z'
},
{
'id' : 'f6b9d7a9247e5d794a081927',
'name' : 'New media player',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'76027g1930450d8bf7b10958',
'56027c1930450d8bf7b10758',
'26027s1930450d8bf7b10828'
],
'idLabels' : [
'5640635e19ad3a5dc21416b2',
'6540635g19ad3s5dc31412b2'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : 'acc6.9c673cd2f5e35.521e91d8d5991.4b2a95e0539d1.027930c0743c5.7ad1ea7bea476.e8fbe6347',
'name' : 'Memory Leak',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'36027j1930450d8bf7b10158'
],
'idLabels' : [
'26022e4129ad3a5sc28b36cd',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : '3279.3d69b40cc0b75.690252b6bea08.1e1789b0b7c2e.2f264b8661ce2.84d5f56910e23.429be5e8a',
'name' : 'Broken toolbar on profile page',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'26027s1930450d8bf7b10828'
],
'idLabels' : [
'26022e4129ad3a5sc28b36cd'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'This should be a medium priority bug, shouldn\'t it?',
'time' : 'now'
}
],
'activities' : [],
'due' : null
},
{
'id' : 'ba01.8e1a43f92a03a.0022bd5cbb9ba.275c64d911d8c.880e0846a3966.f75ff43e53ad.48ad612e7',
'name' : 'Button hover style',
'description' : 'If there are 3 or more buttons in certain page, weird flashing happens when you hover over the red ones.',
'idAttachmentCover': '',
'idMembers' : [
'26027s1930450d8bf7b10828'
],
'idLabels' : [
'26022e4129ad3a5sc28b36cd',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [],
'subscribed' : true,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : '2017-03-08T09:00:00.000Z'
},
{
'id' : '80ed.24ad3b18e2668.f28fbbceeeff9.5a834620a42f1.5909be19a2bf2.6c4a54947ce2d.da356b0c1',
'name' : 'New header designs',
'description' : '',
'idAttachmentCover': '12027cafbe3b52ecf2ef632c',
'idMembers' : [],
'idLabels' : [
'56027e4119ad3a5dc28b36cd',
'6540635g19ad3s5dc31412b2',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [
{
'id' : '12027cafbe3b52ecf2ef632c',
'name': 'header-.jpg',
'src' : 'assets/images/scrumboard/header-1.jpg',
'time': 'Added Nov 3 at 15:22AM',
'type': 'image'
},
{
'id' : '55027ced1e1a12ecf1fced2a',
'name': 'header-2.jpg',
'src' : 'assets/images/scrumboard/header-2.jpg',
'time': 'Added Nov 1 at 12:34PM',
'type': 'image'
}
],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'Currently we have two new designs ready to ship.',
'time' : 'now'
}
],
'activities' : [],
'due' : null
},
{
'id' : '0ad2.7862f947bc456.f42b446df54cb.d1dd9e93601a1.9deb1406d1404.0b3c278fc7001.733341b42',
'name' : 'Fixed footer',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [
'26027s1930450d8bf7b10828',
'56027c1930450d8bf7b10758'
],
'idLabels' : [
'6540635g19ad3s5dc31412b2'
],
'attachments' : [],
'subscribed' : true,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : 'bad3.51be8ad33acaf.9540ecb37f7e8.6bee596cfe7d3.44c68bee289c4.b96ed0b9f0af7.e14846035',
'name' : 'Collapsable navigation',
'description' : '',
'idAttachmentCover': '',
'idMembers' : [],
'idLabels' : [
'6540635g19ad3s5dc31412b2'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'I\'m not sure why we re-doing the navigation. The current collapsable navigation works flawlessly.',
'time' : 'now'
}
],
'activities' : [],
'due' : null
},
{
'id' : '44d1.2b51ea6cc2b5d.21f4a3412e857.8ffa2d8b44ad9.ac87215ed53a1.67d4921ad8f8d.9f318bcb2',
'name' : 'Mail app new layout',
'description' : 'Current layout has lots of flaws in mobile. Outlook view should help with that.',
'idAttachmentCover': '',
'idMembers' : [
'56027c1930450d8bf7b10758',
'26027s1930450d8bf7b10828',
'76027g1930450d8bf7b10958',
'36027j1930450d8bf7b10158'
],
'idLabels' : [
'56027e4119ad3a5dc28b36cd',
'26022e4129ad3a5sc28b36cd'
],
'attachments' : [],
'subscribed' : false,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
},
{
'id' : '7987.9740ba532b0d4.f9d12243f7362.507c0738dc561.87fba0a03df6e.75e6508cacf10.7a9835b54',
'name' : 'API recover and monitoring',
'description' : 'We need a service to monitor and recover failed APIs.',
'idAttachmentCover': '',
'idMembers' : [
'36027j1930450d8bf7b10158',
'76027g1930450d8bf7b10958'
],
'idLabels' : [
'26022e4129ad3a5sc28b36cd',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [],
'subscribed' : true,
'checklists' : [
{
'id' : '6926.2b31d119e4a.889401e0ca7a0.13ad8ce2e569d.976e54e8b5d87.456afccd7e820.d6c77106a',
'name' : 'API Monitoring',
'checkItemsChecked': 2,
'checkItems' : [
{
'name' : 'Simple dashboard design',
'checked': false
},
{
'name' : 'Should be able to see different time periods on the same dashboard',
'checked': true
},
{
'name' : 'Different colors for different clusters',
'checked': true
}
]
},
{
'id' : '7c22.5261c7924387f.248e8b1d32205.003f7a9f501d1.1d48dcdbe8b23.8099dcc5f75a7.29a966196',
'name' : 'API Recovery',
'checkItemsChecked': 1,
'checkItems' : [
{
'name' : 'Warning notifications to all developers',
'checked': false
},
{
'name' : 'Immediate recovery options attached to the notifications',
'checked': true
},
{
'name' : 'Backups every 6hours',
'checked': false
}
]
}
],
'checkItems' : 6,
'checkItemsChecked': 3,
'comments' : [],
'activities' : [],
'due' : '2017-02-02T11:20:34.000Z'
}
],
'members' : [
{
'id' : '56027c1930450d8bf7b10758',
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
{
'id' : '26027s1930450d8bf7b10828',
'name' : 'Danielle Obrien',
'avatar': 'assets/images/avatars/danielle.jpg'
},
{
'id' : '76027g1930450d8bf7b10958',
'name' : 'James Lewis',
'avatar': 'assets/images/avatars/james.jpg'
},
{
'id' : '36027j1930450d8bf7b10158',
'name' : 'Vincent Munoz',
'avatar': 'assets/images/avatars/vincent.jpg'
}
],
'labels' : [
{
'id' : '26022e4129ad3a5sc28b36cd',
'name' : 'High Priority',
'color': 'mat-red-500-bg'
},
{
'id' : '56027e4119ad3a5dc28b36cd',
'name' : 'Design',
'color': 'mat-orange-400-bg'
},
{
'id' : '5640635e19ad3a5dc21416b2',
'name' : 'App',
'color': 'mat-blue-600-bg'
},
{
'id' : '6540635g19ad3s5dc31412b2',
'name' : 'Feature',
'color': 'mat-green-400-bg'
}
]
},
{
'id' : '27cfcbe1',
'name' : 'ACME Backend Application',
'uri' : 'acme-backend-application',
'settings': {
'color' : 'blue-grey',
'subscribed' : false,
'cardCoverImages': true
},
'lists' : [
{
'id' : '56027cf5a2ca3839a5d36103',
'name' : 'Designs',
'idCards': [
'5603a2a3cab0c8300f6096b3'
]
},
{
'id' : '56127cf2a2ca3539g7d36103',
'name' : 'Development',
'idCards': [
'5637273da9b93bb84743a0f9'
]
}
],
'cards' : [
{
'id' : '5603a2a3cab0c8300f6096b3',
'name' : 'Calendar App Design',
'description' : '',
'idAttachmentCover': '56027cfcbe1b72ecf1fc452a',
'idMembers' : [
'56027c1930450d8bf7b10758',
'36027j1930450d8bf7b10158'
],
'idLabels' : [
'56027e4119ad3a5dc28b36cd',
'5640635e19ad3a5dc21416b2'
],
'attachments' : [
{
'id' : '56027cfcbe1b72ecf1fc452a',
'name': 'calendar-app-design.jpg',
'src' : 'assets/images/scrumboard/calendar.jpg',
'time': 'Added Nov 1 at 12:34PM',
'type': 'image'
},
{
'id' : '67027cahbe3b52ecf2dc631c',
'url' : 'assets/images/scrumboard/calendar.jpg',
'time': 'Added Nov 3 at 15:22AM',
'type': 'link'
}
],
'subscribed' : true,
'checklists' : [
{
'id' : '63021cfdbe1x72wcf1fc451v',
'name' : 'Checklist',
'checkItemsChecked': 1,
'checkItems' : [
{
'name' : 'Implement a calendar library',
'checked': false
},
{
'name' : 'Replace event colors with Material Design colors',
'checked': true
},
{
'name' : 'Replace icons with Material Design icons',
'checked': false
},
{
'name' : 'Use moment.js',
'checked': false
}
]
},
{
'name' : 'Checklist 2',
'id' : '74031cfdbe1x72wcz1dc166z',
'checkItemsChecked': 1,
'checkItems' : [
{
'name' : 'Replace event colors with Material Design colors',
'checked': true
},
{
'name' : 'Replace icons with Material Design icons',
'checked': false
},
{
'name' : 'Use moment.js',
'checked': false
}
]
}
],
'checkItems' : 7,
'checkItemsChecked': 2,
'comments' : [
{
'idMember': '56027c1930450d8bf7b10758',
'message' : 'We should be able to add moment.js without any problems',
'time' : '12 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'I added a link for a page that might help us deciding the colors',
'time' : '30 mins. ago'
}
],
'activities' : [
{
'idMember': '56027c1930450d8bf7b10758',
'message' : 'added a comment',
'time' : '12 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'added a comment',
'time' : '30 mins. ago'
},
{
'idMember': '36027j1930450d8bf7b10158',
'message' : 'attached a link',
'time' : '45 mins. ago'
}
],
'due' : null
},
{
'id' : '5637273da9b93bb84743a0f9',
'name' : 'Fix Splash Screen bugs',
'description' : '',
'idAttachmentCover': '5603a2ae2bbd55bb2db57478',
'idMembers' : [
'56027c1930450d8bf7b10758'
],
'idLabels' : [],
'attachments' : [
{
'id' : '5603a2ae2bbd55bb2db57478',
'name': 'mail-app-design.jpg',
'src' : 'assets/images/scrumboard/mail.jpg',
'time': 'Added Nov 1 at 12:34PM',
'type': 'image'
}
],
'subscribed' : true,
'checklists' : [],
'checkItems' : 0,
'checkItemsChecked': 0,
'comments' : [],
'activities' : [],
'due' : null
}
],
'members' : [
{
'id' : '56027c1930450d8bf7b10758',
'name' : 'Alice Freeman',
'avatar': 'assets/images/avatars/alice.jpg'
},
{
'id' : '26027s1930450d8bf7b10828',
'name' : 'Danielle Obrien',
'avatar': 'assets/images/avatars/danielle.jpg'
},
{
'id' : '76027g1930450d8bf7b10958',
'name' : 'James Lewis',
'avatar': 'assets/images/avatars/james.jpg'
},
{
'id' : '36027j1930450d8bf7b10158',
'name' : 'Vincent Munoz',
'avatar': 'assets/images/avatars/vincent.jpg'
}
],
'labels' : [
{
'id' : '56027e4119ad3a5dc28b36cd',
'name' : 'Design',
'color': 'mat-red-500-bg'
},
{
'id' : '5640635e19ad3a5dc21416b2',
'name' : 'App',
'color': 'mat-blue-500-bg'
},
{
'id' : '6540635g19ad3s5dc31412b2',
'name' : 'Feature',
'color': 'mat-green-400-bg'
}
]
}
];
}

View File

@@ -1,139 +0,0 @@
export class SearchFakeDb
{
public static classic = [
{
'title' : 'Dynamically Procrastinate B2C',
'url' : 'ourwebaddress.com/articles/procrastinate',
'excerpt': 'Collaboratively administrate empowered markets via plug-and-play networks. Dynamically procrastinate B2C users after installed base benefits.'
},
{
'title' : 'Cross Media',
'url' : 'ourwebaddress.com/articles/cross-media',
'excerpt': 'Efficiently unleash cross-media information without cross-media value. Quickly maximize timely deliverables for real-time schemas.'
},
{
'title' : 'Synergize',
'url' : 'ourwebaddress.com/articles/synergize',
'excerpt': 'Completely synergize resource taxing relationships via premier niche markets. Professionally cultivate one-to-one customer service with robust ideas.'
},
{
'title' : 'Parallel Platforms',
'url' : 'ourwebaddress.com/articles/parallel-paltforms',
'excerpt': 'Objectively innovate empowered manufactured products whereas parallel platforms. Holisticly predominate extensible testing procedures for reliable supply chains.'
},
{
'title' : 'Growth Strategies',
'url' : 'ourwebaddress.com/articles/growth-strategies',
'excerpt': 'Proactively envisioned multimedia based expertise and cross-media growth strategies. Holistically pontificate installed base portals after maintainable products.'
},
{
'title' : 'Methodologies',
'url' : 'ourwebaddress.com/articles/methodologies',
'excerpt': 'Phosfluorescently engage worldwide methodologies with web-enabled technology. Completely pursue scalable customer service through sustainable potentialities.'
},
{
'title' : 'E-tailers',
'url' : 'ourwebaddress.com/articles/e-trailers',
'excerpt': 'Collaboratively administrate turnkey channels whereas virtual e-tailers. Objectively seize scalable metrics whereas proactive e-services.'
},
{
'title' : 'Web Readiness',
'url' : 'ourwebaddress.com/articles/web-readiness',
'excerpt': 'Credibly innovate granular internal or organic sources whereas high standards in web-readiness. Dramatically synthesize integrated schemas with optimal networks.'
}
];
public static table = [
{
'name' : 'Airi Satou',
'position' : 'Accountant',
'office' : 'Tokyo',
'age' : '33',
'startDate': '2008/11/28',
'salary' : '162700',
'email' : 'a.satou@mail.com'
},
{
'name' : 'Angellica Ramos',
'position' : 'Chief Executive Officer (CEO)',
'office' : 'London',
'age' : '47',
'startDate': '2009/10/09',
'salary' : '1200000',
'email' : 'a.ramos@mail.com'
},
{
'name' : 'Ashton Cox',
'position' : 'Hunior Technical Author',
'office' : 'San Fransisco',
'age' : '66',
'startDate': '2009/01/12',
'salary' : '86000',
'email' : 'a.cox@mail.com'
},
{
'name' : 'Bradley Greer',
'position' : 'Software Engineer',
'office' : 'London',
'age' : '41',
'startDate': '2012/10/13',
'salary' : '132000',
'email' : 'b.greer@mail.com'
},
{
'name' : 'Brenden Wagner',
'position' : 'Software Engineer',
'office' : 'San Fransisco',
'age' : '28',
'startDate': '2011/06/07',
'salary' : '206850',
'email' : 'b.wagner@mail.com'
},
{
'name' : 'Brielle Williamson',
'position' : 'Integration Specialist',
'office' : 'New York',
'age' : '61',
'startDate': '2012/12/02',
'salary' : '372000',
'email' : 'b.williamson@mail.com'
},
{
'name' : 'Bruno Nash',
'position' : 'Software Engineer',
'office' : 'London',
'age' : '38',
'startDate': '2011/05/03',
'salary' : '163500',
'email' : 'b.nash@mail.com'
},
{
'name' : 'Caesar Vance',
'position' : 'Pre-Sales Support',
'office' : 'New York',
'age' : '21',
'startDate': '2011/12/12',
'salary' : '106450',
'email' : 'c.vance@mail.com'
},
{
'name' : 'Cara Stevens',
'position' : 'Sales Assistant',
'office' : 'New York',
'age' : '46',
'startDate': '2011/12/06',
'salary' : '145600',
'email' : 'c.stevens@mail.com'
},
{
'name' : 'Cedric Kelly',
'position' : 'Senior Javascript Developer',
'office' : 'Edinburg',
'age' : '22',
'startDate': '2012/03/29',
'salary' : '433060',
'email' : 'c.kelly@mail.com'
}
];
}

View File

@@ -1,324 +0,0 @@
export class TodoFakeDb
{
public static todos = [
{
'id' : '561551bd7fe2ff461101c192',
'title' : 'Proident tempor est nulla irure ad est',
'notes' : 'Id nulla nulla proident deserunt deserunt proident in quis. Cillum reprehenderit labore id anim laborum.',
'startDate': 'Wednesday, January 29, 2014 3:17 PM',
'dueDate' : null,
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [1]
},
{
'id' : '561551bd4ac1e7eb77a3a750',
'title' : 'Magna quis irure quis ea pariatur laborum',
'notes' : '',
'startDate': 'Sunday, February 1, 2015 1:30 PM',
'dueDate' : 'Friday, December 30, 2016 10:07 AM',
'completed': false,
'starred' : false,
'important': true,
'deleted' : false,
'tags' : [1, 4]
},
{
'id' : '561551bd917bfec2ddef2d49',
'title' : 'Ullamco duis commodo sint ad aliqua aute',
'notes' : 'Sunt laborum enim nostrud ea fugiat cillum mollit aliqua exercitation ad elit.',
'startDate': 'Friday, April 11, 2014 3:43 AM',
'dueDate' : 'Wednesday, July 26, 2017 11:14 AM',
'completed': false,
'starred' : true,
'important': true,
'deleted' : false,
'tags' : [3]
},
{
'id' : '561551bdeeb2fd6877e18c29',
'title' : 'Eiusmod non occaecat pariatur Lorem in ex',
'notes' : 'Nostrud anim mollit incididunt qui qui sit commodo duis. Anim amet irure aliquip duis nostrud sit quis fugiat ullamco non dolor labore. Lorem sunt voluptate laboris culpa proident. Aute eiusmod aliqua exercitation irure exercitation qui laboris mollit occaecat eu occaecat fugiat.',
'startDate': 'Wednesday, May 7, 2014 4:14 AM',
'dueDate' : 'Friday, December 15, 2017 4:01 AM',
'completed': true,
'starred' : true,
'important': false,
'deleted' : false,
'tags' : [2]
},
{
'id' : '561551bdf38eae0134ae43d4',
'title' : 'Lorem magna cillum consequat consequat mollit',
'notes' : 'Velit ipsum proident ea incididunt et. Consectetur eiusmod laborum voluptate duis occaecat ullamco sint enim proident.',
'startDate': 'Sunday, August 23, 2015 11:19 PM',
'dueDate' : 'Friday, July 8, 2016 10:49 AM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [5, 4]
},
{
'id' : '561551bd32f1588c814a0ccd',
'title' : 'Quis irure cupidatat ad consequat reprehenderit excepteur',
'notes' : 'Esse nisi mollit aliquip mollit aute consequat adipisicing. Do excepteur dolore proident cupidatat pariatur irure consequat incididunt.',
'startDate': 'Sunday, June 7, 2015 10:49 AM',
'dueDate' : 'Monday, January 9, 2017 8:34 AM',
'completed': false,
'starred' : true,
'important': false,
'deleted' : false,
'tags' : [2, 3]
},
{
'id' : '561551bd0bb4b08ca77038ef',
'title' : 'Officia voluptate tempor ut mollit ea cillum',
'notes' : 'Deserunt veniam reprehenderit do elit magna ut.',
'startDate': 'Saturday, October 18, 2014 4:25 AM',
'dueDate' : 'Sunday, August 21, 2016 10:48 PM',
'completed': true,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [2, 4]
},
{
'id' : '561551bdf84eec913835ebe5',
'title' : 'Sit exercitation cupidatat minim est ipsum excepteur',
'notes' : '',
'startDate': 'Friday, August 8, 2014 5:45 AM',
'dueDate' : 'Wednesday, June 15, 2016 1:53 PM',
'completed': true,
'starred' : false,
'important': true,
'deleted' : false,
'tags' : [1, 3]
},
{
'id' : '561551bd2047cc709af0f670',
'title' : 'Sunt fugiat officia nisi minim sunt duis',
'notes' : 'Eiusmod eiusmod sint aliquip exercitation cillum. Magna nulla officia ex consectetur ea ad excepteur in qui.',
'startDate': 'Monday, July 13, 2015 1:55 PM',
'dueDate' : 'Thursday, March 3, 2016 2:26 PM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [
{
'id' : 5,
'name' : 'mobile',
'label': 'Mobile',
'color': '#9C27B0'
}
]
},
{
'id' : '561551bd73d1a627e97005ce',
'title' : 'Non cupidatat enim quis aliquip minim laborum',
'notes' : 'Qui cillum eiusmod nostrud sunt dolore velit nostrud labore voluptate ad dolore. Eu Lorem anim pariatur aliqua. Ullamco ut dolor velit esse occaecat dolore eu cillum commodo qui. Nulla dolor consequat voluptate magna ut commodo magna consectetur non aute proident.',
'startDate': 'Tuesday, November 11, 2014 6:36 PM',
'dueDate' : 'Tuesday, August 9, 2016 7:18 AM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [2]
},
{
'id' : '561551bd8f7d793ded0a2353',
'title' : 'Dolor ex occaecat magna labore laboris qui',
'notes' : 'Incididunt qui excepteur eiusmod elit cillum occaecat voluptate cillum nostrud. Dolor ullamco ullamco eiusmod do sunt adipisicing pariatur. In esse esse labore id reprehenderit sint do. Pariatur culpa dolor tempor qui excepteur duis do anim minim ipsum.',
'startDate': 'Monday, June 9, 2014 3:15 PM',
'dueDate' : 'Wednesday, October 19, 2016 3:38 PM',
'completed': false,
'starred' : false,
'important': true,
'deleted' : false,
'tags' : [3]
},
{
'id' : '561551bdaa586f72d0be02cc',
'title' : 'Ex nisi amet id dolore nostrud esse',
'notes' : '',
'startDate': 'Thursday, January 15, 2015 6:11 PM',
'dueDate' : 'Sunday, August 20, 2017 10:02 AM',
'completed': false,
'starred' : true,
'important': true,
'deleted' : false,
'tags' : [4]
},
{
'id' : '561551bd9f1c2de5b27f537b',
'title' : 'In dolor velit labore dolore ex eiusmod',
'notes' : '',
'startDate': 'Monday, March 10, 2014 12:50 AM',
'dueDate' : 'Thursday, January 26, 2017 3:10 PM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [4]
},
{
'id' : '561551bd26e21bb5e85b35cb',
'title' : 'Sunt voluptate aliquip exercitation minim magna sit',
'notes' : '',
'startDate': 'Tuesday, March 24, 2015 10:54 PM',
'dueDate' : 'Wednesday, August 23, 2017 5:35 PM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [4]
},
{
'id' : '561551bd719860cf0ad2011a',
'title' : 'Nisi et ullamco minim ea proident tempor',
'notes' : 'Dolor veniam dolor cillum Lorem magna nisi in occaecat nulla dolor ea eiusmod.',
'startDate': 'Friday, February 14, 2014 10:03 AM',
'dueDate' : 'Saturday, July 8, 2017 11:54 PM',
'completed': false,
'starred' : true,
'important': false,
'deleted' : false,
'tags' : [2, 4]
},
{
'id' : '561551bd49d800c243264a91',
'title' : 'Sit ipsum mollit cupidatat adipisicing officia aliquip',
'notes' : '',
'startDate': 'Wednesday, December 10, 2014 9:25 AM',
'dueDate' : 'Friday, March 25, 2016 12:29 AM',
'completed': true,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [1]
},
{
'id' : '561551bd061990eaf40fb64f',
'title' : 'Amet sunt et quis amet commodo quis',
'notes' : 'Nulla dolore consequat aliqua sint consequat elit qui occaecat et.',
'startDate': 'Saturday, March 1, 2014 3:59 PM',
'dueDate' : 'Saturday, November 7, 2015 2:00 PM',
'completed': false,
'starred' : false,
'important': true,
'deleted' : false,
'tags' : [1]
},
{
'id' : '561551be81d05fa94711e7f3',
'title' : 'Ut eiusmod ex ea eiusmod culpa incididunt',
'notes' : 'Fugiat non incididunt officia ex incididunt occaecat. Voluptate nostrud culpa aliquip mollit incididunt non dolore.',
'startDate': 'Monday, February 2, 2015 3:07 PM',
'dueDate' : 'Saturday, October 14, 2017 6:57 AM',
'completed': false,
'starred' : false,
'important': false,
'deleted' : false,
'tags' : [2]
},
{
'id' : '561551be05c093a80e0c8d05',
'title' : 'Proident reprehenderit laboris pariatur ut et nisi',
'notes' : 'Reprehenderit proident ut ad cillum quis velit quis aliqua ut aliquip tempor ullamco.',
'startDate': 'Sunday, June 14, 2015 4:40 AM',
'dueDate' : 'Wednesday, February 10, 2016 10:47 AM',
'completed': true,
'starred' : true,
'important': true,
'deleted' : false,
'tags' : [5]
},
{
'id' : '561551be3bb43a5bd431c2fc',
'title' : 'Aliqua aliquip aliquip aliquip et exercitation aute',
'notes' : 'Adipisicing Lorem tempor ex anim. Labore tempor laboris nostrud dolore voluptate ullamco. Fugiat ex deserunt anim minim esse velit laboris aute ea duis incididunt. Elit irure id Lorem incididunt laborum aliquip consectetur est irure sunt. Ut labore anim nisi aliqua tempor laborum nulla cillum. Duis irure consequat cillum magna cillum eiusmod ut. Et exercitation voluptate quis deserunt elit quis dolor deserunt ex ex esse ex.',
'startDate': 'Saturday, May 3, 2014 1:32 AM',
'dueDate' : 'Monday, September 12, 2016 9:16 PM',
'completed': true,
'starred' : false,
'important': true,
'deleted' : true,
'tags' : [3]
}
];
public static filters = [
{
'id' : 0,
'handle': 'starred',
'title' : 'Starred',
'icon' : 'star'
},
{
'id' : 1,
'handle': 'important',
'title' : 'Priority',
'icon' : 'error'
},
{
'id' : 2,
'handle': 'dueDate',
'title' : 'Sheduled',
'icon' : 'schedule'
},
{
'id' : 3,
'handle': 'today',
'title' : 'Today',
'icon' : 'today'
},
{
'id' : 4,
'handle': 'completed',
'title' : 'Done',
'icon' : 'check'
},
{
'id' : 4,
'handle': 'deleted',
'title' : 'Deleted',
'icon' : 'delete'
}
];
public static tags = [
{
'id' : 1,
'handle': 'frontend',
'title' : 'Frontend',
'color' : '#388E3C'
},
{
'id' : 2,
'handle': 'backend',
'title' : 'Backend',
'color' : '#F44336'
},
{
'id' : 3,
'handle': 'api',
'title' : 'API',
'color' : '#FF9800'
},
{
'id' : 4,
'handle': 'issue',
'title' : 'Issue',
'color' : '#0091EA'
},
{
'id' : 5,
'handle': 'mobile',
'title' : 'Mobile',
'color' : '#9C27B0'
}
];
}

View File

@@ -10,28 +10,23 @@ import { FuseConfig } from '@fuse/types';
export const fuseConfig: FuseConfig = { export const fuseConfig: FuseConfig = {
layout : { layout : {
style : 'vertical-layout-1', style : 'vertical-layout-1',
width : 'fullwidth', width : 'fullwidth',
navbar : { navbar : {
background: 'mat-fuse-dark-700-bg',
folded : false,
hidden : false, hidden : false,
position : 'left', position : 'left',
variant : 'vertical-style-1' folded : false,
background: 'mat-fuse-dark-700-bg'
}, },
toolbar : { toolbar : {
background: 'mat-white-500-bg',
hidden : false, hidden : false,
position : 'below-static' position : 'below-static',
background: 'mat-white-500-bg'
}, },
footer : { footer : {
background: 'mat-fuse-dark-900-bg',
hidden : false, hidden : false,
position : 'below-fixed' position : 'below-static',
}, background: 'mat-fuse-dark-900-bg'
sidepanel: {
hidden : false,
position: 'right'
} }
}, },
customScrollbars: true customScrollbars: true

View File

@@ -1,119 +0,0 @@
<div class="header mat-elevation-z4 mat-primary-bg" fxLayout="row" fxLayoutAlign="space-between center">
<ng-container *ngIf="selectedContact === null">
<div class="title ml-16" fxLayout="row" fxLayoutAlign="start center">
<mat-icon class="s-32 white-fg">chat</mat-icon>
<h3 class="ml-12">Team Chat</h3>
</div>
</ng-container>
<ng-container *ngIf="selectedContact !== null">
<div class="title" fxLayout="row" fxLayoutAlign="start center">
<img [src]="selectedContact.avatar" class="avatar mx-16">
<h3 class="text-truncate">{{selectedContact.name}}</h3>
</div>
</ng-container>
<button mat-icon-button class="toggle-sidebar-folded mr-8" (click)="foldSidebarTemporarily()" fxHide fxShow.gt-md>
<mat-icon class="secondary-text s-20">arrow_forward</mat-icon>
</button>
<button mat-icon-button class="toggle-sidebar-open mr-8" (click)="toggleSidebarOpen()" fxHide.gt-md>
<mat-icon class="secondary-text">arrow_forward</mat-icon>
</button>
</div>
<div>
<!-- Contacts -->
<div id="contacts-list" fusePerfectScrollbar [fusePerfectScrollbarOptions]="{suppressScrollX: true}">
<div *ngFor="let contact of contacts"
class="contacts-list-item"
[ngClass]="contact.status"
[class.active]="contact.id === selectedContact?.id"
(click)="goToChat(contact)">
<img class="avatar" [src]="contact.avatar"
[matTooltip]="contact.name"
matTooltipPosition="left">
<div class="unread-count" *ngIf="contact.unread">{{contact.unread}}</div>
<div class="status-icon" [ngClass]="contact.status"></div>
</div>
</div>
<!-- / Contacts -->
<!-- Chat -->
<div id="chat" fxLayout="column" fxFlex="1 1 auto">
<div id="messages" class="messages" fxFlex="1 1 auto" fusePerfectScrollbar>
<ng-container *ngIf="chat && chat.dialog && chat.dialog.length > 0">
<div *ngFor="let message of chat.dialog; let i = index" class="message-row"
[ngClass]="{
'me': message.who === user.id,
'contact': message.who !== user.id,
'first-of-group': isFirstMessageOfGroup(message, i),
'last-of-group': isLastMessageOfGroup(message, i)
}">
<img *ngIf="shouldShowContactAvatar(message, i)"
src="{{selectedContact.avatar}}"
class="avatar">
<div class="bubble">
<div class="message">{{message.message}}</div>
<div class="time secondary-text">{{message.time | date:'short'}}</div>
</div>
</div>
</ng-container>
<ng-container *ngIf="chat && chat.dialog && chat.dialog.length === 0">
<div class="no-messages-icon">
<mat-icon class="s-128">chat</mat-icon>
</div>
<div class="no-messages secondary-text">
Start a conversation by typing your message below.
</div>
</ng-container>
</div>
<div class="reply-form" fxFlex="0 0 auto" fxLayout="row" fxLayoutAlign="center center">
<form #replyForm="ngForm"
(ngSubmit)="reply($event)"
(keydown.enter)="reply($event)"
fxFlex
fxLayout="row"
fxLayoutAlign="start center">
<mat-form-field class="message-text" fxFlex floatLabel="never" appearance="standard">
<textarea matInput #replyInput ngModel name="message" placeholder="Type your message"
[rows]="1" [matTextareaAutosize]="true"></textarea>
</mat-form-field>
<button class="send-message-button" mat-icon-button type="submit" aria-label="Send message">
<mat-icon class="secondary-text">send</mat-icon>
</button>
</form>
</div>
</div>
<!-- / Chat -->
</div>

View File

@@ -1,407 +0,0 @@
@import "src/@fuse/scss/fuse";
chat-panel {
display: flex;
flex-direction: column;
flex: 1 1 auto;
width: 360px;
min-width: 360px;
max-width: 360px;
z-index: 99;
overflow: hidden;
@include media-breakpoint-down('xs') {
max-width: none !important;
width: 100% !important;
}
.header {
height: 64px;
max-height: 64px;
min-height: 64px;
.title {
mat-icon {
margin-left: 4px;
}
h3 {
max-width: 120px;
transition: opacity 300ms ease-in-out;
}
}
}
#contacts-list {
padding: 8px 0;
overflow: auto;
width: 72px;
min-width: 72px;
max-width: 72px;
-webkit-overflow-scrolling: touch;
// Perfect scrollbar
.ps__rail-y {
width: 3px !important;
.ps__thumb-y {
width: 3px !important;
}
}
.contacts-list-item {
position: relative;
display: flex;
align-items: center;
justify-content: center;
padding: 0 16px;
height: 56px;
cursor: pointer;
&.active {
background-color: mat-color(mat-palette($mat-grey, 300));
@include mat-elevation(2);
}
&.offline {
.mat-list-item-content {
img {
filter: grayscale(100%);
opacity: 0.7;
}
h3 {
opacity: 0.7;
}
}
}
.avatar {
margin: 0;
}
.unread-count {
position: absolute;
min-width: 18px;
height: 18px;
top: 4px;
left: 10px;
border-radius: 9px;
padding: 0 5px;
font-size: 11px;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
background-color: mat-color(mat-palette($mat-indigo));
color: white;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.35);
}
.status-icon {
position: absolute;
width: 12px;
height: 12px;
bottom: 3px;
left: 44px;
border: 2px solid white;
border-radius: 50%;
&.online {
background-color: #4CAF50;
}
&.do-not-disturb {
background-color: #F44336;
}
&.away {
background-color: #FFC107;
}
&.offline {
background-color: #646464;
}
}
}
}
#chat {
background-color: mat-color(mat-palette($mat-grey, 300));
.messages {
position: relative;
overflow: auto;
padding: 16px 0 40px 40px;
.message-row {
position: relative;
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-end;
padding: 0 16px 4px 16px;
.avatar {
position: absolute;
left: -32px;
margin: 0;
}
.bubble {
position: relative;
display: flex;
align-items: center;
justify-content: center;
padding: 12px;
.message {
white-space: pre-wrap;
line-height: 1.2;
}
.time {
position: absolute;
display: none;
width: 100%;
font-size: 11px;
margin-top: 8px;
top: 100%;
color: $black-87-opacity;
white-space: nowrap;
}
}
&.contact {
.bubble {
background-color: mat-color(mat-palette($mat-indigo));
color: white;
border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
border-top-right-radius: 20px;
border-bottom-right-radius: 20px;
.time {
margin-left: 12px;
}
}
&.first-of-group {
.bubble {
border-top-left-radius: 20px;
}
}
&.last-of-group {
.bubble {
border-bottom-left-radius: 20px;
}
}
}
&.me {
padding-left: 40px;
.avatar {
order: 2;
margin: 0 0 0 16px;
}
.bubble {
margin-left: auto;
background-color: #FFFFFF;
color: $black-87-opacity;
border-top-left-radius: 20px;
border-bottom-left-radius: 20px;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
.time {
justify-content: flex-end;
right: 0;
margin-right: 12px;
}
}
&.first-of-group {
.bubble {
border-top-right-radius: 20px;
}
}
&.last-of-group {
.bubble {
border-bottom-right-radius: 20px;
}
}
}
&.contact + .me,
&.me + .contact {
padding-top: 20px;
margin-top: 20px;
}
&.first-of-group {
.bubble {
border-top-left-radius: 20px;
padding-top: 13px;
}
}
&.last-of-group {
.bubble {
border-bottom-left-radius: 20px;
padding-bottom: 13px;
.time {
display: flex;
}
}
}
}
.no-messages-icon {
position: absolute;
top: 50%;
right: 0;
left: 0;
padding: 0 24px;
margin-top: -64px;
text-align: center;
mat-icon {
color: rgba(0, 0, 0, 0.06);
}
}
.no-messages {
position: absolute;
right: 0;
bottom: 0;
left: 0;
padding: 0 16px 24px 16px;
text-align: center;
}
}
.reply-form {
position: relative;
.message-text {
padding: 16px 8px;
.mat-form-field-wrapper {
padding: 0;
.mat-form-field-flex {
padding: 0;
.mat-form-field-infix {
padding: 0;
border: none;
background: white;
border-radius: 20px;
@include mat-elevation(2);
textarea {
overflow: hidden;
margin: 16px 48px 16px 16px;
width: calc(100% - 64px);
padding: 0;
}
}
}
.mat-form-field-underline {
display: none !important;
}
}
}
.send-message-button {
position: absolute;
right: 16px;
bottom: 21px;
}
}
}
}
fuse-sidebar {
&.chat-panel {
width: 360px;
min-width: 360px;
max-width: 360px;
@include media-breakpoint-down('xs') {
min-width: 0 !important;
max-width: 100vw !important;
width: 100vw !important;
}
&.left-chat-panel {
.header {
.toggle-sidebar-folded,
.toggle-sidebar-open {
mat-icon {
transform: rotate(180deg);
}
}
}
}
// Folded
&.folded {
chat-panel {
.header {
.title {
h3 {
opacity: 0;
}
}
}
}
// Folded unfolded
&.unfolded {
chat-panel {
.header {
.title {
h3 {
opacity: 1;
}
}
}
}
}
}
}
}

View File

@@ -1,261 +0,0 @@
import { AfterViewInit, Component, ElementRef, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
import { NgForm } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';
import { FusePerfectScrollbarDirective } from '@fuse/directives/fuse-perfect-scrollbar/fuse-perfect-scrollbar.directive';
import { ChatPanelService } from 'app/layout/components/chat-panel/chat-panel.service';
@Component({
selector : 'chat-panel',
templateUrl : './chat-panel.component.html',
styleUrls : ['./chat-panel.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class ChatPanelComponent implements OnInit, AfterViewInit, OnDestroy
{
contacts: any[];
chat: any;
selectedContact: any;
sidebarFolded: boolean;
user: any;
@ViewChild('replyForm')
set replyForm(content: NgForm)
{
this._replyForm = content;
}
@ViewChild('replyInput')
set replyInput(content: ElementRef)
{
this._replyInput = content;
}
@ViewChildren(FusePerfectScrollbarDirective)
private _fusePerfectScrollbarDirectives: QueryList<FusePerfectScrollbarDirective>;
// Private
private _chatViewScrollbar: FusePerfectScrollbarDirective;
private _replyForm: NgForm;
private _replyInput: ElementRef;
private _unsubscribeAll: Subject<any>;
/**
* Constructor
*
* @param {ChatPanelService} _chatPanelService
* @param {HttpClient} _httpClient
* @param {FuseSidebarService} _fuseSidebarService
*/
constructor(
private _chatPanelService: ChatPanelService,
private _httpClient: HttpClient,
private _fuseSidebarService: FuseSidebarService
)
{
// Set the defaults
this.selectedContact = null;
this.sidebarFolded = true;
// Set the private defaults
this._unsubscribeAll = new Subject();
}
// -----------------------------------------------------------------------------------------------------
// @ Lifecycle hooks
// -----------------------------------------------------------------------------------------------------
/**
* On init
*/
ngOnInit(): void
{
// Load the contacts
this._chatPanelService.loadContacts().then(() => {
this.contacts = this._chatPanelService.contacts;
this.user = this._chatPanelService.user;
});
// Subscribe to the foldedChanged observable
this._fuseSidebarService.getSidebar('chatPanel').foldedChanged
.pipe(takeUntil(this._unsubscribeAll))
.subscribe((folded) => {
this.sidebarFolded = folded;
});
}
/**
* After view init
*/
ngAfterViewInit(): void
{
this._chatViewScrollbar = this._fusePerfectScrollbarDirectives.find((directive) => {
return directive.elementRef.nativeElement.id === 'messages';
});
}
/**
* On destroy
*/
ngOnDestroy(): void
{
// Unsubscribe from all subscriptions
this._unsubscribeAll.next();
this._unsubscribeAll.complete();
}
// -----------------------------------------------------------------------------------------------------
// @ Private methods
// -----------------------------------------------------------------------------------------------------
/**
* Prepare the chat for the replies
*/
private _prepareChatForReplies(): void
{
setTimeout(() => {
// Reset the reply form
this._replyForm.reset();
// Focus to the reply input
// this._replyInput.nativeElement.focus();
// Scroll to the bottom of the messages list
if ( this._chatViewScrollbar )
{
this._chatViewScrollbar.update();
setTimeout(() => {
this._chatViewScrollbar.scrollToBottom(0);
});
}
});
}
// -----------------------------------------------------------------------------------------------------
// @ Public methods
// -----------------------------------------------------------------------------------------------------
/**
* Fold the temporarily unfolded sidebar back
*/
foldSidebarTemporarily(): void
{
this._fuseSidebarService.getSidebar('chatPanel').foldTemporarily();
}
/**
* Unfold the sidebar temporarily
*/
unfoldSidebarTemporarily(): void
{
this._fuseSidebarService.getSidebar('chatPanel').unfoldTemporarily();
}
/**
* Toggle sidebar opened status
*/
toggleSidebarOpen(): void
{
this._fuseSidebarService.getSidebar('chatPanel').toggleOpen();
}
/**
* Decide whether to show or not the contact's avatar in the message row
*
* @param message
* @param i
* @returns {boolean}
*/
shouldShowContactAvatar(message, i): boolean
{
return (
message.who === this.selectedContact.id &&
((this.chat.dialog[i + 1] && this.chat.dialog[i + 1].who !== this.selectedContact.id) || !this.chat.dialog[i + 1])
);
}
/**
* Check if the given message is the first message of a group
*
* @param message
* @param i
* @returns {boolean}
*/
isFirstMessageOfGroup(message, i): boolean
{
return (i === 0 || this.chat.dialog[i - 1] && this.chat.dialog[i - 1].who !== message.who);
}
/**
* Check if the given message is the last message of a group
*
* @param message
* @param i
* @returns {boolean}
*/
isLastMessageOfGroup(message, i): boolean
{
return (i === this.chat.dialog.length - 1 || this.chat.dialog[i + 1] && this.chat.dialog[i + 1].who !== message.who);
}
/**
* Go to chat with the contact
*
* @param contact
*/
goToChat(contact): void
{
// Unfold the sidebar temporarily
this.unfoldSidebarTemporarily();
// Set the selected contact
this.selectedContact = contact;
// Load the chat
this._chatPanelService.getChat(contact.id).then((chat) => {
// Set the chat
this.chat = chat;
// Prepare the chat for the replies
this._prepareChatForReplies();
});
}
/**
* Reply
*/
reply(event): void
{
event.preventDefault();
if ( !this._replyForm.form.value.message )
{
return;
}
// Message
const message = {
who : this.user.id,
message: this._replyForm.form.value.message,
time : new Date().toISOString()
};
// Add the message to the chat
this.chat.dialog.push(message);
// Update the server
this._chatPanelService.updateChat(this.chat.id, this.chat.dialog).then(response => {
// Prepare the chat for the replies
this._prepareChatForReplies();
});
}
}

View File

@@ -1,33 +0,0 @@
import { NgModule } from '@angular/core';
import { MatButtonModule, MatFormFieldModule, MatIconModule, MatInputModule, MatRippleModule, MatTabsModule, MatTooltipModule } from '@angular/material';
import { FuseSharedModule } from '@fuse/shared.module';
import { ChatPanelComponent } from 'app/layout/components/chat-panel/chat-panel.component';
import { ChatPanelService } from 'app/layout/components/chat-panel/chat-panel.service';
@NgModule({
declarations: [
ChatPanelComponent
],
providers : [
ChatPanelService
],
imports : [
MatButtonModule,
MatFormFieldModule,
MatIconModule,
MatInputModule,
MatTabsModule,
MatTooltipModule,
MatRippleModule,
FuseSharedModule
],
exports : [
ChatPanelComponent
]
})
export class ChatPanelModule
{
}

View File

@@ -1,182 +0,0 @@
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { FuseUtils } from '@fuse/utils';
@Injectable()
export class ChatPanelService
{
contacts: any[];
chats: any[];
user: any;
/**
* Constructor
*
* @param {HttpClient} _httpClient
*/
constructor(
private _httpClient: HttpClient
)
{
}
/**
* Loader
*
* @returns {Promise<any> | any}
*/
loadContacts(): Promise<any> | any
{
return new Promise((resolve, reject) => {
Promise.all([
this.getContacts(),
this.getUser()
]).then(
([contacts, user]) => {
this.contacts = contacts;
this.user = user;
resolve();
},
reject
);
});
}
/**
* Get chat
*
* @param contactId
* @returns {Promise<any>}
*/
getChat(contactId): Promise<any>
{
const chatItem = this.user.chatList.find((item) => {
return item.contactId === contactId;
});
// Get the chat
return new Promise((resolve, reject) => {
// If there is a chat with this user, return that.
if ( chatItem )
{
this._httpClient.get('api/chat-panel-chats/' + chatItem.chatId)
.subscribe((chat) => {
// Resolve the promise
resolve(chat);
}, reject);
}
// If there is no chat with this user, create one...
else
{
this.createNewChat(contactId).then(() => {
// and then recall the getChat method
this.getChat(contactId).then((chat) => {
resolve(chat);
});
});
}
});
}
/**
* Create new chat
*
* @param contactId
* @returns {Promise<any>}
*/
createNewChat(contactId): Promise<any>
{
return new Promise((resolve, reject) => {
// Generate a new id
const chatId = FuseUtils.generateGUID();
// Prepare the chat object
const chat = {
id : chatId,
dialog: []
};
// Prepare the chat list entry
const chatListItem = {
chatId : chatId,
contactId : contactId,
lastMessageTime: '2017-02-18T10:30:18.931Z'
};
// Add new chat list item to the user's chat list
this.user.chatList.push(chatListItem);
// Post the created chat to the server
this._httpClient.post('api/chat-panel-chats', {...chat})
.subscribe(() => {
// Post the updated user data to the server
this._httpClient.post('api/chat-panel-user/' + this.user.id, this.user)
.subscribe(() => {
// Resolve the promise
resolve();
});
}, reject);
});
}
/**
* Update the chat
*
* @param chatId
* @param dialog
* @returns {Promise<any>}
*/
updateChat(chatId, dialog): Promise<any>
{
return new Promise((resolve, reject) => {
const newData = {
id : chatId,
dialog: dialog
};
this._httpClient.post('api/chat-panel-chats/' + chatId, newData)
.subscribe(updatedChat => {
resolve(updatedChat);
}, reject);
});
}
/**
* Get contacts
*
* @returns {Promise<any>}
*/
getContacts(): Promise<any>
{
return new Promise((resolve, reject) => {
this._httpClient.get('api/chat-panel-contacts')
.subscribe((response: any) => {
resolve(response);
}, reject);
});
}
/**
* Get user
*
* @returns {Promise<any>}
*/
getUser(): Promise<any>
{
return new Promise((resolve, reject) => {
this._httpClient.get('api/chat-panel-user')
.subscribe((response: any) => {
resolve(response[0]);
}, reject);
});
}
}

View File

@@ -2,7 +2,7 @@
<div fxLayout="row" fxLayoutAlign="center center" fxLayoutAlign.gt-xs="space-between center" fxFlex> <div fxLayout="row" fxLayoutAlign="center center" fxLayoutAlign.gt-xs="space-between center" fxFlex>
<a href="https://1.envato.market/c/1257954/275988/4415?u=https%3A%2F%2Fthemeforest.net%2Fitem%2Ffuse-angularjs-material-design-admin-template%2F12931855" <a href="http://themeforest.net/item/fuse-angularjs-material-design-admin-template/12931855?ref=srcn"
target="_blank" mat-button class="mat-pink-bg" fxFlex="0 0 auto" fxLayout="row" target="_blank" mat-button class="mat-pink-bg" fxFlex="0 0 auto" fxLayout="row"
fxLayoutAlign="start center"> fxLayoutAlign="start center">
<mat-icon class="s-16 mr-sm-4">shopping_cart</mat-icon> <mat-icon class="s-16 mr-sm-4">shopping_cart</mat-icon>
@@ -16,6 +16,7 @@
</div> </div>
</div> </div>
</mat-toolbar> </mat-toolbar>

View File

@@ -1 +0,0 @@
<fuse-navigation layout="horizontal"></fuse-navigation>

View File

@@ -1,3 +0,0 @@
navbar-horizontal-style-1 {
}

View File

@@ -1,65 +0,0 @@
import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';
import { Subject } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
import { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';
@Component({
selector : 'navbar-horizontal-style-1',
templateUrl : './style-1.component.html',
styleUrls : ['./style-1.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class NavbarHorizontalStyle1Component implements OnInit, OnDestroy
{
navigation: any;
// Private
private _unsubscribeAll: Subject<any>;
/**
* Constructor
*
* @param {FuseNavigationService} _fuseNavigationService
* @param {FuseSidebarService} _fuseSidebarService
*/
constructor(
private _fuseNavigationService: FuseNavigationService,
private _fuseSidebarService: FuseSidebarService
)
{
// Set the private defaults
this._unsubscribeAll = new Subject();
}
// -----------------------------------------------------------------------------------------------------
// @ Lifecycle hooks
// -----------------------------------------------------------------------------------------------------
/**
* On init
*/
ngOnInit(): void
{
// Get current navigation
this._fuseNavigationService.onNavigationChanged
.pipe(
filter(value => value !== null),
takeUntil(this._unsubscribeAll)
)
.subscribe(() => {
this.navigation = this._fuseNavigationService.getCurrentNavigation();
});
}
/**
* On destroy
*/
ngOnDestroy(): void
{
// Unsubscribe from all subscriptions
this._unsubscribeAll.next();
this._unsubscribeAll.complete();
}
}

View File

@@ -1,26 +0,0 @@
import { NgModule } from '@angular/core';
import { MatButtonModule, MatIconModule } from '@angular/material';
import { FuseNavigationModule } from '@fuse/components';
import { FuseSharedModule } from '@fuse/shared.module';
import { NavbarHorizontalStyle1Component } from 'app/layout/components/navbar/horizontal/style-1/style-1.component';
@NgModule({
declarations: [
NavbarHorizontalStyle1Component
],
imports : [
MatButtonModule,
MatIconModule,
FuseSharedModule,
FuseNavigationModule
],
exports : [
NavbarHorizontalStyle1Component
]
})
export class NavbarHorizontalStyle1Module
{
}

View File

@@ -1,11 +1,39 @@
<ng-container *ngIf="variant === 'horizontal-style-1'"> <ng-container *ngIf="layout == 'vertical'">
<navbar-horizontal-style-1></navbar-horizontal-style-1>
<div class="navbar-vertical">
<div class="navbar-header">
<div class="logo">
<img class="logo-icon" src="assets/images/logos/fuse.svg">
<span class="logo-text">FUSE</span>
</div>
<button mat-icon-button class="toggle-sidebar-folded"
(click)="toggleSidebarFolded()" fxHide.lt-lg>
<mat-icon>menu</mat-icon>
</button>
<button mat-icon-button class="toggle-sidebar-opened"
(click)="toggleSidebarOpened()" fxHide.gt-md>
<mat-icon>arrow_back</mat-icon>
</button>
</div>
<div class="navbar-content" fusePerfectScrollbar
[fusePerfectScrollbarOptions]="{suppressScrollX: true}">
<fuse-navigation layout="vertical"></fuse-navigation>
</div>
</div>
</ng-container> </ng-container>
<ng-container *ngIf="variant === 'vertical-style-1'"> <ng-container *ngIf="layout == 'horizontal'">
<navbar-vertical-style-1></navbar-vertical-style-1>
</ng-container>
<ng-container *ngIf="variant === 'vertical-style-2'"> <div class="navbar-horizontal">
<navbar-vertical-style-2></navbar-vertical-style-2> <fuse-navigation layout="horizontal"></fuse-navigation>
</ng-container> </div>
</ng-container>

View File

@@ -1,6 +1,81 @@
navbar { @import "src/@fuse/scss/fuse";
display: flex;
flex-direction: column; fuse-sidebar {
flex: 1 1 auto;
width: 100%; &.folded:not(.unfolded) {
.navbar-vertical {
.navbar-header {
padding: 0 13px;
.logo {
.logo-text {
opacity: 0;
transition: opacity 200ms ease;
}
}
}
}
}
}
navbar {
&:not(.top-navbar) {
height: 100%;
overflow: hidden;
}
.navbar-vertical {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
.navbar-header {
display: flex;
align-items: center;
justify-content: space-between;
height: 64px;
min-height: 64px;
padding: 0 16px 0 24px;
transition: padding 200ms ease;
background-color: rgba(255, 255, 255, .05);
@include mat-elevation(1);
.logo {
display: flex;
align-items: center;
.logo-icon {
width: 38px;
height: 38px;
}
.logo-text {
margin-left: 8px;
font-size: 20px;
font-weight: 300;
letter-spacing: 0.4px;
}
}
}
.navbar-content {
flex: 1 1 auto;
overflow-y: auto;
}
}
&.right-navbar {
.toggle-sidebar-opened {
mat-icon {
transform: rotate(180deg);
}
}
}
} }

View File

@@ -1,4 +1,11 @@
import { Component, Input, ViewEncapsulation } from '@angular/core'; import { Component, Input, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
import { NavigationEnd, Router } from '@angular/router';
import { Subject } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
import { FusePerfectScrollbarDirective } from '@fuse/directives/fuse-perfect-scrollbar/fuse-perfect-scrollbar.directive';
import { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';
@Component({ @Component({
selector : 'navbar', selector : 'navbar',
@@ -6,18 +13,125 @@ import { Component, Input, ViewEncapsulation } from '@angular/core';
styleUrls : ['./navbar.component.scss'], styleUrls : ['./navbar.component.scss'],
encapsulation: ViewEncapsulation.None encapsulation: ViewEncapsulation.None
}) })
export class NavbarComponent export class NavbarComponent implements OnInit, OnDestroy
{ {
// Variant // Layout
@Input() @Input()
variant; layout;
fusePerfectScrollbarUpdateTimeout: any;
navigation: any;
// Private
private _fusePerfectScrollbar: FusePerfectScrollbarDirective;
private _unsubscribeAll: Subject<any>;
/** /**
* Constructor * Constructor
*
* @param {FuseNavigationService} _fuseNavigationService
* @param {FuseSidebarService} _fuseSidebarService
* @param {Router} _router
*/ */
constructor() constructor(
private _fuseNavigationService: FuseNavigationService,
private _fuseSidebarService: FuseSidebarService,
private _router: Router
)
{ {
// Set the defaults // Set the defaults
this.variant = 'vertical-style-1'; this.layout = 'vertical';
// Set the private defaults
this._unsubscribeAll = new Subject();
}
// -----------------------------------------------------------------------------------------------------
// @ Accessors
// -----------------------------------------------------------------------------------------------------
// Directive
@ViewChild(FusePerfectScrollbarDirective)
set directive(theDirective: FusePerfectScrollbarDirective)
{
if ( !theDirective )
{
return;
}
this._fusePerfectScrollbar = theDirective;
this._fuseNavigationService.onItemCollapseToggled
.pipe(takeUntil(this._unsubscribeAll))
.subscribe(() => {
this.fusePerfectScrollbarUpdateTimeout = setTimeout(() => {
this._fusePerfectScrollbar.update();
}, 310);
});
}
// -----------------------------------------------------------------------------------------------------
// @ Lifecycle hooks
// -----------------------------------------------------------------------------------------------------
/**
* On init
*/
ngOnInit(): void
{
this._router.events
.pipe(
filter((event) => event instanceof NavigationEnd),
takeUntil(this._unsubscribeAll)
)
.subscribe(() => {
if ( this._fuseSidebarService.getSidebar('navbar') )
{
this._fuseSidebarService.getSidebar('navbar').close();
}
}
);
// Get current navigation
this._fuseNavigationService.onNavigationChanged
.pipe(filter(value => value !== null))
.subscribe(() => {
this.navigation = this._fuseNavigationService.getCurrentNavigation();
});
}
/**
* On destroy
*/
ngOnDestroy(): void
{
if ( this.fusePerfectScrollbarUpdateTimeout )
{
clearTimeout(this.fusePerfectScrollbarUpdateTimeout);
}
// Unsubscribe from all subscriptions
this._unsubscribeAll.next();
this._unsubscribeAll.complete();
}
// -----------------------------------------------------------------------------------------------------
// @ Public methods
// -----------------------------------------------------------------------------------------------------
/**
* Toggle sidebar opened status
*/
toggleSidebarOpened(): void
{
this._fuseSidebarService.getSidebar('navbar').toggleOpen();
}
/**
* Toggle sidebar folded status
*/
toggleSidebarFolded(): void
{
this._fuseSidebarService.getSidebar('navbar').toggleFold();
} }
} }

View File

@@ -1,22 +1,21 @@
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { MatButtonModule, MatIconModule } from '@angular/material';
import { FuseNavigationModule } from '@fuse/components';
import { FuseSharedModule } from '@fuse/shared.module'; import { FuseSharedModule } from '@fuse/shared.module';
import { NavbarComponent } from 'app/layout/components/navbar/navbar.component'; import { NavbarComponent } from 'app/layout/components/navbar/navbar.component';
import { NavbarHorizontalStyle1Module } from 'app/layout/components/navbar/horizontal/style-1/style-1.module';
import { NavbarVerticalStyle1Module } from 'app/layout/components/navbar/vertical/style-1/style-1.module';
import { NavbarVerticalStyle2Module } from 'app/layout/components/navbar/vertical/style-2/style-2.module';
@NgModule({ @NgModule({
declarations: [ declarations: [
NavbarComponent NavbarComponent
], ],
imports : [ imports : [
FuseSharedModule, MatButtonModule,
MatIconModule,
NavbarHorizontalStyle1Module, FuseSharedModule,
NavbarVerticalStyle1Module, FuseNavigationModule
NavbarVerticalStyle2Module
], ],
exports : [ exports : [
NavbarComponent NavbarComponent

View File

@@ -1,41 +0,0 @@
<div class="navbar-top mat-indigo-700-bg">
<div class="logo">
<img class="logo-icon" src="assets/images/logos/fuse.svg">
<span class="logo-text secondary-text">FUSE</span>
</div>
<div class="buttons">
<button mat-icon-button class="toggle-sidebar-folded"
(click)="toggleSidebarFolded()" fxHide.lt-lg>
<mat-icon class="secondary-text">menu</mat-icon>
</button>
<button mat-icon-button class="toggle-sidebar-opened"
(click)="toggleSidebarOpened()" fxHide.gt-md>
<mat-icon class="secondary-text">arrow_back</mat-icon>
</button>
</div>
</div>
<div class="navbar-scroll-container" fusePerfectScrollbar [fusePerfectScrollbarOptions]="{suppressScrollX: true}">
<div class="user mat-indigo-700-bg" fxLayout="column">
<div class="h3 username">Charlie Adams</div>
<div class="h5 email hint-text mt-8">adams.charlie@mail.com</div>
<div class="avatar-container" [ngClass]="fuseConfig.layout.navbar.background">
<img class="avatar" src="assets/images/avatars/Velazquez.jpg">
</div>
</div>
<div class="navbar-content">
<fuse-navigation layout="vertical"></fuse-navigation>
</div>
</div>

View File

@@ -1,162 +0,0 @@
@import "src/@fuse/scss/fuse";
fuse-sidebar {
&.navbar-fuse-sidebar {
overflow: hidden;
&.folded:not(.unfolded) {
navbar {
navbar-vertical-style-1 {
.navbar-top {
padding: 12px 0;
justify-content: center;
.buttons {
display: none;
}
.logo {
.logo-icon {
width: 32px;
height: 32px;
}
.logo-text {
display: none;
}
}
}
.navbar-scroll-container {
.user {
padding: 12px 0;
.avatar-container {
position: relative;
top: auto;
padding: 0;
.avatar {
width: 40px;
height: 40px;
}
}
.username,
.email {
display: none;
}
}
.navbar-content {
margin-top: 0;
}
}
}
}
}
}
}
navbar {
navbar-vertical-style-1 {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
.navbar-top {
display: flex;
flex-direction: row;
flex: 1 0 auto;
align-items: center;
justify-content: space-between;
min-height: 64px;
height: 64px;
padding: 12px 12px 12px 20px;
@include media-breakpoint('xs') {
min-height: 56px;
height: 56px;
}
.logo {
display: flex;
align-items: center;
.logo-icon {
width: 24px;
height: 24px;
}
.logo-text {
margin-left: 12px;
font-size: 16px;
font-weight: 300;
letter-spacing: 0.4px;
line-height: normal;
}
}
.buttons {
display: flex;
align-items: center;
}
}
.navbar-scroll-container {
overflow-y: auto;
background: linear-gradient(rgba(0, 0, 0, 0) 30%, rgba(0, 0, 0, 0) 30%),
linear-gradient(rgba(0, 0, 0, 0.25) 0, rgba(0, 0, 0, 0) 40%);
background-repeat: no-repeat;
background-size: 100% 40px, 100% 10px;
background-attachment: local, scroll;
.user {
position: relative;
display: flex;
align-items: center;
justify-content: flex-start;
width: 100%;
padding: 24px 0 64px 0;
.avatar-container {
position: absolute;
top: 92px;
border-radius: 50%;
padding: 8px;
.avatar {
width: 72px;
height: 72px;
margin: 0;
}
}
}
.navbar-content {
flex: 1 1 auto;
margin-top: 32px;
}
}
}
&.right-navbar {
.toggle-sidebar-opened {
mat-icon {
transform: rotate(180deg);
}
}
}
}

View File

@@ -1,167 +0,0 @@
import { Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
import { NavigationEnd, Router } from '@angular/router';
import { Subject } from 'rxjs';
import { filter, take, takeUntil } from 'rxjs/operators';
import { FuseConfigService } from '@fuse/services/config.service';
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
import { FusePerfectScrollbarDirective } from '@fuse/directives/fuse-perfect-scrollbar/fuse-perfect-scrollbar.directive';
import { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';
@Component({
selector : 'navbar-vertical-style-1',
templateUrl : './style-1.component.html',
styleUrls : ['./style-1.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class NavbarVerticalStyle1Component implements OnInit, OnDestroy
{
fuseConfig: any;
fusePerfectScrollbarUpdateTimeout: any;
navigation: any;
// Private
private _fusePerfectScrollbar: FusePerfectScrollbarDirective;
private _unsubscribeAll: Subject<any>;
/**
* Constructor
*
* @param {FuseConfigService} _fuseConfigService
* @param {FuseNavigationService} _fuseNavigationService
* @param {FuseSidebarService} _fuseSidebarService
* @param {Router} _router
*/
constructor(
private _fuseConfigService: FuseConfigService,
private _fuseNavigationService: FuseNavigationService,
private _fuseSidebarService: FuseSidebarService,
private _router: Router
)
{
// Set the private defaults
this._unsubscribeAll = new Subject();
}
// -----------------------------------------------------------------------------------------------------
// @ Accessors
// -----------------------------------------------------------------------------------------------------
// Directive
@ViewChild(FusePerfectScrollbarDirective)
set directive(theDirective: FusePerfectScrollbarDirective)
{
if ( !theDirective )
{
return;
}
this._fusePerfectScrollbar = theDirective;
// Update the scrollbar on collapsable item toggle
this._fuseNavigationService.onItemCollapseToggled
.pipe(takeUntil(this._unsubscribeAll))
.subscribe(() => {
this.fusePerfectScrollbarUpdateTimeout = setTimeout(() => {
this._fusePerfectScrollbar.update();
}, 310);
});
// Scroll to the active item position
this._router.events
.pipe(
filter((event) => event instanceof NavigationEnd),
take(1)
)
.subscribe(() => {
setTimeout(() => {
const activeNavItem: any = document.querySelector('navbar .nav-link.active');
if ( activeNavItem )
{
const activeItemOffsetTop = activeNavItem.offsetTop,
activeItemOffsetParentTop = activeNavItem.offsetParent.offsetTop,
scrollDistance = activeItemOffsetTop - activeItemOffsetParentTop - (48 * 3) - 168;
this._fusePerfectScrollbar.scrollToTop(scrollDistance);
}
});
}
);
}
// -----------------------------------------------------------------------------------------------------
// @ Lifecycle hooks
// -----------------------------------------------------------------------------------------------------
/**
* On init
*/
ngOnInit(): void
{
this._router.events
.pipe(
filter((event) => event instanceof NavigationEnd),
takeUntil(this._unsubscribeAll)
)
.subscribe(() => {
if ( this._fuseSidebarService.getSidebar('navbar') )
{
this._fuseSidebarService.getSidebar('navbar').close();
}
}
);
// Subscribe to the config changes
this._fuseConfigService.config
.pipe(takeUntil(this._unsubscribeAll))
.subscribe((config) => {
this.fuseConfig = config;
});
// Get current navigation
this._fuseNavigationService.onNavigationChanged
.pipe(
filter(value => value !== null),
takeUntil(this._unsubscribeAll)
)
.subscribe(() => {
this.navigation = this._fuseNavigationService.getCurrentNavigation();
});
}
/**
* On destroy
*/
ngOnDestroy(): void
{
if ( this.fusePerfectScrollbarUpdateTimeout )
{
clearTimeout(this.fusePerfectScrollbarUpdateTimeout);
}
// Unsubscribe from all subscriptions
this._unsubscribeAll.next();
this._unsubscribeAll.complete();
}
// -----------------------------------------------------------------------------------------------------
// @ Public methods
// -----------------------------------------------------------------------------------------------------
/**
* Toggle sidebar opened status
*/
toggleSidebarOpened(): void
{
this._fuseSidebarService.getSidebar('navbar').toggleOpen();
}
/**
* Toggle sidebar folded status
*/
toggleSidebarFolded(): void
{
this._fuseSidebarService.getSidebar('navbar').toggleFold();
}
}

View File

@@ -1,26 +0,0 @@
import { NgModule } from '@angular/core';
import { MatButtonModule, MatIconModule } from '@angular/material';
import { FuseNavigationModule } from '@fuse/components';
import { FuseSharedModule } from '@fuse/shared.module';
import { NavbarVerticalStyle1Component } from 'app/layout/components/navbar/vertical/style-1/style-1.component';
@NgModule({
declarations: [
NavbarVerticalStyle1Component
],
imports : [
MatButtonModule,
MatIconModule,
FuseSharedModule,
FuseNavigationModule
],
exports : [
NavbarVerticalStyle1Component
]
})
export class NavbarVerticalStyle1Module
{
}

View File

@@ -1,23 +0,0 @@
<div class="navbar-header">
<div class="logo">
<img class="logo-icon" src="assets/images/logos/fuse.svg">
<span class="logo-text">FUSE</span>
</div>
<button mat-icon-button class="toggle-sidebar-folded"
(click)="toggleSidebarFolded()" fxHide.lt-lg>
<mat-icon>menu</mat-icon>
</button>
<button mat-icon-button class="toggle-sidebar-opened"
(click)="toggleSidebarOpened()" fxHide.gt-md>
<mat-icon>arrow_back</mat-icon>
</button>
</div>
<div class="navbar-content" fusePerfectScrollbar
[fusePerfectScrollbarOptions]="{suppressScrollX: true}">
<fuse-navigation layout="vertical"></fuse-navigation>
</div>

View File

@@ -1,84 +0,0 @@
@import "src/@fuse/scss/fuse";
fuse-sidebar {
&.navbar-fuse-sidebar {
overflow: hidden;
&.folded:not(.unfolded) {
navbar {
navbar-vertical-style-2 {
.navbar-header {
padding: 0 13px;
.logo {
.logo-text {
opacity: 0;
transition: opacity 200ms ease;
}
}
}
}
}
}
}
}
navbar {
navbar-vertical-style-2 {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
.navbar-header {
display: flex;
align-items: center;
justify-content: space-between;
height: 64px;
min-height: 64px;
padding: 0 16px 0 24px;
transition: padding 200ms ease;
background-color: rgba(255, 255, 255, .05);
@include mat-elevation(1);
.logo {
display: flex;
align-items: center;
.logo-icon {
width: 38px;
height: 38px;
}
.logo-text {
margin-left: 8px;
font-size: 20px;
font-weight: 300;
letter-spacing: 0.4px;
}
}
}
.navbar-content {
flex: 1 1 auto;
overflow-y: auto;
}
}
&.right-navbar {
.toggle-sidebar-opened {
mat-icon {
transform: rotate(180deg);
}
}
}
}

View File

@@ -1,156 +0,0 @@
import { Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';
import { NavigationEnd, Router } from '@angular/router';
import { Subject } from 'rxjs';
import { filter, take, takeUntil } from 'rxjs/operators';
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
import { FusePerfectScrollbarDirective } from '@fuse/directives/fuse-perfect-scrollbar/fuse-perfect-scrollbar.directive';
import { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';
@Component({
selector : 'navbar-vertical-style-2',
templateUrl : './style-2.component.html',
styleUrls : ['./style-2.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class NavbarVerticalStyle2Component implements OnInit, OnDestroy
{
fusePerfectScrollbarUpdateTimeout: any;
navigation: any;
// Private
private _fusePerfectScrollbar: FusePerfectScrollbarDirective;
private _unsubscribeAll: Subject<any>;
/**
* Constructor
*
* @param {FuseNavigationService} _fuseNavigationService
* @param {FuseSidebarService} _fuseSidebarService
* @param {Router} _router
*/
constructor(
private _fuseNavigationService: FuseNavigationService,
private _fuseSidebarService: FuseSidebarService,
private _router: Router
)
{
// Set the private defaults
this._unsubscribeAll = new Subject();
}
// -----------------------------------------------------------------------------------------------------
// @ Accessors
// -----------------------------------------------------------------------------------------------------
// Directive
@ViewChild(FusePerfectScrollbarDirective)
set directive(theDirective: FusePerfectScrollbarDirective)
{
if ( !theDirective )
{
return;
}
this._fusePerfectScrollbar = theDirective;
// Update the scrollbar on collapsable item toggle
this._fuseNavigationService.onItemCollapseToggled
.pipe(takeUntil(this._unsubscribeAll))
.subscribe(() => {
this.fusePerfectScrollbarUpdateTimeout = setTimeout(() => {
this._fusePerfectScrollbar.update();
}, 310);
});
// Scroll to the active item position
this._router.events
.pipe(
filter((event) => event instanceof NavigationEnd),
take(1)
)
.subscribe(() => {
setTimeout(() => {
const activeNavItem: any = document.querySelector('navbar .nav-link.active');
if ( activeNavItem )
{
const activeItemOffsetTop = activeNavItem.offsetTop,
activeItemOffsetParentTop = activeNavItem.offsetParent.offsetTop,
scrollDistance = activeItemOffsetTop - activeItemOffsetParentTop - (48 * 3);
this._fusePerfectScrollbar.scrollToTop(scrollDistance);
}
});
}
);
}
// -----------------------------------------------------------------------------------------------------
// @ Lifecycle hooks
// -----------------------------------------------------------------------------------------------------
/**
* On init
*/
ngOnInit(): void
{
this._router.events
.pipe(
filter((event) => event instanceof NavigationEnd),
takeUntil(this._unsubscribeAll)
)
.subscribe(() => {
if ( this._fuseSidebarService.getSidebar('navbar') )
{
this._fuseSidebarService.getSidebar('navbar').close();
}
}
);
// Get current navigation
this._fuseNavigationService.onNavigationChanged
.pipe(
filter(value => value !== null),
takeUntil(this._unsubscribeAll)
)
.subscribe(() => {
this.navigation = this._fuseNavigationService.getCurrentNavigation();
});
}
/**
* On destroy
*/
ngOnDestroy(): void
{
if ( this.fusePerfectScrollbarUpdateTimeout )
{
clearTimeout(this.fusePerfectScrollbarUpdateTimeout);
}
// Unsubscribe from all subscriptions
this._unsubscribeAll.next();
this._unsubscribeAll.complete();
}
// -----------------------------------------------------------------------------------------------------
// @ Public methods
// -----------------------------------------------------------------------------------------------------
/**
* Toggle sidebar opened status
*/
toggleSidebarOpened(): void
{
this._fuseSidebarService.getSidebar('navbar').toggleOpen();
}
/**
* Toggle sidebar folded status
*/
toggleSidebarFolded(): void
{
this._fuseSidebarService.getSidebar('navbar').toggleFold();
}
}

View File

@@ -1,26 +0,0 @@
import { NgModule } from '@angular/core';
import { MatButtonModule, MatIconModule } from '@angular/material';
import { FuseNavigationModule } from '@fuse/components';
import { FuseSharedModule } from '@fuse/shared.module';
import { NavbarVerticalStyle2Component } from 'app/layout/components/navbar/vertical/style-2/style-2.component';
@NgModule({
declarations: [
NavbarVerticalStyle2Component
],
imports : [
MatButtonModule,
MatIconModule,
FuseSharedModule,
FuseNavigationModule
],
exports : [
NavbarVerticalStyle2Component
]
})
export class NavbarVerticalStyle2Module
{
}

View File

@@ -1,7 +1,4 @@
import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; import { Component, ViewEncapsulation } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
@Component({ @Component({
selector : 'quick-panel', selector : 'quick-panel',
@@ -9,24 +6,17 @@ import { takeUntil } from 'rxjs/operators';
styleUrls : ['./quick-panel.component.scss'], styleUrls : ['./quick-panel.component.scss'],
encapsulation: ViewEncapsulation.None encapsulation: ViewEncapsulation.None
}) })
export class QuickPanelComponent implements OnInit, OnDestroy export class QuickPanelComponent
{ {
date: Date; date: Date;
events: any[]; events: any[];
notes: any[]; notes: any[];
settings: any; settings: any;
// Private
private _unsubscribeAll: Subject<any>;
/** /**
* Constructor * Constructor
*
* @param {HttpClient} _httpClient
*/ */
constructor( constructor()
private _httpClient: HttpClient
)
{ {
// Set the defaults // Set the defaults
this.date = new Date(); this.date = new Date();
@@ -35,42 +25,5 @@ export class QuickPanelComponent implements OnInit, OnDestroy
cloud : false, cloud : false,
retro : true retro : true
}; };
// Set the private defaults
this._unsubscribeAll = new Subject();
}
// -----------------------------------------------------------------------------------------------------
// @ Lifecycle hooks
// -----------------------------------------------------------------------------------------------------
/**
* On init
*/
ngOnInit(): void
{
// Subscribe to the events
this._httpClient.get('api/quick-panel-events')
.pipe(takeUntil(this._unsubscribeAll))
.subscribe((response: any) => {
this.events = response;
});
// Subscribe to the notes
this._httpClient.get('api/quick-panel-notes')
.pipe(takeUntil(this._unsubscribeAll))
.subscribe((response: any) => {
this.notes = response;
});
}
/**
* On destroy
*/
ngOnDestroy(): void
{
// Unsubscribe from all subscriptions
this._unsubscribeAll.next();
this._unsubscribeAll.complete();
} }
} }

View File

@@ -30,8 +30,8 @@
<button mat-button [matMenuTriggerFor]="userMenu" <button mat-button [matMenuTriggerFor]="userMenu"
class="user-button"> class="user-button">
<div fxLayout="row" fxLayoutAlign="center center"> <div fxLayout="row" fxLayoutAlign="center center">
<img class="avatar mr-0 mr-sm-16" src="assets/images/avatars/Velazquez.jpg"> <img class="avatar" src="assets/images/avatars/profile.jpg">
<span class="username mr-12" fxHide fxShow.gt-sm>Charlie Adams</span> <span class="username mr-12" fxHide fxShow.gt-sm>John Doe</span>
<mat-icon class="s-16" fxHide.xs>keyboard_arrow_down</mat-icon> <mat-icon class="s-16" fxHide.xs>keyboard_arrow_down</mat-icon>
</div> </div>
</button> </button>
@@ -72,32 +72,17 @@
<mat-menu #languageMenu="matMenu" [overlapTrigger]="false"> <mat-menu #languageMenu="matMenu" [overlapTrigger]="false">
<button mat-menu-item *ngFor="let lang of languages" (click)="setLanguage(lang)"> <button mat-menu-item *ngFor="let lang of languages" (click)="setLanguage(lang.id)">
<span fxLayout="row" fxLayoutAlign="start center"> <span fxLayout="row" fxLayoutAlign="start center">
<img class="flag mr-16" [src]="'assets/images/flags/'+lang.flag+'.png'"> <img class="flag mr-16" [src]="'assets/images/flags/'+lang.flag+'.png'">
<span class="iso">{{lang.title}}</span> <span class="iso">{{lang.title}}</span>
</span> </span>
</button> </button>
<button mat-menu-item [routerLink]="'/components/multi-language'">
<div fxLayout="row" fxLayoutAlign="start center">
<span>Learn more</span>
</div>
</button>
</mat-menu> </mat-menu>
<div class="toolbar-separator" fxHide fxShow.gt-xs></div> <div class="toolbar-separator" fxHide fxShow.gt-xs></div>
<button mat-icon-button fxHide.gt-md
class="chat-panel-toggle-button"
(click)="toggleSidebarOpen('chatPanel')"
aria-label="Toggle chat panel">
<mat-icon class="icon">chat</mat-icon>
</button>
<div class="toolbar-separator" fxHide.gt-md></div>
<button mat-icon-button <button mat-icon-button
class="quick-panel-toggle-button" class="quick-panel-toggle-button"
(click)="toggleSidebarOpen('quickPanel')" (click)="toggleSidebarOpen('quickPanel')"

View File

@@ -36,7 +36,6 @@
.user-button, .user-button,
fuse-search-bar, fuse-search-bar,
.language-button, .language-button,
.chat-panel-toggle-button,
.quick-panel-toggle-button { .quick-panel-toggle-button {
min-width: 64px; min-width: 64px;
height: 64px; height: 64px;

View File

@@ -1,6 +1,7 @@
import { Component, OnDestroy, OnInit } from '@angular/core'; import { Component, OnDestroy, OnInit } from '@angular/core';
import { NavigationEnd, NavigationStart, Router } from '@angular/router';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators'; import { filter, takeUntil } from 'rxjs/operators';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import * as _ from 'lodash'; import * as _ from 'lodash';
@@ -8,7 +9,6 @@ import { FuseConfigService } from '@fuse/services/config.service';
import { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service'; import { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';
import { navigation } from 'app/navigation/navigation'; import { navigation } from 'app/navigation/navigation';
import { FuseLoadingBarService } from '@fuse/services/loading-bar.service';
@Component({ @Component({
selector : 'toolbar', selector : 'toolbar',
@@ -34,14 +34,14 @@ export class ToolbarComponent implements OnInit, OnDestroy
* Constructor * Constructor
* *
* @param {FuseConfigService} _fuseConfigService * @param {FuseConfigService} _fuseConfigService
* @param {FuseLoadingBarService} _fuseLoadingBarService
* @param {FuseSidebarService} _fuseSidebarService * @param {FuseSidebarService} _fuseSidebarService
* @param {Router} _router
* @param {TranslateService} _translateService * @param {TranslateService} _translateService
*/ */
constructor( constructor(
private _fuseConfigService: FuseConfigService, private _fuseConfigService: FuseConfigService,
private _fuseLoadingBarService: FuseLoadingBarService,
private _fuseSidebarService: FuseSidebarService, private _fuseSidebarService: FuseSidebarService,
private _router: Router,
private _translateService: TranslateService private _translateService: TranslateService
) )
{ {
@@ -102,11 +102,22 @@ export class ToolbarComponent implements OnInit, OnDestroy
*/ */
ngOnInit(): void ngOnInit(): void
{ {
// Subscribe to the Fuse loading bar service // Subscribe to the router events to show/hide the loading bar
this._fuseLoadingBarService.visible this._router.events
.pipe(takeUntil(this._unsubscribeAll)) .pipe(
.subscribe((visible) => { filter((event) => event instanceof NavigationStart),
this.showLoadingBar = visible; takeUntil(this._unsubscribeAll)
)
.subscribe((event) => {
this.showLoadingBar = true;
});
this._router.events
.pipe(
filter((event) => event instanceof NavigationEnd)
)
.subscribe((event) => {
this.showLoadingBar = false;
}); });
// Subscribe to the config changes // Subscribe to the config changes
@@ -160,14 +171,14 @@ export class ToolbarComponent implements OnInit, OnDestroy
/** /**
* Set the language * Set the language
* *
* @param lang * @param langId
*/ */
setLanguage(lang): void setLanguage(langId): void
{ {
// Set the selected language for the toolbar // Set the selected language for toolbar
this.selectedLanguage = lang; this.selectedLanguage = _.find(this.languages, {'id': langId});
// Use the selected language for translations // Use the selected language for translations
this._translateService.use(lang.id); this._translateService.use(langId);
} }
} }

View File

@@ -1,17 +1,3 @@
<!-- SIDE PANEL -->
<ng-container *ngIf="!fuseConfig.layout.sidepanel.hidden && fuseConfig.layout.sidepanel.position === 'left'">
<!-- CHAT PANEL -->
<fuse-sidebar name="chatPanel" position="left" class="chat-panel left-chat-panel"
[folded]="true" [foldedWidth]="70" [foldedAutoTriggerOnHover]="false"
lockedOpen="gt-md">
<chat-panel></chat-panel>
</fuse-sidebar>
<!-- / CHAT PANEL -->
</ng-container>
<!-- / SIDE PANEL -->
<div id="main" [ngClass]="{'boxed':fuseConfig.layout.width === 'boxed'}"> <div id="main" [ngClass]="{'boxed':fuseConfig.layout.width === 'boxed'}">
<!-- TOOLBAR: Above --> <!-- TOOLBAR: Above -->
@@ -69,22 +55,8 @@
</div> </div>
<!-- SIDE PANEL -->
<ng-container *ngIf="!fuseConfig.layout.sidepanel.hidden && fuseConfig.layout.sidepanel.position === 'right'">
<!-- CHAT PANEL -->
<fuse-sidebar name="chatPanel" position="right" class="chat-panel right-chat-panel"
[folded]="true" [foldedWidth]="70" [foldedAutoTriggerOnHover]="false"
lockedOpen="gt-md">
<chat-panel></chat-panel>
</fuse-sidebar>
<!-- / CHAT PANEL -->
</ng-container>
<!-- / SIDE PANEL -->
<!-- QUICK PANEL --> <!-- QUICK PANEL -->
<fuse-sidebar name="quickPanel" position="right" class="quick-panel"> <fuse-sidebar [name]="'quickPanel'" position="right" class="quick-panel">
<quick-panel></quick-panel> <quick-panel></quick-panel>
</fuse-sidebar> </fuse-sidebar>
<!-- / QUICK PANEL --> <!-- / QUICK PANEL -->
@@ -109,7 +81,7 @@
<!-- TOP NAVBAR --> <!-- TOP NAVBAR -->
<ng-template #topNavbar> <ng-template #topNavbar>
<navbar variant="horizontal-style-1" <navbar layout="horizontal"
class="top-navbar" [ngClass]="fuseConfig.layout.navbar.background" class="top-navbar" [ngClass]="fuseConfig.layout.navbar.background"
fxHide fxShow.gt-md fxHide fxShow.gt-md
*ngIf="!fuseConfig.layout.navbar.hidden"> *ngIf="!fuseConfig.layout.navbar.hidden">
@@ -119,11 +91,10 @@
<!-- LEFT NAVBAR --> <!-- LEFT NAVBAR -->
<ng-template #leftNavbar> <ng-template #leftNavbar>
<fuse-sidebar name="navbar" class="navbar-fuse-sidebar" <fuse-sidebar [name]="'navbar'"
[folded]="fuseConfig.layout.navbar.folded" [folded]="fuseConfig.layout.navbar.folded"
*ngIf="!fuseConfig.layout.navbar.hidden"> *ngIf="!fuseConfig.layout.navbar.hidden">
<navbar [variant]="fuseConfig.layout.navbar.variant" <navbar class="left-navbar" [ngClass]="fuseConfig.layout.navbar.background" layout="vertical"></navbar>
class="left-navbar" [ngClass]="fuseConfig.layout.navbar.background"></navbar>
</fuse-sidebar> </fuse-sidebar>
</ng-template> </ng-template>
<!-- / LEFT NAVBAR --> <!-- / LEFT NAVBAR -->

View File

@@ -14,7 +14,6 @@ horizontal-layout-1 {
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 1; z-index: 1;
min-width: 0;
// Boxed // Boxed
&.boxed { &.boxed {

View File

@@ -4,7 +4,6 @@ import { MatSidenavModule } from '@angular/material';
import { FuseSidebarModule, FuseThemeOptionsModule } from '@fuse/components'; import { FuseSidebarModule, FuseThemeOptionsModule } from '@fuse/components';
import { FuseSharedModule } from '@fuse/shared.module'; import { FuseSharedModule } from '@fuse/shared.module';
import { ChatPanelModule } from 'app/layout/components/chat-panel/chat-panel.module';
import { ContentModule } from 'app/layout/components/content/content.module'; import { ContentModule } from 'app/layout/components/content/content.module';
import { FooterModule } from 'app/layout/components/footer/footer.module'; import { FooterModule } from 'app/layout/components/footer/footer.module';
import { NavbarModule } from 'app/layout/components/navbar/navbar.module'; import { NavbarModule } from 'app/layout/components/navbar/navbar.module';
@@ -24,7 +23,6 @@ import { HorizontalLayout1Component } from 'app/layout/horizontal/layout-1/layou
FuseSidebarModule, FuseSidebarModule,
FuseThemeOptionsModule, FuseThemeOptionsModule,
ChatPanelModule,
ContentModule, ContentModule,
FooterModule, FooterModule,
NavbarModule, NavbarModule,

View File

@@ -1,17 +1,3 @@
<!-- SIDE PANEL -->
<ng-container *ngIf="!fuseConfig.layout.sidepanel.hidden && fuseConfig.layout.sidepanel.position === 'left'">
<!-- CHAT PANEL -->
<fuse-sidebar name="chatPanel" position="left" class="chat-panel left-chat-panel"
[folded]="true" [foldedWidth]="70" [foldedAutoTriggerOnHover]="false"
lockedOpen="gt-md">
<chat-panel></chat-panel>
</fuse-sidebar>
<!-- / CHAT PANEL -->
</ng-container>
<!-- / SIDE PANEL -->
<div id="main" [ngClass]="{'boxed':fuseConfig.layout.width === 'boxed'}"> <div id="main" [ngClass]="{'boxed':fuseConfig.layout.width === 'boxed'}">
<!-- TOOLBAR: Above --> <!-- TOOLBAR: Above -->
@@ -81,22 +67,8 @@
</div> </div>
<!-- SIDE PANEL -->
<ng-container *ngIf="!fuseConfig.layout.sidepanel.hidden && fuseConfig.layout.sidepanel.position === 'right'">
<!-- CHAT PANEL -->
<fuse-sidebar name="chatPanel" position="right" class="chat-panel right-chat-panel"
[folded]="true" [foldedWidth]="70" [foldedAutoTriggerOnHover]="false"
lockedOpen="gt-md">
<chat-panel></chat-panel>
</fuse-sidebar>
<!-- / CHAT PANEL -->
</ng-container>
<!-- / SIDE PANEL -->
<!-- QUICK PANEL --> <!-- QUICK PANEL -->
<fuse-sidebar name="quickPanel" position="right" class="quick-panel"> <fuse-sidebar [name]="'quickPanel'" position="right" class="quick-panel">
<quick-panel></quick-panel> <quick-panel></quick-panel>
</fuse-sidebar> </fuse-sidebar>
<!-- / QUICK PANEL --> <!-- / QUICK PANEL -->
@@ -121,24 +93,22 @@
<!-- LEFT NAVBAR --> <!-- LEFT NAVBAR -->
<ng-template #leftNavbar> <ng-template #leftNavbar>
<fuse-sidebar name="navbar" class="navbar-fuse-sidebar" <fuse-sidebar [name]="'navbar'"
[folded]="fuseConfig.layout.navbar.folded" [folded]="fuseConfig.layout.navbar.folded"
lockedOpen="gt-md" [lockedOpen]="'gt-md'"
*ngIf="!fuseConfig.layout.navbar.hidden"> *ngIf="!fuseConfig.layout.navbar.hidden">
<navbar [variant]="fuseConfig.layout.navbar.variant" <navbar class="left-navbar" [ngClass]="fuseConfig.layout.navbar.background" layout="vertical"></navbar>
class="left-navbar" [ngClass]="fuseConfig.layout.navbar.background"></navbar>
</fuse-sidebar> </fuse-sidebar>
</ng-template> </ng-template>
<!-- / LEFT NAVBAR --> <!-- / LEFT NAVBAR -->
<!-- RIGHT NAVBAR --> <!-- RIGHT NAVBAR -->
<ng-template #rightNavbar> <ng-template #rightNavbar>
<fuse-sidebar name="navbar" position="right" class="navbar-fuse-sidebar" <fuse-sidebar [name]="'navbar'" position="right"
[folded]="fuseConfig.layout.navbar.folded" [folded]="fuseConfig.layout.navbar.folded"
lockedOpen="gt-md" [lockedOpen]="'gt-md'"
*ngIf="!fuseConfig.layout.navbar.hidden"> *ngIf="!fuseConfig.layout.navbar.hidden">
<navbar [variant]="fuseConfig.layout.navbar.variant" <navbar class="right-navbar" [ngClass]="fuseConfig.layout.navbar.background" layout="vertical"></navbar>
class="right-navbar" [ngClass]="fuseConfig.layout.navbar.background"></navbar>
</fuse-sidebar> </fuse-sidebar>
</ng-template> </ng-template>
<!-- / RIGHT NAVBAR --> <!-- / RIGHT NAVBAR -->

View File

@@ -14,7 +14,6 @@ vertical-layout-1 {
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 1; z-index: 1;
min-width: 0;
// Boxed // Boxed
&.boxed { &.boxed {

View File

@@ -4,7 +4,6 @@ import { RouterModule } from '@angular/router';
import { FuseSidebarModule } from '@fuse/components'; import { FuseSidebarModule } from '@fuse/components';
import { FuseSharedModule } from '@fuse/shared.module'; import { FuseSharedModule } from '@fuse/shared.module';
import { ChatPanelModule } from 'app/layout/components/chat-panel/chat-panel.module';
import { ContentModule } from 'app/layout/components/content/content.module'; import { ContentModule } from 'app/layout/components/content/content.module';
import { FooterModule } from 'app/layout/components/footer/footer.module'; import { FooterModule } from 'app/layout/components/footer/footer.module';
import { NavbarModule } from 'app/layout/components/navbar/navbar.module'; import { NavbarModule } from 'app/layout/components/navbar/navbar.module';
@@ -23,7 +22,6 @@ import { VerticalLayout1Component } from 'app/layout/vertical/layout-1/layout-1.
FuseSharedModule, FuseSharedModule,
FuseSidebarModule, FuseSidebarModule,
ChatPanelModule,
ContentModule, ContentModule,
FooterModule, FooterModule,
NavbarModule, NavbarModule,

View File

@@ -1,17 +1,3 @@
<!-- SIDE PANEL -->
<ng-container *ngIf="!fuseConfig.layout.sidepanel.hidden && fuseConfig.layout.sidepanel.position === 'left'">
<!-- CHAT PANEL -->
<fuse-sidebar name="chatPanel" position="left" class="chat-panel left-chat-panel"
[folded]="true" [foldedWidth]="70" [foldedAutoTriggerOnHover]="false"
lockedOpen="gt-md">
<chat-panel></chat-panel>
</fuse-sidebar>
<!-- / CHAT PANEL -->
</ng-container>
<!-- / SIDE PANEL -->
<div id="main" [ngClass]="{'boxed':fuseConfig.layout.width === 'boxed'}"> <div id="main" [ngClass]="{'boxed':fuseConfig.layout.width === 'boxed'}">
<!-- TOOLBAR: Above fixed --> <!-- TOOLBAR: Above fixed -->
@@ -81,22 +67,8 @@
</div> </div>
<!-- SIDE PANEL -->
<ng-container *ngIf="!fuseConfig.layout.sidepanel.hidden && fuseConfig.layout.sidepanel.position === 'right'">
<!-- CHAT PANEL -->
<fuse-sidebar name="chatPanel" position="right" class="chat-panel right-chat-panel"
[folded]="true" [foldedWidth]="70" [foldedAutoTriggerOnHover]="false"
lockedOpen="gt-md">
<chat-panel></chat-panel>
</fuse-sidebar>
<!-- / CHAT PANEL -->
</ng-container>
<!-- / SIDE PANEL -->
<!-- QUICK PANEL --> <!-- QUICK PANEL -->
<fuse-sidebar name="quickPanel" position="right" class="quick-panel"> <fuse-sidebar [name]="'quickPanel'" position="right" class="quick-panel">
<quick-panel></quick-panel> <quick-panel></quick-panel>
</fuse-sidebar> </fuse-sidebar>
<!-- / QUICK PANEL --> <!-- / QUICK PANEL -->
@@ -121,24 +93,22 @@
<!-- LEFT NAVBAR --> <!-- LEFT NAVBAR -->
<ng-template #leftNavbar> <ng-template #leftNavbar>
<fuse-sidebar name="navbar" class="navbar-fuse-sidebar" <fuse-sidebar [name]="'navbar'"
[folded]="fuseConfig.layout.navbar.folded" [folded]="fuseConfig.layout.navbar.folded"
lockedOpen="gt-md" [lockedOpen]="'gt-md'"
*ngIf="!fuseConfig.layout.navbar.hidden"> *ngIf="!fuseConfig.layout.navbar.hidden">
<navbar [variant]="fuseConfig.layout.navbar.variant" <navbar class="left-navbar" [ngClass]="fuseConfig.layout.navbar.background" layout="vertical"></navbar>
class="left-navbar" [ngClass]="fuseConfig.layout.navbar.background"></navbar>
</fuse-sidebar> </fuse-sidebar>
</ng-template> </ng-template>
<!-- / LEFT NAVBAR --> <!-- / LEFT NAVBAR -->
<!-- RIGHT NAVBAR --> <!-- RIGHT NAVBAR -->
<ng-template #rightNavbar> <ng-template #rightNavbar>
<fuse-sidebar name="navbar" position="right" class="navbar-fuse-sidebar" <fuse-sidebar [name]="'navbar'" position="right"
[folded]="fuseConfig.layout.navbar.folded" [folded]="fuseConfig.layout.navbar.folded"
lockedOpen="gt-md" [lockedOpen]="'gt-md'"
*ngIf="!fuseConfig.layout.navbar.hidden"> *ngIf="!fuseConfig.layout.navbar.hidden">
<navbar [variant]="fuseConfig.layout.navbar.variant" <navbar class="right-navbar" [ngClass]="fuseConfig.layout.navbar.background" layout="vertical"></navbar>
class="right-navbar" [ngClass]="fuseConfig.layout.navbar.background"></navbar>
</fuse-sidebar> </fuse-sidebar>
</ng-template> </ng-template>
<!-- / RIGHT NAVBAR --> <!-- / RIGHT NAVBAR -->

View File

@@ -14,7 +14,6 @@ vertical-layout-2 {
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 1; z-index: 1;
min-width: 0;
// Boxed // Boxed
&.boxed { &.boxed {

View File

@@ -4,7 +4,6 @@ import { RouterModule } from '@angular/router';
import { FuseSidebarModule } from '@fuse/components'; import { FuseSidebarModule } from '@fuse/components';
import { FuseSharedModule } from '@fuse/shared.module'; import { FuseSharedModule } from '@fuse/shared.module';
import { ChatPanelModule } from 'app/layout/components/chat-panel/chat-panel.module';
import { ContentModule } from 'app/layout/components/content/content.module'; import { ContentModule } from 'app/layout/components/content/content.module';
import { FooterModule } from 'app/layout/components/footer/footer.module'; import { FooterModule } from 'app/layout/components/footer/footer.module';
import { NavbarModule } from 'app/layout/components/navbar/navbar.module'; import { NavbarModule } from 'app/layout/components/navbar/navbar.module';
@@ -23,7 +22,6 @@ import { VerticalLayout2Component } from 'app/layout/vertical/layout-2/layout-2.
FuseSharedModule, FuseSharedModule,
FuseSidebarModule, FuseSidebarModule,
ChatPanelModule,
ContentModule, ContentModule,
FooterModule, FooterModule,
NavbarModule, NavbarModule,

View File

@@ -1,17 +1,3 @@
<!-- SIDE PANEL -->
<ng-container *ngIf="!fuseConfig.layout.sidepanel.hidden && fuseConfig.layout.sidepanel.position === 'left'">
<!-- CHAT PANEL -->
<fuse-sidebar name="chatPanel" position="left" class="chat-panel left-chat-panel"
[folded]="true" [foldedWidth]="70" [foldedAutoTriggerOnHover]="false"
lockedOpen="gt-md">
<chat-panel></chat-panel>
</fuse-sidebar>
<!-- / CHAT PANEL -->
</ng-container>
<!-- / SIDE PANEL -->
<div id="main" [ngClass]="{'boxed':fuseConfig.layout.width === 'boxed'}"> <div id="main" [ngClass]="{'boxed':fuseConfig.layout.width === 'boxed'}">
<!-- TOOLBAR: Above fixed --> <!-- TOOLBAR: Above fixed -->
@@ -67,22 +53,8 @@
</div> </div>
<!-- SIDE PANEL -->
<ng-container *ngIf="!fuseConfig.layout.sidepanel.hidden && fuseConfig.layout.sidepanel.position === 'right'">
<!-- CHAT PANEL -->
<fuse-sidebar name="chatPanel" position="right" class="chat-panel right-chat-panel"
[folded]="true" [foldedWidth]="70" [foldedAutoTriggerOnHover]="false"
lockedOpen="gt-md">
<chat-panel></chat-panel>
</fuse-sidebar>
<!-- / CHAT PANEL -->
</ng-container>
<!-- / SIDE PANEL -->
<!-- QUICK PANEL --> <!-- QUICK PANEL -->
<fuse-sidebar name="quickPanel" position="right" class="quick-panel"> <fuse-sidebar [name]="'quickPanel'" position="right" class="quick-panel">
<quick-panel></quick-panel> <quick-panel></quick-panel>
</fuse-sidebar> </fuse-sidebar>
<!-- / QUICK PANEL --> <!-- / QUICK PANEL -->
@@ -107,24 +79,22 @@
<!-- LEFT NAVBAR --> <!-- LEFT NAVBAR -->
<ng-template #leftNavbar> <ng-template #leftNavbar>
<fuse-sidebar name="navbar" class="navbar-fuse-sidebar" <fuse-sidebar [name]="'navbar'"
[folded]="fuseConfig.layout.navbar.folded" [folded]="fuseConfig.layout.navbar.folded"
lockedOpen="gt-md" [lockedOpen]="'gt-md'"
*ngIf="!fuseConfig.layout.navbar.hidden"> *ngIf="!fuseConfig.layout.navbar.hidden">
<navbar [variant]="fuseConfig.layout.navbar.variant" <navbar class="left-navbar" [ngClass]="fuseConfig.layout.navbar.background" layout="vertical"></navbar>
class="left-navbar" [ngClass]="fuseConfig.layout.navbar.background"></navbar>
</fuse-sidebar> </fuse-sidebar>
</ng-template> </ng-template>
<!-- / LEFT NAVBAR --> <!-- / LEFT NAVBAR -->
<!-- RIGHT NAVBAR --> <!-- RIGHT NAVBAR -->
<ng-template #rightNavbar> <ng-template #rightNavbar>
<fuse-sidebar name="navbar" position="right" class="navbar-fuse-sidebar" <fuse-sidebar [name]="'navbar'" position="right"
[folded]="fuseConfig.layout.navbar.folded" [folded]="fuseConfig.layout.navbar.folded"
lockedOpen="gt-md" [lockedOpen]="'gt-md'"
*ngIf="!fuseConfig.layout.navbar.hidden"> *ngIf="!fuseConfig.layout.navbar.hidden">
<navbar [variant]="fuseConfig.layout.navbar.variant" <navbar class="right-navbar" [ngClass]="fuseConfig.layout.navbar.background" layout="vertical"></navbar>
class="right-navbar" [ngClass]="fuseConfig.layout.navbar.background"></navbar>
</fuse-sidebar> </fuse-sidebar>
</ng-template> </ng-template>
<!-- / RIGHT NAVBAR --> <!-- / RIGHT NAVBAR -->

View File

@@ -1,4 +1,4 @@
@import "src/@fuse/scss/fuse"; @import "../../../../@fuse/scss/fuse";
vertical-layout-3 { vertical-layout-3 {
display: flex; display: flex;
@@ -14,7 +14,6 @@ vertical-layout-3 {
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 1; z-index: 1;
min-width: 0;
// Boxed // Boxed
&.boxed { &.boxed {

View File

@@ -4,7 +4,6 @@ import { RouterModule } from '@angular/router';
import { FuseSidebarModule } from '@fuse/components/index'; import { FuseSidebarModule } from '@fuse/components/index';
import { FuseSharedModule } from '@fuse/shared.module'; import { FuseSharedModule } from '@fuse/shared.module';
import { ChatPanelModule } from 'app/layout/components/chat-panel/chat-panel.module';
import { ContentModule } from 'app/layout/components/content/content.module'; import { ContentModule } from 'app/layout/components/content/content.module';
import { FooterModule } from 'app/layout/components/footer/footer.module'; import { FooterModule } from 'app/layout/components/footer/footer.module';
import { NavbarModule } from 'app/layout/components/navbar/navbar.module'; import { NavbarModule } from 'app/layout/components/navbar/navbar.module';
@@ -23,7 +22,6 @@ import { VerticalLayout3Component } from 'app/layout/vertical/layout-3/layout-3.
FuseSharedModule, FuseSharedModule,
FuseSidebarModule, FuseSidebarModule,
ChatPanelModule,
ContentModule, ContentModule,
FooterModule, FooterModule,
NavbarModule, NavbarModule,

View File

@@ -1,33 +0,0 @@
<div class="page-layout simple fullwidth angular-material-elements">
<!-- HEADER -->
<div class="header mat-accent-bg p-24 h-160" fxLayout="column" fxLayoutAlign="center center" fxLayout.gt-xs="row"
fxLayoutAlign.gt-xs="space-between center">
<div fxLayout="column" fxLayoutAlign="center center" fxLayout.gt-xs="column" fxLayoutAlign.gt-xs="center start">
<div class="black-fg" fxLayout="row" fxLayoutAlign="start center">
<mat-icon class="secondary-text s-18">home</mat-icon>
<mat-icon class="secondary-text s-16">chevron_right</mat-icon>
<span class="secondary-text">Components</span>
<mat-icon class="secondary-text s-16">chevron_right</mat-icon>
<span class="secondary-text">Angular Material Elements</span>
</div>
<div class="h2 mt-16">{{title}}</div>
</div>
<a mat-raised-button class="reference-button mat-white-bg mt-16 mt-sm-0" href="https://material.angular.io/"
target="_blank">
<mat-icon class="mr-8">link</mat-icon>
<span>Reference</span>
</a>
</div>
<!-- / HEADER -->
<!-- CONTENT -->
<div class="content p-24">
<div *ngFor="let example of examples">
<example-viewer [example]="example"></example-viewer>
</div>
</div>
</div>

View File

@@ -1,9 +0,0 @@
:host {
.angular-material-elements {
> .content {
max-width: 960px;
}
}
}

View File

@@ -1,60 +0,0 @@
import { Component, OnDestroy, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { COMPONENT_MAP } from 'app/main/angular-material-elements/example-components';
@Component({
selector : 'angular-material',
templateUrl: './angular-material-elements.component.html',
styleUrls : ['./angular-material-elements.component.scss']
})
export class AngularMaterialElementsComponent implements OnInit, OnDestroy
{
id: string;
title: string;
examples: any;
// Private
private _unsubscribeAll: Subject<any>;
/**
* Constructor
*
* @param {ActivatedRoute} _activatedRoute
*/
constructor(
private _activatedRoute: ActivatedRoute
)
{
// Set the private defaults
this._unsubscribeAll = new Subject();
}
/**
* On init
*/
ngOnInit(): void
{
this._activatedRoute.params
.pipe(takeUntil(this._unsubscribeAll))
.subscribe(params => {
this.id = params['id'];
const _title = this.id.replace('-', ' ');
this.title = _title.charAt(0).toUpperCase() + _title.substring(1);
this.examples = COMPONENT_MAP[this.id];
});
}
/**
* On destroy
*/
ngOnDestroy(): void
{
// Unsubscribe from all subscriptions
this._unsubscribeAll.next();
this._unsubscribeAll.complete();
}
}

View File

@@ -1,45 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { FuseSharedModule } from '@fuse/shared.module';
import { FuseHighlightModule } from '@fuse/components/index';
import { FuseWidgetModule } from '@fuse/components/widget/widget.module';
import { MaterialModule } from 'app/main/angular-material-elements/material.module';
import { EXAMPLE_LIST } from 'app/main/angular-material-elements/example-components';
import { AngularMaterialElementsComponent } from 'app/main/angular-material-elements/angular-material-elements.component';
import { ExampleViewerComponent } from 'app/main/angular-material-elements/example-viewer/example-viewer';
const routes: Routes = [
{
path : '',
children: [
{
path : ':id',
component: AngularMaterialElementsComponent
}
]
}
];
@NgModule({
declarations : [
[...EXAMPLE_LIST],
AngularMaterialElementsComponent,
ExampleViewerComponent
],
imports : [
RouterModule.forChild(routes),
MaterialModule,
FuseSharedModule,
FuseHighlightModule,
FuseWidgetModule
],
entryComponents: EXAMPLE_LIST,
})
export class AngularMaterialElementsModule
{
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,71 +0,0 @@
<div class="example-viewer-wrapper mat-white-bg mat-elevation-z2">
<div class="example-viewer-header">
<div class="example-viewer-title">{{exampleData?.title}}</div>
<button mat-icon-button type="button" (click)="toggleSourceView()"
[matTooltip]="'View source'">
<mat-icon>
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" fit=""
preserveAspectRatio="xMidYMid meet" focusable="false">
<path fill="none" d="M0 0h24v24H0V0z"></path>
<path
d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"></path>
</svg>
</mat-icon>
</button>
</div>
<div class="example-viewer-source" [fxShow]="showSource">
<mat-tab-group [(selectedIndex)]="selectedIndex">
<mat-tab label="HTML"></mat-tab>
<mat-tab label="TS"></mat-tab>
<mat-tab label="CSS"></mat-tab>
</mat-tab-group>
<div class="tab-content">
<section class="tab" *ngIf="selectedIndex === 0"
[@animate]="{value:'*',params:{opacity:'0',duration:'200ms'}}">
<button mat-icon-button type="button" class="example-source-copy"
title="Copy example source" aria-label="Copy example source to clipboard"
(click)="copySource(htmlView.el.nativeElement.innerText)">
<mat-icon>content_copy</mat-icon>
</button>
<fuse-highlight lang="html"
[path]="'/assets/angular-material-examples/'+example+'/'+example+'-example.html'">
</fuse-highlight>
</section>
<section class="tab" *ngIf="selectedIndex === 1"
[@animate]="{value:'*',params:{opacity:'0',duration:'200ms'}}">
<button mat-icon-button type="button" class="example-source-copy"
title="Copy example source" aria-label="Copy example source to clipboard"
(click)="copySource(tsView.el.nativeElement.innerText)">
<mat-icon>content_copy</mat-icon>
</button>
<fuse-highlight lang="typescript"
[path]="'/assets/angular-material-examples/'+example+'/'+example+'-example.ts'">
</fuse-highlight>
</section>
<section class="tab" *ngIf="selectedIndex === 2"
[@animate]="{value:'*',params:{opacity:'0',duration:'200ms'}}">
<button mat-icon-button type="button" class="example-source-copy"
title="Copy example source" aria-label="Copy example source to clipboard"
(click)="copySource(cssView.el.nativeElement.innerText)">
<mat-icon>content_copy</mat-icon>
</button>
<fuse-highlight lang="css"
[path]="'/assets/angular-material-examples/'+example+'/'+example+'-example.css'">
</fuse-highlight>
</section>
</div>
</div>
<div class="example-viewer-body" [fxHide]="showSource">
<!--<ng-template [cdkPortalOutlet]="selectedPortal"></ng-template>-->
<!--<ng-template [cdkPortalOutlet]="selectedPortal"></ng-template>-->
<div #previewContainer></div>
</div>
</div>

Some files were not shown because too many files have changed in this diff Show More