@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
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script lang="ts">import { Icon } from '../../icon';
|
|
2
|
-
let { scaleEffect = false,
|
|
2
|
+
let { scaleEffect = false, activeColor, backgroundColor, actions } = $props();
|
|
3
3
|
const styles = $derived.by(() => {
|
|
4
4
|
const values = [];
|
|
5
|
-
if (
|
|
6
|
-
values.push(`--player-buttons-group--
|
|
5
|
+
if (activeColor) {
|
|
6
|
+
values.push(`--player-buttons-group--active-color: ${activeColor}`);
|
|
7
7
|
}
|
|
8
8
|
if (backgroundColor) {
|
|
9
9
|
values.push(`--player-buttons-group--background-color: ${backgroundColor}`);
|
|
@@ -15,7 +15,7 @@ const styles = $derived.by(() => {
|
|
|
15
15
|
<div class="player-buttons-group" style={styles}>
|
|
16
16
|
{#each actions as action (action.icon)}
|
|
17
17
|
<button type="button" class="player-buttons-group__action" class:player-buttons-group__action--scale-effect={scaleEffect} onclick={action.callback}>
|
|
18
|
-
<span class="player-buttons-group__action-icon"
|
|
18
|
+
<span class="player-buttons-group__action-icon">
|
|
19
19
|
<Icon src={action.icon} color={action.iconColor} />
|
|
20
20
|
</span>
|
|
21
21
|
</button>
|
|
@@ -34,20 +34,18 @@ const styles = $derived.by(() => {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
.player-buttons-group {
|
|
37
|
-
--_player-buttons-group--
|
|
37
|
+
--_player-buttons-group--active-color: var(--player-buttons-group--active-color, rgb(from #000000 r g b / 95%));
|
|
38
38
|
--_player-buttons-group--background-color: var(
|
|
39
39
|
--player-buttons-group--background-color,
|
|
40
|
-
rgb(from var(--_player-buttons-group--
|
|
40
|
+
rgb(from var(--_player-buttons-group--active-color, #000000) r g b / 60%)
|
|
41
41
|
);
|
|
42
42
|
cursor: pointer;
|
|
43
43
|
display: flex;
|
|
44
44
|
flex-direction: column;
|
|
45
45
|
justify-content: center;
|
|
46
|
-
gap: 1.125rem;
|
|
47
|
-
border: 1px solid var(--_player-buttons-group--border-color);
|
|
48
46
|
border-radius: 1.25rem;
|
|
49
47
|
background: var(--_player-buttons-group--background-color);
|
|
50
|
-
padding:
|
|
48
|
+
padding: 0.4375rem 0.0625rem;
|
|
51
49
|
pointer-events: auto;
|
|
52
50
|
/* Set 'container-type: inline-size;' to reference container*/
|
|
53
51
|
}
|
|
@@ -56,11 +54,18 @@ const styles = $derived.by(() => {
|
|
|
56
54
|
display: flex;
|
|
57
55
|
justify-content: center;
|
|
58
56
|
align-items: center;
|
|
57
|
+
padding: 0.5625rem;
|
|
58
|
+
border-radius: 1.25rem;
|
|
59
59
|
--icon--color: #ffffff;
|
|
60
60
|
--icon--size: 1.75rem;
|
|
61
|
+
transition: background-color 0.5s;
|
|
62
|
+
}
|
|
63
|
+
.player-buttons-group__action:hover {
|
|
64
|
+
background-color: var(--_player-buttons-group--active-color);
|
|
61
65
|
}
|
|
62
66
|
.player-buttons-group__action--scale-effect:hover {
|
|
63
67
|
--_player-action--icon-scale: 1.2;
|
|
68
|
+
background-color: transparent;
|
|
64
69
|
}
|
|
65
70
|
.player-buttons-group__action-icon {
|
|
66
71
|
display: block;
|
|
@@ -69,9 +74,8 @@ const styles = $derived.by(() => {
|
|
|
69
74
|
}
|
|
70
75
|
@container (width < 576px) {
|
|
71
76
|
.player-buttons-group {
|
|
72
|
-
gap: 1.125rem;
|
|
73
77
|
border-radius: 0.9375rem;
|
|
74
|
-
padding: 0.
|
|
78
|
+
padding: 0.25rem 0.0625rem;
|
|
75
79
|
}
|
|
76
80
|
.player-buttons-group__action {
|
|
77
81
|
--icon--size: 1.5rem;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { default as PlayerButton } from './cmp.player-button.svelte';
|
|
2
2
|
export { default as PlayerButtonsGroup } from './cmp.player-buttons-group.svelte';
|
|
3
|
+
export { default as MobilePlayerButtonsGroup } from './cmp.mobile-player-buttons-group.svelte';
|
|
3
4
|
export type { PlayerButtonsGroupAction } from './types';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ICloseOrchestrator } from './types';
|
|
2
|
+
export declare class CloseOrchestrator implements ICloseOrchestrator {
|
|
3
|
+
closingInProgress: boolean;
|
|
4
|
+
closed: boolean;
|
|
5
|
+
closeTriggerAttached: boolean;
|
|
6
|
+
private _canClose;
|
|
7
|
+
private _closeFn;
|
|
8
|
+
private _callbacks;
|
|
9
|
+
constructor(init: {
|
|
10
|
+
closeFn: () => void;
|
|
11
|
+
canClose: boolean;
|
|
12
|
+
});
|
|
13
|
+
get closeTriggerVisible(): boolean;
|
|
14
|
+
subscribe: (callback: () => void) => void;
|
|
15
|
+
unsubscribe: (callback: () => void) => void;
|
|
16
|
+
setCloseTriggerAttached: (attached: boolean) => void;
|
|
17
|
+
requestClose: () => Promise<void>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export class CloseOrchestrator {
|
|
2
|
+
closingInProgress = $state(false);
|
|
3
|
+
closed = $state(false);
|
|
4
|
+
// Indicates whether the close trigger (button) is already attached to the DOM, to avoid duplicates
|
|
5
|
+
closeTriggerAttached = $state(false);
|
|
6
|
+
_canClose;
|
|
7
|
+
_closeFn;
|
|
8
|
+
_callbacks = new Set();
|
|
9
|
+
constructor(init) {
|
|
10
|
+
this._closeFn = init.closeFn;
|
|
11
|
+
this._canClose = init.canClose;
|
|
12
|
+
}
|
|
13
|
+
get closeTriggerVisible() {
|
|
14
|
+
return this._canClose;
|
|
15
|
+
}
|
|
16
|
+
subscribe = (callback) => {
|
|
17
|
+
this._callbacks.add(callback);
|
|
18
|
+
};
|
|
19
|
+
unsubscribe = (callback) => {
|
|
20
|
+
this._callbacks.delete(callback);
|
|
21
|
+
};
|
|
22
|
+
setCloseTriggerAttached = (attached) => {
|
|
23
|
+
this.closeTriggerAttached = attached;
|
|
24
|
+
};
|
|
25
|
+
requestClose = async () => {
|
|
26
|
+
// Check if closing is allowed
|
|
27
|
+
if (!this._canClose) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
// Prevent multiple simultaneous close attempts
|
|
31
|
+
if (this.closingInProgress || this.closed) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
this.closingInProgress = true;
|
|
35
|
+
try {
|
|
36
|
+
// Wait for all callbacks to complete
|
|
37
|
+
await Promise.all(Array.from(this._callbacks).map((cb) => cb()));
|
|
38
|
+
// Execute the close function
|
|
39
|
+
this._closeFn();
|
|
40
|
+
// Mark as successfully closed
|
|
41
|
+
this.closed = true;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
// Log error for debugging
|
|
45
|
+
console.error('Error during close operation:', error);
|
|
46
|
+
// Reset the flag to allow retry
|
|
47
|
+
this.closingInProgress = false;
|
|
48
|
+
// Re-throw error for upper-level handling
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
// Clean up the closing flag on success
|
|
53
|
+
if (this.closed) {
|
|
54
|
+
this.closingInProgress = false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { CloseOrchestrator } from './close-orchestrator.svelte';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type ICloseOrchestrator = {
|
|
2
|
+
readonly closingInProgress: boolean;
|
|
3
|
+
readonly closeTriggerVisible: boolean;
|
|
4
|
+
readonly closeTriggerAttached: boolean;
|
|
5
|
+
setCloseTriggerAttached: (attached: boolean) => void;
|
|
6
|
+
subscribe: (callback: () => void) => void;
|
|
7
|
+
unsubscribe: (callback: () => void) => void;
|
|
8
|
+
requestClose: () => void;
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { PlayerColors } from './player-colors';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type PlayerColors = {
|
|
2
|
+
brand: string | null;
|
|
3
|
+
button: string | null;
|
|
4
|
+
buttonInactive: string | null;
|
|
5
|
+
cardButton: string | null;
|
|
6
|
+
cardBackground: string | null;
|
|
7
|
+
playerBackground: string | null;
|
|
8
|
+
price: string | null;
|
|
9
|
+
salePrice: string | null;
|
|
10
|
+
sidebarBackground: string | null;
|
|
11
|
+
} | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -2,14 +2,10 @@ import { PlayerChunk } from './player-chunk.svelte';
|
|
|
2
2
|
import type { IChunksPlayerDataProvider, WithId } from '../types';
|
|
3
3
|
export declare class PlayerChunksManager<TItem extends WithId, TChunk extends WithId> {
|
|
4
4
|
private provider;
|
|
5
|
-
private callbacks;
|
|
6
5
|
private _activeChunkIndex;
|
|
7
6
|
private _loadedChunks;
|
|
8
|
-
private
|
|
9
|
-
constructor(provider: IChunksPlayerDataProvider<TItem, TChunk
|
|
10
|
-
onInitializationFinished: () => void;
|
|
11
|
-
onEndReached: () => void;
|
|
12
|
-
});
|
|
7
|
+
private _fetchDeferred;
|
|
8
|
+
constructor(provider: IChunksPlayerDataProvider<TItem, TChunk>);
|
|
13
9
|
get activeChunk(): PlayerChunk<TItem, TChunk>;
|
|
14
10
|
get loadedChunks(): PlayerChunk<TItem, TChunk>[];
|
|
15
11
|
get flattenedChunkItems(): TItem[];
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
+
import { Deferred } from '../../../../core/deferred';
|
|
1
2
|
import { PlayerChunk } from './player-chunk.svelte';
|
|
2
3
|
const CHUNKS_BUFFER_SIZE = 5;
|
|
3
4
|
const FIXED_START_INDEX = 0;
|
|
4
5
|
export class PlayerChunksManager {
|
|
5
6
|
provider;
|
|
6
|
-
callbacks;
|
|
7
7
|
_activeChunkIndex = $state(-1);
|
|
8
8
|
_loadedChunks = $state.raw([]);
|
|
9
|
-
|
|
10
|
-
constructor(provider
|
|
9
|
+
_fetchDeferred = $state.raw(null);
|
|
10
|
+
constructor(provider) {
|
|
11
11
|
this.provider = provider;
|
|
12
|
-
this.callbacks = callbacks;
|
|
13
12
|
}
|
|
14
13
|
get activeChunk() {
|
|
15
14
|
return this._loadedChunks[this._activeChunkIndex] ?? null;
|
|
@@ -34,12 +33,10 @@ export class PlayerChunksManager {
|
|
|
34
33
|
return itemsBeforeActiveChunk + this.activeChunk.activeChunkItem.indexWithinChunk;
|
|
35
34
|
}
|
|
36
35
|
initialize = async () => {
|
|
37
|
-
const { onInitializationFinished, onEndReached } = this.callbacks;
|
|
38
36
|
const handleInitialized = async () => {
|
|
39
37
|
const startIndex = Math.min(FIXED_START_INDEX, this._loadedChunks.length - 1);
|
|
40
38
|
const populateChunkResult = await this.populateChunkAtIndex(startIndex, (currentIndex) => currentIndex + 1);
|
|
41
39
|
if (!populateChunkResult) {
|
|
42
|
-
onEndReached();
|
|
43
40
|
return;
|
|
44
41
|
}
|
|
45
42
|
this.setActiveChunkIndex(populateChunkResult.closestReadyChunkIndex);
|
|
@@ -48,7 +45,6 @@ export class PlayerChunksManager {
|
|
|
48
45
|
this.provider.initialData.startItemIndex > 0) {
|
|
49
46
|
this.activeChunk.setActiveItemIndex(this.provider.initialData.startItemIndex);
|
|
50
47
|
}
|
|
51
|
-
onInitializationFinished();
|
|
52
48
|
};
|
|
53
49
|
this._loadedChunks = this.provider.initialData.prefetchedChunks.map((chunk, chunkIndex) => new PlayerChunk({ chunk, chunkIndex, provider: { loadChunkItems: this.provider.loadChunkItems } }));
|
|
54
50
|
const considerInitialized = this._loadedChunks.length !== 0;
|
|
@@ -84,10 +80,13 @@ export class PlayerChunksManager {
|
|
|
84
80
|
};
|
|
85
81
|
warmUp = async () => {
|
|
86
82
|
// Early return if manager is sufficient or already loading
|
|
87
|
-
if (this.
|
|
83
|
+
if (this._fetchDeferred) {
|
|
84
|
+
return this._fetchDeferred.promise;
|
|
85
|
+
}
|
|
86
|
+
if (this._loadedChunks.length >= this._activeChunkIndex + CHUNKS_BUFFER_SIZE) {
|
|
88
87
|
return;
|
|
89
88
|
}
|
|
90
|
-
this.
|
|
89
|
+
this._fetchDeferred = new Deferred();
|
|
91
90
|
try {
|
|
92
91
|
const result = await this.provider.loadMoreChunks();
|
|
93
92
|
this._loadedChunks = [
|
|
@@ -100,13 +99,14 @@ export class PlayerChunksManager {
|
|
|
100
99
|
];
|
|
101
100
|
}
|
|
102
101
|
finally {
|
|
103
|
-
this.
|
|
102
|
+
this._fetchDeferred.resolve();
|
|
103
|
+
this._fetchDeferred = null;
|
|
104
104
|
}
|
|
105
105
|
};
|
|
106
106
|
reset = () => {
|
|
107
107
|
this._activeChunkIndex = -1;
|
|
108
108
|
this._loadedChunks = [];
|
|
109
|
-
this.
|
|
109
|
+
this._fetchDeferred = null;
|
|
110
110
|
this.warmUp();
|
|
111
111
|
};
|
|
112
112
|
populateChunkAtIndex = async (index, nextIndexFn) => {
|
|
@@ -9,12 +9,11 @@ export declare class DefaultChunksPlayerBuffer<TItem extends WithId, TChunk exte
|
|
|
9
9
|
readonly navigationDisabled: boolean;
|
|
10
10
|
readonly animationDuration = 500;
|
|
11
11
|
private _playerChunksManager;
|
|
12
|
-
constructor(provider: IChunksPlayerDataProvider<TItem, TChunk
|
|
13
|
-
preloaded?: (self: DefaultChunksPlayerBuffer<TItem, TChunk>) => void;
|
|
14
|
-
});
|
|
12
|
+
constructor(provider: IChunksPlayerDataProvider<TItem, TChunk>);
|
|
15
13
|
get activeChunk(): import("./chunks-player-buffer").PlayerChunk<TItem, TChunk>;
|
|
16
14
|
setActiveChunkItemIndex: (index: number) => void;
|
|
17
15
|
loadNext: () => Promise<void>;
|
|
18
16
|
loadPrevious: () => Promise<void>;
|
|
19
17
|
reset: () => void;
|
|
18
|
+
ensureWarmedUp: () => Promise<void>;
|
|
20
19
|
}
|
|
@@ -10,14 +10,11 @@ export class DefaultChunksPlayerBuffer {
|
|
|
10
10
|
navigationDisabled = $derived(!this.canLoadNext && !this.canLoadPrevious);
|
|
11
11
|
animationDuration = 500;
|
|
12
12
|
_playerChunksManager;
|
|
13
|
-
constructor(provider
|
|
13
|
+
constructor(provider) {
|
|
14
14
|
// Throttle navigation methods
|
|
15
15
|
this.loadNext = Utils.throttle(this.loadNext, this.animationDuration);
|
|
16
16
|
this.loadPrevious = Utils.throttle(this.loadPrevious, this.animationDuration);
|
|
17
|
-
this._playerChunksManager = new PlayerChunksManager(provider
|
|
18
|
-
onInitializationFinished: () => on?.preloaded?.(this),
|
|
19
|
-
onEndReached: () => console.warn('end reached')
|
|
20
|
-
});
|
|
17
|
+
this._playerChunksManager = new PlayerChunksManager(provider);
|
|
21
18
|
this._playerChunksManager.initialize();
|
|
22
19
|
}
|
|
23
20
|
get activeChunk() {
|
|
@@ -44,4 +41,7 @@ export class DefaultChunksPlayerBuffer {
|
|
|
44
41
|
reset = () => {
|
|
45
42
|
this._playerChunksManager.reset();
|
|
46
43
|
};
|
|
44
|
+
ensureWarmedUp = async () => {
|
|
45
|
+
await this._playerChunksManager.warmUp();
|
|
46
|
+
};
|
|
47
47
|
}
|
|
@@ -15,13 +15,12 @@ export declare class DefaultFeedPlayerBuffer<T extends WithId> implements IFeedP
|
|
|
15
15
|
private _currentIndex;
|
|
16
16
|
private _loaded;
|
|
17
17
|
private _loadMoreFn;
|
|
18
|
-
private
|
|
19
|
-
constructor(provider: IFeedPlayerDataProvider<T
|
|
20
|
-
preloaded?: (self: DefaultFeedPlayerBuffer<T>) => void;
|
|
21
|
-
});
|
|
18
|
+
private _fetchDeferred;
|
|
19
|
+
constructor(provider: IFeedPlayerDataProvider<T>);
|
|
22
20
|
loadNext: () => Promise<void>;
|
|
23
21
|
loadPrevious: () => Promise<void>;
|
|
24
22
|
reset: () => void;
|
|
23
|
+
ensureWarmedUp: () => Promise<void>;
|
|
25
24
|
private initializeBuffer;
|
|
26
25
|
private warmUpBuffer;
|
|
27
26
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Deferred } from '../../../core/deferred';
|
|
1
2
|
import { Utils } from '../../../core/utils';
|
|
2
3
|
const BUFFER_SIZE = 5;
|
|
3
4
|
export class DefaultFeedPlayerBuffer {
|
|
@@ -12,13 +13,13 @@ export class DefaultFeedPlayerBuffer {
|
|
|
12
13
|
_currentIndex = $state(-1);
|
|
13
14
|
_loaded = $state.raw([]);
|
|
14
15
|
_loadMoreFn;
|
|
15
|
-
|
|
16
|
-
constructor(provider
|
|
16
|
+
_fetchDeferred = $state.raw(null);
|
|
17
|
+
constructor(provider) {
|
|
17
18
|
this._loadMoreFn = provider.loadMore;
|
|
18
19
|
// Throttle navigation methods
|
|
19
20
|
this.loadNext = Utils.throttle(this.loadNext, this.animationDuration);
|
|
20
21
|
this.loadPrevious = Utils.throttle(this.loadPrevious, this.animationDuration);
|
|
21
|
-
this.initializeBuffer({ initialData: provider.initialData
|
|
22
|
+
this.initializeBuffer({ initialData: provider.initialData });
|
|
22
23
|
}
|
|
23
24
|
loadNext = async () => {
|
|
24
25
|
if (!this.canLoadNext) {
|
|
@@ -36,11 +37,14 @@ export class DefaultFeedPlayerBuffer {
|
|
|
36
37
|
reset = () => {
|
|
37
38
|
this._loaded = [];
|
|
38
39
|
this._currentIndex = -1;
|
|
39
|
-
this.
|
|
40
|
+
this._fetchDeferred = null;
|
|
40
41
|
this.warmUpBuffer();
|
|
41
42
|
};
|
|
43
|
+
ensureWarmedUp = async () => {
|
|
44
|
+
await this.warmUpBuffer();
|
|
45
|
+
};
|
|
42
46
|
initializeBuffer = async (options) => {
|
|
43
|
-
const { initialData
|
|
47
|
+
const { initialData } = options;
|
|
44
48
|
const handleInitialized = () => {
|
|
45
49
|
const startIndex = initialData.startIndex >= 0 ? initialData.startIndex : 0;
|
|
46
50
|
this._currentIndex = Math.min(startIndex, this._loaded.length - 1);
|
|
@@ -49,7 +53,6 @@ export class DefaultFeedPlayerBuffer {
|
|
|
49
53
|
if (activeItem && hasCustomMediaIndex) {
|
|
50
54
|
activeItem.mediaIndex = initialData.startMediaIndex;
|
|
51
55
|
}
|
|
52
|
-
onPreloaded?.(this);
|
|
53
56
|
};
|
|
54
57
|
this._loaded = initialData.prefetchedItems;
|
|
55
58
|
const considerInitialized = this._loaded.length > 0;
|
|
@@ -63,16 +66,20 @@ export class DefaultFeedPlayerBuffer {
|
|
|
63
66
|
};
|
|
64
67
|
warmUpBuffer = async () => {
|
|
65
68
|
// Early return if buffer is sufficient or already loading
|
|
66
|
-
if (this.
|
|
69
|
+
if (this._fetchDeferred) {
|
|
70
|
+
return this._fetchDeferred.promise;
|
|
71
|
+
}
|
|
72
|
+
if (this._loaded.length >= this.currentIndex + BUFFER_SIZE) {
|
|
67
73
|
return;
|
|
68
74
|
}
|
|
69
|
-
this.
|
|
75
|
+
this._fetchDeferred = new Deferred();
|
|
70
76
|
try {
|
|
71
77
|
const result = await this._loadMoreFn();
|
|
72
78
|
this._loaded = [...this._loaded, ...result];
|
|
73
79
|
}
|
|
74
80
|
finally {
|
|
75
|
-
this.
|
|
81
|
+
this._fetchDeferred.resolve();
|
|
82
|
+
this._fetchDeferred = null;
|
|
76
83
|
}
|
|
77
84
|
};
|
|
78
85
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Utils } from '../../../core/utils';
|
|
2
|
+
import { DefaultChunksPlayerBuffer } from './default-chunks-player-buffer.svelte';
|
|
3
|
+
import { DefaultFeedPlayerBuffer } from './default-feed-player-buffer.svelte';
|
|
4
|
+
export const initBufferFromProvider = (provider) => {
|
|
5
|
+
switch (provider.kind) {
|
|
6
|
+
case 'feed':
|
|
7
|
+
return new DefaultFeedPlayerBuffer(provider);
|
|
8
|
+
case 'chunks':
|
|
9
|
+
return new DefaultChunksPlayerBuffer(provider);
|
|
10
|
+
default:
|
|
11
|
+
Utils.assertUnreachable(provider);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<script lang="ts">let { backgroundDisabled, backgroundImageUrl, backgroundColor, children } = $props();
|
|
2
|
+
const styles = $derived.by(() => {
|
|
3
|
+
const values = [];
|
|
4
|
+
if (backgroundImageUrl) {
|
|
5
|
+
values.push(`--with-background--background-image-url: url(${backgroundImageUrl})`);
|
|
6
|
+
}
|
|
7
|
+
if (backgroundColor) {
|
|
8
|
+
values.push(`--with-background--background: ${backgroundColor}`);
|
|
9
|
+
}
|
|
10
|
+
return values.join(';');
|
|
11
|
+
});
|
|
12
|
+
export {};
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<svelte:head>
|
|
16
|
+
<meta name="theme-color" content="#242424" />
|
|
17
|
+
<meta name="color-scheme" content="dark" />
|
|
18
|
+
<meta name="mobile-web-app-capable" content="yes" />
|
|
19
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
20
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
|
|
21
|
+
|
|
22
|
+
<style>
|
|
23
|
+
html,
|
|
24
|
+
body {
|
|
25
|
+
background-color: #242424;
|
|
26
|
+
color-scheme: dark;
|
|
27
|
+
}
|
|
28
|
+
</style>
|
|
29
|
+
</svelte:head>
|
|
30
|
+
|
|
31
|
+
<div
|
|
32
|
+
class="with-background"
|
|
33
|
+
class:with-background--background-enabled={!backgroundDisabled}
|
|
34
|
+
class:with-background--background-active={!backgroundDisabled && backgroundImageUrl && backgroundImageUrl !== 'not-applicable'}
|
|
35
|
+
class:with-background--background-loading={!backgroundDisabled && backgroundImageUrl !== 'not-applicable'}
|
|
36
|
+
style={styles}>
|
|
37
|
+
{@render children()}
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<style>@keyframes fadeIn {
|
|
41
|
+
0% {
|
|
42
|
+
opacity: 1;
|
|
43
|
+
}
|
|
44
|
+
50% {
|
|
45
|
+
opacity: 0.4;
|
|
46
|
+
}
|
|
47
|
+
100% {
|
|
48
|
+
opacity: 1;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
.with-background {
|
|
52
|
+
--_with-background--background: var(--with-background--background);
|
|
53
|
+
--_with-background--background-image-url: var(--with-background--background-image-url);
|
|
54
|
+
width: 100%;
|
|
55
|
+
min-width: 100%;
|
|
56
|
+
max-width: 100%;
|
|
57
|
+
height: 100%;
|
|
58
|
+
min-height: 100%;
|
|
59
|
+
max-height: 100%;
|
|
60
|
+
container-type: inline-size;
|
|
61
|
+
display: flex;
|
|
62
|
+
flex-direction: column;
|
|
63
|
+
position: relative;
|
|
64
|
+
}
|
|
65
|
+
.with-background:before {
|
|
66
|
+
content: "";
|
|
67
|
+
position: absolute;
|
|
68
|
+
inset: 0;
|
|
69
|
+
backdrop-filter: blur(30px);
|
|
70
|
+
background-color: var(--_with-background--background);
|
|
71
|
+
display: none;
|
|
72
|
+
}
|
|
73
|
+
.with-background--background-enabled {
|
|
74
|
+
background-color: #7d7d7d;
|
|
75
|
+
}
|
|
76
|
+
.with-background--background-enabled:before {
|
|
77
|
+
display: block;
|
|
78
|
+
}
|
|
79
|
+
.with-background--background-active {
|
|
80
|
+
background-image: var(--_with-background--background-image-url);
|
|
81
|
+
background-size: cover;
|
|
82
|
+
background-blend-mode: multiply;
|
|
83
|
+
}
|
|
84
|
+
.with-background--background-loading {
|
|
85
|
+
background-color: transparent;
|
|
86
|
+
}</style>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
type Props = {
|
|
3
|
+
backgroundDisabled: boolean;
|
|
4
|
+
backgroundImageUrl: string | null | 'not-applicable';
|
|
5
|
+
backgroundColor?: string | null;
|
|
6
|
+
children: Snippet;
|
|
7
|
+
};
|
|
8
|
+
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
9
|
+
type Cmp = ReturnType<typeof Cmp>;
|
|
10
|
+
export default Cmp;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as WithBackground } from './cmp.with-background.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as WithBackground } from './cmp.with-background.svelte';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@streamscloud/embeddable",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "12.1.0",
|
|
4
4
|
"author": "StreamsCloud",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -37,6 +37,10 @@
|
|
|
37
37
|
"types": "./dist/media-center/index.d.ts",
|
|
38
38
|
"svelte": "./dist/media-center/index.js"
|
|
39
39
|
},
|
|
40
|
+
"./media-page": {
|
|
41
|
+
"types": "./dist/media-page/index.d.ts",
|
|
42
|
+
"svelte": "./dist/media-page/index.js"
|
|
43
|
+
},
|
|
40
44
|
"./posts": {
|
|
41
45
|
"types": "./dist/posts/index.d.ts",
|
|
42
46
|
"svelte": "./dist/posts/index.js"
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
@mixin default-opacity {
|
|
2
|
-
--content-player--elements-opacity: 1;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
@mixin fade-opacity {
|
|
6
|
-
--content-player--elements-opacity: 0;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
@mixin handle-fade {
|
|
10
|
-
opacity: var(--content-player--elements-opacity);
|
|
11
|
-
transition: opacity 0.3s ease-in-out;
|
|
12
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
<script lang="ts">import { ContentPlayerConfig } from './content-player-config.svelte';
|
|
2
|
-
import { onMount } from 'svelte';
|
|
3
|
-
let { config } = $props();
|
|
4
|
-
onMount(() => {
|
|
5
|
-
var _a, _b;
|
|
6
|
-
(_a = config.mediaCenterCallbacks) === null || _a === void 0 ? void 0 : _a.onPlayerInitialized({
|
|
7
|
-
closePlayerFn: config.settings.enableCloseButton && ((_b = config.callbacks) === null || _b === void 0 ? void 0 : _b.close) ? config.callbacks.close : null,
|
|
8
|
-
extraActionsForMobilePanel: []
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
</script>
|
|
12
|
-
|
|
13
|
-
{#if config.mediaCenterHeader}
|
|
14
|
-
{@render config.mediaCenterHeader()}
|
|
15
|
-
{/if}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { ContentPlayerConfig } from './content-player-config.svelte';
|
|
2
|
-
declare class __sveltets_Render<T extends {
|
|
3
|
-
id: string;
|
|
4
|
-
}> {
|
|
5
|
-
props(): {
|
|
6
|
-
config: ContentPlayerConfig<T>;
|
|
7
|
-
};
|
|
8
|
-
events(): {};
|
|
9
|
-
slots(): {};
|
|
10
|
-
bindings(): "";
|
|
11
|
-
exports(): {};
|
|
12
|
-
}
|
|
13
|
-
interface $$IsomorphicComponent {
|
|
14
|
-
new <T extends {
|
|
15
|
-
id: string;
|
|
16
|
-
}>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
|
|
17
|
-
$$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
|
|
18
|
-
} & ReturnType<__sveltets_Render<T>['exports']>;
|
|
19
|
-
<T extends {
|
|
20
|
-
id: string;
|
|
21
|
-
}>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
|
|
22
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
23
|
-
}
|
|
24
|
-
declare const Header: $$IsomorphicComponent;
|
|
25
|
-
type Header<T extends {
|
|
26
|
-
id: string;
|
|
27
|
-
}> = InstanceType<typeof Header<T>>;
|
|
28
|
-
export default Header;
|