@rtsee/ngx 0.0.119 → 0.0.121
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 +1313 -86
- package/dist/ngx/fesm2022/rtsee-ngx.mjs.map +1 -1
- package/dist/ngx/index.d.ts +281 -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 +4 -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 +26 -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,10 @@ declare class ProfileComponent {
|
|
|
134
134
|
|
|
135
135
|
declare class MessengerComponent {
|
|
136
136
|
messenger: RTSeeMessenger;
|
|
137
|
+
isFramed: boolean;
|
|
137
138
|
onScroll(): void;
|
|
138
139
|
static ɵfac: i0.ɵɵFactoryDeclaration<MessengerComponent, never>;
|
|
139
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MessengerComponent, "rtsee-messenger", never, { "messenger": { "alias": "messenger"; "required": false; }; }, {}, never, never, true, never>;
|
|
140
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MessengerComponent, "rtsee-messenger", never, { "messenger": { "alias": "messenger"; "required": false; }; "isFramed": { "alias": "isFramed"; "required": false; }; }, {}, never, never, true, never>;
|
|
140
141
|
}
|
|
141
142
|
|
|
142
143
|
declare class PaymentProductSnippetComponent {
|
|
@@ -562,7 +563,7 @@ declare class MessageWidgetsService {
|
|
|
562
563
|
|
|
563
564
|
declare class EventsWidgetsService {
|
|
564
565
|
widgetsMap: IMessageWidget[];
|
|
565
|
-
getWidgetComponentByName(name
|
|
566
|
+
getWidgetComponentByName(name?: string): any;
|
|
566
567
|
static ɵfac: i0.ɵɵFactoryDeclaration<EventsWidgetsService, never>;
|
|
567
568
|
static ɵprov: i0.ɵɵInjectableDeclaration<EventsWidgetsService>;
|
|
568
569
|
}
|
|
@@ -575,10 +576,13 @@ declare class EventThumbnailComponent implements OnInit, OnChanges, AfterViewIni
|
|
|
575
576
|
tooltip?: string;
|
|
576
577
|
timeInAgoFormat: string;
|
|
577
578
|
private componentRef?;
|
|
578
|
-
event: RTSeeDashboardEvent
|
|
579
|
+
event: RTSeeDashboardEvent<Record<string, unknown>>;
|
|
579
580
|
session?: RTSeeDashboardClientSession;
|
|
580
581
|
widgetHost: WidgetDirective;
|
|
581
582
|
constructor(widgetsService: EventsWidgetsService, componentFactoryResolver: ComponentFactoryResolver, timeFormatService: TimeFormatHelperService, cd: ChangeDetectorRef);
|
|
583
|
+
get widgetName(): string | undefined;
|
|
584
|
+
get hasWidget(): boolean;
|
|
585
|
+
get hasDetails(): boolean;
|
|
582
586
|
ngOnInit(): void;
|
|
583
587
|
generateTooltip(): void;
|
|
584
588
|
ngOnChanges(changes: SimpleChanges): void;
|
|
@@ -707,6 +711,7 @@ declare class ChatComponent implements OnInit, OnDestroy {
|
|
|
707
711
|
chatData?: IRTSeeChat;
|
|
708
712
|
entity?: RTSeeEntity;
|
|
709
713
|
messenger: RTSeeMessenger;
|
|
714
|
+
isFramed: boolean;
|
|
710
715
|
showInvite: boolean;
|
|
711
716
|
get isSoleAdmin(): boolean;
|
|
712
717
|
toggleInvite(): void;
|
|
@@ -714,7 +719,7 @@ declare class ChatComponent implements OnInit, OnDestroy {
|
|
|
714
719
|
ngOnInit(): void;
|
|
715
720
|
ngOnDestroy(): void;
|
|
716
721
|
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>;
|
|
722
|
+
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
723
|
}
|
|
719
724
|
|
|
720
725
|
declare class MessageComponent implements OnInit, AfterViewInit, OnChanges {
|
|
@@ -747,6 +752,7 @@ interface IRTSeeMessageGroup {
|
|
|
747
752
|
declare class MessagesListComponent implements AfterViewInit, OnChanges, OnDestroy, OnInit {
|
|
748
753
|
private timeFormatService;
|
|
749
754
|
private scroller;
|
|
755
|
+
private hostRef;
|
|
750
756
|
private document;
|
|
751
757
|
bindScrollFunction: () => void;
|
|
752
758
|
bindedGroupFunction: () => void;
|
|
@@ -754,15 +760,20 @@ declare class MessagesListComponent implements AfterViewInit, OnChanges, OnDestr
|
|
|
754
760
|
firstGroupedMessage: RTSeeMessage | null;
|
|
755
761
|
lastGroupedMessage: RTSeeMessage | null;
|
|
756
762
|
shouldStickToBottom: boolean;
|
|
763
|
+
isWindowScroll: boolean;
|
|
757
764
|
private resizeObserver;
|
|
758
765
|
private onMediaCapture;
|
|
759
766
|
private initialScrollInterval;
|
|
767
|
+
private lastContainerScrollTop;
|
|
768
|
+
private lastWindowScrollTop;
|
|
760
769
|
chat: RTSeeChat;
|
|
761
770
|
messenger: RTSeeMessenger;
|
|
771
|
+
isFramed: boolean;
|
|
762
772
|
scrollContainer: ElementRef<HTMLDivElement>;
|
|
763
773
|
contentBlock: ElementRef<HTMLDivElement>;
|
|
764
774
|
bottomAnchor: ElementRef<HTMLDivElement>;
|
|
765
|
-
constructor(timeFormatService: TimeFormatHelperService, scroller: ViewportScroller, document: Document);
|
|
775
|
+
constructor(timeFormatService: TimeFormatHelperService, scroller: ViewportScroller, hostRef: ElementRef<HTMLElement>, document: Document);
|
|
776
|
+
get isStandalone(): boolean;
|
|
766
777
|
onWindowScroll(event: Event): void;
|
|
767
778
|
onWindowResize(): void;
|
|
768
779
|
ngOnInit(): void;
|
|
@@ -777,6 +788,10 @@ declare class MessagesListComponent implements AfterViewInit, OnChanges, OnDestr
|
|
|
777
788
|
formatDate(message: RTSeeMessage): string;
|
|
778
789
|
private checkScrollPosition;
|
|
779
790
|
private isAtBottom;
|
|
791
|
+
private isMobileViewport;
|
|
792
|
+
private isShellMobileChatActive;
|
|
793
|
+
private computeIsWindowScroll;
|
|
794
|
+
private updateScrollMode;
|
|
780
795
|
private enforceInitialScroll;
|
|
781
796
|
private bindChatEvents;
|
|
782
797
|
private unbindChatEvents;
|
|
@@ -784,7 +799,7 @@ declare class MessagesListComponent implements AfterViewInit, OnChanges, OnDestr
|
|
|
784
799
|
private saveFirstAndLastGroupedMessages;
|
|
785
800
|
protected readonly RTSeeChatTypes: typeof RTSeeChatTypes;
|
|
786
801
|
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>;
|
|
802
|
+
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
803
|
}
|
|
789
804
|
|
|
790
805
|
declare class ChatThumbnailComponent {
|
|
@@ -1061,7 +1076,7 @@ declare class RTSeeTaskComponent implements OnInit, OnChanges, OnDestroy {
|
|
|
1061
1076
|
chat?: RTSeeChat;
|
|
1062
1077
|
/** hide the execute button (e.g. when the workflow executes the task itself) */
|
|
1063
1078
|
allowExecute: boolean;
|
|
1064
|
-
|
|
1079
|
+
actionsContainer?: ElementRef<HTMLDivElement>;
|
|
1065
1080
|
copied: 'input' | 'output' | null;
|
|
1066
1081
|
private subscribedTask;
|
|
1067
1082
|
private onChangedBound;
|
|
@@ -1074,10 +1089,15 @@ declare class RTSeeTaskComponent implements OnInit, OnChanges, OnDestroy {
|
|
|
1074
1089
|
get inputJson(): string;
|
|
1075
1090
|
get outputJson(): string;
|
|
1076
1091
|
get hasOutput(): boolean;
|
|
1077
|
-
get
|
|
1092
|
+
get hasActions(): boolean;
|
|
1093
|
+
get hasPrompts(): boolean;
|
|
1078
1094
|
execute(): void;
|
|
1095
|
+
loadMoreActions(): void;
|
|
1096
|
+
onActionsScroll(event: Event): void;
|
|
1079
1097
|
copy(kind: 'input' | 'output'): Promise<void>;
|
|
1080
|
-
|
|
1098
|
+
trackAction(_index: number, action: OzzyClientTaskAction): string;
|
|
1099
|
+
trackPrompt(_index: number, prompt: IOzzyTaskActionPrompt): string;
|
|
1100
|
+
private ensureActions;
|
|
1081
1101
|
private toJson;
|
|
1082
1102
|
private subscribe;
|
|
1083
1103
|
private unsubscribe;
|
|
@@ -1086,6 +1106,181 @@ declare class RTSeeTaskComponent implements OnInit, OnChanges, OnDestroy {
|
|
|
1086
1106
|
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
1107
|
}
|
|
1088
1108
|
|
|
1109
|
+
/**
|
|
1110
|
+
* Full client-side representation of a single OzzyTaskAction.
|
|
1111
|
+
* Displays input, logs, output, and/or errors of the action.
|
|
1112
|
+
*/
|
|
1113
|
+
declare class RTSeeTaskActionComponent implements OnInit, OnChanges, OnDestroy {
|
|
1114
|
+
private cdr;
|
|
1115
|
+
action?: OzzyClientTaskAction | null;
|
|
1116
|
+
logsContainer?: ElementRef<HTMLDivElement>;
|
|
1117
|
+
copied: 'input' | 'output' | null;
|
|
1118
|
+
private subscribedAction;
|
|
1119
|
+
private onChangedBound;
|
|
1120
|
+
constructor(cdr: ChangeDetectorRef);
|
|
1121
|
+
ngOnInit(): void;
|
|
1122
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
1123
|
+
ngOnDestroy(): void;
|
|
1124
|
+
get statusLabel(): string;
|
|
1125
|
+
get statusClass(): string;
|
|
1126
|
+
get inputJson(): string;
|
|
1127
|
+
get outputJson(): string;
|
|
1128
|
+
get hasOutput(): boolean;
|
|
1129
|
+
get hasLogs(): boolean;
|
|
1130
|
+
copy(kind: 'input' | 'output'): Promise<void>;
|
|
1131
|
+
trackLog(index: number, log: IOzzyTaskLog): string;
|
|
1132
|
+
private ensureLoaded;
|
|
1133
|
+
private toJson;
|
|
1134
|
+
private subscribe;
|
|
1135
|
+
private unsubscribe;
|
|
1136
|
+
private onActionChanged;
|
|
1137
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RTSeeTaskActionComponent, never>;
|
|
1138
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RTSeeTaskActionComponent, "rtsee-task-action", never, { "action": { "alias": "action"; "required": false; }; }, {}, never, never, true, never>;
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
interface ITaskActionThumbnailWidget {
|
|
1142
|
+
/** matches OzzyTaskAction.name */
|
|
1143
|
+
name: string;
|
|
1144
|
+
/** standalone component accepting `action`, `task`, `expanded`, `toggleExpand` inputs */
|
|
1145
|
+
component: Type<unknown>;
|
|
1146
|
+
}
|
|
1147
|
+
interface ITaskActionPromptWidget {
|
|
1148
|
+
/** matches IOzzyTaskActionPrompt.name */
|
|
1149
|
+
name: string;
|
|
1150
|
+
/** standalone component accepting `prompt`, `task`, `expanded`, `toggleExpand` inputs */
|
|
1151
|
+
component: Type<unknown>;
|
|
1152
|
+
}
|
|
1153
|
+
/**
|
|
1154
|
+
* Registry of custom client-side widgets for task-action-thumbnails and task-action-prompts.
|
|
1155
|
+
* Falls back to DefaultTaskActionThumbnailComponent / DefaultTaskActionPromptComponent.
|
|
1156
|
+
*/
|
|
1157
|
+
declare class TaskActionWidgetsService {
|
|
1158
|
+
thumbnailsMap: ITaskActionThumbnailWidget[];
|
|
1159
|
+
promptsMap: ITaskActionPromptWidget[];
|
|
1160
|
+
registerThumbnail(widget: ITaskActionThumbnailWidget): void;
|
|
1161
|
+
registerPrompt(widget: ITaskActionPromptWidget): void;
|
|
1162
|
+
getThumbnailComponentByName(name?: string): Type<unknown>;
|
|
1163
|
+
getPromptComponentByName(name?: string): Type<unknown>;
|
|
1164
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TaskActionWidgetsService, never>;
|
|
1165
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<TaskActionWidgetsService>;
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1168
|
+
/**
|
|
1169
|
+
* Minified thumbnail representation of an OzzyClientTaskAction.
|
|
1170
|
+
* Renders the registered custom thumbnail widget (or DefaultTaskActionThumbnailComponent)
|
|
1171
|
+
* and expands into the full RTSeeTaskActionComponent view on toggle.
|
|
1172
|
+
*/
|
|
1173
|
+
declare class TaskActionThumbnailComponent implements OnInit, OnChanges, OnDestroy {
|
|
1174
|
+
private cdr;
|
|
1175
|
+
private actionWidgets;
|
|
1176
|
+
action?: OzzyClientTaskAction | null;
|
|
1177
|
+
task?: OzzyClientTask | null;
|
|
1178
|
+
expanded: boolean;
|
|
1179
|
+
private subscribedAction;
|
|
1180
|
+
private onChangedBound;
|
|
1181
|
+
private toggleExpandBound;
|
|
1182
|
+
constructor(cdr: ChangeDetectorRef, actionWidgets: TaskActionWidgetsService);
|
|
1183
|
+
ngOnInit(): void;
|
|
1184
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
1185
|
+
ngOnDestroy(): void;
|
|
1186
|
+
get thumbnailComponent(): Type<unknown>;
|
|
1187
|
+
get thumbnailInputs(): Record<string, unknown>;
|
|
1188
|
+
toggleExpand(): void;
|
|
1189
|
+
private subscribe;
|
|
1190
|
+
private unsubscribe;
|
|
1191
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TaskActionThumbnailComponent, never>;
|
|
1192
|
+
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>;
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
/**
|
|
1196
|
+
* Host component for a task action prompt.
|
|
1197
|
+
* Renders the registered custom prompt widget (or DefaultTaskActionPromptComponent).
|
|
1198
|
+
*/
|
|
1199
|
+
declare class TaskActionPromptComponent {
|
|
1200
|
+
private cdr;
|
|
1201
|
+
private actionWidgets;
|
|
1202
|
+
prompt?: IOzzyTaskActionPrompt | null;
|
|
1203
|
+
task?: OzzyClientTask | null;
|
|
1204
|
+
expanded: boolean;
|
|
1205
|
+
private toggleExpandBound;
|
|
1206
|
+
constructor(cdr: ChangeDetectorRef, actionWidgets: TaskActionWidgetsService);
|
|
1207
|
+
get promptComponent(): Type<unknown>;
|
|
1208
|
+
get promptInputs(): Record<string, unknown>;
|
|
1209
|
+
toggleExpand(): void;
|
|
1210
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TaskActionPromptComponent, never>;
|
|
1211
|
+
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>;
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
declare class DefaultTaskActionThumbnailComponent {
|
|
1215
|
+
action?: OzzyClientTaskAction | null;
|
|
1216
|
+
task?: OzzyClientTask | null;
|
|
1217
|
+
expanded: boolean;
|
|
1218
|
+
toggleExpand?: () => void;
|
|
1219
|
+
get statusClass(): string;
|
|
1220
|
+
onToggle(): void;
|
|
1221
|
+
onButtonClick(event: MouseEvent): void;
|
|
1222
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DefaultTaskActionThumbnailComponent, never>;
|
|
1223
|
+
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>;
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
/**
|
|
1227
|
+
* Custom task-action thumbnail widget for Story creation / update actions.
|
|
1228
|
+
* Displays story-name, recommendedAge, friendlyUrl, and 2-line truncated
|
|
1229
|
+
* description, moralMeaning, and history with full text tooltip on hover.
|
|
1230
|
+
*/
|
|
1231
|
+
declare class StoryTaskActionThumbnailComponent {
|
|
1232
|
+
action?: OzzyClientTaskAction<Partial<IRTSeeStory>, Partial<IRTSeeStory>> | null;
|
|
1233
|
+
task?: OzzyClientTask | null;
|
|
1234
|
+
expanded: boolean;
|
|
1235
|
+
toggleExpand?: () => void;
|
|
1236
|
+
private get storyData();
|
|
1237
|
+
get storyName(): string;
|
|
1238
|
+
get recommendedAge(): string;
|
|
1239
|
+
get friendlyUrl(): string;
|
|
1240
|
+
get description(): string;
|
|
1241
|
+
get moralMeaning(): string;
|
|
1242
|
+
get history(): string;
|
|
1243
|
+
get statusClass(): string;
|
|
1244
|
+
onToggle(): void;
|
|
1245
|
+
onButtonClick(event: MouseEvent): void;
|
|
1246
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<StoryTaskActionThumbnailComponent, never>;
|
|
1247
|
+
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>;
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
/**
|
|
1251
|
+
* Custom task-action thumbnail widget for Slide creation / update actions.
|
|
1252
|
+
* Displays slide number and 2 first truncated lines of slide text with full text tooltip on hover.
|
|
1253
|
+
*/
|
|
1254
|
+
declare class SlideTaskActionThumbnailComponent {
|
|
1255
|
+
action?: OzzyClientTaskAction<Partial<IRTSeeStorySlide>, Partial<IRTSeeStorySlide>> | null;
|
|
1256
|
+
task?: OzzyClientTask | null;
|
|
1257
|
+
expanded: boolean;
|
|
1258
|
+
toggleExpand?: () => void;
|
|
1259
|
+
private get slideData();
|
|
1260
|
+
get slideNumber(): number | string;
|
|
1261
|
+
get slideText(): string;
|
|
1262
|
+
get statusClass(): string;
|
|
1263
|
+
onToggle(): void;
|
|
1264
|
+
onButtonClick(event: MouseEvent): void;
|
|
1265
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SlideTaskActionThumbnailComponent, never>;
|
|
1266
|
+
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>;
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1269
|
+
declare class DefaultTaskActionPromptComponent {
|
|
1270
|
+
prompt?: IOzzyTaskActionPrompt | null;
|
|
1271
|
+
task?: OzzyClientTask | null;
|
|
1272
|
+
expanded: boolean;
|
|
1273
|
+
toggleExpand?: () => void;
|
|
1274
|
+
responseValue: string;
|
|
1275
|
+
submitting: boolean;
|
|
1276
|
+
get promptDataJson(): string;
|
|
1277
|
+
onToggle(): void;
|
|
1278
|
+
onButtonClick(event: MouseEvent): void;
|
|
1279
|
+
submit(): Promise<void>;
|
|
1280
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DefaultTaskActionPromptComponent, never>;
|
|
1281
|
+
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>;
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1089
1284
|
declare abstract class BaseEventWidgetComponent implements OnInit, OnChanges, OnDestroy {
|
|
1090
1285
|
protected cd: ChangeDetectorRef;
|
|
1091
1286
|
private _event;
|
|
@@ -1141,5 +1336,77 @@ declare class SlideNumberChangedWidgetComponent extends BaseEventWidgetComponent
|
|
|
1141
1336
|
static ɵcmp: i0.ɵɵComponentDeclaration<SlideNumberChangedWidgetComponent, "rtsee-slide-number-changed-widget", never, {}, {}, never, never, true, never>;
|
|
1142
1337
|
}
|
|
1143
1338
|
|
|
1144
|
-
|
|
1145
|
-
|
|
1339
|
+
declare class ProfileOpenedWidgetComponent extends BaseEventWidgetComponent {
|
|
1340
|
+
constructor(cd: ChangeDetectorRef);
|
|
1341
|
+
get userName(): string;
|
|
1342
|
+
get imageUrl(): string | null;
|
|
1343
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ProfileOpenedWidgetComponent, never>;
|
|
1344
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ProfileOpenedWidgetComponent, "rtsee-profile-opened-widget", never, {}, {}, never, never, true, never>;
|
|
1345
|
+
}
|
|
1346
|
+
|
|
1347
|
+
declare class ChatOpenedWidgetComponent extends BaseEventWidgetComponent {
|
|
1348
|
+
constructor(cd: ChangeDetectorRef);
|
|
1349
|
+
get chatName(): string;
|
|
1350
|
+
get imageUrl(): string | null;
|
|
1351
|
+
get chatTypeLabel(): string;
|
|
1352
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChatOpenedWidgetComponent, never>;
|
|
1353
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatOpenedWidgetComponent, "rtsee-chat-opened-widget", never, {}, {}, never, never, true, never>;
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
declare class ChatCreatedWidgetComponent extends BaseEventWidgetComponent {
|
|
1357
|
+
constructor(cd: ChangeDetectorRef);
|
|
1358
|
+
get chatName(): string;
|
|
1359
|
+
get imageUrl(): string | null;
|
|
1360
|
+
get chatTypeLabel(): string;
|
|
1361
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChatCreatedWidgetComponent, never>;
|
|
1362
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatCreatedWidgetComponent, "rtsee-chat-created-widget", never, {}, {}, never, never, true, never>;
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
declare class ChatMemberInviteClickedWidgetComponent extends BaseEventWidgetComponent {
|
|
1366
|
+
constructor(cd: ChangeDetectorRef);
|
|
1367
|
+
get chatName(): string;
|
|
1368
|
+
get imageUrl(): string | null;
|
|
1369
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChatMemberInviteClickedWidgetComponent, never>;
|
|
1370
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatMemberInviteClickedWidgetComponent, "rtsee-chat-member-invite-clicked-widget", never, {}, {}, never, never, true, never>;
|
|
1371
|
+
}
|
|
1372
|
+
|
|
1373
|
+
declare class ChatAgentCreatedWidgetComponent extends BaseEventWidgetComponent {
|
|
1374
|
+
constructor(cd: ChangeDetectorRef);
|
|
1375
|
+
get agentName(): string;
|
|
1376
|
+
get chatName(): string;
|
|
1377
|
+
get imageUrl(): string | null;
|
|
1378
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChatAgentCreatedWidgetComponent, never>;
|
|
1379
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatAgentCreatedWidgetComponent, "rtsee-chat-agent-created-widget", never, {}, {}, never, never, true, never>;
|
|
1380
|
+
}
|
|
1381
|
+
|
|
1382
|
+
declare class ChatMessageSentWidgetComponent extends BaseEventWidgetComponent {
|
|
1383
|
+
constructor(cd: ChangeDetectorRef);
|
|
1384
|
+
get chatName(): string;
|
|
1385
|
+
get imageUrl(): string | null;
|
|
1386
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChatMessageSentWidgetComponent, never>;
|
|
1387
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatMessageSentWidgetComponent, "rtsee-chat-message-sent-widget", never, {}, {}, never, never, true, never>;
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1390
|
+
declare class ApplicationEventWidgetComponent extends BaseEventWidgetComponent {
|
|
1391
|
+
constructor(cd: ChangeDetectorRef);
|
|
1392
|
+
get eventAction(): 'created' | 'updated' | 'deleted';
|
|
1393
|
+
get badgeLabel(): string;
|
|
1394
|
+
get badgeIcon(): string;
|
|
1395
|
+
get badgeClass(): string;
|
|
1396
|
+
get placeholderClass(): string;
|
|
1397
|
+
get appName(): string;
|
|
1398
|
+
get appUrl(): string | null;
|
|
1399
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ApplicationEventWidgetComponent, never>;
|
|
1400
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ApplicationEventWidgetComponent, "rtsee-application-event-widget", never, {}, {}, never, never, true, never>;
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
declare class RequestDemoClickedWidgetComponent extends BaseEventWidgetComponent {
|
|
1404
|
+
constructor(cd: ChangeDetectorRef);
|
|
1405
|
+
get title(): string;
|
|
1406
|
+
get pageUrl(): string | null;
|
|
1407
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RequestDemoClickedWidgetComponent, never>;
|
|
1408
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RequestDemoClickedWidgetComponent, "rtsee-request-demo-clicked-widget", never, {}, {}, never, never, true, never>;
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
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 };
|
|
1412
|
+
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
|
}
|
|
@@ -5,8 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
// ── Manage Chat Info (create / edit form panel) ──
|
|
7
7
|
.rts-manage-chat-info {
|
|
8
|
-
overflow-y: auto;
|
|
9
|
-
max-height: 100vh;
|
|
10
8
|
-webkit-overflow-scrolling: touch;
|
|
11
9
|
|
|
12
10
|
.rts-form-title {
|
|
@@ -42,9 +40,6 @@
|
|
|
42
40
|
// ── Chat Info Panel ──
|
|
43
41
|
.rts-chat-info {
|
|
44
42
|
padding: $rtsu-space-md;
|
|
45
|
-
overflow-y: auto;
|
|
46
|
-
max-height: calc(100vh - #{$rts-messenger-header-height});
|
|
47
|
-
-webkit-overflow-scrolling: touch;
|
|
48
43
|
|
|
49
44
|
.rts-chat-info-meta {
|
|
50
45
|
text-align: center;
|
|
@@ -168,7 +168,25 @@
|
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
-
// ── Tablet+ ──
|
|
171
|
+
// ── Internal Scrollable Mode & Tablet+ ──
|
|
172
|
+
&.rts-messages-list-scrollable {
|
|
173
|
+
overflow: auto;
|
|
174
|
+
overscroll-behavior-y: contain;
|
|
175
|
+
|
|
176
|
+
.rts-messenger-message-wrapper {
|
|
177
|
+
&:last-child,
|
|
178
|
+
&:last-of-type {
|
|
179
|
+
margin-bottom: 0;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.rts-messenger-message-inset {
|
|
183
|
+
.rts-messenger-message-sender-image {
|
|
184
|
+
top: $rtsu-space-sm;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
172
190
|
@media screen and (min-width: $rtsu-break-md) {
|
|
173
191
|
overflow: auto;
|
|
174
192
|
overscroll-behavior-y: contain;
|