@rtsee/ngx 0.0.115 → 0.0.117

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, OnChanges, SimpleChanges, ViewContainerRef, ComponentFactoryResolver } from '@angular/core';
2
+ import { OnInit, AfterViewInit, ElementRef, EventEmitter, OnDestroy, ChangeDetectorRef, OutputEmitterRef, OnChanges, SimpleChanges, ViewContainerRef, ComponentFactoryResolver, DoCheck } 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';
@@ -12,11 +12,12 @@ import { IRTSeePaymentProduct, IRTSeePaymentPriceItem, IRTSeeStorySlide, IRTSeeS
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';
15
- import { RTSeeTag, RTSeeManageTags, RTSeeTagGroup, RTSeeManageTagGroups, RTSeeEntityConfiguration, RTSeeManageEntityConfigurations, RTSeeEntity, RTSeeManageEntities, RTSeeRater, RTSeeForm } from '@rtsee/utilities-ui';
15
+ import { RTSeeTag, RTSeeManageTags, RTSeeTagGroup, RTSeeManageTagGroups, RTSeeEntityConfiguration, RTSeeManageEntityConfigurations, RTSeeEntity, RTSeeManageEntities, RTSeeRater, RTSeeForm, RTSeeTranslationsPanel, IRTSeeTranslationLanguageOption, IRTSeeTranslationFieldDefinition } from '@rtsee/utilities-ui';
16
16
  import * as i44 from '@angular/forms';
17
17
  import { FormGroup, FormBuilder, FormControl, FormArray } from '@angular/forms';
18
18
  import * as i43 from '@angular/common';
19
19
  import { ViewportScroller } from '@angular/common';
20
+ import Swiper from 'swiper';
20
21
  import * as i45 from 'ngx-autosize';
21
22
  import * as i46 from 'ngx-infinite-scroll';
22
23
  import * as i48 from 'ngx-captcha';
@@ -937,14 +938,41 @@ declare class SearchComponent implements OnInit, OnDestroy {
937
938
  static ɵcmp: i0.ɵɵComponentDeclaration<SearchComponent, "rtsee-search", never, { "search": { "alias": "search"; "required": false; }; }, {}, never, never, true, never>;
938
939
  }
939
940
 
940
- declare class StoryPlayerComponent implements OnInit, AfterViewInit {
941
+ /** Data passed by Swiper's Virtual module to `renderExternal` */
942
+ interface IVirtualSlidesData {
943
+ offset: number;
944
+ from: number;
945
+ to: number;
946
+ slides: number[];
947
+ }
948
+ /**
949
+ * Story slides player.
950
+ *
951
+ * Uses Swiper's Virtual module with `renderExternal`, so Angular only renders the few
952
+ * slides around the active one (Safari crashed when animating 20+ card slides at once).
953
+ * Swiper is aware of ALL the story slides (1..totalSlides) from the start, while the
954
+ * slide contents are lazy loaded by the story; slides not loaded yet render a placeholder.
955
+ */
956
+ declare class StoryPlayerComponent implements OnInit, AfterViewInit, DoCheck, OnDestroy {
957
+ private cdr;
941
958
  story: RTSeeStory;
942
959
  settings: RTSeePresentationSettings;
943
960
  presentation: RTSeePresentation;
944
961
  swiperEl: ElementRef<HTMLElement>;
945
- constructor();
962
+ swiper: Swiper | null;
963
+ /** slide numbers currently rendered by the virtual swiper */
964
+ virtualData: IVirtualSlidesData;
965
+ constructor(cdr: ChangeDetectorRef);
946
966
  ngOnInit(): void;
947
967
  ngAfterViewInit(): void;
968
+ /** grows the virtual slides list when the slides count becomes known / changes */
969
+ ngDoCheck(): void;
970
+ ngOnDestroy(): void;
971
+ getLoadedSlide(slideNumber: number): RTSeeStorySlide | null;
972
+ private renderVirtualSlides;
973
+ private getSlidesCount;
974
+ /** virtual slides are just the slide numbers: 1..N */
975
+ private getVirtualSlides;
948
976
  static ɵfac: i0.ɵɵFactoryDeclaration<StoryPlayerComponent, never>;
949
977
  static ɵcmp: i0.ɵɵComponentDeclaration<StoryPlayerComponent, "rtsee-story-player", never, { "story": { "alias": "story"; "required": false; }; "settings": { "alias": "settings"; "required": false; }; "presentation": { "alias": "presentation"; "required": false; }; }, {}, never, never, true, never>;
950
978
  }
@@ -1001,6 +1029,16 @@ declare class RTSeeModule {
1001
1029
  static ɵinj: i0.ɵɵInjectorDeclaration<RTSeeModule>;
1002
1030
  }
1003
1031
 
1032
+ declare class TranslationsPanelComponent {
1033
+ panel: RTSeeTranslationsPanel;
1034
+ toggle(): void;
1035
+ selectLanguage(language: IRTSeeTranslationLanguageOption): void;
1036
+ onInput(field: IRTSeeTranslationFieldDefinition, event: Event): void;
1037
+ save(): void;
1038
+ static ɵfac: i0.ɵɵFactoryDeclaration<TranslationsPanelComponent, never>;
1039
+ static ɵcmp: i0.ɵɵComponentDeclaration<TranslationsPanelComponent, "rtsee-translations-panel", never, { "panel": { "alias": "panel"; "required": false; }; }, {}, never, never, true, never>;
1040
+ }
1041
+
1004
1042
  declare class GtagService {
1005
1043
  private window;
1006
1044
  constructor(document: Document);
@@ -1101,5 +1139,5 @@ declare class SlideNumberChangedWidgetComponent extends BaseEventWidgetComponent
1101
1139
  static ɵcmp: i0.ɵɵComponentDeclaration<SlideNumberChangedWidgetComponent, "rtsee-slide-number-changed-widget", never, {}, {}, never, never, true, never>;
1102
1140
  }
1103
1141
 
1104
- export { BaseEventWidgetComponent, EntitiesConfigurationsListComponent, EntitiesListComponent, EventsWidgetsService, FormComponent, GtagService, IllustratorComponent, InteractiveStoryEditorComponent, ManageEntityComponent, ManageEntityConfigurationComponent, MessengerComponent, NgxService, PaymentProductSnippetComponent, PresentationComponent, ProfileComponent, RTSeeAuthComponent, RTSeeConferenceComponent, RTSeeContainerComponent, RTSeeControlsComponent, RTSeeModule, RTSeeTaskComponent, RtseeEntityCommentsComponent, RtseeEntityPreviewComponent, RtseeEntityTagsComponent, RtseeEventsDashboardComponent, RtseePeerComponent, RtseeSettingsComponent, RtseeTagGroupManageComponent, RtseeTagGroupsManageComponent, RtseeTagManageComponent, RtseeTagsAccordionMenuComponent, SlideNumberChangedWidgetComponent, StoryDetailsOpenedWidgetComponent, StoryElementsSectionComponent, StoryReadingStartedWidgetComponent };
1142
+ export { BaseEventWidgetComponent, EntitiesConfigurationsListComponent, EntitiesListComponent, EventsWidgetsService, FormComponent, GtagService, IllustratorComponent, InteractiveStoryEditorComponent, ManageEntityComponent, ManageEntityConfigurationComponent, MessengerComponent, NgxService, PaymentProductSnippetComponent, PresentationComponent, ProfileComponent, RTSeeAuthComponent, RTSeeConferenceComponent, RTSeeContainerComponent, RTSeeControlsComponent, RTSeeModule, RTSeeTaskComponent, RtseeEntityCommentsComponent, RtseeEntityPreviewComponent, RtseeEntityTagsComponent, RtseeEventsDashboardComponent, RtseePeerComponent, RtseeSettingsComponent, RtseeTagGroupManageComponent, RtseeTagGroupsManageComponent, RtseeTagManageComponent, RtseeTagsAccordionMenuComponent, SlideNumberChangedWidgetComponent, StoryDetailsOpenedWidgetComponent, StoryElementsSectionComponent, StoryReadingStartedWidgetComponent, TranslationsPanelComponent };
1105
1143
  export type { IAccordionItem, RTSeeTagForm, RTSeeTagGroupForm };
@@ -158,7 +158,7 @@
158
158
 
159
159
  .rtsee-events-dashboard-container {
160
160
  display: none;
161
- padding-bottom: $rts-bottom-nav-height + $rts-offset-md;
161
+ padding-bottom: $rts-bottom-nav-height;
162
162
  }
163
163
 
164
164
  .rtsee-presentation-container {
@@ -169,6 +169,10 @@
169
169
  @media screen and (min-width: $rts-break-md) {
170
170
  $rts-divider-style: 2px solid rgba(0, 0, 0, 0.9);
171
171
 
172
+ .rtsee-events-dashboard-container {
173
+ padding-bottom: 0;
174
+ }
175
+
172
176
  .rtsee-nav-block {
173
177
  position: fixed;
174
178
  height: 100%;
@@ -1 +1,2 @@
1
1
  @import "./common.scss";
2
+ @import "./translations-panel.scss";
@@ -0,0 +1,209 @@
1
+ // ═══════════════════════════════════════════════════════════════════
2
+ // Translations panel (rendered by rtsee-form for translatable forms)
3
+ // ═══════════════════════════════════════════════════════════════════
4
+ @import "../rts-common/variables-spacing";
5
+ @import "../rts-common/variables-typography";
6
+ @import "../rts-common/variables-layout";
7
+ @import "../rts-common/variables-effects";
8
+
9
+ .rtsee-translations-panel {
10
+ margin-top: $rtsu-space-md;
11
+ border: 1px solid var(--rts-border-med);
12
+ border-radius: $rtsu-radius-md;
13
+ background: linear-gradient(145deg, var(--rts-card-bg-start, var(--rts-bg-surface)), var(--rts-card-bg-end, var(--rts-bg-surface-elevated)));
14
+ overflow: hidden;
15
+ transition: border-color $rtsu-transition-base, box-shadow $rtsu-transition-base;
16
+
17
+ &--expanded {
18
+ border-color: var(--rts-accent);
19
+ box-shadow: $rtsu-shadow-accent-sm;
20
+ }
21
+
22
+ &__header {
23
+ display: flex;
24
+ align-items: center;
25
+ gap: $rtsu-space-sm;
26
+ width: 100%;
27
+ padding: $rtsu-space-sm + $rtsu-space-xs $rtsu-space-md;
28
+ background: transparent;
29
+ border: 0;
30
+ color: var(--rts-text-primary);
31
+ font-family: $rtsu-font-family;
32
+ font-size: $rtsu-font-size-base;
33
+ font-weight: $rtsu-font-weight-semibold;
34
+ cursor: pointer;
35
+ text-align: left;
36
+
37
+ &:hover {
38
+ background: var(--rts-bg-surface-hover);
39
+ }
40
+ }
41
+
42
+ &__icon {
43
+ color: var(--rts-accent);
44
+ }
45
+
46
+ &__title {
47
+ flex: 1;
48
+ }
49
+
50
+ &__badge {
51
+ min-width: 22px;
52
+ padding: 0 $rtsu-space-xs + $rtsu-space-2xs;
53
+ border-radius: 11px;
54
+ background: var(--rts-accent-highlight-dim);
55
+ color: var(--rts-accent-light);
56
+ font-size: $rtsu-font-size-xs;
57
+ line-height: 20px;
58
+ text-align: center;
59
+ }
60
+
61
+ &__chevron {
62
+ color: var(--rts-text-muted);
63
+ transition: transform $rtsu-transition-base;
64
+ }
65
+
66
+ &--expanded &__chevron {
67
+ transform: rotate(180deg);
68
+ }
69
+
70
+ &__body {
71
+ display: flex;
72
+ flex-direction: column;
73
+ gap: $rtsu-space-md;
74
+ padding: 0 $rtsu-space-md $rtsu-space-md;
75
+ animation: rtsee-translations-fade-in $rtsu-transition-base;
76
+ }
77
+
78
+ &__languages {
79
+ display: flex;
80
+ flex-wrap: wrap;
81
+ gap: $rtsu-space-sm;
82
+ }
83
+
84
+ &__language {
85
+ display: inline-flex;
86
+ align-items: center;
87
+ gap: $rtsu-space-xs + $rtsu-space-2xs;
88
+ padding: $rtsu-space-xs + $rtsu-space-2xs $rtsu-space-sm + $rtsu-space-xs;
89
+ border: 1px solid var(--rts-border-med);
90
+ border-radius: 999px;
91
+ background: var(--rts-bg-surface);
92
+ color: var(--rts-text-secondary);
93
+ font-family: $rtsu-font-family;
94
+ font-size: $rtsu-font-size-sm;
95
+ cursor: pointer;
96
+ transition: all $rtsu-transition-fast;
97
+
98
+ &:hover:not(:disabled) {
99
+ border-color: var(--rts-border-bright);
100
+ color: var(--rts-text-primary);
101
+ transform: translateY(-1px);
102
+ }
103
+
104
+ &--translated {
105
+ border-color: var(--rts-success);
106
+ color: var(--rts-text-primary);
107
+
108
+ .rtsee-translations-panel__language-dot {
109
+ background: var(--rts-success);
110
+ box-shadow: 0 0 6px var(--rts-success);
111
+ }
112
+ }
113
+
114
+ &--selected {
115
+ border-color: var(--rts-accent);
116
+ background: var(--rts-accent-highlight-dim);
117
+ color: var(--rts-text-primary);
118
+ box-shadow: $rtsu-shadow-accent-sm;
119
+ }
120
+
121
+ &--original {
122
+ opacity: 0.6;
123
+ cursor: default;
124
+ }
125
+ }
126
+
127
+ &__language-dot {
128
+ width: 8px;
129
+ height: 8px;
130
+ border-radius: 50%;
131
+ background: var(--rts-border-bright);
132
+ }
133
+
134
+ &__language-key {
135
+ color: var(--rts-text-muted);
136
+ font-size: $rtsu-font-size-2xs;
137
+ text-transform: uppercase;
138
+ letter-spacing: 0.04em;
139
+ }
140
+
141
+ &__language-tag {
142
+ font-size: $rtsu-font-size-2xs;
143
+ color: var(--rts-success);
144
+ }
145
+
146
+ &--expanded &__language--original &__language-tag {
147
+ color: var(--rts-text-muted);
148
+ }
149
+
150
+ &__form {
151
+ display: flex;
152
+ flex-direction: column;
153
+ gap: $rtsu-space-sm + $rtsu-space-xs;
154
+ padding-top: $rtsu-space-sm;
155
+ border-top: 1px dashed var(--rts-border-dim);
156
+ }
157
+
158
+ &__field {
159
+ display: flex;
160
+ flex-direction: column;
161
+ gap: $rtsu-space-xs;
162
+ }
163
+
164
+ &__required {
165
+ color: var(--rts-danger);
166
+ margin-left: $rtsu-space-2xs;
167
+ }
168
+
169
+ &__actions {
170
+ display: flex;
171
+ align-items: center;
172
+ justify-content: flex-end;
173
+ gap: $rtsu-space-sm;
174
+ }
175
+
176
+ &__saved {
177
+ color: var(--rts-success);
178
+ font-size: $rtsu-font-size-sm;
179
+ animation: rtsee-translations-fade-in $rtsu-transition-base;
180
+ }
181
+
182
+ &__hint,
183
+ &__loading {
184
+ margin: 0;
185
+ color: var(--rts-text-secondary);
186
+ font-size: $rtsu-font-size-sm;
187
+ }
188
+
189
+ &__error {
190
+ margin: 0;
191
+ padding: $rtsu-space-sm;
192
+ border: 1px solid var(--rts-danger-border);
193
+ border-radius: $rtsu-radius-sm;
194
+ background: var(--rts-danger-bg);
195
+ color: var(--rts-danger);
196
+ font-size: $rtsu-font-size-sm;
197
+ }
198
+ }
199
+
200
+ @keyframes rtsee-translations-fade-in {
201
+ from {
202
+ opacity: 0;
203
+ transform: translateY(-4px);
204
+ }
205
+ to {
206
+ opacity: 1;
207
+ transform: translateY(0);
208
+ }
209
+ }
@@ -9,5 +9,7 @@
9
9
  @import "./settings";
10
10
  @import "./join-call";
11
11
  @import "./story-details";
12
+ @import "./story-element-thumbnail";
13
+ @import "./story-slides-preview";
12
14
  @import "./interactive-story-editor";
13
15
  @import "./illustrator";
@@ -23,7 +23,33 @@
23
23
  height: $presentation-dashboard-header-height;
24
24
  top: - $presentation-dashboard-header-height;
25
25
  z-index: 300;
26
- background-color: #ffffff;
26
+ // light reading theme (default)
27
+ background-color: rgba($rts-reading-light-bg, 0.92);
28
+ color: $rts-reading-light-text;
29
+ border-bottom: 1px solid rgba(0, 0, 0, 0.06);
30
+ backdrop-filter: blur(12px);
31
+ transition:
32
+ top 0.5s ease-in-out,
33
+ background-color 0.3s ease,
34
+ color 0.3s ease,
35
+ border-color 0.3s ease;
36
+
37
+ // header button tokens (light)
38
+ --rts-reading-header-btn-bg: rgba(0, 0, 0, 0.05);
39
+ --rts-reading-header-btn-bg-hover: rgba(0, 0, 0, 0.1);
40
+ --rts-reading-header-muted: #{$rts-reading-light-muted};
41
+ --rts-reading-header-progress-track: rgba(0, 0, 0, 0.06);
42
+ }
43
+
44
+ &.rtsee-presentation-header-convertable.rtsee-presentation-header-theme-dark {
45
+ background-color: rgba($rts-reading-dark-bg, 0.92);
46
+ color: $rts-reading-dark-text;
47
+ border-bottom-color: rgba(255, 255, 255, 0.06);
48
+
49
+ --rts-reading-header-btn-bg: rgba(255, 255, 255, 0.06);
50
+ --rts-reading-header-btn-bg-hover: rgba(255, 255, 255, 0.12);
51
+ --rts-reading-header-muted: #{$rts-reading-dark-muted};
52
+ --rts-reading-header-progress-track: rgba(255, 255, 255, 0.06);
27
53
  }
28
54
 
29
55
  &.rtsee-presentation-header-visible {
@@ -75,52 +101,133 @@
75
101
 
76
102
  .rtsee-presentation-header-active-story-info {
77
103
  position: relative;
78
- padding: 0 $presentation-dashboard-header-height;
104
+ display: flex;
105
+ align-items: center;
106
+ gap: $rts-offset-sm;
107
+ height: $presentation-dashboard-header-height;
108
+ padding: 0 $rts-offset-sm;
79
109
 
80
- .rtsee-presentation-header-active-story-info-close {
81
- position: absolute;
82
- display: flex;
110
+ // round icon buttons (back / settings)
111
+ .rtsee-presentation-header-icon-btn {
112
+ flex-shrink: 0;
113
+ display: inline-flex;
83
114
  align-items: center;
84
115
  justify-content: center;
85
- top: 0;
86
- left: 0;
87
- height: $presentation-dashboard-header-height;
88
- width: $presentation-dashboard-header-height;
116
+ width: 38px;
117
+ height: 38px;
118
+ padding: 0;
119
+ border: none;
120
+ border-radius: 50%;
121
+ background: var(--rts-reading-header-btn-bg);
122
+ color: inherit;
123
+ font: inherit;
89
124
  cursor: pointer;
90
- color: $rts-rates-bg-form-start;
125
+ transition:
126
+ background-color 0.2s ease,
127
+ transform 0.2s ease;
128
+
129
+ &:hover {
130
+ background: var(--rts-reading-header-btn-bg-hover);
131
+ }
132
+
133
+ &:active {
134
+ transform: scale(0.94);
135
+ }
136
+
137
+ &:focus-visible {
138
+ outline: 2px solid $rts-rates-accent-purple;
139
+ outline-offset: 2px;
140
+ }
91
141
 
92
- .rtsee-presentation-header-active-story-info-close-icon {
93
- font-size: 1.5rem
142
+ .pi {
143
+ font-size: 1.05rem;
94
144
  }
95
145
  }
96
146
 
97
- .rtsee-presentation-header-active-story-info-details {
98
- padding: 5px 0;
147
+ .rtsee-presentation-header-active-story-info-close:hover .pi {
148
+ transform: translateX(-2px);
149
+ }
150
+
151
+ .rtsee-presentation-header-active-story-info-close .pi {
152
+ transition: transform 0.2s ease;
153
+ }
154
+
155
+ // "Aa" reading settings glyph
156
+ .rtsee-presentation-header-settings-glyph {
157
+ display: inline-flex;
158
+ align-items: baseline;
159
+ font-family: Georgia, "Times New Roman", serif;
160
+ font-weight: 700;
161
+ line-height: 1;
162
+ letter-spacing: -0.02em;
99
163
 
100
- .rtsee-presentation-header-active-story-name {
101
- white-space: nowrap;
102
- overflow: hidden;
103
- text-overflow: ellipsis;
104
- max-width: 100%;
164
+ .rtsee-presentation-header-settings-glyph-big {
165
+ font-size: 1.15rem;
166
+ }
167
+
168
+ .rtsee-presentation-header-settings-glyph-small {
169
+ font-size: 0.85rem;
105
170
  }
106
171
  }
107
172
 
108
- .rtsee-presentation-header-active-story-info-settings {
109
- position: absolute;
173
+ .rtsee-presentation-header-active-story-info-details {
174
+ flex: 1;
175
+ min-width: 0;
110
176
  display: flex;
111
177
  align-items: center;
112
- justify-content: center;
113
- width: $presentation-dashboard-header-height;
114
- height: $presentation-dashboard-header-height;
178
+ gap: ($rts-offset-sm + $rts-offset-xsm);
179
+ }
180
+
181
+ .rtsee-presentation-header-active-story-cover {
182
+ flex-shrink: 0;
183
+ width: 34px;
184
+ height: 34px;
185
+ border-radius: 8px;
186
+ object-fit: cover;
187
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
188
+ }
189
+
190
+ .rtsee-presentation-header-active-story-text {
191
+ display: flex;
192
+ flex-direction: column;
193
+ min-width: 0;
194
+ line-height: 1.2;
195
+ }
196
+
197
+ .rtsee-presentation-header-active-story-name {
198
+ font-size: 0.95rem;
199
+ font-weight: 600;
200
+ white-space: nowrap;
201
+ overflow: hidden;
202
+ text-overflow: ellipsis;
203
+ }
204
+
205
+ .rtsee-presentation-header-active-story-progress-label {
206
+ font-size: 0.75rem;
207
+ font-weight: 500;
208
+ color: var(--rts-reading-header-muted);
209
+ font-variant-numeric: tabular-nums;
210
+ }
211
+
212
+ // thin reading progress bar along the bottom edge
213
+ .rtsee-presentation-header-active-story-progress {
214
+ position: absolute;
215
+ left: 0;
115
216
  right: 0;
116
- top: 0;
117
- cursor: pointer;
217
+ bottom: -1px;
218
+ height: 2px;
219
+ background: var(--rts-reading-header-progress-track);
220
+ overflow: hidden;
118
221
 
119
- .rtsee-presentation-header-active-story-info-settings-icon {
120
- font-size: 1.8rem;
121
- padding: 7px;
122
- background-color: rgba(0, 0, 0, 0.06);
123
- border-radius: 50%;
222
+ .rtsee-presentation-header-active-story-progress-bar {
223
+ height: 100%;
224
+ background: linear-gradient(
225
+ 90deg,
226
+ $rts-rates-accent-purple 0%,
227
+ $rts-rates-accent-purple-light 100%
228
+ );
229
+ border-radius: 0 2px 2px 0;
230
+ transition: width 0.4s ease;
124
231
  }
125
232
  }
126
233
  }
@@ -65,6 +65,43 @@
65
65
  }
66
66
  }
67
67
 
68
+ .rtsee-presentation-reading-theme-settings {
69
+ .rtsee-presentation-reading-theme-toggle {
70
+ display: flex;
71
+ margin-bottom: $rts-offset-md;
72
+
73
+ .p-togglebutton {
74
+ flex: 1;
75
+ }
76
+
77
+ .p-togglebutton-content {
78
+ display: inline-flex;
79
+ align-items: center;
80
+ justify-content: center;
81
+ gap: $rts-offset-sm;
82
+ width: 100%;
83
+ }
84
+ }
85
+
86
+ .rtsee-presentation-reading-theme-example {
87
+ padding: $rts-offset-md;
88
+ border-radius: 10px;
89
+ line-height: 1.6;
90
+ background-color: $rts-reading-light-bg;
91
+ color: $rts-reading-light-text;
92
+ border: 1px solid rgba(0, 0, 0, 0.08);
93
+ transition:
94
+ background-color 0.3s ease,
95
+ color 0.3s ease;
96
+
97
+ &.rtsee-presentation-reading-theme-example-dark {
98
+ background-color: $rts-reading-dark-bg;
99
+ color: $rts-reading-dark-text;
100
+ border-color: rgba(255, 255, 255, 0.06);
101
+ }
102
+ }
103
+ }
104
+
68
105
  @media screen and (min-width: $rts-break-md) {
69
106
  position: absolute;
70
107
  }