@muraai/mnl-chat 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +24 -0
  2. package/esm2020/lib/chat.module.mjs +87 -0
  3. package/esm2020/lib/components/ng-chat/ng-chat.component.mjs +588 -0
  4. package/esm2020/lib/components/ng-chat-friends-list/ng-chat-friends-list.component.mjs +128 -0
  5. package/esm2020/lib/components/ng-chat-options/ng-chat-options.component.mjs +29 -0
  6. package/esm2020/lib/components/ng-chat-window/ng-chat-window.component.mjs +247 -0
  7. package/esm2020/lib/core/chat-adapter.mjs +18 -0
  8. package/esm2020/lib/core/chat-controller.mjs +2 -0
  9. package/esm2020/lib/core/chat-group-adapter.mjs +2 -0
  10. package/esm2020/lib/core/chat-option.mjs +2 -0
  11. package/esm2020/lib/core/chat-participant-status-descriptor.mjs +6 -0
  12. package/esm2020/lib/core/chat-participant-status.enum.mjs +8 -0
  13. package/esm2020/lib/core/chat-participant-type.enum.mjs +6 -0
  14. package/esm2020/lib/core/chat-participant.mjs +2 -0
  15. package/esm2020/lib/core/default-file-upload-adapter.mjs +43 -0
  16. package/esm2020/lib/core/file-upload-adapter.mjs +2 -0
  17. package/esm2020/lib/core/group.mjs +14 -0
  18. package/esm2020/lib/core/guid.mjs +11 -0
  19. package/esm2020/lib/core/localization.mjs +2 -0
  20. package/esm2020/lib/core/message-counter.mjs +25 -0
  21. package/esm2020/lib/core/message-type.enum.mjs +7 -0
  22. package/esm2020/lib/core/message.mjs +7 -0
  23. package/esm2020/lib/core/paged-history-chat-adapter.mjs +9 -0
  24. package/esm2020/lib/core/participant-metadata.mjs +6 -0
  25. package/esm2020/lib/core/participant-response.mjs +3 -0
  26. package/esm2020/lib/core/scroll-direction.enum.mjs +6 -0
  27. package/esm2020/lib/core/theme.enum.mjs +7 -0
  28. package/esm2020/lib/core/user.mjs +7 -0
  29. package/esm2020/lib/core/window.mjs +20 -0
  30. package/esm2020/lib/firstLetter.pipe.mjs +20 -0
  31. package/esm2020/lib/material.module.mjs +50 -0
  32. package/esm2020/lib/pipes/emojify.pipe.mjs +41 -0
  33. package/esm2020/lib/pipes/group-message-display-name.pipe.mjs +24 -0
  34. package/esm2020/lib/pipes/linkfy.pipe.mjs +34 -0
  35. package/esm2020/lib/pipes/sanitize.pipe.mjs +21 -0
  36. package/esm2020/lib/services/chat.service.mjs +14 -0
  37. package/esm2020/muraai-mnl-chat.mjs +5 -0
  38. package/esm2020/public-api.mjs +25 -0
  39. package/fesm2015/muraai-mnl-chat.mjs +1426 -0
  40. package/fesm2015/muraai-mnl-chat.mjs.map +1 -0
  41. package/fesm2020/muraai-mnl-chat.mjs +1424 -0
  42. package/fesm2020/muraai-mnl-chat.mjs.map +1 -0
  43. package/index.d.ts +5 -0
  44. package/lib/chat.module.d.ts +24 -0
  45. package/lib/components/ng-chat/ng-chat.component.d.ts +130 -0
  46. package/lib/components/ng-chat-friends-list/ng-chat-friends-list.component.d.ts +45 -0
  47. package/lib/components/ng-chat-options/ng-chat-options.component.d.ts +12 -0
  48. package/lib/components/ng-chat-window/ng-chat-window.component.d.ts +65 -0
  49. package/lib/core/chat-adapter.d.ts +15 -0
  50. package/lib/core/chat-controller.d.ts +6 -0
  51. package/lib/core/chat-group-adapter.d.ts +4 -0
  52. package/lib/core/chat-option.d.ts +9 -0
  53. package/lib/core/chat-participant-status-descriptor.d.ts +3 -0
  54. package/lib/core/chat-participant-status.enum.d.ts +6 -0
  55. package/lib/core/chat-participant-type.enum.d.ts +4 -0
  56. package/lib/core/chat-participant.d.ts +9 -0
  57. package/lib/core/default-file-upload-adapter.d.ts +14 -0
  58. package/lib/core/file-upload-adapter.d.ts +5 -0
  59. package/lib/core/group.d.ts +13 -0
  60. package/lib/core/guid.d.ts +3 -0
  61. package/lib/core/localization.d.ts +15 -0
  62. package/lib/core/message-counter.d.ts +10 -0
  63. package/lib/core/message-type.enum.d.ts +5 -0
  64. package/lib/core/message.d.ts +10 -0
  65. package/lib/core/paged-history-chat-adapter.d.ts +10 -0
  66. package/lib/core/participant-metadata.d.ts +3 -0
  67. package/lib/core/participant-response.d.ts +6 -0
  68. package/lib/core/scroll-direction.enum.d.ts +4 -0
  69. package/lib/core/theme.enum.d.ts +5 -0
  70. package/lib/core/user.d.ts +10 -0
  71. package/lib/core/window.d.ts +13 -0
  72. package/lib/firstLetter.pipe.d.ts +7 -0
  73. package/lib/material.module.d.ts +14 -0
  74. package/lib/pipes/emojify.pipe.d.ts +7 -0
  75. package/lib/pipes/group-message-display-name.pipe.d.ts +9 -0
  76. package/lib/pipes/linkfy.pipe.d.ts +7 -0
  77. package/lib/pipes/sanitize.pipe.d.ts +10 -0
  78. package/lib/services/chat.service.d.ts +6 -0
  79. package/package.json +31 -0
  80. package/public-api.d.ts +21 -0
  81. package/src/assets/icons.css +140 -0
  82. package/src/assets/loading-spinner.css +59 -0
  83. package/src/assets/ng-chat.component.default.css +106 -0
  84. package/src/assets/notification.png +0 -0
  85. package/src/assets/notification.wav +0 -0
  86. package/src/assets/themes/ng-chat.theme.dark.scss +71 -0
  87. package/src/assets/themes/ng-chat.theme.default.scss +63 -0
  88. package/src/assets/user.png +0 -0
