@streamscloud/embeddable 11.0.0 → 12.1.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 -4
- package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +2 -0
- package/dist/content-player/cmp.content-player.svelte +63 -128
- package/dist/content-player/content-player-config.svelte.d.ts +3 -10
- package/dist/content-player/content-player-config.svelte.js +3 -21
- package/dist/content-player/content-player-settings.d.ts +7 -21
- package/dist/content-player/content-player-settings.js +0 -4
- package/dist/content-player/controls-and-attachments.svelte +39 -5
- package/dist/content-player/overview-panel.svelte +14 -6
- package/dist/content-player/overview-panel.svelte.d.ts +5 -1
- package/dist/content-player/ui-manager.svelte.d.ts +0 -2
- package/dist/content-player/ui-manager.svelte.js +0 -2
- package/dist/media-center/config/internal-media-center-config.d.ts +7 -3
- package/dist/media-center/config/internal-media-center-config.js +28 -24
- package/dist/media-center/config/operations.generated.d.ts +36 -23
- package/dist/media-center/config/operations.generated.js +53 -33
- package/dist/media-center/config/operations.graphql +34 -21
- package/dist/media-center/config/types.d.ts +13 -2
- package/dist/media-center/media-center/cmp.media-center.svelte +195 -149
- package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +2 -19
- package/dist/media-center/media-center/discover/data-loading.d.ts +8 -0
- package/dist/media-center/media-center/discover/data-loading.js +35 -0
- package/dist/media-center/media-center/discover/discover-header-localization.d.ts +6 -0
- package/dist/media-center/media-center/discover/discover-header-localization.js +15 -0
- package/dist/media-center/media-center/discover/discover-header.svelte +214 -0
- package/dist/media-center/media-center/discover/discover-header.svelte.d.ts +9 -0
- package/dist/media-center/media-center/discover/discover-view-handler.svelte.d.ts +28 -0
- package/dist/media-center/media-center/discover/discover-view-handler.svelte.js +101 -0
- package/dist/media-center/media-center/discover/discover-view-localization.d.ts +6 -0
- package/dist/media-center/media-center/discover/discover-view-localization.js +15 -0
- package/dist/media-center/media-center/discover/discover-view.svelte +238 -0
- package/dist/media-center/media-center/discover/{discover-panel.svelte.d.ts → discover-view.svelte.d.ts} +4 -4
- package/dist/media-center/media-center/discover/index.d.ts +2 -2
- package/dist/media-center/media-center/discover/index.js +2 -2
- package/dist/media-center/media-center/discover/types.svelte.d.ts +20 -0
- package/dist/media-center/media-center/discover/types.svelte.js +20 -0
- package/dist/media-center/media-center/feed/feed-handler.svelte.d.ts +50 -0
- package/dist/media-center/media-center/feed/feed-handler.svelte.js +84 -0
- package/dist/media-center/media-center/feed/feed-providers-generator.d.ts +11 -0
- package/dist/media-center/media-center/feed/feed-providers-generator.js +79 -0
- package/dist/media-center/media-center/feed/index.d.ts +1 -0
- package/dist/media-center/media-center/feed/index.js +1 -0
- package/dist/media-center/media-center/feed/types.d.ts +12 -0
- package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +29 -10
- package/dist/media-center/media-center/handlers/categories-handler.svelte.js +25 -7
- package/dist/media-center/media-center/handlers/index.d.ts +2 -1
- package/dist/media-center/media-center/handlers/index.js +1 -1
- package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.d.ts +19 -0
- package/dist/media-center/media-center/handlers/media-center-settings-handler.svelte.js +26 -0
- package/dist/media-center/media-center/header-footer/media-center-footer.svelte +4 -8
- package/dist/media-center/media-center/header-footer/media-center-header-localization.d.ts +1 -0
- package/dist/media-center/media-center/header-footer/media-center-header-localization.js +6 -0
- package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte +25 -36
- package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte.d.ts +2 -1
- package/dist/media-center/media-center/header-footer/media-center-header.svelte +14 -11
- package/dist/media-center/media-center/header-footer/media-center-header.svelte.d.ts +1 -2
- package/dist/media-center/media-center/media-center-context.svelte.d.ts +31 -13
- package/dist/media-center/media-center/media-center-context.svelte.js +71 -35
- package/dist/media-center/media-center/menu/menu-localization.d.ts +2 -11
- package/dist/media-center/media-center/menu/menu-localization.js +6 -45
- package/dist/media-center/media-center/menu/menu.svelte +94 -93
- package/dist/media-center/media-center/menu/menu.svelte.d.ts +1 -1
- package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +1 -1
- package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +0 -3
- package/dist/media-center/media-center/moments/cmp.moments-circle.svelte +41 -0
- package/dist/media-center/media-center/moments/cmp.moments-circle.svelte.d.ts +7 -0
- 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/streams-in-category/streams-in-category-panel-handler.svelte.d.ts +1 -1
- package/dist/media-center/media-center/streams-in-category/streams-in-category-panel-handler.svelte.js +1 -1
- package/dist/media-center/media-center/types.d.ts +44 -1
- package/dist/media-page/index.d.ts +121 -0
- package/dist/media-page/index.js +43 -0
- package/dist/posts/attachments/cmp.attachments.svelte +1 -0
- package/dist/posts/controls/cmp.controls.svelte +50 -13
- package/dist/posts/data-loaders/operations.generated.d.ts +4 -0
- package/dist/posts/data-loaders/operations.generated.js +6 -2
- package/dist/posts/model/types.d.ts +2 -0
- package/dist/posts/post-viewer/cmp.post-viewer.svelte +26 -18
- package/dist/posts/post-viewer/mapper.js +2 -0
- package/dist/posts/post-viewer/operations.generated.d.ts +2 -0
- package/dist/posts/post-viewer/operations.generated.js +3 -1
- package/dist/posts/post-viewer/operations.graphql +2 -0
- package/dist/posts/post-viewer/post-texts.svelte +3 -3
- package/dist/posts/posts-player/cmp.posts-player.svelte +20 -6
- package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +18 -2
- package/dist/posts/posts-player/index.d.ts +18 -3
- package/dist/posts/posts-player/index.js +42 -89
- package/dist/posts/posts-player/posts-player-proxy.svelte +19 -0
- package/dist/posts/posts-player/posts-player-proxy.svelte.d.ts +22 -0
- package/dist/posts/posts-player/posts-player-view.svelte +20 -34
- package/dist/posts/posts-player/posts-player-view.svelte.d.ts +2 -6
- package/dist/posts/posts-player/types.d.ts +19 -6
- package/dist/products/product-card/cmp.product-card.svelte +5 -5
- package/dist/products/product-card/cmp.product-card.svelte.d.ts +1 -1
- package/dist/short-videos/short-video-card/cmp.short-video-card.svelte +160 -19
- package/dist/short-videos/short-video-card/cmp.short-video-card.svelte.d.ts +2 -1
- package/dist/short-videos/short-video-card/localization.d.ts +5 -0
- package/dist/short-videos/short-video-card/localization.js +13 -0
- package/dist/short-videos/short-video-card/types.d.ts +4 -0
- package/dist/short-videos/short-videos-player/index.js +26 -33
- package/dist/streams/layout/element-views/cmp.stream-element.svelte +2 -2
- package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte +7 -3
- package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte.d.ts +2 -0
- package/dist/streams/layout/element-views/cmp.text-stream-element.svelte +7 -3
- package/dist/streams/layout/element-views/cmp.text-stream-element.svelte.d.ts +2 -0
- package/dist/streams/layout/element-views/price-element-view.svelte +2 -2
- package/dist/streams/layout/element-views/price-stream-element-localization.d.ts +1 -1
- package/dist/streams/layout/element-views/price-stream-element-localization.js +2 -2
- package/dist/streams/layout/models/mapper.js +2 -0
- package/dist/streams/streams-player/index.d.ts +21 -2
- package/dist/streams/streams-player/index.js +49 -24
- package/dist/streams/streams-player/stream-overview.svelte +1 -1
- package/dist/streams/streams-player/streams-player-buffer.svelte.d.ts +1 -3
- package/dist/streams/streams-player/streams-player-buffer.svelte.js +2 -2
- package/dist/streams/streams-player/streams-player-view.svelte +25 -21
- package/dist/streams/streams-player/streams-player-view.svelte.d.ts +1 -5
- package/dist/streams/streams-player/types.d.ts +18 -4
- package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte +119 -0
- package/dist/ui/line-clamp/cmp.line-clamp-auto.svelte.d.ts +10 -0
- package/dist/ui/line-clamp/cmp.line-clamp.svelte +44 -72
- package/dist/ui/line-clamp/cmp.line-clamp.svelte.d.ts +3 -4
- package/dist/ui/line-clamp/index.d.ts +1 -0
- package/dist/ui/line-clamp/index.js +1 -0
- package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte +44 -0
- package/dist/ui/player/button/cmp.mobile-player-buttons-group.svelte.d.ts +7 -0
- package/dist/ui/player/button/cmp.player-button.svelte +0 -1
- package/dist/ui/player/button/cmp.player-buttons-group.svelte +15 -11
- package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +1 -1
- package/dist/ui/player/button/index.d.ts +1 -0
- package/dist/ui/player/button/index.js +1 -0
- package/dist/ui/player/button/types.d.ts +0 -2
- package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.d.ts +18 -0
- package/dist/ui/player/close-orchestrator/close-orchestrator.svelte.js +58 -0
- package/dist/ui/player/close-orchestrator/index.d.ts +2 -0
- package/dist/ui/player/close-orchestrator/index.js +1 -0
- package/dist/ui/player/close-orchestrator/types.d.ts +9 -0
- package/dist/ui/player/close-orchestrator/types.js +1 -0
- package/dist/ui/player/colors/index.d.ts +1 -0
- package/dist/ui/player/colors/index.js +1 -0
- package/dist/ui/player/colors/player-colors.d.ts +11 -0
- package/dist/ui/player/colors/player-colors.js +1 -0
- package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.d.ts +2 -6
- package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.js +11 -11
- package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +2 -3
- package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +5 -5
- package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +3 -4
- package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +16 -9
- package/dist/ui/player/providers/service.d.ts +2 -0
- package/dist/ui/player/providers/service.js +13 -0
- package/dist/ui/player/providers/types.d.ts +1 -0
- package/dist/ui/with-background/cmp.with-background.svelte +86 -0
- package/dist/ui/with-background/cmp.with-background.svelte.d.ts +10 -0
- package/dist/ui/with-background/index.d.ts +1 -0
- package/dist/ui/with-background/index.js +1 -0
- package/package.json +5 -1
- package/dist/content-player/fade-mixins.scss +0 -12
- package/dist/content-player/header.svelte +0 -15
- package/dist/content-player/header.svelte.d.ts +0 -28
- package/dist/media-center/media-center/discover/discover-panel-handler.svelte.d.ts +0 -31
- package/dist/media-center/media-center/discover/discover-panel-handler.svelte.js +0 -94
- package/dist/media-center/media-center/discover/discover-panel-localization.d.ts +0 -19
- package/dist/media-center/media-center/discover/discover-panel-localization.js +0 -78
- package/dist/media-center/media-center/discover/discover-panel.svelte +0 -142
- package/dist/media-center/media-center/handlers/feed-handler.svelte.d.ts +0 -6
- package/dist/media-center/media-center/handlers/feed-handler.svelte.js +0 -12
- package/dist/media-center/media-center/providers/index.d.ts +0 -2
- package/dist/media-center/media-center/providers/index.js +0 -2
- package/dist/media-center/media-center/providers/post-player-provider-generator.d.ts +0 -8
- package/dist/media-center/media-center/providers/post-player-provider-generator.js +0 -32
- package/dist/media-center/media-center/providers/streams-player-provider-generator.d.ts +0 -8
- package/dist/media-center/media-center/providers/streams-player-provider-generator.js +0 -36
- package/dist/media-center/model/types.d.ts +0 -17
- /package/dist/media-center/{model → media-center/feed}/types.js +0 -0
|
@@ -4,17 +4,18 @@ import { StreamCard } from '../../../streams/stream-card';
|
|
|
4
4
|
import { Icon } from '../../../ui/icon';
|
|
5
5
|
import { ImageRound } from '../../../ui/image';
|
|
6
6
|
import { LineClamp } from '../../../ui/line-clamp';
|
|
7
|
+
import { MomentsCircle } from '../moments';
|
|
7
8
|
import { default as ButtonWrapper } from './category-following-wrapper.svelte';
|
|
8
9
|
import { MenuLocalization } from './menu-localization';
|
|
9
10
|
import IconChevronDownFilled from '@fluentui/svg-icons/icons/chevron_down_20_filled.svg?raw';
|
|
10
11
|
import IconChevronRightFilled from '@fluentui/svg-icons/icons/chevron_right_20_filled.svg?raw';
|
|
11
12
|
import { slide } from 'svelte/transition';
|
|
12
|
-
let { context, locale, on } = $props();
|
|
13
|
+
let { context, locale = 'en', on } = $props();
|
|
13
14
|
const localization = $derived(new MenuLocalization(locale));
|
|
14
15
|
const target = $derived.by(() => context.targetData);
|
|
15
16
|
const generateCategoriesMap = () => {
|
|
16
17
|
const expanded = {};
|
|
17
|
-
context.categoriesHandler.
|
|
18
|
+
context.categoriesHandler.categoriesGrouped.forEach((c) => {
|
|
18
19
|
const isSelfSelected = context.categoriesHandler.selectedCategoryId === c.id;
|
|
19
20
|
const hasSelectedChild = c.children.some((ch) => ch.id === context.categoriesHandler.selectedCategoryId);
|
|
20
21
|
expanded[c.id] = isSelfSelected || hasSelectedChild;
|
|
@@ -27,14 +28,11 @@ const handleCategoryExpaned = (e, categoryId) => {
|
|
|
27
28
|
categoriesExpandedMap[categoryId] = !categoriesExpandedMap[categoryId];
|
|
28
29
|
};
|
|
29
30
|
const styles = $derived.by(() => {
|
|
30
|
-
var _a
|
|
31
|
+
var _a;
|
|
31
32
|
const values = [];
|
|
32
33
|
if ((_a = context.playerColors) === null || _a === void 0 ? void 0 : _a.menuBackground) {
|
|
33
34
|
values.push(`--media-center-menu--background-color: ${context.playerColors.menuBackground}`);
|
|
34
35
|
}
|
|
35
|
-
if ((_b = context.playerColors) === null || _b === void 0 ? void 0 : _b.brand) {
|
|
36
|
-
values.push(`--media-center-menu--brand-color: ${context.playerColors.brand}`);
|
|
37
|
-
}
|
|
38
36
|
return values.join(';');
|
|
39
37
|
});
|
|
40
38
|
</script>
|
|
@@ -43,16 +41,16 @@ const styles = $derived.by(() => {
|
|
|
43
41
|
{#if target}
|
|
44
42
|
<div class="media-center-target">
|
|
45
43
|
<div class="media-center-target__image">
|
|
46
|
-
<
|
|
44
|
+
<MomentsCircle context={context} />
|
|
47
45
|
</div>
|
|
48
46
|
<div class="media-center-target__info">
|
|
49
47
|
<div class="media-center-target__name">
|
|
50
|
-
<LineClamp maxLines={1}>
|
|
48
|
+
<LineClamp maxLines={1} locale={locale}>
|
|
51
49
|
{target.name}
|
|
52
50
|
</LineClamp>
|
|
53
51
|
</div>
|
|
54
52
|
{#if target.membersCount}
|
|
55
|
-
<LineClamp maxLines={1}>
|
|
53
|
+
<LineClamp maxLines={1} locale={locale}>
|
|
56
54
|
<div class="media-center-target__members">
|
|
57
55
|
<span class="media-center-target__members-count">
|
|
58
56
|
{compactNumber(target.membersCount, { locale: localization.locale })}
|
|
@@ -71,61 +69,58 @@ const styles = $derived.by(() => {
|
|
|
71
69
|
{localization.interestsSectionTitle}
|
|
72
70
|
</div>
|
|
73
71
|
<div class="media-center-menu__tree">
|
|
74
|
-
|
|
75
|
-
<div class="
|
|
76
|
-
<div class="
|
|
77
|
-
<div
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
72
|
+
<div class="media-center-menu__tree-item">
|
|
73
|
+
<div class="menu-item">
|
|
74
|
+
<div class="menu-item__value">
|
|
75
|
+
<div
|
|
76
|
+
class="menu-item__text"
|
|
77
|
+
class:menu-item__text--active={!context.categoriesHandler.selectedCategoryId}
|
|
78
|
+
onclick={() => context.playRootFeed()}
|
|
79
|
+
onkeydown={() => {}}
|
|
80
|
+
role="button"
|
|
81
|
+
tabindex="0">
|
|
82
|
+
{context.mediaCenterMode === 'discover' ? localization.discoverLabel : localization.feedLabel}
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
{#snippet categoryItem(category: { type: 'main'; value: MediaCenterCategoryModel } | { type: 'child'; value: MediaCenterSubCategoryModel })}
|
|
88
|
+
<div class="menu-item" class:menu-item--child={category.type === 'child'}>
|
|
89
|
+
<div class="menu-item__value" onclick={() => on.categorySelected(category.value.id)} onkeydown={() => {}} role="button" tabindex="0">
|
|
90
|
+
<div class="menu-item__image">
|
|
91
|
+
<ImageRound src={category.value.image} noBorders={true} />
|
|
92
|
+
</div>
|
|
93
|
+
<div class="menu-item__text" class:menu-item__text--active={context.categoriesHandler.selectedCategoryId === category.value.id}>
|
|
94
|
+
{category.value.name}
|
|
90
95
|
</div>
|
|
91
|
-
|
|
92
|
-
<
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
onclick={(e) => handleCategoryExpaned(e, category.id)}>
|
|
97
|
-
{#if categoriesExpandedMap[category.id]}
|
|
98
|
-
<Icon src={IconChevronDownFilled} />
|
|
99
|
-
{:else}
|
|
100
|
-
<Icon src={IconChevronRightFilled} />
|
|
101
|
-
{/if}
|
|
102
|
-
</button>
|
|
103
|
-
</ButtonWrapper>
|
|
96
|
+
{#if category.value.tag}
|
|
97
|
+
<div class="menu-item__tag" style="background-color: {category.value.tag.backgroundColor}; color: {category.value.tag.fontColor};">
|
|
98
|
+
{category.value.tag.text}
|
|
99
|
+
</div>
|
|
100
|
+
{/if}
|
|
104
101
|
</div>
|
|
102
|
+
<ButtonWrapper categoryId={category.value.id} followingHandler={context.categoryFollowingHandler} invertedOrientation={true}>
|
|
103
|
+
<button
|
|
104
|
+
type="button"
|
|
105
|
+
class="menu-item__collapser"
|
|
106
|
+
class:menu-item__collapser--hidden={category.type === 'child' || !category.value.children.length}
|
|
107
|
+
onclick={(e) => handleCategoryExpaned(e, category.value.id)}>
|
|
108
|
+
{#if categoriesExpandedMap[category.value.id]}
|
|
109
|
+
<Icon src={IconChevronDownFilled} />
|
|
110
|
+
{:else}
|
|
111
|
+
<Icon src={IconChevronRightFilled} />
|
|
112
|
+
{/if}
|
|
113
|
+
</button>
|
|
114
|
+
</ButtonWrapper>
|
|
115
|
+
</div>
|
|
116
|
+
{/snippet}
|
|
117
|
+
{#each context.categoriesHandler.categoriesGrouped as category (category.id)}
|
|
118
|
+
<div class="media-center-menu__tree-item">
|
|
119
|
+
{@render categoryItem({ type: 'main', value: category })}
|
|
105
120
|
{#if categoriesExpandedMap[category.id]}
|
|
106
121
|
<div class="media-center-menu__tree-item" transition:slide|local>
|
|
107
122
|
{#each category.children as subcategory (subcategory.id)}
|
|
108
|
-
|
|
109
|
-
<div class="selector-item__value">
|
|
110
|
-
<div class="selector-item__image">
|
|
111
|
-
<ImageRound src={subcategory.image} noBorders={true} />
|
|
112
|
-
</div>
|
|
113
|
-
<div
|
|
114
|
-
class="selector-item__text"
|
|
115
|
-
class:selector-item__text--active={!context.discoverHandler.activated && context.categoriesHandler.selectedCategoryId === subcategory.id}
|
|
116
|
-
onclick={() => on.categorySelected(subcategory.id)}
|
|
117
|
-
onkeydown={() => {}}
|
|
118
|
-
role="button"
|
|
119
|
-
tabindex="0">
|
|
120
|
-
{subcategory.name}
|
|
121
|
-
</div>
|
|
122
|
-
</div>
|
|
123
|
-
<ButtonWrapper categoryId={subcategory.id} followingHandler={context.categoryFollowingHandler} invertedOrientation={true}>
|
|
124
|
-
<button type="button" class="selector-item__collapser selector-item__collapser--hidden">
|
|
125
|
-
<Icon src={IconChevronRightFilled} />
|
|
126
|
-
</button>
|
|
127
|
-
</ButtonWrapper>
|
|
128
|
-
</div>
|
|
123
|
+
{@render categoryItem({ type: 'child', value: subcategory })}
|
|
129
124
|
{/each}
|
|
130
125
|
</div>
|
|
131
126
|
{/if}
|
|
@@ -161,7 +156,6 @@ const styles = $derived.by(() => {
|
|
|
161
156
|
}
|
|
162
157
|
.media-center-menu {
|
|
163
158
|
--_media-center-menu--background-color: var(--media-center-menu--background-color, rgb(from #000000 r g b / 95%));
|
|
164
|
-
--_media-center-menu--brand-color: var(--media-center-menu--brand-color, #00b8d8);
|
|
165
159
|
background: var(--_media-center-menu--background-color);
|
|
166
160
|
height: 100%;
|
|
167
161
|
min-height: 100%;
|
|
@@ -213,19 +207,19 @@ const styles = $derived.by(() => {
|
|
|
213
207
|
.media-center-menu__section-title {
|
|
214
208
|
font-size: 1.125rem;
|
|
215
209
|
line-height: 1.75rem;
|
|
216
|
-
font-weight:
|
|
210
|
+
font-weight: 500;
|
|
217
211
|
color: #ffffff;
|
|
218
212
|
}
|
|
219
213
|
.media-center-menu__tree {
|
|
220
214
|
display: flex;
|
|
221
215
|
flex-direction: column;
|
|
222
216
|
flex: 1;
|
|
223
|
-
gap:
|
|
217
|
+
gap: 0.5rem;
|
|
224
218
|
}
|
|
225
219
|
.media-center-menu__tree-item {
|
|
226
220
|
display: flex;
|
|
227
221
|
flex-direction: column;
|
|
228
|
-
gap: 0.
|
|
222
|
+
gap: 0.25rem;
|
|
229
223
|
}
|
|
230
224
|
.media-center-menu__popular-streams-section {
|
|
231
225
|
display: flex;
|
|
@@ -241,63 +235,73 @@ const styles = $derived.by(() => {
|
|
|
241
235
|
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
242
236
|
}
|
|
243
237
|
|
|
244
|
-
.
|
|
238
|
+
.menu-item {
|
|
245
239
|
display: flex;
|
|
246
240
|
-webkit-user-drag: none;
|
|
247
241
|
user-select: none;
|
|
248
242
|
height: 2.25rem;
|
|
249
|
-
--
|
|
250
|
-
--
|
|
251
|
-
--_selector-item--image--size: 1.5rem;
|
|
243
|
+
--_menu-item--text--font-size: 0.9375rem;
|
|
244
|
+
--_menu-item--image--size: 1.5rem;
|
|
252
245
|
}
|
|
253
|
-
.
|
|
246
|
+
.menu-item :global([contenteditable]) {
|
|
254
247
|
user-select: text;
|
|
255
248
|
}
|
|
256
|
-
.
|
|
249
|
+
.menu-item--child {
|
|
257
250
|
height: 2.125rem;
|
|
258
251
|
padding-left: 1.25rem;
|
|
259
|
-
--
|
|
260
|
-
--
|
|
261
|
-
--_selector-item--image--size: 1.375rem;
|
|
252
|
+
--_menu-item--text--font-size: 0.875rem;
|
|
253
|
+
--_menu-item--image--size: 1.375rem;
|
|
262
254
|
}
|
|
263
|
-
.
|
|
255
|
+
.menu-item__value {
|
|
264
256
|
display: flex;
|
|
265
257
|
align-items: center;
|
|
266
258
|
flex: 1;
|
|
267
|
-
gap: 0.75rem;
|
|
268
259
|
min-width: 0;
|
|
269
260
|
cursor: pointer;
|
|
270
261
|
}
|
|
271
|
-
.
|
|
272
|
-
width: var(--
|
|
273
|
-
min-width: var(--
|
|
274
|
-
max-width: var(--
|
|
275
|
-
height: var(--
|
|
276
|
-
min-height: var(--
|
|
277
|
-
max-height: var(--
|
|
262
|
+
.menu-item__image {
|
|
263
|
+
width: var(--_menu-item--image--size);
|
|
264
|
+
min-width: var(--_menu-item--image--size);
|
|
265
|
+
max-width: var(--_menu-item--image--size);
|
|
266
|
+
height: var(--_menu-item--image--size);
|
|
267
|
+
min-height: var(--_menu-item--image--size);
|
|
268
|
+
max-height: var(--_menu-item--image--size);
|
|
269
|
+
margin-right: 0.75rem;
|
|
278
270
|
}
|
|
279
|
-
.
|
|
280
|
-
flex: 1;
|
|
271
|
+
.menu-item__text {
|
|
281
272
|
max-width: 100%;
|
|
282
273
|
color: #ffffff;
|
|
283
|
-
font-size: var(--
|
|
284
|
-
font-weight:
|
|
274
|
+
font-size: var(--_menu-item--text--font-size);
|
|
275
|
+
font-weight: 400;
|
|
285
276
|
text-align: left;
|
|
286
277
|
text-overflow: ellipsis;
|
|
287
278
|
width: 100%;
|
|
288
279
|
white-space: nowrap;
|
|
289
280
|
overflow: hidden;
|
|
290
|
-
transition: text-shadow 120ms ease;
|
|
291
281
|
}
|
|
292
|
-
.
|
|
293
|
-
|
|
282
|
+
.menu-item__text {
|
|
283
|
+
width: max-content;
|
|
284
|
+
}
|
|
285
|
+
.menu-item__text:hover, .menu-item__text--active {
|
|
286
|
+
font-weight: 600;
|
|
287
|
+
letter-spacing: -0.5px;
|
|
288
|
+
}
|
|
289
|
+
.menu-item__tag {
|
|
290
|
+
height: min-content;
|
|
291
|
+
width: min-content;
|
|
292
|
+
border-radius: 0.25rem;
|
|
293
|
+
padding: 0.3125rem 0.375rem;
|
|
294
|
+
font-size: 0.5rem;
|
|
295
|
+
font-weight: 600;
|
|
296
|
+
margin-top: -1rem;
|
|
297
|
+
margin-left: 0.25rem;
|
|
294
298
|
}
|
|
295
|
-
.
|
|
299
|
+
.menu-item__collapser {
|
|
296
300
|
--icon--color: #ffffff;
|
|
297
301
|
--icon--size: 1rem;
|
|
298
302
|
padding: 0.5rem;
|
|
299
303
|
}
|
|
300
|
-
.
|
|
304
|
+
.menu-item__collapser--hidden {
|
|
301
305
|
visibility: hidden;
|
|
302
306
|
}
|
|
303
307
|
|
|
@@ -313,9 +317,6 @@ const styles = $derived.by(() => {
|
|
|
313
317
|
height: 3.5rem;
|
|
314
318
|
min-height: 3.5rem;
|
|
315
319
|
max-height: 3.5rem;
|
|
316
|
-
--image--rounded--inner--border-width: 1px;
|
|
317
|
-
--image--rounded--outer--border-color: var(--_media-center-menu--brand-color);
|
|
318
|
-
--image--rounded--outer--border-width: 2px;
|
|
319
320
|
}
|
|
320
321
|
.media-center-target__info {
|
|
321
322
|
display: flex;
|
|
@@ -3,7 +3,7 @@ import type { StreamPlayerModel } from '../../../streams/streams-player';
|
|
|
3
3
|
import type { MediaCenterContext } from '../media-center-context.svelte';
|
|
4
4
|
type Props = {
|
|
5
5
|
context: MediaCenterContext;
|
|
6
|
-
locale
|
|
6
|
+
locale?: Locale;
|
|
7
7
|
on: {
|
|
8
8
|
categorySelected: (categoryId: string) => void;
|
|
9
9
|
streamSelected: (stream: StreamPlayerModel) => void;
|
|
@@ -4,7 +4,7 @@ export declare class PopularStreamsPanelHandler {
|
|
|
4
4
|
private readonly config;
|
|
5
5
|
private _state;
|
|
6
6
|
private _streams;
|
|
7
|
-
constructor(config: IMediaCenterConfig
|
|
7
|
+
constructor(config: IMediaCenterConfig);
|
|
8
8
|
get streamSectionItems(): StreamPlayerModel[];
|
|
9
9
|
init: () => Promise<void>;
|
|
10
10
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script lang="ts">import { ImageRound } from '../../../ui/image';
|
|
2
|
+
let { context } = $props();
|
|
3
|
+
const styles = $derived.by(() => {
|
|
4
|
+
var _a;
|
|
5
|
+
const values = [];
|
|
6
|
+
if ((_a = context.playerColors) === null || _a === void 0 ? void 0 : _a.brand) {
|
|
7
|
+
values.push(`--moments-circle--brand-color: ${context.playerColors.brand}`);
|
|
8
|
+
}
|
|
9
|
+
return values.join(';');
|
|
10
|
+
});
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<div class="moments-circle" style={styles}>
|
|
14
|
+
{#if context.targetData}
|
|
15
|
+
<ImageRound src={context.targetData.image} />
|
|
16
|
+
{/if}
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<style>@keyframes fadeIn {
|
|
20
|
+
0% {
|
|
21
|
+
opacity: 1;
|
|
22
|
+
}
|
|
23
|
+
50% {
|
|
24
|
+
opacity: 0.4;
|
|
25
|
+
}
|
|
26
|
+
100% {
|
|
27
|
+
opacity: 1;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
.moments-circle {
|
|
31
|
+
--_moments-circle--brand-color: var(--moments-circle--brand-color, #00b8d8);
|
|
32
|
+
width: 6.25%rem;
|
|
33
|
+
min-width: 6.25%rem;
|
|
34
|
+
max-width: 6.25%rem;
|
|
35
|
+
height: 6.25%rem;
|
|
36
|
+
min-height: 6.25%rem;
|
|
37
|
+
max-height: 6.25%rem;
|
|
38
|
+
--image--rounded--inner--border-width: 1px;
|
|
39
|
+
--image--rounded--outer--border-color: var(--_moments-circle--brand-color);
|
|
40
|
+
--image--rounded--outer--border-width: 2px;
|
|
41
|
+
}</style>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as MomentsCircle } from './cmp.moments-circle.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as MomentsCircle } from './cmp.moments-circle.svelte';
|
|
@@ -8,7 +8,7 @@ export declare class StreamsInCategoryPanelHandler {
|
|
|
8
8
|
private _categoryId;
|
|
9
9
|
private _categoryName;
|
|
10
10
|
private _streams;
|
|
11
|
-
constructor(config: IMediaCenterConfig
|
|
11
|
+
constructor(config: IMediaCenterConfig);
|
|
12
12
|
get streamSectionItems(): StreamPlayerModel[];
|
|
13
13
|
get categoryId(): string;
|
|
14
14
|
get categoryName(): string;
|
|
@@ -27,7 +27,7 @@ export class StreamsInCategoryPanelHandler {
|
|
|
27
27
|
return this._activated && this._state === 'loading';
|
|
28
28
|
}
|
|
29
29
|
activate = async (categoryData) => {
|
|
30
|
-
if (!this.
|
|
30
|
+
if (!categoryData || this.categoryId === categoryData.id) {
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
33
|
this._activated = true;
|
|
@@ -1,7 +1,50 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
2
|
+
import type { IMediaCenterConfig } from '../config/types';
|
|
3
|
+
import type { PostPlayerModel, PostsPlayerProps } from '../../posts/posts-player/types';
|
|
4
|
+
import type { IStreamsPlayerDataProvider, StreamAmplificationParameters, StreamsPlayerProps } from '../../streams/streams-player/types';
|
|
5
|
+
import type { ICloseOrchestrator } from '../../ui/player/close-orchestrator';
|
|
6
|
+
import type { IPlayerDataProvider } from '../../ui/player/providers';
|
|
7
|
+
export type MediaCenterMode = 'feed' | 'discover';
|
|
2
8
|
export type MediaCenterCategoryData = {
|
|
3
9
|
id: string;
|
|
4
10
|
name: string;
|
|
5
11
|
parentId: string | undefined;
|
|
6
12
|
parentName: string | undefined;
|
|
7
13
|
};
|
|
14
|
+
export type MediaCenterProps = {
|
|
15
|
+
config: IMediaCenterConfig;
|
|
16
|
+
settings?: MediaCenterSettings;
|
|
17
|
+
modeProps: MediaCenterModeProps;
|
|
18
|
+
closeOrchestrator: ICloseOrchestrator;
|
|
19
|
+
};
|
|
20
|
+
export type MediaCenterModeProps = {
|
|
21
|
+
mode: 'posts';
|
|
22
|
+
props: {
|
|
23
|
+
dataProvider: IPlayerDataProvider<PostPlayerModel>;
|
|
24
|
+
onPostActivated?: (id: string) => void;
|
|
25
|
+
};
|
|
26
|
+
} | {
|
|
27
|
+
mode: 'streams';
|
|
28
|
+
props: {
|
|
29
|
+
dataProvider: IStreamsPlayerDataProvider;
|
|
30
|
+
amplificationParameters?: StreamAmplificationParameters;
|
|
31
|
+
onStreamActivated?: (data: {
|
|
32
|
+
title: string;
|
|
33
|
+
image: string | null;
|
|
34
|
+
}) => void;
|
|
35
|
+
};
|
|
36
|
+
} | {
|
|
37
|
+
mode: 'discover';
|
|
38
|
+
};
|
|
39
|
+
export type PlayerProps = {
|
|
40
|
+
type: 'posts';
|
|
41
|
+
props: PostsPlayerProps;
|
|
42
|
+
} | {
|
|
43
|
+
type: 'streams';
|
|
44
|
+
props: StreamsPlayerProps;
|
|
45
|
+
};
|
|
46
|
+
export type MediaCenterSettings = {
|
|
47
|
+
locale?: Locale;
|
|
48
|
+
showStreamsCloudWatermark?: boolean;
|
|
49
|
+
disableBackground?: boolean;
|
|
50
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { Locale } from '../core/locale';
|
|
2
|
+
import { type IMediaCenterConfig } from '../media-center/config/types';
|
|
3
|
+
export type { IMediaCenterConfig };
|
|
4
|
+
export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
|
|
5
|
+
/**
|
|
6
|
+
* Opens the media page modal.
|
|
7
|
+
*
|
|
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
|
+
* @param init Configuration options.
|
|
13
|
+
*
|
|
14
|
+
* Config mode (overload 1)
|
|
15
|
+
* @param {IMediaCenterConfig} init.mediaCenterConfig
|
|
16
|
+
* Configuration for the media center.
|
|
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
|
+
* Common (optional)
|
|
27
|
+
* @param {MediaPageViewerSettings} [init.viewerSettings]
|
|
28
|
+
* Viewer UI and behavior settings.
|
|
29
|
+
*
|
|
30
|
+
* Fields of MediaPageViewerSettings:
|
|
31
|
+
* - {boolean} [disableBackground]
|
|
32
|
+
* If true , hides the viewer background image.
|
|
33
|
+
* - {Locale} [locale='en']
|
|
34
|
+
* Localization for the viewer UI. Supported values: 'en' | 'no'.
|
|
35
|
+
* If omitted, the default locale 'en' is used.
|
|
36
|
+
* - {boolean} [showStreamsCloudWatermark]
|
|
37
|
+
* If true, shows the StreamsCloud watermark.
|
|
38
|
+
* - {boolean} [hideCloseButton]
|
|
39
|
+
* If true, hides the close button.
|
|
40
|
+
*
|
|
41
|
+
* Events
|
|
42
|
+
* @param {{ closed?: () => void }} [init.on]
|
|
43
|
+
* Optional event handlers.
|
|
44
|
+
* @param {() => void} [init.on.closed]
|
|
45
|
+
* Called after the modal is fully closed (after unmount and removal from the DOM).
|
|
46
|
+
*
|
|
47
|
+
* Notes
|
|
48
|
+
* - If neither mediaCenterConfig nor id is specified, a warning is shown and the modal is not opened.
|
|
49
|
+
*
|
|
50
|
+
* @returns {void}
|
|
51
|
+
*
|
|
52
|
+
* @example <caption>Config mode</caption>
|
|
53
|
+
* ```ts
|
|
54
|
+
* import {
|
|
55
|
+
* openMediaPageModal,
|
|
56
|
+
* type IMediaCenterConfig,
|
|
57
|
+
* } from '@streamscloud/embeddable/media-page';
|
|
58
|
+
*
|
|
59
|
+
* const mediaCenterConfig: IMediaCenterConfig = {
|
|
60
|
+
* // ...your media center configuration
|
|
61
|
+
* };
|
|
62
|
+
*
|
|
63
|
+
* openMediaPageModal({
|
|
64
|
+
* mediaCenterConfig,
|
|
65
|
+
* viewerSettings: {
|
|
66
|
+
* // Locale defaults to 'en'; set 'no' to switch to Norwegian:
|
|
67
|
+
* locale: 'no',
|
|
68
|
+
* disableBackground: false,
|
|
69
|
+
* hideCloseButton: false,
|
|
70
|
+
* 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,
|
|
93
|
+
* },
|
|
94
|
+
* on: {
|
|
95
|
+
* closed: () => console.log('Media page modal closed'),
|
|
96
|
+
* },
|
|
97
|
+
* });
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export declare function openMediaPageModal(init: {
|
|
101
|
+
mediaCenterConfig: IMediaCenterConfig;
|
|
102
|
+
viewerSettings?: MediaPageViewerSettings;
|
|
103
|
+
on?: {
|
|
104
|
+
closed?: () => void;
|
|
105
|
+
};
|
|
106
|
+
}): void;
|
|
107
|
+
export declare function openMediaPageModal(init: {
|
|
108
|
+
id: string;
|
|
109
|
+
initiator: string;
|
|
110
|
+
graphqlOrigin?: string;
|
|
111
|
+
viewerSettings?: MediaPageViewerSettings;
|
|
112
|
+
on?: {
|
|
113
|
+
closed?: () => void;
|
|
114
|
+
};
|
|
115
|
+
}): void;
|
|
116
|
+
export type MediaPageViewerSettings = {
|
|
117
|
+
disableBackground?: boolean;
|
|
118
|
+
locale?: Locale;
|
|
119
|
+
showStreamsCloudWatermark?: boolean;
|
|
120
|
+
hideCloseButton?: boolean;
|
|
121
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { toastrWarning } from '../core/toastr';
|
|
2
|
+
import { InternalMediaCenterConfig } from '../media-center/config/internal-media-center-config';
|
|
3
|
+
import {} from '../media-center/config/types';
|
|
4
|
+
import { MediaCenter } from '../media-center/media-center';
|
|
5
|
+
import { CloseOrchestrator } from '../ui/player/close-orchestrator';
|
|
6
|
+
import { ModalShadowHost } from '../ui/shadow-dom';
|
|
7
|
+
import { mount, unmount } from 'svelte';
|
|
8
|
+
export { mapToPostPlayerModel } from '../posts/data-loaders/mapper';
|
|
9
|
+
export function openMediaPageModal(init) {
|
|
10
|
+
const { id, graphqlOrigin, initiator, viewerSettings, on } = init;
|
|
11
|
+
let mediaCenterConfig = init.mediaCenterConfig;
|
|
12
|
+
if (!mediaCenterConfig && id) {
|
|
13
|
+
mediaCenterConfig = new InternalMediaCenterConfig({ mediaPageId: id, graphqlOrigin, initiator });
|
|
14
|
+
}
|
|
15
|
+
if (!mediaCenterConfig) {
|
|
16
|
+
toastrWarning('Config is not specified.');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const shadowHost = new ModalShadowHost();
|
|
20
|
+
let mounted = null;
|
|
21
|
+
const makeCloseOrchestrator = () => new CloseOrchestrator({
|
|
22
|
+
closeFn: async () => {
|
|
23
|
+
await unmount(mounted);
|
|
24
|
+
shadowHost.remove();
|
|
25
|
+
if (on?.closed) {
|
|
26
|
+
on.closed();
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
canClose: !viewerSettings?.hideCloseButton
|
|
30
|
+
});
|
|
31
|
+
mounted = mount(MediaCenter, {
|
|
32
|
+
target: shadowHost.shadowRoot,
|
|
33
|
+
props: {
|
|
34
|
+
config: mediaCenterConfig,
|
|
35
|
+
settings: viewerSettings,
|
|
36
|
+
modeProps: {
|
|
37
|
+
mode: 'discover'
|
|
38
|
+
},
|
|
39
|
+
closeOrchestrator: makeCloseOrchestrator()
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
shadowHost.attachToBody();
|
|
43
|
+
}
|