@streamscloud/embeddable 12.2.0 → 13.0.1
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/content-player/content-player-config.svelte.d.ts +2 -13
- package/dist/content-player/content-player-config.svelte.js +1 -1
- package/dist/content-player/content-player-settings.svelte.d.ts +16 -0
- package/dist/content-player/content-player-settings.svelte.js +27 -0
- package/dist/content-player/index.d.ts +1 -0
- package/dist/content-player/index.js +1 -0
- package/dist/core/theme/index.d.ts +1 -0
- package/dist/core/theme/theme-store.svelte.d.ts +3 -2
- package/dist/external-api/data-providers/index.d.ts +6 -0
- package/dist/external-api/data-providers/index.js +6 -0
- package/dist/external-api/data-providers/internal-media-center-data-provider.svelte.d.ts +15 -0
- package/dist/{media-center/config/internal-media-center-config.js → external-api/data-providers/internal-media-center-data-provider.svelte.js} +33 -17
- package/dist/{posts/handlers → external-api/data-providers}/internal-post-analytics-handler.d.ts +1 -1
- package/dist/{short-videos → external-api}/data-providers/internal-short-video-player-items-provider.js +1 -1
- package/dist/{streams/streams-player → external-api/data-providers}/internal-stream-analytics-handler.d.ts +1 -1
- package/dist/{streams/streams-player → external-api/data-providers}/internal-streams-player-data-provider.d.ts +1 -1
- package/dist/{streams/streams-player → external-api/data-providers}/internal-streams-player-data-provider.js +1 -1
- package/dist/{media-center/config → external-api/data-providers}/operations.generated.d.ts +6 -0
- package/dist/{media-center/config → external-api/data-providers}/operations.generated.js +13 -0
- package/dist/{media-center/config → external-api/data-providers}/operations.graphql +6 -0
- package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/mapper.d.ts +1 -1
- package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/mapper.js +2 -2
- package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.generated.d.ts +1 -1
- package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/posts-loader.d.ts +2 -2
- package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/posts-loader.js +1 -1
- package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/mapper.d.ts +1 -1
- package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/mapper.js +1 -1
- package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.generated.d.ts +1 -1
- package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/stream-pages-loader.d.ts +1 -1
- package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/stream-pages-loader.js +2 -2
- package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/streams-loader.d.ts +2 -2
- package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/streams-loader.js +1 -1
- package/dist/external-api/index.d.ts +3 -0
- package/dist/external-api/index.js +3 -0
- package/dist/external-api/media-page/index.d.ts +83 -0
- package/dist/external-api/media-page/index.js +82 -0
- package/dist/{short-videos → external-api}/short-videos-player/index.d.ts +27 -12
- package/dist/{short-videos → external-api}/short-videos-player/index.js +35 -28
- package/dist/external-api/streams-player/index.d.ts +105 -0
- package/dist/external-api/streams-player/index.js +110 -0
- package/dist/media-center/config/types.d.ts +28 -27
- package/dist/media-center/index.d.ts +3 -1
- package/dist/media-center/media-center/cmp.media-center-proxy.svelte +4 -4
- package/dist/media-center/media-center/cmp.media-center-proxy.svelte.d.ts +7 -4
- package/dist/media-center/media-center/discover/community-features-localization.d.ts +8 -0
- package/dist/media-center/media-center/discover/community-features-localization.js +31 -0
- package/dist/media-center/media-center/discover/community-features.svelte +171 -0
- package/dist/media-center/media-center/discover/community-features.svelte.d.ts +11 -0
- package/dist/media-center/media-center/discover/data-loading.d.ts +3 -3
- package/dist/media-center/media-center/discover/data-loading.js +5 -5
- package/dist/media-center/media-center/discover/discover-header.svelte +7 -56
- package/dist/media-center/media-center/discover/discover-view-handler.svelte.d.ts +3 -3
- package/dist/media-center/media-center/discover/discover-view-handler.svelte.js +4 -4
- package/dist/media-center/media-center/feed/feed-handler.svelte.d.ts +5 -3
- package/dist/media-center/media-center/feed/feed-handler.svelte.js +18 -10
- package/dist/media-center/media-center/feed/feed-providers-generator.d.ts +11 -5
- package/dist/media-center/media-center/feed/feed-providers-generator.js +13 -9
- package/dist/media-center/media-center/footer/index.d.ts +1 -0
- package/dist/media-center/media-center/footer/index.js +1 -0
- package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +3 -5
- package/dist/media-center/media-center/handlers/categories-handler.svelte.js +16 -13
- package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.d.ts +18 -7
- package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.js +18 -25
- package/dist/media-center/media-center/{header-footer → header}/index.d.ts +0 -1
- package/dist/media-center/media-center/{header-footer → header}/index.js +0 -1
- package/dist/media-center/media-center/{header-footer → header}/media-center-header.svelte +138 -31
- package/dist/media-center/media-center/{header-footer → header}/media-center-header.svelte.d.ts +2 -0
- package/dist/media-center/media-center/index.d.ts +1 -0
- package/dist/media-center/media-center/index.js +1 -0
- package/dist/media-center/media-center/media-center-context.svelte.d.ts +15 -9
- package/dist/media-center/media-center/media-center-context.svelte.js +57 -19
- package/dist/media-center/media-center/media-center-settings.svelte.d.ts +11 -0
- package/dist/media-center/media-center/media-center-settings.svelte.js +23 -0
- package/dist/media-center/media-center/media-center-view.svelte +11 -3
- package/dist/media-center/media-center/media-center-view.svelte.d.ts +2 -0
- package/dist/media-center/media-center/menu/category-following-wrapper.svelte.d.ts +1 -1
- package/dist/media-center/media-center/menu/menu.svelte +15 -14
- package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +3 -3
- package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +4 -4
- package/dist/media-center/media-center/moments/cmp.moments-circle.svelte +22 -9
- package/dist/media-center/media-center/moments/index.d.ts +1 -0
- package/dist/media-center/media-center/moments/index.js +1 -0
- package/dist/media-center/media-center/moments/moments-feed-handler.svelte.d.ts +26 -0
- package/dist/media-center/media-center/moments/moments-feed-handler.svelte.js +49 -0
- package/dist/media-center/media-center/moments/moments-state.svelte.d.ts +20 -0
- package/dist/media-center/media-center/moments/moments-state.svelte.js +82 -0
- package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.d.ts +3 -3
- package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.js +4 -4
- package/dist/media-center/media-center/types.d.ts +3 -3
- package/dist/media-center/membership/index.d.ts +1 -0
- package/dist/media-center/membership/index.js +1 -0
- package/dist/media-center/membership/mock-membership-handler.svelte.d.ts +10 -0
- package/dist/media-center/membership/mock-membership-handler.svelte.js +21 -0
- package/dist/media-center/membership/types.d.ts +10 -0
- package/dist/media-center/membership/types.js +1 -0
- package/dist/media-center/navigation/index.d.ts +2 -0
- package/dist/media-center/navigation/index.js +1 -0
- package/dist/media-center/navigation/media-center-state.d.ts +19 -0
- package/dist/media-center/navigation/media-center-state.js +1 -0
- package/dist/media-center/navigation/mock-navigation-handler.svelte.d.ts +6 -0
- package/dist/media-center/navigation/mock-navigation-handler.svelte.js +6 -0
- package/dist/media-center/navigation/types.d.ts +5 -0
- package/dist/media-center/navigation/types.js +1 -0
- package/dist/media-page/cmp.media-page.svelte +10 -4
- package/dist/media-page/cmp.media-page.svelte.d.ts +6 -5
- package/dist/media-page/index.d.ts +40 -58
- package/dist/media-page/index.js +129 -16
- package/dist/posts/posts-player/index.d.ts +31 -33
- package/dist/posts/posts-player/index.js +90 -35
- package/dist/posts/posts-player/posts-player-view.svelte +1 -1
- package/dist/posts/posts-player/types.d.ts +2 -1
- package/dist/streams/layout/styles-transformer.d.ts +1 -1
- package/dist/streams/streams-player/index.d.ts +17 -83
- package/dist/streams/streams-player/index.js +84 -64
- package/dist/streams/streams-player/streams-player-buffer.svelte.js +2 -1
- package/dist/streams/streams-player/streams-player-view.svelte +1 -1
- package/dist/streams/streams-player/types.d.ts +3 -1
- package/dist/ui/button/cmp.options-button.svelte +123 -0
- package/dist/ui/button/cmp.options-button.svelte.d.ts +20 -0
- package/dist/ui/button/index.d.ts +1 -0
- package/dist/ui/button/index.js +1 -0
- package/dist/ui/button/resources/button-theme.svelte +16 -2
- package/dist/ui/player/colors/index.d.ts +1 -1
- package/dist/ui/player/colors/index.js +1 -1
- package/dist/ui/player/colors/player-colors.d.ts +14 -1
- package/dist/ui/player/colors/player-colors.js +24 -1
- package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +1 -0
- package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +7 -1
- package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +1 -0
- package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +7 -1
- package/dist/ui/player/providers/types.d.ts +3 -1
- package/dist/ui/shadow-dom/cmp.shadow-root.svelte +6 -4
- package/dist/ui/shadow-dom/colors.scss +6 -4
- package/package.json +5 -1
- package/dist/content-player/content-player-settings.d.ts +0 -12
- package/dist/content-player/content-player-settings.js +0 -23
- package/dist/media-center/config/internal-media-center-config.d.ts +0 -14
- package/dist/media-center/media-center/discover/discover-header-localization.d.ts +0 -6
- package/dist/media-center/media-center/discover/discover-header-localization.js +0 -15
- package/dist/posts/handlers/index.d.ts +0 -1
- package/dist/posts/handlers/index.js +0 -1
- package/dist/short-videos/data-providers/index.d.ts +0 -1
- package/dist/short-videos/data-providers/index.js +0 -1
- /package/dist/{media-center/config → external-api/data-providers}/internal-media-center-analytics-handler.d.ts +0 -0
- /package/dist/{media-center/config → external-api/data-providers}/internal-media-center-analytics-handler.js +0 -0
- /package/dist/{posts/handlers → external-api/data-providers}/internal-post-analytics-handler.js +0 -0
- /package/dist/{short-videos → external-api}/data-providers/internal-short-video-player-items-provider.d.ts +0 -0
- /package/dist/{streams/streams-player → external-api/data-providers}/internal-stream-analytics-handler.js +0 -0
- /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/index.d.ts +0 -0
- /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/index.js +0 -0
- /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.generated.js +0 -0
- /package/dist/{posts/data-loaders → external-api/data-providers/post-data-loaders}/operations.graphql +0 -0
- /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/index.d.ts +0 -0
- /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/index.js +0 -0
- /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.generated.js +0 -0
- /package/dist/{streams/data-loaders → external-api/data-providers/stream-data-loaders}/operations.graphql +0 -0
- /package/dist/media-center/media-center/{header-footer → footer}/media-center-footer.svelte +0 -0
- /package/dist/media-center/media-center/{header-footer → footer}/media-center-footer.svelte.d.ts +0 -0
- /package/dist/media-center/media-center/{header-footer → header}/media-center-header-localization.d.ts +0 -0
- /package/dist/media-center/media-center/{header-footer → header}/media-center-header-localization.js +0 -0
- /package/dist/media-center/media-center/{header-footer → header}/media-center-header-mobile.svelte +0 -0
- /package/dist/media-center/media-center/{header-footer → header}/media-center-header-mobile.svelte.d.ts +0 -0
|
@@ -12,7 +12,7 @@ import IconChevronRightFilled from '@fluentui/svg-icons/icons/chevron_right_20_f
|
|
|
12
12
|
import { slide } from 'svelte/transition';
|
|
13
13
|
let { context, on } = $props();
|
|
14
14
|
const localization = $derived(new MenuLocalization(context.locale));
|
|
15
|
-
const target = $derived.by(() => context.
|
|
15
|
+
const target = $derived.by(() => context.model);
|
|
16
16
|
const generateCategoriesMap = () => {
|
|
17
17
|
const expanded = {};
|
|
18
18
|
context.categoriesHandler.categoriesGrouped.forEach((c) => {
|
|
@@ -23,15 +23,15 @@ const generateCategoriesMap = () => {
|
|
|
23
23
|
return expanded;
|
|
24
24
|
};
|
|
25
25
|
const categoriesExpandedMap = $state(generateCategoriesMap());
|
|
26
|
+
const indicateActiveCategory = $derived(context.mediaCenterMode !== 'moments');
|
|
26
27
|
const handleCategoryExpaned = (e, categoryId) => {
|
|
27
28
|
e.stopPropagation();
|
|
28
29
|
categoriesExpandedMap[categoryId] = !categoriesExpandedMap[categoryId];
|
|
29
30
|
};
|
|
30
31
|
const styles = $derived.by(() => {
|
|
31
|
-
var _a;
|
|
32
32
|
const values = [];
|
|
33
|
-
if (
|
|
34
|
-
values.push(`--media-center-menu--background-color: ${context.
|
|
33
|
+
if (context.mediaCenterColors.menuBackground) {
|
|
34
|
+
values.push(`--media-center-menu--background-color: ${context.mediaCenterColors.menuBackground}`);
|
|
35
35
|
}
|
|
36
36
|
return values.join(';');
|
|
37
37
|
});
|
|
@@ -49,14 +49,14 @@ const styles = $derived.by(() => {
|
|
|
49
49
|
{target.name}
|
|
50
50
|
</LineClamp>
|
|
51
51
|
</div>
|
|
52
|
-
{#if target.membersCount}
|
|
52
|
+
{#if target.communityFeatures && target.communityFeatures.membersCount}
|
|
53
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
|
-
{compactNumber(target.membersCount, { locale: localization.locale })}
|
|
56
|
+
{compactNumber(target.communityFeatures.membersCount, { locale: localization.locale })}
|
|
57
57
|
</span>
|
|
58
58
|
<span class="media-center-target__members-label">
|
|
59
|
-
{localization.membersLabel(target.membersCount)}
|
|
59
|
+
{localization.membersLabel(target.communityFeatures.membersCount)}
|
|
60
60
|
</span>
|
|
61
61
|
</div>
|
|
62
62
|
</LineClamp>
|
|
@@ -71,7 +71,7 @@ const styles = $derived.by(() => {
|
|
|
71
71
|
<div class="media-center-menu__tree">
|
|
72
72
|
<div class="media-center-menu__tree-item">
|
|
73
73
|
<div class="menu-item" class:menu-item--active={!context.categoriesHandler.selectedCategoryId}>
|
|
74
|
-
<div class="menu-
|
|
74
|
+
<div class="menu-item__content" onclick={() => context.playRootFeed()} onkeydown={() => {}} role="button" tabindex="0">
|
|
75
75
|
<div class="menu-item__text" class:menu-item__text--active={!context.categoriesHandler.selectedCategoryId}>
|
|
76
76
|
{context.mediaCenterMode === 'discover' ? localization.discoverLabel : localization.feedLabel}
|
|
77
77
|
</div>
|
|
@@ -82,12 +82,14 @@ const styles = $derived.by(() => {
|
|
|
82
82
|
<div
|
|
83
83
|
class="menu-item"
|
|
84
84
|
class:menu-item--child={category.type === 'child'}
|
|
85
|
-
class:menu-item--active={context.categoriesHandler.selectedCategoryId === category.value.id}>
|
|
86
|
-
<div class="menu-
|
|
85
|
+
class:menu-item--active={context.categoriesHandler.selectedCategoryId === category.value.id && indicateActiveCategory}>
|
|
86
|
+
<div class="menu-item__content" onclick={() => on.categorySelected(category.value.id)} onkeydown={() => {}} role="button" tabindex="0">
|
|
87
87
|
<div class="menu-item__image">
|
|
88
88
|
<ImageRound src={category.value.image} noBorders={true} />
|
|
89
89
|
</div>
|
|
90
|
-
<div
|
|
90
|
+
<div
|
|
91
|
+
class="menu-item__text"
|
|
92
|
+
class:menu-item__text--active={context.categoriesHandler.selectedCategoryId === category.value.id && indicateActiveCategory}>
|
|
91
93
|
{category.value.name}
|
|
92
94
|
</div>
|
|
93
95
|
{#if category.value.tag}
|
|
@@ -96,7 +98,7 @@ const styles = $derived.by(() => {
|
|
|
96
98
|
</div>
|
|
97
99
|
{/if}
|
|
98
100
|
</div>
|
|
99
|
-
<ButtonWrapper categoryId={category.value.id} followingHandler={context.
|
|
101
|
+
<ButtonWrapper categoryId={category.value.id} followingHandler={context.categoriesFollowingHandler} invertedOrientation={true}>
|
|
100
102
|
<button
|
|
101
103
|
type="button"
|
|
102
104
|
class="menu-item__collapser"
|
|
@@ -255,7 +257,7 @@ const styles = $derived.by(() => {
|
|
|
255
257
|
--_menu-item--text--font-size: 0.875rem;
|
|
256
258
|
--_menu-item--image--size: 1.375rem;
|
|
257
259
|
}
|
|
258
|
-
.menu-
|
|
260
|
+
.menu-item__content {
|
|
259
261
|
display: flex;
|
|
260
262
|
align-items: center;
|
|
261
263
|
flex: 1;
|
|
@@ -291,7 +293,6 @@ const styles = $derived.by(() => {
|
|
|
291
293
|
}
|
|
292
294
|
.menu-item__tag {
|
|
293
295
|
height: min-content;
|
|
294
|
-
width: min-content;
|
|
295
296
|
border-radius: 0.25rem;
|
|
296
297
|
padding: 0.3125rem 0.375rem;
|
|
297
298
|
font-size: 0.5rem;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IMediaCenterDataProvider } from '../..';
|
|
2
2
|
import type { StreamPlayerModel } from '../../../streams/streams-player/types';
|
|
3
3
|
export declare class PopularStreamsPanelHandler {
|
|
4
|
-
private readonly
|
|
4
|
+
private readonly dataProvider;
|
|
5
5
|
private _state;
|
|
6
6
|
private _streams;
|
|
7
|
-
constructor(
|
|
7
|
+
constructor(dataProvider: IMediaCenterDataProvider);
|
|
8
8
|
get streamSectionItems(): StreamPlayerModel[];
|
|
9
9
|
init: () => Promise<void>;
|
|
10
10
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export class PopularStreamsPanelHandler {
|
|
2
|
-
|
|
2
|
+
dataProvider;
|
|
3
3
|
_state = $state('not-initialized');
|
|
4
4
|
_streams = $state.raw([]);
|
|
5
|
-
constructor(
|
|
6
|
-
this.
|
|
5
|
+
constructor(dataProvider) {
|
|
6
|
+
this.dataProvider = dataProvider;
|
|
7
7
|
}
|
|
8
8
|
get streamSectionItems() {
|
|
9
9
|
return this._streams;
|
|
@@ -12,7 +12,7 @@ export class PopularStreamsPanelHandler {
|
|
|
12
12
|
if (this._state === 'not-initialized') {
|
|
13
13
|
this._state = 'loading';
|
|
14
14
|
try {
|
|
15
|
-
const streamsResponse = await this.
|
|
15
|
+
const streamsResponse = await this.dataProvider.streamPlayer.getStreamsCursor({ filter: {}, limit: 2 });
|
|
16
16
|
this._streams = streamsResponse.items;
|
|
17
17
|
}
|
|
18
18
|
finally {
|
|
@@ -1,22 +1,30 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
2
|
-
import { ImageRound } from '../../../ui/image';
|
|
1
|
+
<script lang="ts">import { ImageRound } from '../../../ui/image';
|
|
3
2
|
let { context } = $props();
|
|
3
|
+
const handler = context.momentsFeedHandler;
|
|
4
4
|
const styles = $derived.by(() => {
|
|
5
|
-
var _a;
|
|
6
5
|
const values = [];
|
|
7
|
-
if (
|
|
8
|
-
values.push(`--moments-circle--brand-color: ${context.
|
|
6
|
+
if (context.mediaCenterColors.brand) {
|
|
7
|
+
values.push(`--moments-circle--brand-color: ${context.mediaCenterColors.brand}`);
|
|
9
8
|
}
|
|
10
9
|
return values.join(';');
|
|
11
10
|
});
|
|
12
11
|
const handleClick = () => {
|
|
13
|
-
|
|
12
|
+
if (!handler.hasMoments) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
context.playMoments();
|
|
14
16
|
};
|
|
15
17
|
</script>
|
|
16
18
|
|
|
17
|
-
<div
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
<div
|
|
20
|
+
class="moments-circle"
|
|
21
|
+
class:moments-circle--clickable={handler.hasMoments}
|
|
22
|
+
class:moments-circle--has-unwatched={handler.hasUnwatchedMoments}
|
|
23
|
+
style={styles}
|
|
24
|
+
onclick={handleClick}
|
|
25
|
+
role="none">
|
|
26
|
+
{#if context.model}
|
|
27
|
+
<ImageRound src={context.model.image} noBorders={!handler.hasUnwatchedMoments} />
|
|
20
28
|
{/if}
|
|
21
29
|
</div>
|
|
22
30
|
|
|
@@ -39,7 +47,12 @@ const handleClick = () => {
|
|
|
39
47
|
height: 6.25%rem;
|
|
40
48
|
min-height: 6.25%rem;
|
|
41
49
|
max-height: 6.25%rem;
|
|
50
|
+
}
|
|
51
|
+
.moments-circle--has-unwatched {
|
|
42
52
|
--image--rounded--inner--border-width: 1px;
|
|
43
53
|
--image--rounded--outer--border-color: var(--_moments-circle--brand-color);
|
|
44
54
|
--image--rounded--outer--border-width: 2px;
|
|
55
|
+
}
|
|
56
|
+
.moments-circle--clickable {
|
|
57
|
+
cursor: pointer;
|
|
45
58
|
}</style>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { IMediaCenterDataProvider } from '../..';
|
|
2
|
+
import type { PostsPlayerProps } from '../../../posts/posts-player/types';
|
|
3
|
+
import type { ICloseOrchestrator } from '../../../ui/player/close-orchestrator';
|
|
4
|
+
import { MomentsState } from './moments-state.svelte';
|
|
5
|
+
import { MediaCenterSettingsHandler } from '../handlers';
|
|
6
|
+
export declare class MomentsFeedHandler {
|
|
7
|
+
momentsState: MomentsState;
|
|
8
|
+
private _active;
|
|
9
|
+
private _momentsPlayerProps;
|
|
10
|
+
private _dataProvider;
|
|
11
|
+
private _mediaCenterSettingsHandler;
|
|
12
|
+
private _closeOrchestrator;
|
|
13
|
+
private _onPlayerReachedEnd;
|
|
14
|
+
constructor(data: {
|
|
15
|
+
dataProvider: IMediaCenterDataProvider;
|
|
16
|
+
mediaCenterSettingsHandler: MediaCenterSettingsHandler;
|
|
17
|
+
closeOrchestrator: ICloseOrchestrator;
|
|
18
|
+
onPlayerReachedEnd: () => void;
|
|
19
|
+
});
|
|
20
|
+
get active(): boolean;
|
|
21
|
+
get momentsPlayerProps(): PostsPlayerProps | null;
|
|
22
|
+
get hasUnwatchedMoments(): boolean;
|
|
23
|
+
get hasMoments(): boolean;
|
|
24
|
+
deactivate: () => void;
|
|
25
|
+
activateMoments: () => Promise<void>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { initBufferFromProvider } from '../../../ui/player/providers/service';
|
|
2
|
+
import { MomentsState } from './moments-state.svelte';
|
|
3
|
+
import { MediaCenterSettingsHandler } from '../handlers';
|
|
4
|
+
export class MomentsFeedHandler {
|
|
5
|
+
momentsState;
|
|
6
|
+
_active = $state(false);
|
|
7
|
+
_momentsPlayerProps = $state.raw(null);
|
|
8
|
+
_dataProvider;
|
|
9
|
+
_mediaCenterSettingsHandler;
|
|
10
|
+
_closeOrchestrator;
|
|
11
|
+
_onPlayerReachedEnd;
|
|
12
|
+
constructor(data) {
|
|
13
|
+
const { dataProvider, mediaCenterSettingsHandler, closeOrchestrator, onPlayerReachedEnd } = data;
|
|
14
|
+
this.momentsState = new MomentsState(dataProvider);
|
|
15
|
+
this._mediaCenterSettingsHandler = mediaCenterSettingsHandler;
|
|
16
|
+
this._dataProvider = dataProvider;
|
|
17
|
+
this._closeOrchestrator = closeOrchestrator;
|
|
18
|
+
this._onPlayerReachedEnd = onPlayerReachedEnd;
|
|
19
|
+
}
|
|
20
|
+
get active() {
|
|
21
|
+
return this._active;
|
|
22
|
+
}
|
|
23
|
+
get momentsPlayerProps() {
|
|
24
|
+
return this._momentsPlayerProps;
|
|
25
|
+
}
|
|
26
|
+
get hasUnwatchedMoments() {
|
|
27
|
+
return this.momentsState.unwatchedMoments.length > 0;
|
|
28
|
+
}
|
|
29
|
+
get hasMoments() {
|
|
30
|
+
return this.momentsState.allMoments.length > 0;
|
|
31
|
+
}
|
|
32
|
+
deactivate = () => {
|
|
33
|
+
this._active = false;
|
|
34
|
+
};
|
|
35
|
+
activateMoments = async () => {
|
|
36
|
+
this._momentsPlayerProps = {
|
|
37
|
+
dataProvider: { type: 'buffer', buffer: initBufferFromProvider(this.momentsState.generatePlayerDataProvider(this._onPlayerReachedEnd)) },
|
|
38
|
+
socialInteractionsHandler: this._dataProvider.handlers?.socialInteractionsHandler,
|
|
39
|
+
analyticsHandler: this._dataProvider.handlers?.analyticsHandler,
|
|
40
|
+
playerSettings: this._mediaCenterSettingsHandler.playerSettings,
|
|
41
|
+
closeOrchestrator: this._closeOrchestrator,
|
|
42
|
+
on: {
|
|
43
|
+
postActivated: (id) => this.momentsState.markMomentAsSeen(id),
|
|
44
|
+
backgroundImageLoaded: this._mediaCenterSettingsHandler.backgroundImageLoadedHandler
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
this._active = true;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { IMediaCenterDataProvider } from '../..';
|
|
2
|
+
import { type PostPlayerModel } from '../../../posts/posts-player';
|
|
3
|
+
import type { IChunksPlayerDataProvider } from '../../../ui/player/providers';
|
|
4
|
+
export declare class MomentsState {
|
|
5
|
+
private readonly dataProvider;
|
|
6
|
+
private momentsSeenLocally;
|
|
7
|
+
constructor(dataProvider: IMediaCenterDataProvider);
|
|
8
|
+
get allMoments(): {
|
|
9
|
+
id: string;
|
|
10
|
+
cover: string;
|
|
11
|
+
isSeen: boolean;
|
|
12
|
+
}[];
|
|
13
|
+
get unwatchedMoments(): {
|
|
14
|
+
id: string;
|
|
15
|
+
cover: string;
|
|
16
|
+
isSeen: boolean;
|
|
17
|
+
}[];
|
|
18
|
+
markMomentAsSeen: (momentId: string) => void;
|
|
19
|
+
generatePlayerDataProvider: (onEndReached: () => void) => IChunksPlayerDataProvider<PostPlayerModel>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { PostType } from '../../../core/enums';
|
|
2
|
+
import {} from '../../../posts/posts-player';
|
|
3
|
+
export class MomentsState {
|
|
4
|
+
dataProvider;
|
|
5
|
+
momentsSeenLocally = $state.raw([]);
|
|
6
|
+
constructor(dataProvider) {
|
|
7
|
+
this.dataProvider = dataProvider;
|
|
8
|
+
}
|
|
9
|
+
get allMoments() {
|
|
10
|
+
return this.dataProvider.model?.moments ?? [];
|
|
11
|
+
}
|
|
12
|
+
get unwatchedMoments() {
|
|
13
|
+
return this.allMoments.filter((s) => !s.isSeen && !this.momentsSeenLocally.includes(s.id));
|
|
14
|
+
}
|
|
15
|
+
markMomentAsSeen = (momentId) => {
|
|
16
|
+
if (!this.momentsSeenLocally.includes(momentId)) {
|
|
17
|
+
this.momentsSeenLocally = [...this.momentsSeenLocally, momentId];
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
generatePlayerDataProvider = (onEndReached) => {
|
|
21
|
+
const collectionCapacity = 5;
|
|
22
|
+
const sortedMoments = [...this.allMoments].sort((a, b) => {
|
|
23
|
+
const aUnwatched = !a.isSeen && !this.momentsSeenLocally.includes(a.id);
|
|
24
|
+
const bUnwatched = !b.isSeen && !this.momentsSeenLocally.includes(b.id);
|
|
25
|
+
if (aUnwatched === bUnwatched) {
|
|
26
|
+
return 0;
|
|
27
|
+
}
|
|
28
|
+
return aUnwatched ? -1 : 1;
|
|
29
|
+
});
|
|
30
|
+
const ids = sortedMoments.map((m) => m.id);
|
|
31
|
+
const idOrder = new Map();
|
|
32
|
+
ids.forEach((id, idx) => idOrder.set(id, idx));
|
|
33
|
+
const chunksCount = Math.ceil(sortedMoments.length / collectionCapacity);
|
|
34
|
+
const prefetchedChunks = [];
|
|
35
|
+
for (let i = 1; i <= chunksCount; i++) {
|
|
36
|
+
prefetchedChunks.push({
|
|
37
|
+
id: i.toString()
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
kind: 'chunks',
|
|
42
|
+
initialData: {
|
|
43
|
+
prefetchedChunks
|
|
44
|
+
},
|
|
45
|
+
loadMoreChunks: () => {
|
|
46
|
+
return Promise.resolve([]);
|
|
47
|
+
},
|
|
48
|
+
loadChunkItems: async (chunkId, continuationToken) => {
|
|
49
|
+
const emptyResult = {
|
|
50
|
+
items: [],
|
|
51
|
+
continuationToken: null
|
|
52
|
+
};
|
|
53
|
+
if (continuationToken === null) {
|
|
54
|
+
return emptyResult;
|
|
55
|
+
}
|
|
56
|
+
const idsStart = (parseInt(chunkId) - 1) * collectionCapacity;
|
|
57
|
+
const idsEnd = Math.min(idsStart + collectionCapacity, ids.length);
|
|
58
|
+
const momentsInChunk = ids.slice(idsStart, idsEnd);
|
|
59
|
+
if (momentsInChunk.length === 0) {
|
|
60
|
+
return emptyResult;
|
|
61
|
+
}
|
|
62
|
+
const moments = await this.dataProvider.postsPlayer.getPostsCursor({
|
|
63
|
+
filter: {
|
|
64
|
+
types: [PostType.Moment],
|
|
65
|
+
includeIds: momentsInChunk
|
|
66
|
+
},
|
|
67
|
+
limit: collectionCapacity
|
|
68
|
+
});
|
|
69
|
+
const items = moments.items.sort((a, b) => {
|
|
70
|
+
const ia = idOrder.get(a.id) ?? Number.MAX_SAFE_INTEGER;
|
|
71
|
+
const ib = idOrder.get(b.id) ?? Number.MAX_SAFE_INTEGER;
|
|
72
|
+
return ia - ib;
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
items,
|
|
76
|
+
continuationToken: null
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
onEndReached
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IMediaCenterDataProvider } from '../../config/types';
|
|
2
2
|
import type { StreamPlayerModel } from '../../../streams/streams-player';
|
|
3
3
|
import type { MediaCenterCategoryData } from '../types';
|
|
4
4
|
export declare class StreamsInCategoryPanelHandler {
|
|
5
|
-
private readonly
|
|
5
|
+
private readonly dataProvider;
|
|
6
6
|
private _activated;
|
|
7
7
|
private _state;
|
|
8
8
|
private _categoryId;
|
|
9
9
|
private _categoryName;
|
|
10
10
|
private _streams;
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(dataProvider: IMediaCenterDataProvider);
|
|
12
12
|
get streamSectionItems(): StreamPlayerModel[];
|
|
13
13
|
get categoryId(): string;
|
|
14
14
|
get categoryName(): string;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export class StreamsInCategoryPanelHandler {
|
|
2
|
-
|
|
2
|
+
dataProvider;
|
|
3
3
|
_activated = $state(false);
|
|
4
4
|
_state = $state('loading');
|
|
5
5
|
_categoryId = $state.raw('');
|
|
6
6
|
_categoryName = $state.raw('');
|
|
7
7
|
_streams = $state.raw([]);
|
|
8
|
-
constructor(
|
|
9
|
-
this.
|
|
8
|
+
constructor(dataProvider) {
|
|
9
|
+
this.dataProvider = dataProvider;
|
|
10
10
|
}
|
|
11
11
|
get streamSectionItems() {
|
|
12
12
|
return this._streams;
|
|
@@ -33,7 +33,7 @@ export class StreamsInCategoryPanelHandler {
|
|
|
33
33
|
this._activated = true;
|
|
34
34
|
this._state = 'loading';
|
|
35
35
|
try {
|
|
36
|
-
const streamsResponse = await this.
|
|
36
|
+
const streamsResponse = await this.dataProvider.streamPlayer.getStreamsCursor({ filter: { categoryId: categoryData.id }, limit: 5 });
|
|
37
37
|
this._categoryName = categoryData.parentName ? `${categoryData.parentName} - ${categoryData.name}` : categoryData.name;
|
|
38
38
|
this._categoryId = categoryData.id;
|
|
39
39
|
this._streams = streamsResponse.items;
|
|
@@ -2,7 +2,7 @@ import type { Locale } from '../../core/locale';
|
|
|
2
2
|
import type { PostPlayerModel, PostsPlayerProps } from '../../posts/posts-player/types';
|
|
3
3
|
import type { IStreamsPlayerDataProvider, StreamAmplificationParameters, StreamsPlayerProps } from '../../streams/streams-player/types';
|
|
4
4
|
import type { IPlayerDataProvider } from '../../ui/player/providers';
|
|
5
|
-
export type MediaCenterMode = 'feed' | 'discover';
|
|
5
|
+
export type MediaCenterMode = 'feed' | 'discover' | 'moments';
|
|
6
6
|
export type MediaCenterCategoryData = {
|
|
7
7
|
id: string;
|
|
8
8
|
name: string;
|
|
@@ -26,7 +26,7 @@ export type MediaCenterModeProps = {
|
|
|
26
26
|
}) => void;
|
|
27
27
|
};
|
|
28
28
|
} | {
|
|
29
|
-
mode: '
|
|
29
|
+
mode: 'default';
|
|
30
30
|
};
|
|
31
31
|
export type PlayerProps = {
|
|
32
32
|
type: 'posts';
|
|
@@ -35,7 +35,7 @@ export type PlayerProps = {
|
|
|
35
35
|
type: 'streams';
|
|
36
36
|
props: StreamsPlayerProps;
|
|
37
37
|
};
|
|
38
|
-
export type
|
|
38
|
+
export type IMediaCenterSettings = {
|
|
39
39
|
locale?: Locale;
|
|
40
40
|
showStreamsCloudWatermark?: boolean;
|
|
41
41
|
disableBackground?: boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { IMediaCenterMembershipHandler } from './types';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IMediaCenterMembershipHandler } from './types';
|
|
2
|
+
export declare class MockMembershipHandler implements IMediaCenterMembershipHandler {
|
|
3
|
+
private isJoined;
|
|
4
|
+
getIsJoined: () => Promise<{
|
|
5
|
+
readonly isJoined: boolean;
|
|
6
|
+
}>;
|
|
7
|
+
join: () => void;
|
|
8
|
+
leave: () => void;
|
|
9
|
+
viewMembersList: () => void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class MockMembershipHandler {
|
|
2
|
+
isJoined = $state(false);
|
|
3
|
+
getIsJoined = () => {
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
5
|
+
const handler = this;
|
|
6
|
+
return Promise.resolve({
|
|
7
|
+
get isJoined() {
|
|
8
|
+
return handler.isJoined;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
join = () => {
|
|
13
|
+
this.isJoined = true;
|
|
14
|
+
};
|
|
15
|
+
leave = () => {
|
|
16
|
+
this.isJoined = false;
|
|
17
|
+
};
|
|
18
|
+
viewMembersList = () => {
|
|
19
|
+
console.warn('MockMembershipHandler.viewMembersList called');
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface IMediaCenterMembershipHandler {
|
|
2
|
+
getIsJoined: () => PromiseLike<{
|
|
3
|
+
readonly isJoined: boolean;
|
|
4
|
+
}>;
|
|
5
|
+
join: () => PromiseLike<void>;
|
|
6
|
+
leave: () => PromiseLike<void>;
|
|
7
|
+
viewMembersList: () => PromiseLike<void>;
|
|
8
|
+
}
|
|
9
|
+
type PromiseLike<T> = T | Promise<T>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type MediaCenterState = PostsFeedState | StreamsFeedState | DiscoverState | MomentsState;
|
|
2
|
+
export type PostsFeedState = {
|
|
3
|
+
mode: 'posts-feed';
|
|
4
|
+
postId: string;
|
|
5
|
+
categoryId: string | null;
|
|
6
|
+
};
|
|
7
|
+
export type StreamsFeedState = {
|
|
8
|
+
mode: 'streams-feed';
|
|
9
|
+
streamId: string;
|
|
10
|
+
categoryId: string | null;
|
|
11
|
+
};
|
|
12
|
+
export type DiscoverState = {
|
|
13
|
+
mode: 'discover';
|
|
14
|
+
categoryId: string | null;
|
|
15
|
+
};
|
|
16
|
+
export type MomentsState = {
|
|
17
|
+
mode: 'moments';
|
|
18
|
+
momentId: string;
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MediaCenterState } from './media-center-state';
|
|
2
|
+
import type { IMediaCenterNavigationHandler } from './types';
|
|
3
|
+
export declare class MockNavigationHandler implements IMediaCenterNavigationHandler {
|
|
4
|
+
initialState: undefined;
|
|
5
|
+
onChange: (state: MediaCenterState) => void;
|
|
6
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -8,18 +8,24 @@
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { MediaCenterProxy } from '../media-center/media-center';
|
|
11
|
+
import { MediaCenterSettings } from '../media-center/media-center/media-center-settings.svelte';
|
|
11
12
|
import { CloseOrchestrator } from '../ui/player/close-orchestrator';
|
|
12
13
|
import { createShadowRoot } from '../ui/shadow-dom';
|
|
13
14
|
import { mount, unmount } from 'svelte';
|
|
14
|
-
let {
|
|
15
|
+
let { dataProvider, settings, dynamicActions } = $props();
|
|
16
|
+
const settingsHolder = new MediaCenterSettings(settings);
|
|
17
|
+
$effect(() => {
|
|
18
|
+
settingsHolder.patch(settings);
|
|
19
|
+
});
|
|
15
20
|
const initHost = (node) => {
|
|
16
21
|
const shadowRoot = createShadowRoot(node);
|
|
17
22
|
const mounted = mount(MediaCenterProxy, {
|
|
18
23
|
target: shadowRoot,
|
|
19
24
|
props: {
|
|
20
|
-
|
|
21
|
-
settings,
|
|
22
|
-
modeProps,
|
|
25
|
+
dataProvider,
|
|
26
|
+
settings: settingsHolder,
|
|
27
|
+
modeProps: { mode: 'default' },
|
|
28
|
+
dynamicActions,
|
|
23
29
|
closeOrchestrator: new CloseOrchestrator({
|
|
24
30
|
closeFn: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
25
31
|
yield unmount(mounted);
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { IMediaCenterDataProvider } from '../media-center';
|
|
2
|
+
import type { IMediaCenterSettings } from '../media-center/media-center/types';
|
|
3
|
+
import { type Snippet } from 'svelte';
|
|
3
4
|
type Props = {
|
|
4
|
-
|
|
5
|
-
settings?:
|
|
6
|
-
|
|
5
|
+
dataProvider: IMediaCenterDataProvider;
|
|
6
|
+
settings?: IMediaCenterSettings;
|
|
7
|
+
dynamicActions?: Snippet;
|
|
7
8
|
};
|
|
8
9
|
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
9
10
|
type Cmp = ReturnType<typeof Cmp>;
|