@@ -0,0 +1,15 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Message } from "./message";
3
+ import { ParticipantResponse } from "./participant-response";
4
+ import { IChatParticipant } from './chat-participant';
5
+ export declare abstract class ChatAdapter {
6
+ abstract listFriends(): Observable<ParticipantResponse[]>;
7
+ abstract getMessageHistory(destinataryId: any): Observable<Message[]>;
8
+ abstract sendMessage(message: Message): void;
9
+ onFriendsListChanged(participantsResponse: ParticipantResponse[]): void;
10
+ onMessageReceived(participant: IChatParticipant, message: Message): void;
11
+ /** @internal */
12
+ friendsListChangedHandler: (participantsResponse: ParticipantResponse[]) => void;
13
+ /** @internal */
14
+ messageReceivedHandler: (participant: IChatParticipant, message: Message) => void;
15
+ }
@@ -0,0 +1,6 @@
1
+ import { User } from './user';
2
+ export interface IChatController {
3
+ triggerOpenChatWindow(user: User): void;
4
+ triggerCloseChatWindow(userId: any): void;
5
+ triggerToggleChatWindowVisibility(userId: any): void;
6
+ }
@@ -0,0 +1,4 @@
1
+ import { Group } from "./group";
2
+ export interface IChatGroupAdapter {
3
+ groupCreated(group: Group): void;
4
+ }
@@ -0,0 +1,9 @@
1
+ import { Window } from '../core/window';
2
+ import { IChatParticipant } from '../core/chat-participant';
3
+ export interface IChatOption {
4
+ isActive: boolean;
5
+ displayLabel: string;
6
+ chattingTo: Window;
7
+ action?: (chattingTo: Window) => void;
8
+ validateContext: (participant: IChatParticipant) => boolean;
9
+ }
@@ -0,0 +1,3 @@
1
+ import { ChatParticipantStatus } from './chat-participant-status.enum';
2
+ import { Localization } from './localization';
3
+ export declare function chatParticipantStatusDescriptor(status: ChatParticipantStatus, localization: Localization): string;
@@ -0,0 +1,6 @@
1
+ export declare enum ChatParticipantStatus {
2
+ Online = 0,
3
+ Busy = 1,
4
+ Away = 2,
5
+ Offline = 3
6
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum ChatParticipantType {
2
+ User = 0,
3
+ Group = 1
4
+ }
@@ -0,0 +1,9 @@
1
+ import { ChatParticipantStatus } from "./chat-participant-status.enum";
2
+ import { ChatParticipantType } from "./chat-participant-type.enum";
3
+ export interface IChatParticipant {
4
+ readonly participantType: ChatParticipantType;
5
+ readonly id: any;
6
+ readonly status: ChatParticipantStatus;
7
+ readonly avatar: string | null;
8
+ readonly displayName: string;
9
+ }
@@ -0,0 +1,14 @@
1
+ import { IFileUploadAdapter } from './file-upload-adapter';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import { Observable } from 'rxjs';
4
+ import { Message } from './message';
5
+ export declare class DefaultFileUploadAdapter implements IFileUploadAdapter {
6
+ private _serverEndpointUrl;
7
+ private _http;
8
+ /**
9
+ * @summary Basic file upload adapter implementation for HTTP request form file consumption
10
+ * @param _serverEndpointUrl The API endpoint full qualified address that will receive a form file to process and return the metadata.
11
+ */
12
+ constructor(_serverEndpointUrl: string, _http: HttpClient);
13
+ uploadFile(file: File, participantId: any): Observable<Message>;
14
+ }
@@ -0,0 +1,5 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Message } from './message';
3
+ export interface IFileUploadAdapter {
4
+ uploadFile(file: File, participantId: any): Observable<Message>;
5
+ }
@@ -0,0 +1,13 @@
1
+ import { User } from "./user";
2
+ import { ChatParticipantStatus } from "./chat-participant-status.enum";
3
+ import { IChatParticipant } from "./chat-participant";
4
+ import { ChatParticipantType } from "./chat-participant-type.enum";
5
+ export declare class Group implements IChatParticipant {
6
+ constructor(participants: User[]);
7
+ id: string;
8
+ chattingTo: User[];
9
+ readonly participantType: ChatParticipantType;
10
+ status: ChatParticipantStatus;
11
+ avatar: string | null;
12
+ displayName: string;
13
+ }
@@ -0,0 +1,3 @@
1
+ export declare class Guid {
2
+ static newGuid(): string;
3
+ }
@@ -0,0 +1,15 @@
1
+ export interface Localization {
2
+ title: string;
3
+ messagePlaceholder: string;
4
+ searchPlaceholder: string;
5
+ statusDescription: StatusDescription;
6
+ browserNotificationTitle: string;
7
+ loadMessageHistoryPlaceholder: string;
8
+ }
9
+ export interface StatusDescription {
10
+ online: string;
11
+ busy: string;
12
+ away: string;
13
+ offline: string;
14
+ [key: string]: string;
15
+ }
@@ -0,0 +1,10 @@
1
+ import { Window } from './window';
2
+ export declare class MessageCounter {
3
+ static formatUnreadMessagesTotal(totalUnreadMessages: number): string;
4
+ /**
5
+ * Returns a formatted string containing the total unread messages of a chat window.
6
+ * @param window The window instance to count the unread total messages.
7
+ * @param currentUserId The current chat instance user id. In this context it would be the sender.
8
+ */
9
+ static unreadMessagesTotal(window: Window, currentUserId: any): string;
10
+ }
@@ -0,0 +1,5 @@
1
+ export declare enum MessageType {
2
+ Text = 1,
3
+ File = 2,
4
+ Image = 3
5
+ }
@@ -0,0 +1,10 @@
1
+ import { MessageType } from './message-type.enum';
2
+ export declare class Message {
3
+ type?: MessageType;
4
+ fromId: any;
5
+ toId: any;
6
+ message: string;
7
+ dateSent?: Date;
8
+ dateSeen?: Date;
9
+ additionalParameter?: Object;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Message } from "./message";
3
+ import { ChatAdapter } from "./chat-adapter";
4
+ /**
5
+ * @description Chat Adapter decorator class that adds pagination to load the history of messagesr.
6
+ * You will need an existing @see ChatAdapter implementation
7
+ */
8
+ export declare abstract class PagedHistoryChatAdapter extends ChatAdapter {
9
+ abstract getMessageHistoryByPage(destinataryId: any, size: number, page: number): Observable<Message[]>;
10
+ }
@@ -0,0 +1,3 @@
1
+ export declare class ParticipantMetadata {
2
+ totalUnreadMessages: number;
3
+ }
@@ -0,0 +1,6 @@
1
+ import { ParticipantMetadata } from "./participant-metadata";
2
+ import { IChatParticipant } from "./chat-participant";
3
+ export declare class ParticipantResponse {
4
+ participant: IChatParticipant;
5
+ metadata: ParticipantMetadata;
6
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum ScrollDirection {
2
+ Top = 0,
3
+ Bottom = 1
4
+ }
@@ -0,0 +1,5 @@
1
+ export declare enum Theme {
2
+ Custom = "custom-theme",
3
+ Light = "light-theme",
4
+ Dark = "dark-theme"
5
+ }
@@ -0,0 +1,10 @@
1
+ import { ChatParticipantStatus } from "./chat-participant-status.enum";
2
+ import { IChatParticipant } from "./chat-participant";
3
+ import { ChatParticipantType } from "./chat-participant-type.enum";
4
+ export declare class User implements IChatParticipant {
5
+ readonly participantType: ChatParticipantType;
6
+ id: any;
7
+ displayName: string;
8
+ status: ChatParticipantStatus;
9
+ avatar: string;
10
+ }
@@ -0,0 +1,13 @@
1
+ import { Message } from "./message";
2
+ import { IChatParticipant } from "./chat-participant";
3
+ export declare class Window {
4
+ constructor(participant: IChatParticipant, isLoadingHistory: boolean, isCollapsed: boolean);
5
+ participant: IChatParticipant;
6
+ messages: Message[];
7
+ newMessage?: string;
8
+ isCollapsed?: boolean;
9
+ isLoadingHistory: boolean;
10
+ hasFocus: boolean;
11
+ hasMoreMessages: boolean;
12
+ historyPage: number;
13
+ }
@@ -0,0 +1,7 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class FirstLetterPipe implements PipeTransform {
4
+ transform(value: string): string;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<FirstLetterPipe, never>;
6
+ static ɵpipe: i0.ɵɵPipeDeclaration<FirstLetterPipe, "firstLetterPipe", false>;
7
+ }
@@ -0,0 +1,14 @@
1
+ import { FormsModule } from '@angular/forms';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/button";
4
+ import * as i2 from "@angular/material/form-field";
5
+ import * as i3 from "@angular/material/icon";
6
+ import * as i4 from "@angular/material/input";
7
+ import * as i5 from "@angular/forms";
8
+ import * as i6 from "@angular/material/menu";
9
+ export declare function modules(): (typeof FormsModule)[];
10
+ export declare class ChatMaterialModule {
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChatMaterialModule, never>;
12
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ChatMaterialModule, never, [typeof i1.MatButtonModule, typeof i2.MatFormFieldModule, typeof i3.MatIconModule, typeof i4.MatInputModule, typeof i5.FormsModule, typeof i5.ReactiveFormsModule, typeof i6.MatMenuModule], [typeof i1.MatButtonModule, typeof i2.MatFormFieldModule, typeof i3.MatIconModule, typeof i4.MatInputModule, typeof i5.FormsModule, typeof i5.ReactiveFormsModule, typeof i6.MatMenuModule]>;
13
+ static ɵinj: i0.ɵɵInjectorDeclaration<ChatMaterialModule>;
14
+ }
@@ -0,0 +1,7 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class EmojifyPipe implements PipeTransform {
4
+ transform(message: string, pipeEnabled: boolean): string;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<EmojifyPipe, never>;
6
+ static ɵpipe: i0.ɵɵPipeDeclaration<EmojifyPipe, "emojify", false>;
7
+ }
@@ -0,0 +1,9 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import { IChatParticipant } from "../core/chat-participant";
3
+ import { Message } from "../core/message";
4
+ import * as i0 from "@angular/core";
5
+ export declare class GroupMessageDisplayNamePipe implements PipeTransform {
6
+ transform(participant: IChatParticipant, message: Message): string;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<GroupMessageDisplayNamePipe, never>;
8
+ static ɵpipe: i0.ɵɵPipeDeclaration<GroupMessageDisplayNamePipe, "groupMessageDisplayName", false>;
9
+ }
@@ -0,0 +1,7 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class LinkfyPipe implements PipeTransform {
4
+ transform(message: string, pipeEnabled: boolean): string;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<LinkfyPipe, never>;
6
+ static ɵpipe: i0.ɵɵPipeDeclaration<LinkfyPipe, "linkfy", false>;
7
+ }
@@ -0,0 +1,10 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
3
+ import * as i0 from "@angular/core";
4
+ export declare class SanitizePipe implements PipeTransform {
5
+ protected sanitizer: DomSanitizer;
6
+ constructor(sanitizer: DomSanitizer);
7
+ transform(url: string): SafeResourceUrl;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<SanitizePipe, never>;
9
+ static ɵpipe: i0.ɵɵPipeDeclaration<SanitizePipe, "sanitize", false>;
10
+ }
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class ChatService {
3
+ constructor();
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChatService, never>;
5
+ static ɵprov: i0.ɵɵInjectableDeclaration<ChatService>;
6
+ }
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@muraai/mnl-chat",
3
+ "version": "0.0.1",
4
+ "peerDependencies": {
5
+ "@angular/common": "^14.2.0",
6
+ "@angular/core": "^14.2.0"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.3.0"
10
+ },
11
+ "module": "fesm2015/muraai-mnl-chat.mjs",
12
+ "es2020": "fesm2020/muraai-mnl-chat.mjs",
13
+ "esm2020": "esm2020/muraai-mnl-chat.mjs",
14
+ "fesm2020": "fesm2020/muraai-mnl-chat.mjs",
15
+ "fesm2015": "fesm2015/muraai-mnl-chat.mjs",
16
+ "typings": "index.d.ts",
17
+ "exports": {
18
+ "./package.json": {
19
+ "default": "./package.json"
20
+ },
21
+ ".": {
22
+ "types": "./index.d.ts",
23
+ "esm2020": "./esm2020/muraai-mnl-chat.mjs",
24
+ "es2020": "./fesm2020/muraai-mnl-chat.mjs",
25
+ "es2015": "./fesm2015/muraai-mnl-chat.mjs",
26
+ "node": "./fesm2015/muraai-mnl-chat.mjs",
27
+ "default": "./fesm2020/muraai-mnl-chat.mjs"
28
+ }
29
+ },
30
+ "sideEffects": false
31
+ }
@@ -0,0 +1,21 @@
1
+ export * from './lib/chat.module';
2
+ export * from './lib/services/chat.service';
3
+ export * from './lib/components/ng-chat/ng-chat.component';
4
+ export * from './lib/core/chat-adapter';
5
+ export * from './lib/core/message';
6
+ export * from './lib/core/chat-participant-status.enum';
7
+ export * from './lib/core/user';
8
+ export * from './lib/core/participant-response';
9
+ export * from './lib/core/participant-metadata';
10
+ export * from './lib/core/window';
11
+ export * from './lib/core/localization';
12
+ export * from './lib/core/chat-controller';
13
+ export * from './lib/core/paged-history-chat-adapter';
14
+ export * from './lib/core/theme.enum';
15
+ export * from './lib/core/chat-option';
16
+ export * from './lib/core/group';
17
+ export * from './lib/core/chat-participant';
18
+ export * from './lib/core/chat-group-adapter';
19
+ export * from './lib/core/chat-participant-type.enum';
20
+ export * from './lib/core/message-type.enum';
21
+ export * from './lib/core/file-upload-adapter';
@@ -0,0 +1,140 @@
1
+ .user-icon
2
+ {
3
+ box-sizing: border-box;
4
+ background-color: #FFF;
5
+ border: 2px solid;
6
+ width: 32px;
7
+ height: 20px;
8
+ border-radius: 64px 64px 0 0/64px;
9
+ margin-top: 14px;
10
+ margin-left: -1px;
11
+ display: inline-block;
12
+ vertical-align: middle;
13
+ position: relative;
14
+ font-style: normal;
15
+ color: #ddd;
16
+ text-align: left;
17
+ text-indent: -9999px;
18
+ }
19
+ .user-icon:before{
20
+ border: 2px solid;
21
+ background-color: #FFF;
22
+ width: 12px;
23
+ height: 12px;
24
+ top: -19px;
25
+ border-radius: 50%;
26
+ position: absolute;
27
+ left: 50%;
28
+ -webkit-transform: translateX(-50%);
29
+ -ms-transform: translateX(-50%);
30
+ transform: translateX(-50%);
31
+ }
32
+ .user-icon:before, .user-icon:after
33
+ {
34
+ content: '';
35
+ pointer-events: none;
36
+ }
37
+ .upload-icon {
38
+ position: absolute;
39
+ margin-left: 3px;
40
+ margin-top: 12px;
41
+ width: 13px;
42
+ height: 4px;
43
+ border: solid 1px currentColor;
44
+ border-top: none;
45
+ border-radius: 1px;
46
+ }
47
+ .upload-icon:before {
48
+ content: '';
49
+ position: absolute;
50
+ top: -8px;
51
+ left: 6px;
52
+ width: 1px;
53
+ height: 9px;
54
+ background-color: currentColor;
55
+ }
56
+ .upload-icon:after {
57
+ content: '';
58
+ position: absolute;
59
+ top: -8px;
60
+ left: 4px;
61
+ width: 4px;
62
+ height: 4px;
63
+ border-top: solid 1px currentColor;
64
+ border-right: solid 1px currentColor;
65
+ -webkit-transform: rotate(-45deg);
66
+ transform: rotate(-45deg);
67
+ }
68
+ .paperclip-icon {
69
+ position: absolute;
70
+ margin-left: 9px;
71
+ margin-top: 2px;
72
+ width: 6px;
73
+ height: 12px;
74
+ border-radius: 4px 4px 0 0;
75
+ border-left: solid 1px currentColor;
76
+ border-right: solid 1px currentColor;
77
+ border-top: solid 1px currentColor;
78
+ -webkit-transform: rotate(45deg);
79
+ transform: rotate(45deg);
80
+ }
81
+ .paperclip-icon:before {
82
+ content: '';
83
+ position: absolute;
84
+ top: 11px;
85
+ left: -1px;
86
+ width: 4px;
87
+ height: 6px;
88
+ border-radius: 0 0 3px 3px;
89
+ border-left: solid 1px currentColor;
90
+ border-right: solid 1px currentColor;
91
+ border-bottom: solid 1px currentColor;
92
+ }
93
+ .paperclip-icon:after {
94
+ content: '';
95
+ position: absolute;
96
+ left: 1px;
97
+ top: 1px;
98
+ width: 2px;
99
+ height: 10px;
100
+ border-radius: 4px 4px 0 0;
101
+ border-left: solid 1px currentColor;
102
+ border-right: solid 1px currentColor;
103
+ border-top: solid 1px currentColor;
104
+ }
105
+ .check-icon {
106
+ color: #000;
107
+ position: absolute;
108
+ margin-left: 3px;
109
+ margin-top: 4px;
110
+ width: 14px;
111
+ height: 8px;
112
+ border-bottom: solid 1px currentColor;
113
+ border-left: solid 1px currentColor;
114
+ -webkit-transform: rotate(-45deg);
115
+ transform: rotate(-45deg);
116
+ }
117
+ .remove-icon {
118
+ color: #000;
119
+ position: absolute;
120
+ margin-left: 3px;
121
+ margin-top: 10px;
122
+ }
123
+ .remove-icon:before {
124
+ content: '';
125
+ position: absolute;
126
+ width: 15px;
127
+ height: 1px;
128
+ background-color: currentColor;
129
+ -webkit-transform: rotate(45deg);
130
+ transform: rotate(45deg);
131
+ }
132
+ .remove-icon:after {
133
+ content: '';
134
+ position: absolute;
135
+ width: 15px;
136
+ height: 1px;
137
+ background-color: currentColor;
138
+ -webkit-transform: rotate(-45deg);
139
+ transform: rotate(-45deg);
140
+ }
@@ -0,0 +1,59 @@
1
+ .loader,
2
+ .loader:before,
3
+ .loader:after {
4
+ background: #E3E3E3;
5
+ -webkit-animation: load1 1s infinite ease-in-out;
6
+ animation: load1 1s infinite ease-in-out;
7
+ width: 1em;
8
+ height: 4em;
9
+ }
10
+ .loader {
11
+ color: #E3E3E3;
12
+ text-indent: -9999em;
13
+ margin: 4px auto 0;
14
+ position: relative;
15
+ font-size: 4px;
16
+ -webkit-transform: translateZ(0);
17
+ -ms-transform: translateZ(0);
18
+ transform: translateZ(0);
19
+ -webkit-animation-delay: -0.16s;
20
+ animation-delay: -0.16s;
21
+ }
22
+ .loader:before,
23
+ .loader:after {
24
+ position: absolute;
25
+ top: 0;
26
+ content: '';
27
+ }
28
+ .loader:before {
29
+ left: -1.5em;
30
+ -webkit-animation-delay: -0.32s;
31
+ animation-delay: -0.32s;
32
+ }
33
+ .loader:after {
34
+ left: 1.5em;
35
+ }
36
+ @-webkit-keyframes load1 {
37
+ 0%,
38
+ 80%,
39
+ 100% {
40
+ box-shadow: 0 0;
41
+ height: 4em;
42
+ }
43
+ 40% {
44
+ box-shadow: 0 -2em;
45
+ height: 5em;
46
+ }
47
+ }
48
+ @keyframes load1 {
49
+ 0%,
50
+ 80%,
51
+ 100% {
52
+ box-shadow: 0 0;
53
+ height: 4em;
54
+ }
55
+ 40% {
56
+ box-shadow: 0 -2em;
57
+ height: 5em;
58
+ }
59
+ }
@@ -0,0 +1,106 @@
1
+ #ng-chat
2
+ {
3
+ position:fixed;
4
+ z-index:999;
5
+ right:0;
6
+ bottom:0;
7
+ box-sizing: initial;
8
+ font-size: 11pt;
9
+ text-align: left;
10
+ }
11
+ #ng-chat input
12
+ {
13
+ outline: none;
14
+ }
15
+ #ng-chat .shadowed
16
+ {
17
+ box-shadow: 0 4px 8px rgba(0,0,0,.25);
18
+ }
19
+ .ng-chat-loading-wrapper
20
+ {
21
+ height: 30px;
22
+ text-align: center;
23
+ font-size:0.9em;
24
+ }
25
+ .ng-chat-close
26
+ {
27
+ text-decoration:none !important;
28
+ color: red !important;
29
+ float:right !important;
30
+ font-weight: 900 !important;
31
+ font-size: 15px !important;
32
+ }
33
+ .ng-chat-title, .ng-chat-title:hover
34
+ {
35
+ position: relative;
36
+ z-index:2;
37
+ height:30px;
38
+ line-height: 30px;
39
+ font-size:0.9em;
40
+ padding: 0 10px;
41
+ display: block;
42
+ text-decoration: none;
43
+ color: white !important;
44
+ font-weight: 600 !important;
45
+ cursor: pointer;
46
+ background-color:#1b1b70 !important;
47
+ }
48
+ .ng-chat-title .ng-chat-title-visibility-toggle-area
49
+ {
50
+ display: inline-block;
51
+ width: 85%;
52
+ }
53
+ .ng-chat-title .ng-chat-title-visibility-toggle-area > strong{
54
+ font-weight: 600;
55
+ display: block;
56
+ overflow: hidden;
57
+ height: 30px;
58
+ text-overflow: ellipsis;
59
+ white-space: nowrap;
60
+ max-width: 85%;
61
+ float:left;
62
+ }
63
+ .ng-chat-title .ng-chat-title-visibility-toggle-area .ng-chat-participant-status
64
+ {
65
+ float: left;
66
+ margin-left: 5px;
67
+ }
68
+
69
+ .ng-chat-participant-status
70
+ {
71
+ display: inline-block;
72
+ border-radius: 25px;
73
+ width: 8px;
74
+ height: 8px;
75
+ margin-top:10px;
76
+ }
77
+ .ng-chat-participant-status.online
78
+ {
79
+ background-color: #92A400;
80
+ }
81
+ .ng-chat-participant-status.busy
82
+ {
83
+ background-color: #F91C1E;
84
+ }
85
+ .ng-chat-participant-status.away
86
+ {
87
+ background-color: #F7D21B;
88
+ }
89
+ .ng-chat-participant-status.offline
90
+ {
91
+ background-color: #BABABA;
92
+ }
93
+ .ng-chat-unread-messages-count
94
+ {
95
+ margin-left: 5px;
96
+ padding: 0 5px;
97
+ border-radius: 25px;
98
+ font-size: 0.9em;
99
+ line-height: 30px;
100
+ }
101
+
102
+ .ng-chat-options-container
103
+ {
104
+ float: right;
105
+ margin-right: 5px;
106
+ }
Binary file
Binary file