@streamscloud/embeddable 12.0.0 → 12.2.0
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/ads/ad-card/cmp.ad-card.svelte +4 -16
- package/dist/content-player/cmp.content-player.svelte +1 -1
- package/dist/content-player/content-player-config.svelte.d.ts +1 -0
- package/dist/content-player/content-player-settings.js +1 -0
- package/dist/content-player/controls-and-attachments.svelte +32 -2
- package/dist/content-player/controls-and-attachments.svelte.d.ts +1 -0
- package/dist/content-player/overview-panel.svelte +2 -2
- package/dist/content-player/ui-manager.svelte.d.ts +2 -1
- package/dist/content-player/ui-manager.svelte.js +2 -1
- package/dist/core/enums.d.ts +3 -0
- package/dist/core/enums.js +4 -0
- package/dist/core/theme/index.d.ts +1 -0
- package/dist/core/theme/index.js +1 -0
- package/dist/core/theme/theme-store.svelte.d.ts +5 -0
- package/dist/core/theme/theme-store.svelte.js +10 -0
- package/dist/media-center/config/internal-media-center-config.js +13 -12
- package/dist/media-center/config/operations.generated.d.ts +36 -30
- package/dist/media-center/config/operations.generated.js +53 -44
- package/dist/media-center/config/operations.graphql +34 -28
- package/dist/media-center/config/types.d.ts +8 -0
- package/dist/media-center/media-center/cmp.media-center-proxy.svelte +59 -0
- package/dist/media-center/media-center/cmp.media-center-proxy.svelte.d.ts +12 -0
- package/dist/media-center/media-center/discover/discover-header.svelte +10 -13
- package/dist/media-center/media-center/discover/discover-header.svelte.d.ts +0 -2
- package/dist/media-center/media-center/discover/discover-view.svelte +6 -6
- package/dist/media-center/media-center/discover/discover-view.svelte.d.ts +0 -2
- package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +25 -12
- package/dist/media-center/media-center/handlers/categories-handler.svelte.js +18 -3
- package/dist/media-center/media-center/handlers/index.d.ts +1 -0
- package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.d.ts +2 -0
- package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.js +20 -1
- package/dist/media-center/media-center/header-footer/media-center-footer.svelte +6 -6
- package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte +5 -4
- package/dist/media-center/media-center/header-footer/media-center-header.svelte +6 -8
- package/dist/media-center/media-center/header-footer/media-center-header.svelte.d.ts +0 -2
- package/dist/media-center/media-center/index.d.ts +1 -1
- package/dist/media-center/media-center/index.js +1 -1
- package/dist/media-center/media-center/media-center-context.svelte.d.ts +3 -13
- package/dist/media-center/media-center/media-center-context.svelte.js +11 -7
- package/dist/media-center/media-center/{cmp.media-center.svelte → media-center-view.svelte} +56 -107
- package/dist/media-center/media-center/media-center-view.svelte.d.ts +7 -0
- package/dist/media-center/media-center/menu/menu.svelte +92 -95
- package/dist/media-center/media-center/menu/menu.svelte.d.ts +0 -2
- package/dist/media-center/media-center/moments/cmp.moments-circle.svelte +7 -3
- package/dist/media-center/media-center/streams-in-category/streams-in-category-panel.svelte +2 -3
- package/dist/media-center/media-center/types.d.ts +1 -8
- package/dist/media-page/cmp.media-page.svelte +39 -0
- package/dist/media-page/cmp.media-page.svelte.d.ts +10 -0
- package/dist/media-page/index.d.ts +2 -0
- package/dist/media-page/index.js +3 -2
- package/dist/posts/attachments/cmp.attachments.svelte +1 -1
- package/dist/posts/controls/cmp.controls.svelte +4 -1
- package/dist/posts/controls/cmp.controls.svelte.d.ts +2 -0
- package/dist/posts/post-viewer/attachments-horizontal.svelte +4 -12
- package/dist/posts/post-viewer/heading.svelte +4 -4
- package/dist/posts/post-viewer/media/post-media.svelte +1 -1
- package/dist/posts/post-viewer/post-texts.svelte +2 -2
- package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +1 -0
- package/dist/posts/posts-player/index.d.ts +1 -0
- package/dist/posts/posts-player/index.js +2 -2
- package/dist/posts/posts-player/posts-player-proxy.svelte +13 -4
- package/dist/posts/posts-player/posts-player-proxy.svelte.d.ts +1 -0
- package/dist/products/product-card/cmp.product-card.svelte +4 -16
- package/dist/short-videos/short-video-card/cmp.short-video-card.svelte +6 -6
- package/dist/streams/data-loaders/streams-loader.js +6 -2
- package/dist/streams/stream-card/cmp.stream-card.svelte +1 -1
- package/dist/streams/streams-player/cmp.streams-player.svelte +42 -0
- package/dist/streams/streams-player/cmp.streams-player.svelte.d.ts +24 -0
- package/dist/streams/streams-player/index.d.ts +1 -0
- package/dist/streams/streams-player/index.js +5 -5
- package/dist/streams/streams-player/stream-overview.svelte +1 -1
- package/dist/streams/streams-player/streams-player-proxy.svelte +32 -0
- package/dist/streams/streams-player/streams-player-proxy.svelte.d.ts +26 -0
- package/dist/ui/button/resources/button-theme.svelte +0 -151
- package/dist/ui/button/resources/button-types.d.ts +0 -1
- package/dist/ui/button/resources/button-types.js +0 -1
- package/dist/ui/icon/cmp.icon.svelte +8 -28
- package/dist/ui/image/cmp.image-rounded.svelte +3 -10
- package/dist/ui/image/cmp.image-stub.svelte +1 -4
- package/dist/ui/image/cmp.image.svelte +1 -4
- package/dist/ui/loading/cmp.loading.svelte +1 -4
- package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte +2 -2
- package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte.d.ts +2 -2
- package/dist/ui/player/button/cmp.player-button.svelte +7 -3
- package/dist/ui/player/button/cmp.player-buttons-group.svelte +4 -3
- package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +2 -2
- package/dist/ui/player/button/index.d.ts +1 -1
- package/dist/ui/player/button/types.d.ts +1 -1
- package/dist/ui/player/colors/player-colors.d.ts +1 -0
- package/dist/ui/shadow-dom/cmp.shadow-root.svelte +156 -0
- package/dist/ui/shadow-dom/colors.scss +72 -0
- package/dist/ui/shadow-dom/index.d.ts +1 -0
- package/dist/ui/shadow-dom/index.js +1 -0
- package/dist/ui/shadow-dom/shadow-root-service.js +0 -4
- package/dist/ui/slider/cmp.slider.svelte +5 -5
- package/package.json +1 -1
- package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +0 -4
- package/dist/ui/with-background/cmp.with-background.svelte +0 -86
- package/dist/ui/with-background/index.d.ts +0 -1
- package/dist/ui/with-background/index.js +0 -1
- /package/dist/ui/{with-background/cmp.with-background.svelte.d.ts → shadow-dom/cmp.shadow-root.svelte.d.ts} +0 -0
|
@@ -11,46 +11,13 @@ import { Utils } from '../../core/utils';
|
|
|
11
11
|
import { default as PostsPlayerView } from '../../posts/posts-player/posts-player-view.svelte';
|
|
12
12
|
import { default as StreamsPlayerView } from '../../streams/streams-player/streams-player-view.svelte';
|
|
13
13
|
import { Loading } from '../../ui/loading';
|
|
14
|
-
import { WithBackground } from '../../ui/with-background';
|
|
15
14
|
import { DiscoverPanel } from './discover';
|
|
16
15
|
import { MediaCenterHeader, MediaCenterFooter, MediaCenterHeaderMobile } from './header-footer';
|
|
17
16
|
import { MediaCenterContext } from './media-center-context.svelte';
|
|
18
17
|
import { Menu } from './menu';
|
|
19
18
|
import { StreamsInCategoryPanel } from './streams-in-category';
|
|
20
19
|
import { fade } from 'svelte/transition';
|
|
21
|
-
let {
|
|
22
|
-
const context = new MediaCenterContext({
|
|
23
|
-
config,
|
|
24
|
-
closeOrchestrator,
|
|
25
|
-
settings,
|
|
26
|
-
on: {
|
|
27
|
-
initialized: (instance) => {
|
|
28
|
-
switch (modeProps.mode) {
|
|
29
|
-
case 'posts':
|
|
30
|
-
instance.playPostsFeed({
|
|
31
|
-
dataProvider: modeProps.props.dataProvider,
|
|
32
|
-
onPostActivated: modeProps.props.onPostActivated
|
|
33
|
-
});
|
|
34
|
-
break;
|
|
35
|
-
case 'streams':
|
|
36
|
-
instance.playStreamsFeed({
|
|
37
|
-
dataProvider: modeProps.props.dataProvider,
|
|
38
|
-
onStreamActivated: modeProps.props.onStreamActivated
|
|
39
|
-
});
|
|
40
|
-
break;
|
|
41
|
-
case 'discover':
|
|
42
|
-
instance.activateDiscover({ categoryId: null });
|
|
43
|
-
break;
|
|
44
|
-
default:
|
|
45
|
-
Utils.assertUnreachable(modeProps);
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
failed: () => {
|
|
49
|
-
console.error('Media Center initialization failed');
|
|
50
|
-
closeOrchestrator.requestClose();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
});
|
|
20
|
+
let { context } = $props();
|
|
54
21
|
let headerHeight = $state(0);
|
|
55
22
|
let isMobileView = $state(false);
|
|
56
23
|
const selectCategory = (categoryId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -108,7 +75,7 @@ const swipeToOpen = (node) => {
|
|
|
108
75
|
let startY = 0;
|
|
109
76
|
let isTracking = false;
|
|
110
77
|
let hasOpened = false;
|
|
111
|
-
let threshold =
|
|
78
|
+
let threshold = 50;
|
|
112
79
|
const MIN_DISTANCE = 10;
|
|
113
80
|
function handleTouchStart(e) {
|
|
114
81
|
if (e.touches.length !== 1) {
|
|
@@ -159,67 +126,59 @@ const swipeToOpen = (node) => {
|
|
|
159
126
|
};
|
|
160
127
|
</script>
|
|
161
128
|
|
|
162
|
-
|
|
163
|
-
<
|
|
164
|
-
{
|
|
165
|
-
|
|
166
|
-
{:else}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
{#if !isMobileView}
|
|
170
|
-
<MediaCenterHeader context={context} locale={settings?.locale} on={{ headerHeightChanged: onHeaderHeightChanged }} />
|
|
171
|
-
{:else}
|
|
172
|
-
<MediaCenterHeaderMobile context={context} on={{ headerHeightChanged: onHeaderHeightChanged }} />
|
|
173
|
-
{/if}
|
|
174
|
-
|
|
175
|
-
<div class="media-center__content-container">
|
|
176
|
-
{#if context.mediaCenterMode === 'feed' && context.feedPlayerProps}
|
|
177
|
-
<div class="media-center__content" class:media-center__content--faded={context.overlayIsActive} transition:fade={{ duration: 300 }}>
|
|
178
|
-
{#if context.feedPlayerProps.type === 'posts'}
|
|
179
|
-
<PostsPlayerView {...context.feedPlayerProps.props} />
|
|
180
|
-
{:else if context.feedPlayerProps.type === 'streams'}
|
|
181
|
-
<StreamsPlayerView {...context.feedPlayerProps.props} />
|
|
182
|
-
{/if}
|
|
183
|
-
</div>
|
|
184
|
-
{:else if context.mediaCenterMode === 'discover'}
|
|
185
|
-
<div class="media-center__content" transition:fade={{ duration: 300 }}>
|
|
186
|
-
<DiscoverPanel
|
|
187
|
-
context={context}
|
|
188
|
-
locale={settings?.locale}
|
|
189
|
-
on={{
|
|
190
|
-
shortVideoSelected: (shortVideo) => activateSelectedShortVideoPlayer(shortVideo),
|
|
191
|
-
streamSelected: (stream) => activateSelectedStreamPlayer(stream)
|
|
192
|
-
}} />
|
|
193
|
-
</div>
|
|
194
|
-
{/if}
|
|
195
|
-
</div>
|
|
196
|
-
{#if context.loading}
|
|
197
|
-
<Loading positionFixedCenter={true} timeout={600} />
|
|
198
|
-
{/if}
|
|
129
|
+
<div class="media-center" use:onWidthAnchorMounted>
|
|
130
|
+
<div class="media-center__header-and-content">
|
|
131
|
+
{#if !isMobileView}
|
|
132
|
+
<MediaCenterHeader context={context} on={{ headerHeightChanged: onHeaderHeightChanged }} />
|
|
133
|
+
{:else}
|
|
134
|
+
<MediaCenterHeaderMobile context={context} on={{ headerHeightChanged: onHeaderHeightChanged }} />
|
|
135
|
+
{/if}
|
|
199
136
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
137
|
+
<div class="media-center__content-container" use:swipeToOpen>
|
|
138
|
+
{#if context.mediaCenterMode === 'feed' && context.feedPlayerProps}
|
|
139
|
+
<div class="media-center__content" class:media-center__content--faded={context.overlayIsActive} transition:fade={{ duration: 300 }}>
|
|
140
|
+
{#if context.feedPlayerProps.type === 'posts'}
|
|
141
|
+
<PostsPlayerView {...context.feedPlayerProps.props} />
|
|
142
|
+
{:else if context.feedPlayerProps.type === 'streams'}
|
|
143
|
+
<StreamsPlayerView {...context.feedPlayerProps.props} />
|
|
144
|
+
{/if}
|
|
145
|
+
</div>
|
|
146
|
+
{:else if context.mediaCenterMode === 'discover'}
|
|
147
|
+
<div class="media-center__content" transition:fade={{ duration: 300 }}>
|
|
148
|
+
<DiscoverPanel
|
|
149
|
+
context={context}
|
|
150
|
+
on={{
|
|
151
|
+
shortVideoSelected: (shortVideo) => activateSelectedShortVideoPlayer(shortVideo),
|
|
152
|
+
streamSelected: (stream) => activateSelectedStreamPlayer(stream)
|
|
153
|
+
}} />
|
|
205
154
|
</div>
|
|
206
155
|
{/if}
|
|
156
|
+
</div>
|
|
207
157
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
</div>
|
|
158
|
+
{#if context.menuActive}
|
|
159
|
+
<div class="menu-overlay" class:menu-overlay--mobile={isMobileView} onclick={context.hideMenu} onkeydown={() => {}} role="none">
|
|
160
|
+
<div class="menu-overlay__panel">
|
|
161
|
+
<Menu context={context} on={{ categorySelected: selectCategory, streamSelected: activateSelectedStreamPlayer }} />
|
|
213
162
|
</div>
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
163
|
+
</div>
|
|
164
|
+
{/if}
|
|
165
|
+
</div>
|
|
166
|
+
{#if context.loading}
|
|
167
|
+
<Loading positionFixedCenter={true} timeout={600} />
|
|
168
|
+
{/if}
|
|
169
|
+
|
|
170
|
+
{#if context.streamsInCategoryHandler.active}
|
|
171
|
+
<div class="media-center-overlay" class:media-center-overlay--mobile={isMobileView} style={`top:${headerHeight}px`} transition:fade={{ duration: 300 }}>
|
|
172
|
+
<StreamsInCategoryPanel
|
|
173
|
+
handler={context.streamsInCategoryHandler}
|
|
174
|
+
on={{ streamSelected: (id, categoryId, streams) => activateSelectedStreamOfCategoryPlayer(id, streams, categoryId) }} />
|
|
220
175
|
</div>
|
|
221
|
-
|
|
222
|
-
|
|
176
|
+
{/if}
|
|
177
|
+
|
|
178
|
+
{#if isMobileView}
|
|
179
|
+
<MediaCenterFooter context={context} />
|
|
180
|
+
{/if}
|
|
181
|
+
</div>
|
|
223
182
|
|
|
224
183
|
<style>@keyframes fadeIn {
|
|
225
184
|
0% {
|
|
@@ -243,6 +202,13 @@ const swipeToOpen = (node) => {
|
|
|
243
202
|
flex-direction: column;
|
|
244
203
|
position: relative;
|
|
245
204
|
}
|
|
205
|
+
.media-center__header-and-content {
|
|
206
|
+
display: flex;
|
|
207
|
+
flex-direction: column;
|
|
208
|
+
flex: 1;
|
|
209
|
+
min-height: 0;
|
|
210
|
+
position: relative;
|
|
211
|
+
}
|
|
246
212
|
.media-center__content-container {
|
|
247
213
|
flex: 1;
|
|
248
214
|
min-height: 0;
|
|
@@ -301,26 +267,9 @@ const swipeToOpen = (node) => {
|
|
|
301
267
|
}
|
|
302
268
|
.menu-overlay--mobile {
|
|
303
269
|
right: 0;
|
|
304
|
-
bottom: 6.25rem;
|
|
305
270
|
}
|
|
306
271
|
.menu-overlay__panel {
|
|
307
272
|
width: 17.5rem;
|
|
308
273
|
height: 100%;
|
|
309
274
|
max-height: 100%;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
.menu-swipe-area {
|
|
313
|
-
display: none;
|
|
314
|
-
position: absolute;
|
|
315
|
-
top: 0;
|
|
316
|
-
left: 0;
|
|
317
|
-
width: 1.875rem;
|
|
318
|
-
height: 100%;
|
|
319
|
-
z-index: 1;
|
|
320
|
-
/* Set 'container-type: inline-size;' to reference container*/
|
|
321
|
-
}
|
|
322
|
-
@container (width < 576px) {
|
|
323
|
-
.menu-swipe-area {
|
|
324
|
-
display: block;
|
|
325
|
-
}
|
|
326
275
|
}</style>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MediaCenterContext } from './media-center-context.svelte';
|
|
2
|
+
type Props = {
|
|
3
|
+
context: MediaCenterContext;
|
|
4
|
+
};
|
|
5
|
+
declare const MediaCenterView: import("svelte").Component<Props, {}, "">;
|
|
6
|
+
type MediaCenterView = ReturnType<typeof MediaCenterView>;
|
|
7
|
+
export default MediaCenterView;
|
|
@@ -10,8 +10,8 @@ import { MenuLocalization } from './menu-localization';
|
|
|
10
10
|
import IconChevronDownFilled from '@fluentui/svg-icons/icons/chevron_down_20_filled.svg?raw';
|
|
11
11
|
import IconChevronRightFilled from '@fluentui/svg-icons/icons/chevron_right_20_filled.svg?raw';
|
|
12
12
|
import { slide } from 'svelte/transition';
|
|
13
|
-
let { context,
|
|
14
|
-
const localization = $derived(new MenuLocalization(locale));
|
|
13
|
+
let { context, on } = $props();
|
|
14
|
+
const localization = $derived(new MenuLocalization(context.locale));
|
|
15
15
|
const target = $derived.by(() => context.targetData);
|
|
16
16
|
const generateCategoriesMap = () => {
|
|
17
17
|
const expanded = {};
|
|
@@ -45,12 +45,12 @@ const styles = $derived.by(() => {
|
|
|
45
45
|
</div>
|
|
46
46
|
<div class="media-center-target__info">
|
|
47
47
|
<div class="media-center-target__name">
|
|
48
|
-
<LineClamp maxLines={1} locale={locale}>
|
|
48
|
+
<LineClamp maxLines={1} locale={context.locale}>
|
|
49
49
|
{target.name}
|
|
50
50
|
</LineClamp>
|
|
51
51
|
</div>
|
|
52
52
|
{#if target.membersCount}
|
|
53
|
-
<LineClamp maxLines={1} locale={locale}>
|
|
53
|
+
<LineClamp maxLines={1} locale={context.locale}>
|
|
54
54
|
<div class="media-center-target__members">
|
|
55
55
|
<span class="media-center-target__members-count">
|
|
56
56
|
{compactNumber(target.membersCount, { locale: localization.locale })}
|
|
@@ -70,75 +70,54 @@ const styles = $derived.by(() => {
|
|
|
70
70
|
</div>
|
|
71
71
|
<div class="media-center-menu__tree">
|
|
72
72
|
<div class="media-center-menu__tree-item">
|
|
73
|
-
<div class="
|
|
74
|
-
<div class="
|
|
75
|
-
<div
|
|
76
|
-
class="selector-item__text"
|
|
77
|
-
class:selector-item__text--active={!context.categoriesHandler.selectedCategoryId}
|
|
78
|
-
onclick={() => context.playRootFeed()}
|
|
79
|
-
onkeydown={() => {}}
|
|
80
|
-
role="button"
|
|
81
|
-
tabindex="0">
|
|
73
|
+
<div class="menu-item" class:menu-item--active={!context.categoriesHandler.selectedCategoryId}>
|
|
74
|
+
<div class="menu-item__value" onclick={() => context.playRootFeed()} onkeydown={() => {}} role="button" tabindex="0">
|
|
75
|
+
<div class="menu-item__text" class:menu-item__text--active={!context.categoriesHandler.selectedCategoryId}>
|
|
82
76
|
{context.mediaCenterMode === 'discover' ? localization.discoverLabel : localization.feedLabel}
|
|
83
77
|
</div>
|
|
84
78
|
</div>
|
|
85
79
|
</div>
|
|
86
80
|
</div>
|
|
87
|
-
{#
|
|
88
|
-
<div
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
<
|
|
95
|
-
class="selector-item__text"
|
|
96
|
-
class:selector-item__text--active={context.categoriesHandler.selectedCategoryId === category.id}
|
|
97
|
-
onclick={() => on.categorySelected(category.id)}
|
|
98
|
-
onkeydown={() => {}}
|
|
99
|
-
role="button"
|
|
100
|
-
tabindex="0">
|
|
101
|
-
{category.name}
|
|
102
|
-
</div>
|
|
81
|
+
{#snippet categoryItem(category: { type: 'main'; value: MediaCenterCategoryModel } | { type: 'child'; value: MediaCenterSubCategoryModel })}
|
|
82
|
+
<div
|
|
83
|
+
class="menu-item"
|
|
84
|
+
class:menu-item--child={category.type === 'child'}
|
|
85
|
+
class:menu-item--active={context.categoriesHandler.selectedCategoryId === category.value.id}>
|
|
86
|
+
<div class="menu-item__value" onclick={() => on.categorySelected(category.value.id)} onkeydown={() => {}} role="button" tabindex="0">
|
|
87
|
+
<div class="menu-item__image">
|
|
88
|
+
<ImageRound src={category.value.image} noBorders={true} />
|
|
103
89
|
</div>
|
|
104
|
-
<
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
{:else}
|
|
113
|
-
<Icon src={IconChevronRightFilled} />
|
|
114
|
-
{/if}
|
|
115
|
-
</button>
|
|
116
|
-
</ButtonWrapper>
|
|
90
|
+
<div class="menu-item__text" class:menu-item__text--active={context.categoriesHandler.selectedCategoryId === category.value.id}>
|
|
91
|
+
{category.value.name}
|
|
92
|
+
</div>
|
|
93
|
+
{#if category.value.tag}
|
|
94
|
+
<div class="menu-item__tag" style="background-color: {category.value.tag.backgroundColor}; color: {category.value.tag.fontColor};">
|
|
95
|
+
{category.value.tag.text}
|
|
96
|
+
</div>
|
|
97
|
+
{/if}
|
|
117
98
|
</div>
|
|
99
|
+
<ButtonWrapper categoryId={category.value.id} followingHandler={context.categoryFollowingHandler} invertedOrientation={true}>
|
|
100
|
+
<button
|
|
101
|
+
type="button"
|
|
102
|
+
class="menu-item__collapser"
|
|
103
|
+
class:menu-item__collapser--hidden={category.type === 'child' || !category.value.children.length}
|
|
104
|
+
onclick={(e) => handleCategoryExpaned(e, category.value.id)}>
|
|
105
|
+
{#if categoriesExpandedMap[category.value.id]}
|
|
106
|
+
<Icon src={IconChevronDownFilled} />
|
|
107
|
+
{:else}
|
|
108
|
+
<Icon src={IconChevronRightFilled} />
|
|
109
|
+
{/if}
|
|
110
|
+
</button>
|
|
111
|
+
</ButtonWrapper>
|
|
112
|
+
</div>
|
|
113
|
+
{/snippet}
|
|
114
|
+
{#each context.categoriesHandler.categoriesGrouped as category (category.id)}
|
|
115
|
+
<div class="media-center-menu__tree-item">
|
|
116
|
+
{@render categoryItem({ type: 'main', value: category })}
|
|
118
117
|
{#if categoriesExpandedMap[category.id]}
|
|
119
118
|
<div class="media-center-menu__tree-item" transition:slide|local>
|
|
120
119
|
{#each category.children as subcategory (subcategory.id)}
|
|
121
|
-
|
|
122
|
-
<div class="selector-item__value">
|
|
123
|
-
<div class="selector-item__image">
|
|
124
|
-
<ImageRound src={subcategory.image} noBorders={true} />
|
|
125
|
-
</div>
|
|
126
|
-
<div
|
|
127
|
-
class="selector-item__text"
|
|
128
|
-
class:selector-item__text--active={context.categoriesHandler.selectedCategoryId === subcategory.id}
|
|
129
|
-
onclick={() => on.categorySelected(subcategory.id)}
|
|
130
|
-
onkeydown={() => {}}
|
|
131
|
-
role="button"
|
|
132
|
-
tabindex="0">
|
|
133
|
-
{subcategory.name}
|
|
134
|
-
</div>
|
|
135
|
-
</div>
|
|
136
|
-
<ButtonWrapper categoryId={subcategory.id} followingHandler={context.categoryFollowingHandler} invertedOrientation={true}>
|
|
137
|
-
<button type="button" class="selector-item__collapser selector-item__collapser--hidden">
|
|
138
|
-
<Icon src={IconChevronRightFilled} />
|
|
139
|
-
</button>
|
|
140
|
-
</ButtonWrapper>
|
|
141
|
-
</div>
|
|
120
|
+
{@render categoryItem({ type: 'child', value: subcategory })}
|
|
142
121
|
{/each}
|
|
143
122
|
</div>
|
|
144
123
|
{/if}
|
|
@@ -173,7 +152,8 @@ const styles = $derived.by(() => {
|
|
|
173
152
|
}
|
|
174
153
|
}
|
|
175
154
|
.media-center-menu {
|
|
176
|
-
--_media-center-menu--background-color: var(--media-center-menu--background-color, rgb(from
|
|
155
|
+
--_media-center-menu--background-color: var(--media-center-menu--background-color, rgb(from var(--sc-mc-color--bg-panel) r g b / 95%));
|
|
156
|
+
--_media-center-menu--items--padding-inline: 0.625rem;
|
|
177
157
|
background: var(--_media-center-menu--background-color);
|
|
178
158
|
height: 100%;
|
|
179
159
|
min-height: 100%;
|
|
@@ -185,8 +165,7 @@ const styles = $derived.by(() => {
|
|
|
185
165
|
gap: 1.25rem;
|
|
186
166
|
flex-direction: column;
|
|
187
167
|
min-height: 0;
|
|
188
|
-
padding: 0.9375rem
|
|
189
|
-
padding-right: 0.75rem;
|
|
168
|
+
padding: 0.9375rem 0.375rem;
|
|
190
169
|
border-radius: 0 1rem 1rem 0;
|
|
191
170
|
}
|
|
192
171
|
.media-center-menu__content {
|
|
@@ -226,7 +205,8 @@ const styles = $derived.by(() => {
|
|
|
226
205
|
font-size: 1.125rem;
|
|
227
206
|
line-height: 1.75rem;
|
|
228
207
|
font-weight: 500;
|
|
229
|
-
color:
|
|
208
|
+
color: var(--sc-mc-color--text-primary);
|
|
209
|
+
padding-inline: var(--_media-center-menu--items--padding-inline);
|
|
230
210
|
}
|
|
231
211
|
.media-center-menu__tree {
|
|
232
212
|
display: flex;
|
|
@@ -245,7 +225,7 @@ const styles = $derived.by(() => {
|
|
|
245
225
|
flex-direction: column;
|
|
246
226
|
gap: 1rem;
|
|
247
227
|
padding-top: 1.25rem;
|
|
248
|
-
padding-
|
|
228
|
+
padding-inline: var(--_media-center-menu--items--padding-inline);
|
|
249
229
|
}
|
|
250
230
|
.media-center-menu__popular-streams {
|
|
251
231
|
display: grid;
|
|
@@ -253,62 +233,78 @@ const styles = $derived.by(() => {
|
|
|
253
233
|
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
254
234
|
}
|
|
255
235
|
|
|
256
|
-
.
|
|
236
|
+
.menu-item {
|
|
257
237
|
display: flex;
|
|
258
238
|
-webkit-user-drag: none;
|
|
259
239
|
user-select: none;
|
|
260
240
|
height: 2.25rem;
|
|
261
|
-
--
|
|
262
|
-
--
|
|
241
|
+
padding-left: var(--_media-center-menu--items--padding-inline);
|
|
242
|
+
--_menu-item--text--font-size: 0.9375rem;
|
|
243
|
+
--_menu-item--image--size: 1.5rem;
|
|
263
244
|
}
|
|
264
|
-
.
|
|
245
|
+
.menu-item :global([contenteditable]) {
|
|
265
246
|
user-select: text;
|
|
266
247
|
}
|
|
267
|
-
.
|
|
248
|
+
.menu-item--active {
|
|
249
|
+
background-color: hsl(from var(--_media-center-menu--background-color) h s calc(l + 5)/alpha);
|
|
250
|
+
border-radius: 0.25rem;
|
|
251
|
+
}
|
|
252
|
+
.menu-item--child {
|
|
268
253
|
height: 2.125rem;
|
|
269
254
|
padding-left: 1.25rem;
|
|
270
|
-
--
|
|
271
|
-
--
|
|
255
|
+
--_menu-item--text--font-size: 0.875rem;
|
|
256
|
+
--_menu-item--image--size: 1.375rem;
|
|
272
257
|
}
|
|
273
|
-
.
|
|
258
|
+
.menu-item__value {
|
|
274
259
|
display: flex;
|
|
275
260
|
align-items: center;
|
|
276
261
|
flex: 1;
|
|
277
|
-
gap: 0.75rem;
|
|
278
262
|
min-width: 0;
|
|
279
263
|
cursor: pointer;
|
|
280
264
|
}
|
|
281
|
-
.
|
|
282
|
-
width: var(--
|
|
283
|
-
min-width: var(--
|
|
284
|
-
max-width: var(--
|
|
285
|
-
height: var(--
|
|
286
|
-
min-height: var(--
|
|
287
|
-
max-height: var(--
|
|
265
|
+
.menu-item__image {
|
|
266
|
+
width: var(--_menu-item--image--size);
|
|
267
|
+
min-width: var(--_menu-item--image--size);
|
|
268
|
+
max-width: var(--_menu-item--image--size);
|
|
269
|
+
height: var(--_menu-item--image--size);
|
|
270
|
+
min-height: var(--_menu-item--image--size);
|
|
271
|
+
max-height: var(--_menu-item--image--size);
|
|
272
|
+
margin-right: 0.75rem;
|
|
288
273
|
}
|
|
289
|
-
.
|
|
290
|
-
flex: 1;
|
|
274
|
+
.menu-item__text {
|
|
291
275
|
max-width: 100%;
|
|
292
|
-
color:
|
|
293
|
-
font-size: var(--
|
|
276
|
+
color: var(--sc-mc-color--text-primary);
|
|
277
|
+
font-size: var(--_menu-item--text--font-size);
|
|
294
278
|
font-weight: 400;
|
|
295
279
|
text-align: left;
|
|
296
280
|
text-overflow: ellipsis;
|
|
297
281
|
width: 100%;
|
|
298
282
|
white-space: nowrap;
|
|
299
283
|
overflow: hidden;
|
|
300
|
-
transition: text-shadow 120ms ease;
|
|
301
284
|
}
|
|
302
|
-
.
|
|
285
|
+
.menu-item__text {
|
|
286
|
+
width: max-content;
|
|
287
|
+
}
|
|
288
|
+
.menu-item__text:hover, .menu-item__text--active {
|
|
303
289
|
font-weight: 600;
|
|
304
290
|
letter-spacing: -0.5px;
|
|
305
291
|
}
|
|
306
|
-
.
|
|
307
|
-
|
|
292
|
+
.menu-item__tag {
|
|
293
|
+
height: min-content;
|
|
294
|
+
width: min-content;
|
|
295
|
+
border-radius: 0.25rem;
|
|
296
|
+
padding: 0.3125rem 0.375rem;
|
|
297
|
+
font-size: 0.5rem;
|
|
298
|
+
font-weight: 600;
|
|
299
|
+
margin-top: -1rem;
|
|
300
|
+
margin-left: 0.25rem;
|
|
301
|
+
}
|
|
302
|
+
.menu-item__collapser {
|
|
303
|
+
--icon--color: var(--sc-mc-color--text-primary);
|
|
308
304
|
--icon--size: 1rem;
|
|
309
305
|
padding: 0.5rem;
|
|
310
306
|
}
|
|
311
|
-
.
|
|
307
|
+
.menu-item__collapser--hidden {
|
|
312
308
|
visibility: hidden;
|
|
313
309
|
}
|
|
314
310
|
|
|
@@ -316,6 +312,7 @@ const styles = $derived.by(() => {
|
|
|
316
312
|
display: flex;
|
|
317
313
|
align-items: center;
|
|
318
314
|
gap: 0.9375rem;
|
|
315
|
+
padding-inline: var(--_media-center-menu--items--padding-inline);
|
|
319
316
|
}
|
|
320
317
|
.media-center-target__image {
|
|
321
318
|
width: 3.5rem;
|
|
@@ -328,7 +325,7 @@ const styles = $derived.by(() => {
|
|
|
328
325
|
.media-center-target__info {
|
|
329
326
|
display: flex;
|
|
330
327
|
flex-direction: column;
|
|
331
|
-
color:
|
|
328
|
+
color: var(--sc-mc-color--text-primary);
|
|
332
329
|
}
|
|
333
330
|
.media-center-target__name {
|
|
334
331
|
font-size: 1.125rem;
|
|
@@ -349,5 +346,5 @@ const styles = $derived.by(() => {
|
|
|
349
346
|
font-size: 0.75rem;
|
|
350
347
|
line-height: 1;
|
|
351
348
|
font-weight: 400;
|
|
352
|
-
color:
|
|
349
|
+
color: var(--sc-mc-color--text-secondary);
|
|
353
350
|
}</style>
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import type { Locale } from '../../../core/locale';
|
|
2
1
|
import type { StreamPlayerModel } from '../../../streams/streams-player';
|
|
3
2
|
import type { MediaCenterContext } from '../media-center-context.svelte';
|
|
4
3
|
type Props = {
|
|
5
4
|
context: MediaCenterContext;
|
|
6
|
-
locale?: Locale;
|
|
7
5
|
on: {
|
|
8
6
|
categorySelected: (categoryId: string) => void;
|
|
9
7
|
streamSelected: (stream: StreamPlayerModel) => void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
1
|
+
<script lang="ts">import { Theme } from '../../../core/theme';
|
|
2
|
+
import { ImageRound } from '../../../ui/image';
|
|
2
3
|
let { context } = $props();
|
|
3
4
|
const styles = $derived.by(() => {
|
|
4
5
|
var _a;
|
|
@@ -8,9 +9,12 @@ const styles = $derived.by(() => {
|
|
|
8
9
|
}
|
|
9
10
|
return values.join(';');
|
|
10
11
|
});
|
|
12
|
+
const handleClick = () => {
|
|
13
|
+
Theme.toggle();
|
|
14
|
+
};
|
|
11
15
|
</script>
|
|
12
16
|
|
|
13
|
-
<div class="moments-circle" style={styles}>
|
|
17
|
+
<div class="moments-circle" style={styles} onclick={handleClick} onkeydown={() => {}} role="none">
|
|
14
18
|
{#if context.targetData}
|
|
15
19
|
<ImageRound src={context.targetData.image} />
|
|
16
20
|
{/if}
|
|
@@ -28,7 +32,7 @@ const styles = $derived.by(() => {
|
|
|
28
32
|
}
|
|
29
33
|
}
|
|
30
34
|
.moments-circle {
|
|
31
|
-
--_moments-circle--brand-color: var(--moments-circle--brand-color,
|
|
35
|
+
--_moments-circle--brand-color: var(--moments-circle--brand-color, var(--sc-mc-color--border-brand));
|
|
32
36
|
width: 6.25%rem;
|
|
33
37
|
min-width: 6.25%rem;
|
|
34
38
|
max-width: 6.25%rem;
|
|
@@ -63,8 +63,7 @@ let { handler, on } = $props();
|
|
|
63
63
|
font-size: 1.125rem;
|
|
64
64
|
line-height: 1.75rem;
|
|
65
65
|
font-weight: 500;
|
|
66
|
-
color:
|
|
67
|
-
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 6px rgba(0, 0, 0, 0.05);
|
|
66
|
+
color: var(--sc-mc-color--text-primary);
|
|
68
67
|
}
|
|
69
68
|
.streams-in-category__section-header::before {
|
|
70
69
|
content: "";
|
|
@@ -72,7 +71,7 @@ let { handler, on } = $props();
|
|
|
72
71
|
width: 0.3125rem;
|
|
73
72
|
height: 1.625rem;
|
|
74
73
|
border-radius: 0.125rem;
|
|
75
|
-
background:
|
|
74
|
+
background: var(--sc-mc-color--border-brand);
|
|
76
75
|
}
|
|
77
76
|
.streams-in-category__section-content {
|
|
78
77
|
--product-card--aspect-ratio: 9/16;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { Locale } from '../../core/locale';
|
|
2
|
-
import type { IMediaCenterConfig } from '../config/types';
|
|
3
2
|
import type { PostPlayerModel, PostsPlayerProps } from '../../posts/posts-player/types';
|
|
4
3
|
import type { IStreamsPlayerDataProvider, StreamAmplificationParameters, StreamsPlayerProps } from '../../streams/streams-player/types';
|
|
5
|
-
import type { ICloseOrchestrator } from '../../ui/player/close-orchestrator';
|
|
6
4
|
import type { IPlayerDataProvider } from '../../ui/player/providers';
|
|
7
5
|
export type MediaCenterMode = 'feed' | 'discover';
|
|
8
6
|
export type MediaCenterCategoryData = {
|
|
@@ -11,12 +9,6 @@ export type MediaCenterCategoryData = {
|
|
|
11
9
|
parentId: string | undefined;
|
|
12
10
|
parentName: string | undefined;
|
|
13
11
|
};
|
|
14
|
-
export type MediaCenterProps = {
|
|
15
|
-
config: IMediaCenterConfig;
|
|
16
|
-
settings?: MediaCenterSettings;
|
|
17
|
-
modeProps: MediaCenterModeProps;
|
|
18
|
-
closeOrchestrator: ICloseOrchestrator;
|
|
19
|
-
};
|
|
20
12
|
export type MediaCenterModeProps = {
|
|
21
13
|
mode: 'posts';
|
|
22
14
|
props: {
|
|
@@ -47,4 +39,5 @@ export type MediaCenterSettings = {
|
|
|
47
39
|
locale?: Locale;
|
|
48
40
|
showStreamsCloudWatermark?: boolean;
|
|
49
41
|
disableBackground?: boolean;
|
|
42
|
+
theme?: 'light' | 'dark';
|
|
50
43
|
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script lang="ts">var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { MediaCenterProxy } from '../media-center/media-center';
|
|
11
|
+
import { CloseOrchestrator } from '../ui/player/close-orchestrator';
|
|
12
|
+
import { createShadowRoot } from '../ui/shadow-dom';
|
|
13
|
+
import { mount, unmount } from 'svelte';
|
|
14
|
+
let { config, settings, modeProps } = $props();
|
|
15
|
+
const initHost = (node) => {
|
|
16
|
+
const shadowRoot = createShadowRoot(node);
|
|
17
|
+
const mounted = mount(MediaCenterProxy, {
|
|
18
|
+
target: shadowRoot,
|
|
19
|
+
props: {
|
|
20
|
+
config,
|
|
21
|
+
settings,
|
|
22
|
+
modeProps,
|
|
23
|
+
closeOrchestrator: new CloseOrchestrator({
|
|
24
|
+
closeFn: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
25
|
+
yield unmount(mounted);
|
|
26
|
+
}),
|
|
27
|
+
canClose: false
|
|
28
|
+
})
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
destroy: () => {
|
|
33
|
+
unmount(mounted);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<div class="streams-player-host" use:initHost></div>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IMediaCenterConfig } from '../media-center';
|
|
2
|
+
import type { MediaCenterModeProps, MediaCenterSettings } from '../media-center/media-center/types';
|
|
3
|
+
type Props = {
|
|
4
|
+
config: IMediaCenterConfig;
|
|
5
|
+
settings?: MediaCenterSettings;
|
|
6
|
+
modeProps: MediaCenterModeProps;
|
|
7
|
+
};
|
|
8
|
+
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
9
|
+
type Cmp = ReturnType<typeof Cmp>;
|
|
10
|
+
export default Cmp;
|