@streamscloud/embeddable 12.1.0 → 13.0.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 +2 -12
- 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/controls-and-attachments.svelte +32 -2
- package/dist/content-player/controls-and-attachments.svelte.d.ts +1 -0
- package/dist/content-player/index.d.ts +1 -0
- package/dist/content-player/index.js +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 +2 -0
- package/dist/core/theme/index.js +1 -0
- package/dist/core/theme/theme-store.svelte.d.ts +6 -0
- package/dist/core/theme/theme-store.svelte.js +10 -0
- 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 +6 -2
- 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 +59 -0
- package/dist/media-center/media-center/cmp.media-center-proxy.svelte.d.ts +15 -0
- 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 +13 -65
- package/dist/media-center/media-center/discover/discover-header.svelte.d.ts +0 -2
- 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/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/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/{header-footer → footer}/media-center-footer.svelte +5 -5
- 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 -5
- package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.js +21 -9
- 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-mobile.svelte +5 -4
- package/dist/media-center/media-center/{header-footer → header}/media-center-header.svelte +138 -35
- package/dist/media-center/media-center/{header-footer → header}/media-center-header.svelte.d.ts +2 -2
- package/dist/media-center/media-center/index.d.ts +2 -1
- package/dist/media-center/media-center/index.js +2 -1
- package/dist/media-center/media-center/media-center-context.svelte.d.ts +16 -20
- package/dist/media-center/media-center/media-center-context.svelte.js +61 -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/{cmp.media-center.svelte → media-center-view.svelte} +65 -108
- package/dist/media-center/media-center/media-center-view.svelte.d.ts +9 -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 +40 -35
- package/dist/media-center/media-center/menu/menu.svelte.d.ts +0 -2
- 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 +24 -7
- 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/streams-in-category/streams-in-category-panel.svelte +2 -3
- package/dist/media-center/media-center/types.d.ts +4 -11
- 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 +45 -0
- package/dist/media-page/cmp.media-page.svelte.d.ts +11 -0
- package/dist/media-page/index.d.ts +42 -58
- package/dist/media-page/index.js +131 -17
- 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 +31 -32
- package/dist/posts/posts-player/index.js +90 -35
- 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/posts/posts-player/posts-player-view.svelte +1 -1
- package/dist/posts/posts-player/types.d.ts +2 -1
- 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/layout/styles-transformer.d.ts +1 -1
- 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 +18 -83
- package/dist/streams/streams-player/index.js +85 -65
- package/dist/streams/streams-player/stream-overview.svelte +1 -1
- package/dist/streams/streams-player/streams-player-buffer.svelte.js +2 -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/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 +6 -143
- 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/index.d.ts +1 -1
- package/dist/ui/player/colors/index.js +1 -1
- package/dist/ui/player/colors/player-colors.d.ts +15 -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 +158 -0
- package/dist/ui/shadow-dom/colors.scss +74 -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 +5 -1
- package/dist/content-player/content-player-settings.d.ts +0 -12
- package/dist/content-player/content-player-settings.js +0 -22
- package/dist/media-center/config/internal-media-center-config.d.ts +0 -14
- package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +0 -4
- 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/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/{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.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.d.ts +0 -0
- /package/dist/ui/{with-background/cmp.with-background.svelte.d.ts → shadow-dom/cmp.shadow-root.svelte.d.ts} +0 -0
|
@@ -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;
|
|
@@ -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,22 +1,14 @@
|
|
|
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
|
-
export type MediaCenterMode = 'feed' | 'discover';
|
|
5
|
+
export type MediaCenterMode = 'feed' | 'discover' | 'moments';
|
|
8
6
|
export type MediaCenterCategoryData = {
|
|
9
7
|
id: string;
|
|
10
8
|
name: string;
|
|
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: {
|
|
@@ -34,7 +26,7 @@ export type MediaCenterModeProps = {
|
|
|
34
26
|
}) => void;
|
|
35
27
|
};
|
|
36
28
|
} | {
|
|
37
|
-
mode: '
|
|
29
|
+
mode: 'default';
|
|
38
30
|
};
|
|
39
31
|
export type PlayerProps = {
|
|
40
32
|
type: 'posts';
|
|
@@ -43,8 +35,9 @@ export type PlayerProps = {
|
|
|
43
35
|
type: 'streams';
|
|
44
36
|
props: StreamsPlayerProps;
|
|
45
37
|
};
|
|
46
|
-
export type
|
|
38
|
+
export type IMediaCenterSettings = {
|
|
47
39
|
locale?: Locale;
|
|
48
40
|
showStreamsCloudWatermark?: boolean;
|
|
49
41
|
disableBackground?: boolean;
|
|
42
|
+
theme?: 'light' | 'dark';
|
|
50
43
|
};
|
|
@@ -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 {};
|
|
@@ -0,0 +1,45 @@
|
|
|
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 { MediaCenterSettings } from '../media-center/media-center/media-center-settings.svelte';
|
|
12
|
+
import { CloseOrchestrator } from '../ui/player/close-orchestrator';
|
|
13
|
+
import { createShadowRoot } from '../ui/shadow-dom';
|
|
14
|
+
import { mount, unmount } from 'svelte';
|
|
15
|
+
let { dataProvider, settings, dynamicActions } = $props();
|
|
16
|
+
const settingsHolder = new MediaCenterSettings(settings);
|
|
17
|
+
$effect(() => {
|
|
18
|
+
settingsHolder.patch(settings);
|
|
19
|
+
});
|
|
20
|
+
const initHost = (node) => {
|
|
21
|
+
const shadowRoot = createShadowRoot(node);
|
|
22
|
+
const mounted = mount(MediaCenterProxy, {
|
|
23
|
+
target: shadowRoot,
|
|
24
|
+
props: {
|
|
25
|
+
dataProvider,
|
|
26
|
+
settings: settingsHolder,
|
|
27
|
+
modeProps: { mode: 'default' },
|
|
28
|
+
dynamicActions,
|
|
29
|
+
closeOrchestrator: new CloseOrchestrator({
|
|
30
|
+
closeFn: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
31
|
+
yield unmount(mounted);
|
|
32
|
+
}),
|
|
33
|
+
canClose: false
|
|
34
|
+
})
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
destroy: () => {
|
|
39
|
+
unmount(mounted);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<div class="streams-player-host" use:initHost></div>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { IMediaCenterDataProvider } from '../media-center';
|
|
2
|
+
import type { IMediaCenterSettings } from '../media-center/media-center/types';
|
|
3
|
+
import { type Snippet } from 'svelte';
|
|
4
|
+
type Props = {
|
|
5
|
+
dataProvider: IMediaCenterDataProvider;
|
|
6
|
+
settings?: IMediaCenterSettings;
|
|
7
|
+
dynamicActions?: Snippet;
|
|
8
|
+
};
|
|
9
|
+
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
10
|
+
type Cmp = ReturnType<typeof Cmp>;
|
|
11
|
+
export default Cmp;
|
|
@@ -1,42 +1,36 @@
|
|
|
1
1
|
import type { Locale } from '../core/locale';
|
|
2
|
-
import { type
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { type IMediaCenterDataProvider } from '../media-center/config/types';
|
|
3
|
+
import type { PostPlayerModel } from '../posts/posts-player';
|
|
4
|
+
import type { IStreamsPlayerDataProvider } from '../streams/streams-player';
|
|
5
|
+
import type { StreamAmplificationParameters } from '../streams/streams-player/types';
|
|
6
|
+
import type { IPlayerDataProvider } from '../ui/player/providers';
|
|
7
|
+
export { default as MediaPage } from './cmp.media-page.svelte';
|
|
8
|
+
export type { IMediaCenterDataProvider };
|
|
5
9
|
/**
|
|
6
10
|
* Opens the media page modal.
|
|
7
11
|
*
|
|
8
|
-
* Two overloads (mutually exclusive; enforced by TypeScript):
|
|
9
|
-
* - Config mode: openMediaPageModal({ mediaCenterConfig, viewerSettings?, on? })
|
|
10
|
-
* - Internal config mode: openMediaPageModal({ id, initiator, graphqlOrigin?, viewerSettings?, on? })
|
|
11
|
-
*
|
|
12
12
|
* @param init Configuration options.
|
|
13
13
|
*
|
|
14
|
-
* Config mode
|
|
15
|
-
* @param {
|
|
14
|
+
* Config mode
|
|
15
|
+
* @param {IMediaCenterDataProvider} init.dataProvider
|
|
16
16
|
* Configuration for the media center.
|
|
17
17
|
*
|
|
18
|
-
* Internal config mode (overload 2)
|
|
19
|
-
* @param {string} init.id
|
|
20
|
-
* Media page ID, used to construct an internal media-center config.
|
|
21
|
-
* @param {string} init.initiator
|
|
22
|
-
* Initiator identifier (used for tracking/analytics and GraphQL).
|
|
23
|
-
* @param {string} [init.graphqlOrigin]
|
|
24
|
-
* Optional GraphQL origin (base URL). If omitted, the default origin is determined internally.
|
|
25
|
-
*
|
|
26
18
|
* Common (optional)
|
|
27
|
-
* @param {
|
|
19
|
+
* @param {Object} [init.viewerSettings]
|
|
28
20
|
* Viewer UI and behavior settings.
|
|
29
21
|
*
|
|
30
|
-
* Fields of
|
|
31
|
-
* - {boolean} [disableBackground]
|
|
32
|
-
* If true
|
|
33
|
-
* - {Locale} [locale
|
|
22
|
+
* Fields of `viewerSettings`:
|
|
23
|
+
* - {boolean} [viewerSettings.disableBackground]
|
|
24
|
+
* If true, hides the viewer background image.
|
|
25
|
+
* - {Locale} [viewerSettings.locale]
|
|
34
26
|
* Localization for the viewer UI. Supported values: 'en' | 'no'.
|
|
35
27
|
* If omitted, the default locale 'en' is used.
|
|
36
|
-
* - {boolean} [showStreamsCloudWatermark]
|
|
28
|
+
* - {boolean} [viewerSettings.showStreamsCloudWatermark]
|
|
37
29
|
* If true, shows the StreamsCloud watermark.
|
|
38
|
-
* - {boolean} [hideCloseButton]
|
|
30
|
+
* - {boolean} [viewerSettings.hideCloseButton]
|
|
39
31
|
* If true, hides the close button.
|
|
32
|
+
* - {'light' | 'dark'} [viewerSettings.theme]
|
|
33
|
+
* Optional theme for the viewer UI.
|
|
40
34
|
*
|
|
41
35
|
* Events
|
|
42
36
|
* @param {{ closed?: () => void }} [init.on]
|
|
@@ -44,52 +38,28 @@ export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
|
|
|
44
38
|
* @param {() => void} [init.on.closed]
|
|
45
39
|
* Called after the modal is fully closed (after unmount and removal from the DOM).
|
|
46
40
|
*
|
|
47
|
-
* Notes
|
|
48
|
-
* - If neither mediaCenterConfig nor id is specified, a warning is shown and the modal is not opened.
|
|
49
|
-
*
|
|
50
41
|
* @returns {void}
|
|
51
42
|
*
|
|
52
43
|
* @example <caption>Config mode</caption>
|
|
53
44
|
* ```ts
|
|
54
45
|
* import {
|
|
55
46
|
* openMediaPageModal,
|
|
56
|
-
* type
|
|
47
|
+
* type IMediaCenterDataProvider
|
|
57
48
|
* } from '@streamscloud/embeddable/media-page';
|
|
58
49
|
*
|
|
59
|
-
* const
|
|
50
|
+
* const dataProvider: IMediaDataProvider= {
|
|
60
51
|
* // ...your media center configuration
|
|
61
52
|
* };
|
|
62
53
|
*
|
|
63
54
|
* openMediaPageModal({
|
|
64
|
-
*
|
|
55
|
+
* dataProvider,
|
|
65
56
|
* viewerSettings: {
|
|
66
|
-
* //
|
|
57
|
+
* // Example: switch to Norwegian (if supported by your Locale type)
|
|
67
58
|
* locale: 'no',
|
|
68
59
|
* disableBackground: false,
|
|
69
60
|
* hideCloseButton: false,
|
|
70
61
|
* showStreamsCloudWatermark: true,
|
|
71
|
-
*
|
|
72
|
-
* on: {
|
|
73
|
-
* closed: () => console.log('Media page modal closed'),
|
|
74
|
-
* },
|
|
75
|
-
* });
|
|
76
|
-
* ```
|
|
77
|
-
*
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
* @example <caption>Internal config mode</caption>
|
|
81
|
-
* ```ts
|
|
82
|
-
* import { openMediaPageModal } from '@streamscloud/embeddable/media-page';
|
|
83
|
-
*
|
|
84
|
-
* openMediaPageModal({
|
|
85
|
-
* id: 'media-page-123',
|
|
86
|
-
* initiator: 'marketing-campaign',
|
|
87
|
-
* graphqlOrigin: 'https://api.example.com',
|
|
88
|
-
* viewerSettings: {
|
|
89
|
-
* locale: 'en',
|
|
90
|
-
* disableBackground: true,
|
|
91
|
-
* hideCloseButton: false,
|
|
92
|
-
* showStreamsCloudWatermark: false,
|
|
62
|
+
* theme: 'dark',
|
|
93
63
|
* },
|
|
94
64
|
* on: {
|
|
95
65
|
* closed: () => console.log('Media page modal closed'),
|
|
@@ -98,19 +68,32 @@ export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
|
|
|
98
68
|
* ```
|
|
99
69
|
*/
|
|
100
70
|
export declare function openMediaPageModal(init: {
|
|
101
|
-
|
|
71
|
+
dataProvider: IMediaCenterDataProvider;
|
|
102
72
|
viewerSettings?: MediaPageViewerSettings;
|
|
103
73
|
on?: {
|
|
104
74
|
closed?: () => void;
|
|
105
75
|
};
|
|
106
76
|
}): void;
|
|
107
|
-
export declare function
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
77
|
+
export declare function openMediaPageModalWithInitialPostsProvider(init: {
|
|
78
|
+
dataProvider: IPlayerDataProvider<PostPlayerModel>;
|
|
79
|
+
mediaCenterDataProvider: IMediaCenterDataProvider;
|
|
80
|
+
viewerSettings?: MediaPageViewerSettings;
|
|
81
|
+
on?: {
|
|
82
|
+
closed?: () => void;
|
|
83
|
+
postActivated?: (id: string) => void;
|
|
84
|
+
};
|
|
85
|
+
}): void;
|
|
86
|
+
export declare function openMediaPageModalWithInitialStreamsProvider(init: {
|
|
87
|
+
dataProvider: IStreamsPlayerDataProvider;
|
|
88
|
+
amplificationParameters?: StreamAmplificationParameters;
|
|
89
|
+
mediaCenterDataProvider: IMediaCenterDataProvider;
|
|
111
90
|
viewerSettings?: MediaPageViewerSettings;
|
|
112
91
|
on?: {
|
|
113
92
|
closed?: () => void;
|
|
93
|
+
streamActivated?: (data: {
|
|
94
|
+
title: string;
|
|
95
|
+
image: string | null;
|
|
96
|
+
}) => void;
|
|
114
97
|
};
|
|
115
98
|
}): void;
|
|
116
99
|
export type MediaPageViewerSettings = {
|
|
@@ -118,4 +101,5 @@ export type MediaPageViewerSettings = {
|
|
|
118
101
|
locale?: Locale;
|
|
119
102
|
showStreamsCloudWatermark?: boolean;
|
|
120
103
|
hideCloseButton?: boolean;
|
|
104
|
+
theme?: 'light' | 'dark';
|
|
121
105
|
};
|