@rtsee/ngx 0.0.120 → 0.0.122
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.
- package/dist/ngx/fesm2022/rtsee-ngx.mjs +1424 -167
- package/dist/ngx/fesm2022/rtsee-ngx.mjs.map +1 -1
- package/dist/ngx/index.d.ts +288 -14
- package/dist/ngx/src/lib/theme/containers/shell.scss +20 -0
- package/dist/ngx/src/lib/theme/events-manager/event-widgets.scss +133 -0
- package/dist/ngx/src/lib/theme/messenger/chat.scss +17 -0
- package/dist/ngx/src/lib/theme/messenger/chats-list.scss +43 -0
- package/dist/ngx/src/lib/theme/messenger/create-chat.scss +0 -5
- package/dist/ngx/src/lib/theme/messenger/messages-list.scss +19 -1
- package/dist/ngx/src/lib/theme/messenger/messenger-header.scss +16 -2
- package/dist/ngx/src/lib/theme/messenger/messenger.scss +84 -1
- package/package.json +11 -11
package/dist/ngx/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { OnInit, AfterViewInit, ElementRef, EventEmitter, OnDestroy, ChangeDetectorRef, OutputEmitterRef, OnChanges, SimpleChanges, ViewContainerRef, ComponentFactoryResolver, DoCheck } from '@angular/core';
|
|
2
|
+
import { OnInit, AfterViewInit, ElementRef, EventEmitter, OnDestroy, ChangeDetectorRef, OutputEmitterRef, OnChanges, SimpleChanges, ViewContainerRef, ComponentFactoryResolver, DoCheck, Type } from '@angular/core';
|
|
3
3
|
import { RTSeeConference, RTSeePeerConnection } from '@rtsee/conference';
|
|
4
|
-
import { RTSeeMessenger, RTSeeMessengerSearch, RTSeeMessage, RTSeeChat, RTSeeChatMember, RTSeeMentionAutocomplete, RTSeeWorkflowAutocomplete, OzzyClientTask } from '@rtsee/messenger';
|
|
4
|
+
import { RTSeeMessenger, RTSeeMessengerSearch, RTSeeMessage, RTSeeChat, RTSeeChatMember, RTSeeMentionAutocomplete, RTSeeWorkflowAutocomplete, OzzyClientTask, OzzyClientTaskAction } from '@rtsee/messenger';
|
|
5
5
|
import { IPeer, RTSeeTextLabelKeys, IRTSeeCall } from '@rtsee/core';
|
|
6
6
|
import { HttpClient } from '@angular/common/http';
|
|
7
7
|
import { RTSeeAuth, RTSeeAuthConfiguration, IRtseeSignInRequestOptions, IRTSeeSignInResponse, IRtseeSignUpRequestOptions, IRTSeeSignUpResponse, AuthEndpointsKeys } from '@rtsee/auth';
|
|
8
8
|
import { Observable, Subscription } from 'rxjs';
|
|
9
9
|
import * as i47 from '@angular/router';
|
|
10
10
|
import { Router, ActivatedRoute } from '@angular/router';
|
|
11
|
-
import { IRTSeePaymentProduct, IRTSeePaymentPriceItem, IRTSeeStorySlide, IRTSeeStoryElement, IRTSeeIllustratorContextImage, IRTSeeChat, RTSeeChatTypes, IMessageThumbnail, IOzzyWorkflowDefinition, IOzzyTaskLog } from '@rtsee/common';
|
|
11
|
+
import { IRTSeePaymentProduct, IRTSeePaymentPriceItem, IRTSeeStorySlide, IRTSeeStoryElement, IRTSeeIllustratorContextImage, IRTSeeChat, RTSeeChatTypes, IMessageThumbnail, IOzzyWorkflowDefinition, IOzzyTaskActionPrompt, IOzzyTaskLog, IRTSeeStory } from '@rtsee/common';
|
|
12
12
|
import { RTSeeEventsDashboard, RTSeeDashboardClientSession, RTSeeDashboardEvent, RTSeeDashboardClient } from '@rtsee/events-dashboard';
|
|
13
13
|
import { RTSee, INavigationConfig, IRouteConfig } from '@rtsee/factory';
|
|
14
14
|
import { RTSeePresentation, RTSeeStory, RTSeeInteractiveStoryEditorVm, RTSeeStoryEditorSection, RTSeeIllustrator, RTSeeStoryElementsEditor, RTSeeStoryElementEntity, IRTSeeIllustratorAgentOption, RTSeePresentationSettings, RTSeeStorySlide } from '@rtsee/presentation';
|
|
@@ -134,9 +134,11 @@ declare class ProfileComponent {
|
|
|
134
134
|
|
|
135
135
|
declare class MessengerComponent {
|
|
136
136
|
messenger: RTSeeMessenger;
|
|
137
|
+
isFramed: boolean;
|
|
138
|
+
protected readonly RTSeeTextLabelKeys: typeof RTSeeTextLabelKeys;
|
|
137
139
|
onScroll(): void;
|
|
138
140
|
static ɵfac: i0.ɵɵFactoryDeclaration<MessengerComponent, never>;
|
|
139
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MessengerComponent, "rtsee-messenger", never, { "messenger": { "alias": "messenger"; "required": false; }; }, {}, never, never, true, never>;
|
|
141
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MessengerComponent, "rtsee-messenger", never, { "messenger": { "alias": "messenger"; "required": false; }; "isFramed": { "alias": "isFramed"; "required": false; }; }, {}, never, never, true, never>;
|
|
140
142
|
}
|
|
141
143
|
|
|
142
144
|
declare class PaymentProductSnippetComponent {
|
|
@@ -161,6 +163,7 @@ declare class RTSeeContainerComponent implements OnInit {
|
|
|
161
163
|
isSidenavExpanded: boolean;
|
|
162
164
|
isSidenavContent: boolean;
|
|
163
165
|
isSidenavFullScreen: boolean;
|
|
166
|
+
protected readonly RTSeeTextLabelKeys: typeof RTSeeTextLabelKeys;
|
|
164
167
|
private routeSubscription;
|
|
165
168
|
rtsee: RTSee;
|
|
166
169
|
navigationConfig: INavigationConfig<IRouteConfig>;
|
|
@@ -562,7 +565,7 @@ declare class MessageWidgetsService {
|
|
|
562
565
|
|
|
563
566
|
declare class EventsWidgetsService {
|
|
564
567
|
widgetsMap: IMessageWidget[];
|
|
565
|
-
getWidgetComponentByName(name
|
|
568
|
+
getWidgetComponentByName(name?: string): any;
|
|
566
569
|
static ɵfac: i0.ɵɵFactoryDeclaration<EventsWidgetsService, never>;
|
|
567
570
|
static ɵprov: i0.ɵɵInjectableDeclaration<EventsWidgetsService>;
|
|
568
571
|
}
|
|
@@ -575,10 +578,13 @@ declare class EventThumbnailComponent implements OnInit, OnChanges, AfterViewIni
|
|
|
575
578
|
tooltip?: string;
|
|
576
579
|
timeInAgoFormat: string;
|
|
577
580
|
private componentRef?;
|
|
578
|
-
event: RTSeeDashboardEvent
|
|
581
|
+
event: RTSeeDashboardEvent<Record<string, unknown>>;
|
|
579
582
|
session?: RTSeeDashboardClientSession;
|
|
580
583
|
widgetHost: WidgetDirective;
|
|
581
584
|
constructor(widgetsService: EventsWidgetsService, componentFactoryResolver: ComponentFactoryResolver, timeFormatService: TimeFormatHelperService, cd: ChangeDetectorRef);
|
|
585
|
+
get widgetName(): string | undefined;
|
|
586
|
+
get hasWidget(): boolean;
|
|
587
|
+
get hasDetails(): boolean;
|
|
582
588
|
ngOnInit(): void;
|
|
583
589
|
generateTooltip(): void;
|
|
584
590
|
ngOnChanges(changes: SimpleChanges): void;
|
|
@@ -707,6 +713,7 @@ declare class ChatComponent implements OnInit, OnDestroy {
|
|
|
707
713
|
chatData?: IRTSeeChat;
|
|
708
714
|
entity?: RTSeeEntity;
|
|
709
715
|
messenger: RTSeeMessenger;
|
|
716
|
+
isFramed: boolean;
|
|
710
717
|
showInvite: boolean;
|
|
711
718
|
get isSoleAdmin(): boolean;
|
|
712
719
|
toggleInvite(): void;
|
|
@@ -714,7 +721,7 @@ declare class ChatComponent implements OnInit, OnDestroy {
|
|
|
714
721
|
ngOnInit(): void;
|
|
715
722
|
ngOnDestroy(): void;
|
|
716
723
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChatComponent, never>;
|
|
717
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ChatComponent, "rtsee-chat", never, { "chat": { "alias": "chat"; "required": false; }; "chatData": { "alias": "chatData"; "required": false; }; "entity": { "alias": "entity"; "required": false; }; "messenger": { "alias": "messenger"; "required": false; }; }, {}, never, never, true, never>;
|
|
724
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatComponent, "rtsee-chat", never, { "chat": { "alias": "chat"; "required": false; }; "chatData": { "alias": "chatData"; "required": false; }; "entity": { "alias": "entity"; "required": false; }; "messenger": { "alias": "messenger"; "required": false; }; "isFramed": { "alias": "isFramed"; "required": false; }; }, {}, never, never, true, never>;
|
|
718
725
|
}
|
|
719
726
|
|
|
720
727
|
declare class MessageComponent implements OnInit, AfterViewInit, OnChanges {
|
|
@@ -747,6 +754,7 @@ interface IRTSeeMessageGroup {
|
|
|
747
754
|
declare class MessagesListComponent implements AfterViewInit, OnChanges, OnDestroy, OnInit {
|
|
748
755
|
private timeFormatService;
|
|
749
756
|
private scroller;
|
|
757
|
+
private hostRef;
|
|
750
758
|
private document;
|
|
751
759
|
bindScrollFunction: () => void;
|
|
752
760
|
bindedGroupFunction: () => void;
|
|
@@ -754,15 +762,20 @@ declare class MessagesListComponent implements AfterViewInit, OnChanges, OnDestr
|
|
|
754
762
|
firstGroupedMessage: RTSeeMessage | null;
|
|
755
763
|
lastGroupedMessage: RTSeeMessage | null;
|
|
756
764
|
shouldStickToBottom: boolean;
|
|
765
|
+
isWindowScroll: boolean;
|
|
757
766
|
private resizeObserver;
|
|
758
767
|
private onMediaCapture;
|
|
759
768
|
private initialScrollInterval;
|
|
769
|
+
private lastContainerScrollTop;
|
|
770
|
+
private lastWindowScrollTop;
|
|
760
771
|
chat: RTSeeChat;
|
|
761
772
|
messenger: RTSeeMessenger;
|
|
773
|
+
isFramed: boolean;
|
|
762
774
|
scrollContainer: ElementRef<HTMLDivElement>;
|
|
763
775
|
contentBlock: ElementRef<HTMLDivElement>;
|
|
764
776
|
bottomAnchor: ElementRef<HTMLDivElement>;
|
|
765
|
-
constructor(timeFormatService: TimeFormatHelperService, scroller: ViewportScroller, document: Document);
|
|
777
|
+
constructor(timeFormatService: TimeFormatHelperService, scroller: ViewportScroller, hostRef: ElementRef<HTMLElement>, document: Document);
|
|
778
|
+
get isStandalone(): boolean;
|
|
766
779
|
onWindowScroll(event: Event): void;
|
|
767
780
|
onWindowResize(): void;
|
|
768
781
|
ngOnInit(): void;
|
|
@@ -777,6 +790,10 @@ declare class MessagesListComponent implements AfterViewInit, OnChanges, OnDestr
|
|
|
777
790
|
formatDate(message: RTSeeMessage): string;
|
|
778
791
|
private checkScrollPosition;
|
|
779
792
|
private isAtBottom;
|
|
793
|
+
private isMobileViewport;
|
|
794
|
+
private isShellMobileChatActive;
|
|
795
|
+
private computeIsWindowScroll;
|
|
796
|
+
private updateScrollMode;
|
|
780
797
|
private enforceInitialScroll;
|
|
781
798
|
private bindChatEvents;
|
|
782
799
|
private unbindChatEvents;
|
|
@@ -784,7 +801,7 @@ declare class MessagesListComponent implements AfterViewInit, OnChanges, OnDestr
|
|
|
784
801
|
private saveFirstAndLastGroupedMessages;
|
|
785
802
|
protected readonly RTSeeChatTypes: typeof RTSeeChatTypes;
|
|
786
803
|
static ɵfac: i0.ɵɵFactoryDeclaration<MessagesListComponent, never>;
|
|
787
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MessagesListComponent, "rtsee-messages-list", never, { "chat": { "alias": "chat"; "required": false; }; "messenger": { "alias": "messenger"; "required": false; }; }, {}, never, never, true, never>;
|
|
804
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MessagesListComponent, "rtsee-messages-list", never, { "chat": { "alias": "chat"; "required": false; }; "messenger": { "alias": "messenger"; "required": false; }; "isFramed": { "alias": "isFramed"; "required": false; }; }, {}, never, never, true, never>;
|
|
788
805
|
}
|
|
789
806
|
|
|
790
807
|
declare class ChatThumbnailComponent {
|
|
@@ -873,6 +890,8 @@ declare class MessengerHeaderComponent {
|
|
|
873
890
|
toggleDropdown(): void;
|
|
874
891
|
closeDropdown(): void;
|
|
875
892
|
openNewChatDialog(): void;
|
|
893
|
+
openInviteUserDialog(): void;
|
|
894
|
+
closeInviteUserDialog(): void;
|
|
876
895
|
closeManageChatDialog(): void;
|
|
877
896
|
onChatSaved(chat: IRTSeeChat): void;
|
|
878
897
|
onMyAvatarClick(): void;
|
|
@@ -892,7 +911,10 @@ declare class MessengerHeaderComponent {
|
|
|
892
911
|
declare class ChatsListComponent implements OnInit {
|
|
893
912
|
messenger: RTSeeMessenger;
|
|
894
913
|
chats: RTSeeChat[];
|
|
914
|
+
protected readonly RTSeeTextLabelKeys: typeof RTSeeTextLabelKeys;
|
|
895
915
|
ngOnInit(): void;
|
|
916
|
+
onInviteUserClick(): void;
|
|
917
|
+
onCreateGroupClick(): void;
|
|
896
918
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChatsListComponent, never>;
|
|
897
919
|
static ɵcmp: i0.ɵɵComponentDeclaration<ChatsListComponent, "rtsee-chats-list", never, { "messenger": { "alias": "messenger"; "required": false; }; "chats": { "alias": "chats"; "required": false; }; }, {}, never, never, true, never>;
|
|
898
920
|
}
|
|
@@ -1061,7 +1083,7 @@ declare class RTSeeTaskComponent implements OnInit, OnChanges, OnDestroy {
|
|
|
1061
1083
|
chat?: RTSeeChat;
|
|
1062
1084
|
/** hide the execute button (e.g. when the workflow executes the task itself) */
|
|
1063
1085
|
allowExecute: boolean;
|
|
1064
|
-
|
|
1086
|
+
actionsContainer?: ElementRef<HTMLDivElement>;
|
|
1065
1087
|
copied: 'input' | 'output' | null;
|
|
1066
1088
|
private subscribedTask;
|
|
1067
1089
|
private onChangedBound;
|
|
@@ -1074,10 +1096,15 @@ declare class RTSeeTaskComponent implements OnInit, OnChanges, OnDestroy {
|
|
|
1074
1096
|
get inputJson(): string;
|
|
1075
1097
|
get outputJson(): string;
|
|
1076
1098
|
get hasOutput(): boolean;
|
|
1077
|
-
get
|
|
1099
|
+
get hasActions(): boolean;
|
|
1100
|
+
get hasPrompts(): boolean;
|
|
1078
1101
|
execute(): void;
|
|
1102
|
+
loadMoreActions(): void;
|
|
1103
|
+
onActionsScroll(event: Event): void;
|
|
1079
1104
|
copy(kind: 'input' | 'output'): Promise<void>;
|
|
1080
|
-
|
|
1105
|
+
trackAction(_index: number, action: OzzyClientTaskAction): string;
|
|
1106
|
+
trackPrompt(_index: number, prompt: IOzzyTaskActionPrompt): string;
|
|
1107
|
+
private ensureActions;
|
|
1081
1108
|
private toJson;
|
|
1082
1109
|
private subscribe;
|
|
1083
1110
|
private unsubscribe;
|
|
@@ -1086,6 +1113,181 @@ declare class RTSeeTaskComponent implements OnInit, OnChanges, OnDestroy {
|
|
|
1086
1113
|
static ɵcmp: i0.ɵɵComponentDeclaration<RTSeeTaskComponent, "rtsee-task", never, { "task": { "alias": "task"; "required": false; }; "message": { "alias": "message"; "required": false; }; "messenger": { "alias": "messenger"; "required": false; }; "chat": { "alias": "chat"; "required": false; }; "allowExecute": { "alias": "allowExecute"; "required": false; }; }, {}, never, never, true, never>;
|
|
1087
1114
|
}
|
|
1088
1115
|
|
|
1116
|
+
/**
|
|
1117
|
+
* Full client-side representation of a single OzzyTaskAction.
|
|
1118
|
+
* Displays input, logs, output, and/or errors of the action.
|
|
1119
|
+
*/
|
|
1120
|
+
declare class RTSeeTaskActionComponent implements OnInit, OnChanges, OnDestroy {
|
|
1121
|
+
private cdr;
|
|
1122
|
+
action?: OzzyClientTaskAction | null;
|
|
1123
|
+
logsContainer?: ElementRef<HTMLDivElement>;
|
|
1124
|
+
copied: 'input' | 'output' | null;
|
|
1125
|
+
private subscribedAction;
|
|
1126
|
+
private onChangedBound;
|
|
1127
|
+
constructor(cdr: ChangeDetectorRef);
|
|
1128
|
+
ngOnInit(): void;
|
|
1129
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
1130
|
+
ngOnDestroy(): void;
|
|
1131
|
+
get statusLabel(): string;
|
|
1132
|
+
get statusClass(): string;
|
|
1133
|
+
get inputJson(): string;
|
|
1134
|
+
get outputJson(): string;
|
|
1135
|
+
get hasOutput(): boolean;
|
|
1136
|
+
get hasLogs(): boolean;
|
|
1137
|
+
copy(kind: 'input' | 'output'): Promise<void>;
|
|
1138
|
+
trackLog(index: number, log: IOzzyTaskLog): string;
|
|
1139
|
+
private ensureLoaded;
|
|
1140
|
+
private toJson;
|
|
1141
|
+
private subscribe;
|
|
1142
|
+
private unsubscribe;
|
|
1143
|
+
private onActionChanged;
|
|
1144
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RTSeeTaskActionComponent, never>;
|
|
1145
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RTSeeTaskActionComponent, "rtsee-task-action", never, { "action": { "alias": "action"; "required": false; }; }, {}, never, never, true, never>;
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1148
|
+
interface ITaskActionThumbnailWidget {
|
|
1149
|
+
/** matches OzzyTaskAction.name */
|
|
1150
|
+
name: string;
|
|
1151
|
+
/** standalone component accepting `action`, `task`, `expanded`, `toggleExpand` inputs */
|
|
1152
|
+
component: Type<unknown>;
|
|
1153
|
+
}
|
|
1154
|
+
interface ITaskActionPromptWidget {
|
|
1155
|
+
/** matches IOzzyTaskActionPrompt.name */
|
|
1156
|
+
name: string;
|
|
1157
|
+
/** standalone component accepting `prompt`, `task`, `expanded`, `toggleExpand` inputs */
|
|
1158
|
+
component: Type<unknown>;
|
|
1159
|
+
}
|
|
1160
|
+
/**
|
|
1161
|
+
* Registry of custom client-side widgets for task-action-thumbnails and task-action-prompts.
|
|
1162
|
+
* Falls back to DefaultTaskActionThumbnailComponent / DefaultTaskActionPromptComponent.
|
|
1163
|
+
*/
|
|
1164
|
+
declare class TaskActionWidgetsService {
|
|
1165
|
+
thumbnailsMap: ITaskActionThumbnailWidget[];
|
|
1166
|
+
promptsMap: ITaskActionPromptWidget[];
|
|
1167
|
+
registerThumbnail(widget: ITaskActionThumbnailWidget): void;
|
|
1168
|
+
registerPrompt(widget: ITaskActionPromptWidget): void;
|
|
1169
|
+
getThumbnailComponentByName(name?: string): Type<unknown>;
|
|
1170
|
+
getPromptComponentByName(name?: string): Type<unknown>;
|
|
1171
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TaskActionWidgetsService, never>;
|
|
1172
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<TaskActionWidgetsService>;
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
/**
|
|
1176
|
+
* Minified thumbnail representation of an OzzyClientTaskAction.
|
|
1177
|
+
* Renders the registered custom thumbnail widget (or DefaultTaskActionThumbnailComponent)
|
|
1178
|
+
* and expands into the full RTSeeTaskActionComponent view on toggle.
|
|
1179
|
+
*/
|
|
1180
|
+
declare class TaskActionThumbnailComponent implements OnInit, OnChanges, OnDestroy {
|
|
1181
|
+
private cdr;
|
|
1182
|
+
private actionWidgets;
|
|
1183
|
+
action?: OzzyClientTaskAction | null;
|
|
1184
|
+
task?: OzzyClientTask | null;
|
|
1185
|
+
expanded: boolean;
|
|
1186
|
+
private subscribedAction;
|
|
1187
|
+
private onChangedBound;
|
|
1188
|
+
private toggleExpandBound;
|
|
1189
|
+
constructor(cdr: ChangeDetectorRef, actionWidgets: TaskActionWidgetsService);
|
|
1190
|
+
ngOnInit(): void;
|
|
1191
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
1192
|
+
ngOnDestroy(): void;
|
|
1193
|
+
get thumbnailComponent(): Type<unknown>;
|
|
1194
|
+
get thumbnailInputs(): Record<string, unknown>;
|
|
1195
|
+
toggleExpand(): void;
|
|
1196
|
+
private subscribe;
|
|
1197
|
+
private unsubscribe;
|
|
1198
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TaskActionThumbnailComponent, never>;
|
|
1199
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TaskActionThumbnailComponent, "rtsee-task-action-thumbnail, task-action-thumbnail", never, { "action": { "alias": "action"; "required": false; }; "task": { "alias": "task"; "required": false; }; }, {}, never, never, true, never>;
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
/**
|
|
1203
|
+
* Host component for a task action prompt.
|
|
1204
|
+
* Renders the registered custom prompt widget (or DefaultTaskActionPromptComponent).
|
|
1205
|
+
*/
|
|
1206
|
+
declare class TaskActionPromptComponent {
|
|
1207
|
+
private cdr;
|
|
1208
|
+
private actionWidgets;
|
|
1209
|
+
prompt?: IOzzyTaskActionPrompt | null;
|
|
1210
|
+
task?: OzzyClientTask | null;
|
|
1211
|
+
expanded: boolean;
|
|
1212
|
+
private toggleExpandBound;
|
|
1213
|
+
constructor(cdr: ChangeDetectorRef, actionWidgets: TaskActionWidgetsService);
|
|
1214
|
+
get promptComponent(): Type<unknown>;
|
|
1215
|
+
get promptInputs(): Record<string, unknown>;
|
|
1216
|
+
toggleExpand(): void;
|
|
1217
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TaskActionPromptComponent, never>;
|
|
1218
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TaskActionPromptComponent, "rtsee-task-action-prompt, task-action-prompt", never, { "prompt": { "alias": "prompt"; "required": false; }; "task": { "alias": "task"; "required": false; }; }, {}, never, never, true, never>;
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
declare class DefaultTaskActionThumbnailComponent {
|
|
1222
|
+
action?: OzzyClientTaskAction | null;
|
|
1223
|
+
task?: OzzyClientTask | null;
|
|
1224
|
+
expanded: boolean;
|
|
1225
|
+
toggleExpand?: () => void;
|
|
1226
|
+
get statusClass(): string;
|
|
1227
|
+
onToggle(): void;
|
|
1228
|
+
onButtonClick(event: MouseEvent): void;
|
|
1229
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DefaultTaskActionThumbnailComponent, never>;
|
|
1230
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DefaultTaskActionThumbnailComponent, "rtsee-default-task-action-thumbnail", never, { "action": { "alias": "action"; "required": false; }; "task": { "alias": "task"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; "toggleExpand": { "alias": "toggleExpand"; "required": false; }; }, {}, never, never, true, never>;
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
/**
|
|
1234
|
+
* Custom task-action thumbnail widget for Story creation / update actions.
|
|
1235
|
+
* Displays story-name, recommendedAge, friendlyUrl, and 2-line truncated
|
|
1236
|
+
* description, moralMeaning, and history with full text tooltip on hover.
|
|
1237
|
+
*/
|
|
1238
|
+
declare class StoryTaskActionThumbnailComponent {
|
|
1239
|
+
action?: OzzyClientTaskAction<Partial<IRTSeeStory>, Partial<IRTSeeStory>> | null;
|
|
1240
|
+
task?: OzzyClientTask | null;
|
|
1241
|
+
expanded: boolean;
|
|
1242
|
+
toggleExpand?: () => void;
|
|
1243
|
+
private get storyData();
|
|
1244
|
+
get storyName(): string;
|
|
1245
|
+
get recommendedAge(): string;
|
|
1246
|
+
get friendlyUrl(): string;
|
|
1247
|
+
get description(): string;
|
|
1248
|
+
get moralMeaning(): string;
|
|
1249
|
+
get history(): string;
|
|
1250
|
+
get statusClass(): string;
|
|
1251
|
+
onToggle(): void;
|
|
1252
|
+
onButtonClick(event: MouseEvent): void;
|
|
1253
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StoryTaskActionThumbnailComponent, never>;
|
|
1254
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<StoryTaskActionThumbnailComponent, "rtsee-story-task-action-thumbnail", never, { "action": { "alias": "action"; "required": false; }; "task": { "alias": "task"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; "toggleExpand": { "alias": "toggleExpand"; "required": false; }; }, {}, never, never, true, never>;
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
/**
|
|
1258
|
+
* Custom task-action thumbnail widget for Slide creation / update actions.
|
|
1259
|
+
* Displays slide number and 2 first truncated lines of slide text with full text tooltip on hover.
|
|
1260
|
+
*/
|
|
1261
|
+
declare class SlideTaskActionThumbnailComponent {
|
|
1262
|
+
action?: OzzyClientTaskAction<Partial<IRTSeeStorySlide>, Partial<IRTSeeStorySlide>> | null;
|
|
1263
|
+
task?: OzzyClientTask | null;
|
|
1264
|
+
expanded: boolean;
|
|
1265
|
+
toggleExpand?: () => void;
|
|
1266
|
+
private get slideData();
|
|
1267
|
+
get slideNumber(): number | string;
|
|
1268
|
+
get slideText(): string;
|
|
1269
|
+
get statusClass(): string;
|
|
1270
|
+
onToggle(): void;
|
|
1271
|
+
onButtonClick(event: MouseEvent): void;
|
|
1272
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SlideTaskActionThumbnailComponent, never>;
|
|
1273
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SlideTaskActionThumbnailComponent, "rtsee-slide-task-action-thumbnail", never, { "action": { "alias": "action"; "required": false; }; "task": { "alias": "task"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; "toggleExpand": { "alias": "toggleExpand"; "required": false; }; }, {}, never, never, true, never>;
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
declare class DefaultTaskActionPromptComponent {
|
|
1277
|
+
prompt?: IOzzyTaskActionPrompt | null;
|
|
1278
|
+
task?: OzzyClientTask | null;
|
|
1279
|
+
expanded: boolean;
|
|
1280
|
+
toggleExpand?: () => void;
|
|
1281
|
+
responseValue: string;
|
|
1282
|
+
submitting: boolean;
|
|
1283
|
+
get promptDataJson(): string;
|
|
1284
|
+
onToggle(): void;
|
|
1285
|
+
onButtonClick(event: MouseEvent): void;
|
|
1286
|
+
submit(): Promise<void>;
|
|
1287
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DefaultTaskActionPromptComponent, never>;
|
|
1288
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DefaultTaskActionPromptComponent, "rtsee-default-task-action-prompt", never, { "prompt": { "alias": "prompt"; "required": false; }; "task": { "alias": "task"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; "toggleExpand": { "alias": "toggleExpand"; "required": false; }; }, {}, never, never, true, never>;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1089
1291
|
declare abstract class BaseEventWidgetComponent implements OnInit, OnChanges, OnDestroy {
|
|
1090
1292
|
protected cd: ChangeDetectorRef;
|
|
1091
1293
|
private _event;
|
|
@@ -1141,5 +1343,77 @@ declare class SlideNumberChangedWidgetComponent extends BaseEventWidgetComponent
|
|
|
1141
1343
|
static ɵcmp: i0.ɵɵComponentDeclaration<SlideNumberChangedWidgetComponent, "rtsee-slide-number-changed-widget", never, {}, {}, never, never, true, never>;
|
|
1142
1344
|
}
|
|
1143
1345
|
|
|
1144
|
-
|
|
1145
|
-
|
|
1346
|
+
declare class ProfileOpenedWidgetComponent extends BaseEventWidgetComponent {
|
|
1347
|
+
constructor(cd: ChangeDetectorRef);
|
|
1348
|
+
get userName(): string;
|
|
1349
|
+
get imageUrl(): string | null;
|
|
1350
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ProfileOpenedWidgetComponent, never>;
|
|
1351
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ProfileOpenedWidgetComponent, "rtsee-profile-opened-widget", never, {}, {}, never, never, true, never>;
|
|
1352
|
+
}
|
|
1353
|
+
|
|
1354
|
+
declare class ChatOpenedWidgetComponent extends BaseEventWidgetComponent {
|
|
1355
|
+
constructor(cd: ChangeDetectorRef);
|
|
1356
|
+
get chatName(): string;
|
|
1357
|
+
get imageUrl(): string | null;
|
|
1358
|
+
get chatTypeLabel(): string;
|
|
1359
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChatOpenedWidgetComponent, never>;
|
|
1360
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatOpenedWidgetComponent, "rtsee-chat-opened-widget", never, {}, {}, never, never, true, never>;
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
declare class ChatCreatedWidgetComponent extends BaseEventWidgetComponent {
|
|
1364
|
+
constructor(cd: ChangeDetectorRef);
|
|
1365
|
+
get chatName(): string;
|
|
1366
|
+
get imageUrl(): string | null;
|
|
1367
|
+
get chatTypeLabel(): string;
|
|
1368
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChatCreatedWidgetComponent, never>;
|
|
1369
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatCreatedWidgetComponent, "rtsee-chat-created-widget", never, {}, {}, never, never, true, never>;
|
|
1370
|
+
}
|
|
1371
|
+
|
|
1372
|
+
declare class ChatMemberInviteClickedWidgetComponent extends BaseEventWidgetComponent {
|
|
1373
|
+
constructor(cd: ChangeDetectorRef);
|
|
1374
|
+
get chatName(): string;
|
|
1375
|
+
get imageUrl(): string | null;
|
|
1376
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChatMemberInviteClickedWidgetComponent, never>;
|
|
1377
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatMemberInviteClickedWidgetComponent, "rtsee-chat-member-invite-clicked-widget", never, {}, {}, never, never, true, never>;
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
declare class ChatAgentCreatedWidgetComponent extends BaseEventWidgetComponent {
|
|
1381
|
+
constructor(cd: ChangeDetectorRef);
|
|
1382
|
+
get agentName(): string;
|
|
1383
|
+
get chatName(): string;
|
|
1384
|
+
get imageUrl(): string | null;
|
|
1385
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChatAgentCreatedWidgetComponent, never>;
|
|
1386
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatAgentCreatedWidgetComponent, "rtsee-chat-agent-created-widget", never, {}, {}, never, never, true, never>;
|
|
1387
|
+
}
|
|
1388
|
+
|
|
1389
|
+
declare class ChatMessageSentWidgetComponent extends BaseEventWidgetComponent {
|
|
1390
|
+
constructor(cd: ChangeDetectorRef);
|
|
1391
|
+
get chatName(): string;
|
|
1392
|
+
get imageUrl(): string | null;
|
|
1393
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChatMessageSentWidgetComponent, never>;
|
|
1394
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatMessageSentWidgetComponent, "rtsee-chat-message-sent-widget", never, {}, {}, never, never, true, never>;
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
declare class ApplicationEventWidgetComponent extends BaseEventWidgetComponent {
|
|
1398
|
+
constructor(cd: ChangeDetectorRef);
|
|
1399
|
+
get eventAction(): 'created' | 'updated' | 'deleted';
|
|
1400
|
+
get badgeLabel(): string;
|
|
1401
|
+
get badgeIcon(): string;
|
|
1402
|
+
get badgeClass(): string;
|
|
1403
|
+
get placeholderClass(): string;
|
|
1404
|
+
get appName(): string;
|
|
1405
|
+
get appUrl(): string | null;
|
|
1406
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ApplicationEventWidgetComponent, never>;
|
|
1407
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ApplicationEventWidgetComponent, "rtsee-application-event-widget", never, {}, {}, never, never, true, never>;
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1410
|
+
declare class RequestDemoClickedWidgetComponent extends BaseEventWidgetComponent {
|
|
1411
|
+
constructor(cd: ChangeDetectorRef);
|
|
1412
|
+
get title(): string;
|
|
1413
|
+
get pageUrl(): string | null;
|
|
1414
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RequestDemoClickedWidgetComponent, never>;
|
|
1415
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RequestDemoClickedWidgetComponent, "rtsee-request-demo-clicked-widget", never, {}, {}, never, never, true, never>;
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
export { ApplicationEventWidgetComponent, BaseEventWidgetComponent, ChatAgentCreatedWidgetComponent, ChatCreatedWidgetComponent, ChatMemberInviteClickedWidgetComponent, ChatMessageSentWidgetComponent, ChatOpenedWidgetComponent, DefaultTaskActionPromptComponent, DefaultTaskActionThumbnailComponent, EntitiesConfigurationsListComponent, EntitiesListComponent, EventsWidgetsService, FormComponent, GtagService, IllustratorComponent, InteractiveStoryEditorComponent, ManageEntityComponent, ManageEntityConfigurationComponent, MessengerComponent, NgxService, PaymentProductSnippetComponent, PresentationComponent, ProfileComponent, ProfileOpenedWidgetComponent, RTSeeAuthComponent, RTSeeConferenceComponent, RTSeeContainerComponent, RTSeeControlsComponent, RTSeeModule, RTSeeTaskActionComponent, RTSeeTaskComponent, RequestDemoClickedWidgetComponent, RtseeEntityCommentsComponent, RtseeEntityPreviewComponent, RtseeEntityTagsComponent, RtseeEventsDashboardComponent, RtseePeerComponent, RtseeSettingsComponent, RtseeTagGroupManageComponent, RtseeTagGroupsManageComponent, RtseeTagManageComponent, RtseeTagsAccordionMenuComponent, SlideNumberChangedWidgetComponent, SlideTaskActionThumbnailComponent, StoryDetailsOpenedWidgetComponent, StoryElementsSectionComponent, StoryReadingStartedWidgetComponent, StoryTaskActionThumbnailComponent, TaskActionPromptComponent, TaskActionThumbnailComponent, TaskActionWidgetsService, TranslationsPanelComponent };
|
|
1419
|
+
export type { IAccordionItem, ITaskActionPromptWidget, ITaskActionThumbnailWidget, RTSeeTagForm, RTSeeTagGroupForm };
|
|
@@ -140,6 +140,26 @@
|
|
|
140
140
|
display: none;
|
|
141
141
|
//padding-bottom: $rts-bottom-nav-height + $rts-offset-md;
|
|
142
142
|
background-color: #fff;
|
|
143
|
+
|
|
144
|
+
.rts-manage-chat-info {
|
|
145
|
+
padding-bottom: $rts-bottom-nav-height + $rts-offset-sm;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.rts-messenger-profile-data-container {
|
|
149
|
+
padding-bottom: $rts-bottom-nav-height + $rts-offset-sm;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@media screen and (min-width: $rts-break-md) {
|
|
153
|
+
|
|
154
|
+
.rts-manage-chat-info {
|
|
155
|
+
padding-bottom: 0;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.rts-messenger-profile-data-container {
|
|
159
|
+
padding-bottom: 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
}
|
|
143
163
|
}
|
|
144
164
|
|
|
145
165
|
.rtsee-conference-container {
|
|
@@ -61,6 +61,61 @@
|
|
|
61
61
|
color: #2ecc71;
|
|
62
62
|
border: 1px solid rgba(46, 204, 113, 0.35);
|
|
63
63
|
}
|
|
64
|
+
|
|
65
|
+
&.profile-badge {
|
|
66
|
+
background: rgba(168, 85, 247, 0.2);
|
|
67
|
+
color: #c084fc;
|
|
68
|
+
border: 1px solid rgba(168, 85, 247, 0.35);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
&.chat-badge {
|
|
72
|
+
background: rgba(56, 189, 248, 0.2);
|
|
73
|
+
color: #38bdf8;
|
|
74
|
+
border: 1px solid rgba(56, 189, 248, 0.35);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
&.created-badge,
|
|
78
|
+
&.app-created-badge {
|
|
79
|
+
background: rgba(16, 185, 129, 0.2);
|
|
80
|
+
color: #34d399;
|
|
81
|
+
border: 1px solid rgba(16, 185, 129, 0.35);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
&.invite-badge {
|
|
85
|
+
background: rgba(245, 158, 11, 0.2);
|
|
86
|
+
color: #fbbf24;
|
|
87
|
+
border: 1px solid rgba(245, 158, 11, 0.35);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
&.agent-badge {
|
|
91
|
+
background: rgba(236, 72, 153, 0.2);
|
|
92
|
+
color: #f472b6;
|
|
93
|
+
border: 1px solid rgba(236, 72, 153, 0.35);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
&.message-badge {
|
|
97
|
+
background: rgba(99, 102, 241, 0.2);
|
|
98
|
+
color: #818cf8;
|
|
99
|
+
border: 1px solid rgba(99, 102, 241, 0.35);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
&.app-updated-badge {
|
|
103
|
+
background: rgba(59, 130, 246, 0.2);
|
|
104
|
+
color: #60a5fa;
|
|
105
|
+
border: 1px solid rgba(59, 130, 246, 0.35);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
&.app-deleted-badge {
|
|
109
|
+
background: rgba(239, 68, 68, 0.2);
|
|
110
|
+
color: #f87171;
|
|
111
|
+
border: 1px solid rgba(239, 68, 68, 0.35);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
&.demo-badge {
|
|
115
|
+
background: rgba(249, 115, 22, 0.2);
|
|
116
|
+
color: #fb923c;
|
|
117
|
+
border: 1px solid rgba(249, 115, 22, 0.35);
|
|
118
|
+
}
|
|
64
119
|
}
|
|
65
120
|
|
|
66
121
|
.widget-timer {
|
|
@@ -108,6 +163,10 @@
|
|
|
108
163
|
align-items: center;
|
|
109
164
|
justify-content: center;
|
|
110
165
|
|
|
166
|
+
&.avatar-media {
|
|
167
|
+
border-radius: 50%;
|
|
168
|
+
}
|
|
169
|
+
|
|
111
170
|
.widget-thumbnail-image {
|
|
112
171
|
width: 100%;
|
|
113
172
|
height: 100%;
|
|
@@ -145,6 +204,80 @@
|
|
|
145
204
|
color: #2ecc71;
|
|
146
205
|
}
|
|
147
206
|
|
|
207
|
+
&.profile-placeholder {
|
|
208
|
+
background: linear-gradient(
|
|
209
|
+
135deg,
|
|
210
|
+
rgba(168, 85, 247, 0.3) 0%,
|
|
211
|
+
rgba(99, 102, 241, 0.2) 100%
|
|
212
|
+
);
|
|
213
|
+
color: #c084fc;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
&.chat-placeholder,
|
|
217
|
+
&.message-placeholder {
|
|
218
|
+
background: linear-gradient(
|
|
219
|
+
135deg,
|
|
220
|
+
rgba(56, 189, 248, 0.3) 0%,
|
|
221
|
+
rgba(99, 102, 241, 0.2) 100%
|
|
222
|
+
);
|
|
223
|
+
color: #38bdf8;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
&.created-placeholder,
|
|
227
|
+
&.app-created-placeholder {
|
|
228
|
+
background: linear-gradient(
|
|
229
|
+
135deg,
|
|
230
|
+
rgba(16, 185, 129, 0.3) 0%,
|
|
231
|
+
rgba(56, 189, 248, 0.2) 100%
|
|
232
|
+
);
|
|
233
|
+
color: #34d399;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
&.invite-placeholder {
|
|
237
|
+
background: linear-gradient(
|
|
238
|
+
135deg,
|
|
239
|
+
rgba(245, 158, 11, 0.3) 0%,
|
|
240
|
+
rgba(236, 72, 153, 0.2) 100%
|
|
241
|
+
);
|
|
242
|
+
color: #fbbf24;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
&.agent-placeholder {
|
|
246
|
+
background: linear-gradient(
|
|
247
|
+
135deg,
|
|
248
|
+
rgba(236, 72, 153, 0.3) 0%,
|
|
249
|
+
rgba(168, 85, 247, 0.2) 100%
|
|
250
|
+
);
|
|
251
|
+
color: #f472b6;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
&.app-updated-placeholder {
|
|
255
|
+
background: linear-gradient(
|
|
256
|
+
135deg,
|
|
257
|
+
rgba(59, 130, 246, 0.3) 0%,
|
|
258
|
+
rgba(99, 102, 241, 0.2) 100%
|
|
259
|
+
);
|
|
260
|
+
color: #60a5fa;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
&.app-deleted-placeholder {
|
|
264
|
+
background: linear-gradient(
|
|
265
|
+
135deg,
|
|
266
|
+
rgba(239, 68, 68, 0.3) 0%,
|
|
267
|
+
rgba(249, 115, 22, 0.2) 100%
|
|
268
|
+
);
|
|
269
|
+
color: #f87171;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
&.demo-placeholder {
|
|
273
|
+
background: linear-gradient(
|
|
274
|
+
135deg,
|
|
275
|
+
rgba(249, 115, 22, 0.3) 0%,
|
|
276
|
+
rgba(245, 158, 11, 0.2) 100%
|
|
277
|
+
);
|
|
278
|
+
color: #fb923c;
|
|
279
|
+
}
|
|
280
|
+
|
|
148
281
|
.material-icons-outlined {
|
|
149
282
|
font-size: 22px;
|
|
150
283
|
}
|
|
@@ -7,6 +7,16 @@
|
|
|
7
7
|
height: 100%;
|
|
8
8
|
background: var(--rts-bg-primary);
|
|
9
9
|
|
|
10
|
+
&:not(.rts-chat-standalone) {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
|
|
14
|
+
.rts-chat-body-container {
|
|
15
|
+
flex: 1;
|
|
16
|
+
min-height: 0;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
10
20
|
// ── Standalone Mode (embedded in story player etc.) ──
|
|
11
21
|
&.rts-chat-standalone {
|
|
12
22
|
background: transparent;
|
|
@@ -159,4 +169,11 @@
|
|
|
159
169
|
bottom: 0;
|
|
160
170
|
}
|
|
161
171
|
}
|
|
172
|
+
|
|
173
|
+
&.rts-chat-framed {
|
|
174
|
+
.rts-chat-footer-container {
|
|
175
|
+
position: absolute;
|
|
176
|
+
bottom: 0;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
162
179
|
}
|