@rtsee/ngx 0.0.109 → 0.0.111

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnInit, AfterViewInit, ElementRef, EventEmitter, OnDestroy, ChangeDetectorRef, OutputEmitterRef, ViewContainerRef, ComponentFactoryResolver, Type, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { OnInit, AfterViewInit, ElementRef, EventEmitter, OnDestroy, ChangeDetectorRef, OutputEmitterRef, ViewContainerRef, ComponentFactoryResolver, OnChanges, SimpleChanges, Type } from '@angular/core';
3
3
  import { RTSeeConference, RTSeePeerConnection } from '@rtsee/conference';
4
4
  import { RTSeeMessenger, RTSeeMessengerSearch, RTSeeMessage, RTSeeChat, RTSeeChatMember, RTSeeMentionAutocomplete, RTSeeWorkflowAutocomplete, OzzyClientTask } from '@rtsee/messenger';
5
5
  import { IPeer, RTSeeTextLabelKeys, IRTSeeCall } from '@rtsee/core';
@@ -677,7 +677,7 @@ declare class ChatComponent implements OnInit, OnDestroy {
677
677
  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>;
678
678
  }
679
679
 
680
- declare class MessageComponent implements OnInit, AfterViewInit {
680
+ declare class MessageComponent implements OnInit, AfterViewInit, OnChanges {
681
681
  private widgetsService;
682
682
  private componentFactoryResolver;
683
683
  timeFormatService: TimeFormatHelperService;
@@ -686,8 +686,11 @@ declare class MessageComponent implements OnInit, AfterViewInit {
686
686
  member: RTSeeChatMember<any>;
687
687
  messenger: RTSeeMessenger;
688
688
  widgetHost: WidgetDirective;
689
+ private widgetRef;
690
+ private widgetHasMessageInput;
689
691
  constructor(widgetsService: MessageWidgetsService, componentFactoryResolver: ComponentFactoryResolver, timeFormatService: TimeFormatHelperService);
690
692
  ngOnInit(): void;
693
+ ngOnChanges(changes: SimpleChanges): void;
691
694
  ngAfterViewInit(): void;
692
695
  static ɵfac: i0.ɵɵFactoryDeclaration<MessageComponent, never>;
693
696
  static ɵcmp: i0.ɵɵComponentDeclaration<MessageComponent, "rtsee-message", never, { "chat": { "alias": "chat"; "required": false; }; "message": { "alias": "message"; "required": false; }; "member": { "alias": "member"; "required": false; }; "messenger": { "alias": "messenger"; "required": false; }; }, {}, never, never, true, never>;
@@ -1,199 +1,163 @@
1
1
  @import "./variables";
2
- @import "../common-variables";
2
+
3
+ // ═══════════════════════════════════════════════════════════════════
4
+ // AUTH — Page shell & glass card (sign-in, sign-up, forgot / reset password)
5
+ // Follows the messenger / presentation dark glass design language.
6
+ // ═══════════════════════════════════════════════════════════════════
3
7
 
4
8
  .rtsee-auth {
9
+ position: relative;
5
10
  min-height: 100vh;
6
11
  min-height: 100dvh;
7
12
  display: flex;
8
13
  flex-direction: column;
9
14
  justify-content: center;
10
15
  align-items: center;
16
+ padding: $rtsee-auth-page-padding;
17
+ box-sizing: border-box;
18
+ overflow: hidden;
19
+ background: $rtsee-auth-background;
20
+ color: var(--rts-text-primary);
21
+ font-family: $rtsu-font-family;
22
+
23
+ // soft accent glow behind the card (same as the presentation hero)
24
+ &::before {
25
+ content: '';
26
+ position: absolute;
27
+ inset: 0;
28
+ background: $rtsee-auth-glow;
29
+ pointer-events: none;
30
+ }
31
+
32
+ // ── PrimeNG tokens scoped to auth pages (PrimeNG runs in light mode app-wide) ──
33
+ --p-inputtext-background: var(--rts-bg-surface);
34
+ --p-inputtext-color: var(--rts-text-primary);
35
+ --p-inputtext-border-color: var(--rts-border-med);
36
+ --p-inputtext-hover-border-color: var(--rts-border-bright);
37
+ --p-inputtext-focus-border-color: var(--rts-accent, #{$rtsu-accent-purple});
38
+ --p-inputtext-invalid-border-color: var(--rts-danger, #{$rtsu-danger});
39
+ --p-inputtext-placeholder-color: var(--rts-text-muted);
40
+ --p-inputtext-border-radius: #{$rtsee-auth-input-radius};
41
+ --p-inputtext-padding-x: #{$rtsee-auth-input-padding-x};
42
+ --p-inputtext-padding-y: #{$rtsee-auth-input-padding-y};
43
+ --p-inputtext-shadow: none;
44
+ --p-inputtext-focus-ring-shadow: #{$rtsee-auth-focus-ring};
45
+
46
+ --p-floatlabel-color: var(--rts-text-muted);
47
+ --p-floatlabel-focus-color: var(--rts-accent-light, #{$rtsu-accent-purple-light});
48
+ --p-floatlabel-active-color: var(--rts-text-secondary);
49
+ --p-floatlabel-invalid-color: var(--rts-danger, #{$rtsu-danger});
50
+ --p-floatlabel-on-active-background: var(--rts-bg-surface);
51
+
52
+ --p-password-icon-color: var(--rts-text-muted);
53
+
54
+ --p-checkbox-background: var(--rts-bg-surface);
55
+ --p-checkbox-border-color: var(--rts-border-bright);
56
+ --p-checkbox-hover-border-color: var(--rts-accent-light, #{$rtsu-accent-purple-light});
57
+ --p-checkbox-checked-background: var(--rts-accent, #{$rtsu-accent-purple});
58
+ --p-checkbox-checked-border-color: var(--rts-accent, #{$rtsu-accent-purple});
59
+ --p-checkbox-checked-hover-background: var(--rts-accent-light, #{$rtsu-accent-purple-light});
60
+ --p-checkbox-checked-hover-border-color: var(--rts-accent-light, #{$rtsu-accent-purple-light});
61
+ --p-checkbox-icon-checked-color: #fff;
62
+ --p-checkbox-icon-checked-hover-color: #fff;
63
+ --p-checkbox-focus-ring-shadow: #{$rtsee-auth-focus-ring};
11
64
 
65
+ --p-message-error-simple-color: var(--rts-danger, #{$rtsu-danger});
66
+ --p-message-success-simple-color: var(--rts-success, #{$rtsu-success});
67
+
68
+ --p-progressspinner-color-one: var(--rts-accent-light, #{$rtsu-accent-purple-light});
69
+ --p-progressspinner-color-two: var(--rts-accent, #{$rtsu-accent-purple});
70
+ --p-progressspinner-color-three: var(--rts-accent-highlight, #{$rtsu-accent-highlight});
71
+ --p-progressspinner-color-four: var(--rts-accent-blue, #{$rtsu-accent-blue});
72
+
73
+ // ── Card ──
12
74
  .auth-container {
13
- max-width: 420px;
75
+ position: relative;
76
+ width: 100%;
77
+ max-width: $rtsee-auth-card-max-width;
78
+ box-sizing: border-box;
79
+ padding: $rtsee-auth-card-padding;
80
+ border-radius: $rtsee-auth-card-radius;
81
+ box-shadow: $rtsee-auth-card-shadow;
82
+
83
+ // .rts-glass-card hover lift is too lively for a form, keep the border highlight only
84
+ &.rts-glass-card:hover {
85
+ box-shadow: $rtsee-auth-card-shadow, 0 6px 24px rgba(108, 92, 231, 0.08);
86
+ }
87
+ }
88
+
89
+ // ── Header (logo, title, description) ──
90
+ .auth-header {
91
+ display: flex;
92
+ flex-direction: column;
93
+ align-items: center;
94
+ text-align: center;
95
+ margin-bottom: $rtsu-space-lg;
96
+ }
97
+
98
+ .auth-logo {
99
+ width: $rtsee-auth-logo-size;
100
+ height: $rtsee-auth-logo-size;
101
+ padding: $rtsee-auth-logo-padding;
102
+ box-sizing: border-box;
103
+ margin-bottom: $rtsu-space-md;
104
+ border-radius: $rtsu-radius-lg;
105
+ object-fit: contain;
106
+ background: var(--rts-accent-highlight-dim, #{$rtsu-accent-highlight-dim});
107
+ border: 1px solid var(--rts-border-med);
108
+ box-shadow: $rtsu-shadow-accent-sm;
109
+ }
110
+
111
+ .auth-title {
112
+ margin: 0 0 $rtsu-space-sm 0;
113
+ font-size: $rtsee-auth-title-size;
114
+ font-weight: $rtsu-font-weight-bold;
115
+ line-height: $rtsu-line-height-snug;
116
+ letter-spacing: $rtsu-tracking-tight;
117
+ color: var(--rts-text-primary);
118
+ }
119
+
120
+ .auth-title-description {
121
+ margin: 0;
122
+ font-size: $rtsee-auth-description-size;
123
+ line-height: $rtsu-line-height-normal;
124
+ color: var(--rts-text-secondary);
125
+ }
126
+
127
+ // ── Links ──
128
+ .auth-link {
129
+ color: var(--rts-accent-light, #{$rtsu-accent-purple-light});
130
+ font-weight: $rtsu-font-weight-semibold;
131
+ text-decoration: none;
132
+ transition: color $rtsu-transition-fast;
133
+
134
+ &:hover {
135
+ color: var(--rts-accent-highlight, #{$rtsu-accent-highlight});
136
+ text-decoration: underline;
137
+ }
138
+ }
139
+
140
+ // ── Footer ("Don't have an account? …") ──
141
+ .auth-footer {
142
+ margin: $rtsu-space-lg 0 0 0;
143
+ padding-top: $rtsu-space-md;
144
+ border-top: 1px solid var(--rts-border-dim);
145
+ text-align: center;
146
+ font-size: $rtsu-font-size-base;
147
+ color: var(--rts-text-secondary);
14
148
  }
15
149
  }
16
150
 
151
+ @media (max-width: $rtsu-break-sm) {
152
+ .rtsee-auth {
153
+ padding: $rtsu-space-md $rtsu-space-sm;
17
154
 
155
+ .auth-container {
156
+ padding: $rtsee-auth-card-padding-mobile;
157
+ }
18
158
 
19
- //.auth-container {
20
- // max-width: $max-width-container;
21
- // margin: $btn-margin-top auto;
22
- // padding: $rts-offset-md;
23
- // background: linear-gradient(to bottom, $light-blue-gray 0%, $white 100%);
24
- // border-radius: $rts-default-border-radius;
25
- //
26
- // .auth-logo {
27
- // width: $auth-logo-width;
28
- // height: $auth-logo-height;
29
- // border-radius: $rts-default-border-radius;
30
- // }
31
- //
32
- // .auth-title {
33
- // margin-bottom: $auth-title-text-margin-bottom;
34
- // font-size: $auth-title-text-font-size;
35
- // font-weight: bold;
36
- // color: $dark-blue-gray;
37
- // text-shadow: $auth-title-text-shadow;
38
- // }
39
- //
40
- // .auth-title-description {
41
- // margin: $auth-title-description-text-margin;
42
- // font-size: $auth-title-description-text-font-size;
43
- // color: $medium-blue-gray;
44
- // }
45
- //
46
- // .auth-form {
47
- // padding: $rts-offset-md;
48
- // display: flex;
49
- // flex-direction: column;
50
- // align-items: center;
51
- // border-radius: $rts-default-border-radius;
52
- // background-color: $white;
53
- // box-shadow: $auth-form-box-shadow;
54
- //
55
- // .auth-input-container {
56
- // width: 100%;
57
- // margin-bottom: $input-bottom-margin;
58
- //
59
- // input {
60
- // width: 100%;
61
- // padding: $auth-form-input-padding;
62
- // border: $auth-form-input-border;
63
- // border-radius: $rts-default-border-radius;
64
- // font-size: $auth-title-description-text-font-size;
65
- //
66
- // &:focus {
67
- // border-color: $dark-blue-gray;
68
- // outline: none;
69
- // box-shadow: $auth-form-input-focus-shadow;
70
- // }
71
- // }
72
- // }
73
- //
74
- // .auth-sm-medium {
75
- // margin-bottom: $label-bottom-margin;
76
- // font-size: $auth-sm-medium-font-side;
77
- // color: $dark-blue-gray;
78
- // }
79
- //
80
- // .auth-options {
81
- // display: flex;
82
- // justify-content: space-between;
83
- // width: 100%;
84
- // align-items: center;
85
- // margin: $auth-options-margin;
86
- //
87
- // .auth-checkbox-label {
88
- // display: flex;
89
- // align-items: center;
90
- //
91
- // .auth-remember-checkbox {
92
- // margin-right: $auth-options-remember-check-box-margin;
93
- // accent-color: $dark-blue-gray;
94
- // }
95
- //
96
- // label {
97
- // font-size: $auth-sm-medium-font-side;
98
- // color: $dark-blue-gray;
99
- // }
100
- // }
101
- //
102
- // a {
103
- // font-size: $auth-sm-medium-font-side;
104
- // color: $deep-blue;
105
- // text-decoration: none;
106
- //
107
- // &:hover {
108
- // text-decoration: underline;
109
- // }
110
- // }
111
- // }
112
- //
113
- // .auth-btn-container {
114
- // width: 100%;
115
- // padding: $auth-button-padding;
116
- // text-align: center;
117
- // font-size: $auth-button-font-size;
118
- // background-color: $deep-blue;
119
- // color: $white;
120
- // border: none;
121
- // border-radius: $auth-button-border-radius;
122
- // cursor: pointer;
123
- // transition: $auth-button-transition;
124
- //
125
- // &:hover {
126
- // background-color: darken($deep-blue, 10%);
127
- // }
128
- //
129
- // &:disabled {
130
- // background-color: $medium-blue-gray;
131
- // cursor: not-allowed;
132
- // box-shadow: none;
133
- // transform: none;
134
- // }
135
- // }
136
- // }
137
- //
138
- // .auth-media-blue-gray-sm-normal {
139
- // margin-top: $auth-new-account-text-margin;
140
- // font-size: $auth-new-account-text-font-size;
141
- // color: $medium-blue-gray;
142
- //
143
- // .auth-deep-blue-sm-medium {
144
- // text-decoration: none;
145
- // color: $deep-blue;
146
- //
147
- // &:hover {
148
- // text-decoration: underline;
149
- // opacity: 0.8;
150
- // }
151
- // }
152
- // }
153
- //}
154
- //
155
- ///* Mobile Styles */
156
- //@media (max-width: 480px) {
157
- // .auth-container {
158
- // padding: $auth-container-mobile-padding;
159
- //
160
- // .auth-form {
161
- // padding: $auth-form-mobile-padding;
162
- //
163
- // .auth-input-container {
164
- // margin-bottom: $auth-input-container-mobile-margin;
165
- //
166
- // input {
167
- // padding: $auth-input-mobile-padding;
168
- // font-size: $auth-mobile-font-size;
169
- // }
170
- // }
171
- //
172
- // .auth-btn-container {
173
- // padding: $auth-button-container-mobile-padding;
174
- // font-size: $auth-mobile-font-size;
175
- // }
176
- //
177
- // .auth-options {
178
- // flex-direction: column;
179
- // align-items: flex-start;
180
- //
181
- // .auth-checkbox-label {
182
- // margin-bottom: $auth-check-box-label-mobile-margin;
183
- // }
184
- //
185
- // a {
186
- // font-size: $auth-mobile-font-size;
187
- // }
188
- // }
189
- // }
190
- //
191
- // .auth-media-blue-gray-sm-normal {
192
- // font-size: $auth-mobile-font-size;
193
- //
194
- // .auth-deep-blue-sm-medium {
195
- // font-size: $auth-mobile-font-size;
196
- // }
197
- // }
198
- // }
199
- //}
159
+ .auth-title {
160
+ font-size: $rtsu-font-size-lg + 2px;
161
+ }
162
+ }
163
+ }
@@ -0,0 +1,153 @@
1
+ @import "./variables";
2
+
3
+ // ═══════════════════════════════════════════════════════════════════
4
+ // AUTH — Form internals (fields, options row, submit, messages)
5
+ // Builds on top of .rtsee-form-container / .rtsee-form (theme/forms).
6
+ // ═══════════════════════════════════════════════════════════════════
7
+
8
+ .rtsee-auth {
9
+ .auth-form {
10
+ display: flex;
11
+ flex-direction: column;
12
+ gap: $rtsee-auth-field-gap;
13
+
14
+ // spacing is handled by the gap above
15
+ // (compound .rtsee-form to win over theme/forms, which is imported after auth)
16
+ &.rtsee-form .rtsee-form-field-container,
17
+ &.rtsee-form .rtsee-form-field-container.rtsee-autocomplete {
18
+ margin-bottom: 0;
19
+ }
20
+
21
+ // inputs (incl. p-password's inner input) stretch to the card width
22
+ .p-inputgroup,
23
+ .p-floatlabel,
24
+ .p-password,
25
+ .p-password-input,
26
+ .p-inputtext {
27
+ width: 100%;
28
+ }
29
+
30
+ .p-inputtext {
31
+ font-family: $rtsu-font-family;
32
+ font-size: $rtsu-font-size-base + 1px;
33
+ transition: border-color $rtsu-transition-fast,
34
+ box-shadow $rtsu-transition-fast,
35
+ background-color $rtsu-transition-fast;
36
+
37
+ &:enabled:focus {
38
+ background-color: var(--rts-bg-surface-elevated);
39
+ }
40
+ }
41
+
42
+ .rtsee-form-field-error-message {
43
+ padding: $rtsu-space-xs $rtsu-space-xs 0 $rtsu-space-xs;
44
+ }
45
+ }
46
+
47
+ // ── Remember me / forgot password / terms ──
48
+ .auth-options {
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: space-between;
52
+ flex-wrap: wrap;
53
+ gap: $rtsu-space-sm;
54
+ font-size: $rtsu-font-size-sm + 1px;
55
+ }
56
+
57
+ .auth-checkbox {
58
+ display: inline-flex;
59
+ align-items: center;
60
+ gap: $rtsu-space-sm;
61
+ }
62
+
63
+ .auth-checkbox-label {
64
+ color: var(--rts-text-secondary);
65
+ cursor: pointer;
66
+ user-select: none;
67
+ line-height: $rtsu-line-height-snug;
68
+ }
69
+
70
+ // ── Form-level feedback (server errors / success) ──
71
+ .rtsee-form-error-message,
72
+ .rtsee-form-success-message {
73
+ .p-message {
74
+ padding: $rtsu-space-sm $rtsu-space-md;
75
+ border-radius: $rtsu-radius-sm;
76
+ outline: none;
77
+ }
78
+ }
79
+
80
+ .rtsee-form-error-message .p-message {
81
+ background: var(--rts-danger-bg, #{$rtsu-danger-bg});
82
+ border: 1px solid var(--rts-danger-border, #{$rtsu-danger-border});
83
+ }
84
+
85
+ .rtsee-form-success-message .p-message {
86
+ background: rgba(46, 204, 113, 0.06);
87
+ border: 1px solid rgba(46, 204, 113, 0.2);
88
+ }
89
+
90
+ // ── Submit ──
91
+ .rtsee-form-submit-container {
92
+ position: relative;
93
+ margin-top: $rtsu-space-xs;
94
+
95
+ p-button,
96
+ .p-button {
97
+ width: 100%;
98
+ }
99
+
100
+ .p-button {
101
+ justify-content: center;
102
+ padding: $rtsee-auth-submit-padding;
103
+ border: none;
104
+ border-radius: $rtsee-auth-submit-radius;
105
+ background: $rtsee-auth-submit-background;
106
+ color: #fff;
107
+ font-family: $rtsu-font-family;
108
+ font-size: $rtsu-font-size-md;
109
+ font-weight: $rtsu-font-weight-bold;
110
+ letter-spacing: $rtsu-tracking-wide;
111
+ box-shadow: $rtsu-shadow-accent-md;
112
+ transition: transform $rtsu-transition-base,
113
+ box-shadow $rtsu-transition-base,
114
+ opacity $rtsu-transition-base;
115
+
116
+ &:enabled:hover {
117
+ background: $rtsee-auth-submit-background;
118
+ color: #fff;
119
+ transform: translateY(-1px);
120
+ box-shadow: $rtsu-shadow-accent-lg;
121
+ }
122
+
123
+ &:enabled:active {
124
+ transform: translateY(0);
125
+ }
126
+
127
+ &:focus-visible {
128
+ outline: none;
129
+ box-shadow: $rtsu-shadow-accent-md, $rtsee-auth-focus-ring;
130
+ }
131
+
132
+ &:disabled {
133
+ opacity: 0.6;
134
+ box-shadow: none;
135
+ }
136
+ }
137
+
138
+ // spinner sits inside the button's right edge instead of pushing it
139
+ .rtsee-progress-spinner {
140
+ position: absolute;
141
+ right: $rtsu-space-md;
142
+ top: 50%;
143
+ margin: 0;
144
+ transform: translateY(-50%);
145
+ pointer-events: none;
146
+
147
+ &.rtsee-progress-spinner-sm {
148
+ width: $rtsu-space-lg;
149
+ height: $rtsu-space-lg;
150
+ }
151
+ }
152
+ }
153
+ }
@@ -1 +1,3 @@
1
1
  @import "./auth-container";
2
+ @import "./auth-form";
3
+ @import "./privacy-policy";