@streamscloud/embeddable 11.0.0 → 12.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 -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 +27 -24
- package/dist/media-center/config/operations.generated.d.ts +10 -3
- package/dist/media-center/config/operations.generated.js +17 -6
- package/dist/media-center/config/operations.graphql +11 -4
- package/dist/media-center/config/types.d.ts +5 -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 +9 -3
- package/dist/media-center/media-center/handlers/categories-handler.svelte.js +7 -4
- package/dist/media-center/media-center/handlers/index.d.ts +1 -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 +3 -7
- 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 +31 -23
- 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,10 +1,8 @@
|
|
|
1
1
|
import { InternalMediaCenterConfig } from '../../media-center/config/internal-media-center-config';
|
|
2
2
|
import {} from '../../media-center/config/types';
|
|
3
|
-
import { MediaCenter } from '../../media-center/media-center';
|
|
4
3
|
import { InternalPostAnalyticsHandler } from '../../posts/handlers';
|
|
4
|
+
import { openPostsPlayer } from '../../posts/posts-player';
|
|
5
5
|
import { InternalShortVideoPlayerItemsProvider } from '../data-providers';
|
|
6
|
-
import { ModalShadowHost } from '../../ui/shadow-dom';
|
|
7
|
-
import { mount, unmount } from 'svelte';
|
|
8
6
|
/**
|
|
9
7
|
* Opens the short videos player modal.
|
|
10
8
|
*
|
|
@@ -71,35 +69,30 @@ import { mount, unmount } from 'svelte';
|
|
|
71
69
|
export async function openShortVideosPlayer(init) {
|
|
72
70
|
const { ids, graphqlOrigin, initialId, initiator, playerSettings, on } = init;
|
|
73
71
|
const dataProvider = new InternalShortVideoPlayerItemsProvider({ ids, graphqlOrigin, initialId, initiator });
|
|
74
|
-
const mediaCenterConfig = init.mediaPageId ? new InternalMediaCenterConfig(init.mediaPageId, graphqlOrigin) : undefined;
|
|
72
|
+
const mediaCenterConfig = init.mediaPageId ? new InternalMediaCenterConfig({ mediaPageId: init.mediaPageId, graphqlOrigin, initiator }) : undefined;
|
|
75
73
|
const analyticsHandler = new InternalPostAnalyticsHandler(graphqlOrigin);
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
shadowHost.attachToBody();
|
|
74
|
+
if (mediaCenterConfig) {
|
|
75
|
+
openPostsPlayer({
|
|
76
|
+
postsProvider: dataProvider,
|
|
77
|
+
mediaCenterConfig,
|
|
78
|
+
playerSettings: {
|
|
79
|
+
hideCloseButton: playerSettings?.hideCloseButton,
|
|
80
|
+
locale: playerSettings?.locale,
|
|
81
|
+
showStreamsCloudWatermark: true
|
|
82
|
+
},
|
|
83
|
+
on
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
openPostsPlayer({
|
|
88
|
+
postsProvider: dataProvider,
|
|
89
|
+
analyticsHandler,
|
|
90
|
+
playerSettings: {
|
|
91
|
+
hideCloseButton: playerSettings?.hideCloseButton,
|
|
92
|
+
locale: playerSettings?.locale,
|
|
93
|
+
showStreamsCloudWatermark: true
|
|
94
|
+
},
|
|
95
|
+
on
|
|
96
|
+
});
|
|
97
|
+
}
|
|
105
98
|
}
|
|
@@ -70,9 +70,9 @@ const productModel = $derived.by(() => {
|
|
|
70
70
|
{:else if model.type === StreamElementType.Stock}
|
|
71
71
|
<StockStreamElementView model={model} locale={locale} />
|
|
72
72
|
{:else if model.type === StreamElementType.Text}
|
|
73
|
-
<TextStreamElementView model={model} />
|
|
73
|
+
<TextStreamElementView model={model} locale={locale} />
|
|
74
74
|
{:else if model.type === StreamElementType.TextRef && data}
|
|
75
|
-
<TextRefStreamElementView model={model} data={data} />
|
|
75
|
+
<TextRefStreamElementView model={model} data={data} locale={locale} />
|
|
76
76
|
{:else if model.type === StreamElementType.WebView}
|
|
77
77
|
<WebViewStreamElementView model={model} />
|
|
78
78
|
{/if}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
<script lang="ts">import { LineClamp } from '../../../ui/line-clamp';
|
|
1
|
+
<script lang="ts">import { LineClamp, LineClampAuto } from '../../../ui/line-clamp';
|
|
2
2
|
import { getStringValueByKey } from './data-by-key-accessor';
|
|
3
3
|
import { generateTextStyles } from '../styles-transformer';
|
|
4
|
-
let { model, data } = $props();
|
|
4
|
+
let { model, data, locale } = $props();
|
|
5
5
|
const value = $derived.by(() => {
|
|
6
6
|
const values = [];
|
|
7
7
|
const value = getStringValueByKey(data, model.key);
|
|
@@ -19,5 +19,9 @@ const value = $derived.by(() => {
|
|
|
19
19
|
</script>
|
|
20
20
|
|
|
21
21
|
<div class="text-ref-stream-element" style={generateTextStyles(model.styles)}>
|
|
22
|
-
|
|
22
|
+
{#if model.styles?.maxLines}
|
|
23
|
+
<LineClamp maxLines={model.styles?.maxLines} locale={locale}>{value}</LineClamp>
|
|
24
|
+
{:else}
|
|
25
|
+
<LineClampAuto locale={locale}>{value}</LineClampAuto>
|
|
26
|
+
{/if}
|
|
23
27
|
</div>
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { Locale } from '../../../core/locale';
|
|
1
2
|
import type { TextRefStreamElementModel } from '../elements';
|
|
2
3
|
import type { StreamSlotDataRef } from '../slot-data-ref';
|
|
3
4
|
type Props = {
|
|
4
5
|
model: TextRefStreamElementModel;
|
|
5
6
|
data: StreamSlotDataRef;
|
|
7
|
+
locale: Locale;
|
|
6
8
|
};
|
|
7
9
|
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
8
10
|
type Cmp = ReturnType<typeof Cmp>;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
<script lang="ts">import { LineClamp } from '../../../ui/line-clamp';
|
|
1
|
+
<script lang="ts">import { LineClamp, LineClampAuto } from '../../../ui/line-clamp';
|
|
2
2
|
import { generateTextStyles } from '../styles-transformer';
|
|
3
|
-
let { model, placeholder } = $props();
|
|
3
|
+
let { model, locale, placeholder } = $props();
|
|
4
4
|
</script>
|
|
5
5
|
|
|
6
6
|
<div class="text-stream-element" style={generateTextStyles(model.styles)}>
|
|
7
7
|
{#if model.value}
|
|
8
|
-
|
|
8
|
+
{#if model.styles?.maxLines}
|
|
9
|
+
<LineClamp maxLines={model.styles?.maxLines} locale={locale}>{model.value}</LineClamp>
|
|
10
|
+
{:else}
|
|
11
|
+
<LineClampAuto locale={locale}>{model.value}</LineClampAuto>
|
|
12
|
+
{/if}
|
|
9
13
|
{:else if placeholder}
|
|
10
14
|
{@render placeholder()}
|
|
11
15
|
{/if}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { Locale } from '../../../core/locale';
|
|
1
2
|
import type { TextStreamElementModel } from '../elements';
|
|
2
3
|
import type { Snippet } from 'svelte';
|
|
3
4
|
type Props = {
|
|
4
5
|
model: TextStreamElementModel;
|
|
5
6
|
placeholder?: Snippet;
|
|
7
|
+
locale: Locale;
|
|
6
8
|
};
|
|
7
9
|
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
8
10
|
type Cmp = ReturnType<typeof Cmp>;
|
|
@@ -138,12 +138,12 @@ $effect(() => {
|
|
|
138
138
|
{/if}
|
|
139
139
|
{#if model.textAfter}
|
|
140
140
|
<div class="price-stream-element__text-after" style={textAfterCustomStyles}>
|
|
141
|
-
<LineClamp
|
|
141
|
+
<LineClamp maxLines={1} locale={localization.locale}>{model.textAfter}</LineClamp>
|
|
142
142
|
</div>
|
|
143
143
|
{/if}
|
|
144
144
|
</div>
|
|
145
145
|
{#if model.stock}
|
|
146
|
-
<StockElementView model={model.stock} heightOverrideDdu={stockElementHeight} locale={localization.
|
|
146
|
+
<StockElementView model={model.stock} heightOverrideDdu={stockElementHeight} locale={localization.locale} />
|
|
147
147
|
{/if}
|
|
148
148
|
</div>
|
|
149
149
|
|
|
@@ -2,6 +2,6 @@ import { type Locale } from '../../../core/locale';
|
|
|
2
2
|
export declare class PriceStreamElementLocalization {
|
|
3
3
|
saveValue: (value: string | number) => string;
|
|
4
4
|
beforeValue: (value: string) => string;
|
|
5
|
-
|
|
5
|
+
locale: Locale;
|
|
6
6
|
constructor(locale: Locale);
|
|
7
7
|
}
|
|
@@ -2,11 +2,11 @@ import {} from '../../../core/locale';
|
|
|
2
2
|
export class PriceStreamElementLocalization {
|
|
3
3
|
saveValue;
|
|
4
4
|
beforeValue;
|
|
5
|
-
|
|
5
|
+
locale;
|
|
6
6
|
constructor(locale) {
|
|
7
7
|
this.saveValue = loc.saveValue[locale];
|
|
8
8
|
this.beforeValue = loc.beforeValue[locale];
|
|
9
|
-
this.
|
|
9
|
+
this.locale = locale;
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
const loc = {
|
|
@@ -13,6 +13,8 @@ export const mapToPostModel = (model) => {
|
|
|
13
13
|
kicker: null,
|
|
14
14
|
title: null,
|
|
15
15
|
text: model.text,
|
|
16
|
+
viewsCount: model.header?.postViewsCount ?? 0,
|
|
17
|
+
displayDate: model.header?.postDisplayDate ?? '',
|
|
16
18
|
heading: model.header && {
|
|
17
19
|
image: model.header.sourceImage,
|
|
18
20
|
name: model.header.sourceName,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
1
2
|
import { type IMediaCenterConfig } from '../../media-center/config/types';
|
|
2
3
|
import type { IPostSocialInteractionsHandler } from '../../posts/social-interactions';
|
|
3
4
|
import type { StreamPageViewerModel } from '../stream-page-viewer/types';
|
|
4
|
-
import type { IStreamAnalyticsHandler, IStreamsPlayerDataProvider, StreamAmplificationParameters, StreamPlayerModel
|
|
5
|
+
import type { IStreamAnalyticsHandler, IStreamsPlayerDataProvider, StreamAmplificationParameters, StreamPlayerModel } from './types';
|
|
5
6
|
export { type StreamPlayerModel, type StreamPageViewerModel };
|
|
6
7
|
export { mapToStreamPlayerModel } from '../data-loaders/mapper';
|
|
7
8
|
export type { IStreamsPlayerDataProvider, IStreamAnalyticsHandler, IMediaCenterConfig };
|
|
@@ -110,7 +111,19 @@ export type { IStreamsPlayerDataProvider, IStreamAnalyticsHandler, IMediaCenterC
|
|
|
110
111
|
*/
|
|
111
112
|
export declare function openStreamsPlayer(init: {
|
|
112
113
|
dataProvider: IStreamsPlayerDataProvider;
|
|
113
|
-
mediaCenterConfig
|
|
114
|
+
mediaCenterConfig: IMediaCenterConfig;
|
|
115
|
+
amplificationParameters?: StreamAmplificationParameters;
|
|
116
|
+
playerSettings?: StreamsPlayerSettings;
|
|
117
|
+
on?: {
|
|
118
|
+
streamActivated?: (data: {
|
|
119
|
+
title: string;
|
|
120
|
+
image: string | null;
|
|
121
|
+
}) => void;
|
|
122
|
+
playerClosed?: () => void;
|
|
123
|
+
};
|
|
124
|
+
}): void;
|
|
125
|
+
export declare function openStreamsPlayer(init: {
|
|
126
|
+
dataProvider: IStreamsPlayerDataProvider;
|
|
114
127
|
postSocialInteractionsHandler?: IPostSocialInteractionsHandler;
|
|
115
128
|
analyticsHandler?: IStreamAnalyticsHandler;
|
|
116
129
|
amplificationParameters?: StreamAmplificationParameters;
|
|
@@ -139,3 +152,9 @@ export declare function openStreamsPlayer(init: {
|
|
|
139
152
|
playerClosed?: () => void;
|
|
140
153
|
};
|
|
141
154
|
}): void;
|
|
155
|
+
export type StreamsPlayerSettings = {
|
|
156
|
+
disableBackground?: boolean;
|
|
157
|
+
locale?: Locale;
|
|
158
|
+
showStreamsCloudWatermark?: boolean;
|
|
159
|
+
hideCloseButton?: boolean;
|
|
160
|
+
};
|
|
@@ -2,9 +2,11 @@ import { toastrWarning } from '../../core/toastr';
|
|
|
2
2
|
import { InternalMediaCenterConfig } from '../../media-center/config/internal-media-center-config';
|
|
3
3
|
import {} from '../../media-center/config/types';
|
|
4
4
|
import { MediaCenter } from '../../media-center/media-center';
|
|
5
|
+
import { CloseOrchestrator } from '../../ui/player/close-orchestrator';
|
|
5
6
|
import { ModalShadowHost } from '../../ui/shadow-dom';
|
|
6
7
|
import { InternalStreamAnalyticsHandler } from './internal-stream-analytics-handler';
|
|
7
8
|
import { InternalStreamsPlayerDataProvider } from './internal-streams-player-data-provider';
|
|
9
|
+
import { default as StreamsPlayerView } from './streams-player-view.svelte';
|
|
8
10
|
import { mount, unmount } from 'svelte';
|
|
9
11
|
export {};
|
|
10
12
|
export { mapToStreamPlayerModel } from '../data-loaders/mapper';
|
|
@@ -20,7 +22,7 @@ export function openStreamsPlayer(init) {
|
|
|
20
22
|
}
|
|
21
23
|
let mediaCenterConfig = init.mediaCenterConfig;
|
|
22
24
|
if (!mediaCenterConfig && init.mediaPageId) {
|
|
23
|
-
mediaCenterConfig = new InternalMediaCenterConfig(init.mediaPageId, graphqlOrigin);
|
|
25
|
+
mediaCenterConfig = new InternalMediaCenterConfig({ mediaPageId: init.mediaPageId, graphqlOrigin, initiator });
|
|
24
26
|
}
|
|
25
27
|
let analyticsHandler = init.analyticsHandler;
|
|
26
28
|
if (!analyticsHandler && !init.dataProvider) {
|
|
@@ -28,35 +30,58 @@ export function openStreamsPlayer(init) {
|
|
|
28
30
|
analyticsHandler = new InternalStreamAnalyticsHandler(graphqlOrigin);
|
|
29
31
|
}
|
|
30
32
|
const shadowHost = new ModalShadowHost();
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
33
|
+
let mounted;
|
|
34
|
+
const makeCloseOrchestrator = () => new CloseOrchestrator({
|
|
35
|
+
closeFn: async () => {
|
|
36
|
+
await unmount(mounted);
|
|
37
|
+
shadowHost.remove();
|
|
38
|
+
if (on?.playerClosed) {
|
|
39
|
+
on.playerClosed();
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
canClose: !playerSettings?.hideCloseButton
|
|
43
|
+
});
|
|
44
|
+
if (mediaCenterConfig) {
|
|
45
|
+
mounted = mount(MediaCenter, {
|
|
46
|
+
target: shadowHost.shadowRoot,
|
|
47
|
+
props: {
|
|
48
|
+
config: mediaCenterConfig,
|
|
49
|
+
settings: playerSettings,
|
|
50
|
+
modeProps: {
|
|
51
|
+
mode: 'streams',
|
|
52
|
+
props: {
|
|
53
|
+
dataProvider,
|
|
54
|
+
amplificationParameters,
|
|
55
|
+
onStreamActivated: (data) => {
|
|
45
56
|
if (init.on?.streamActivated) {
|
|
46
57
|
init.on.streamActivated({ title: data.title, image: data.image });
|
|
47
58
|
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
closeOrchestrator: makeCloseOrchestrator()
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
mounted = mount(StreamsPlayerView, {
|
|
68
|
+
target: shadowHost.shadowRoot,
|
|
69
|
+
props: {
|
|
70
|
+
dataProvider: { type: 'provider', provider: dataProvider },
|
|
71
|
+
analyticsHandler,
|
|
72
|
+
amplificationParameters,
|
|
73
|
+
playerSettings,
|
|
74
|
+
postSocialInteractionsHandler,
|
|
75
|
+
closeOrchestrator: makeCloseOrchestrator(),
|
|
76
|
+
on: {
|
|
77
|
+
streamActivated: (data) => {
|
|
78
|
+
if (init.on?.streamActivated) {
|
|
79
|
+
init.on.streamActivated({ title: data.title, image: data.image });
|
|
55
80
|
}
|
|
56
81
|
}
|
|
57
82
|
}
|
|
58
83
|
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
61
86
|
shadowHost.attachToBody();
|
|
62
87
|
}
|
|
@@ -42,7 +42,7 @@ let { buffer, activePageId, on } = $props();
|
|
|
42
42
|
overflow-y: auto;
|
|
43
43
|
overscroll-behavior: contain;
|
|
44
44
|
padding-block: 0.9375rem 0;
|
|
45
|
-
padding-inline: 0.9375rem
|
|
45
|
+
padding-inline: 0.9375rem;
|
|
46
46
|
--_cross-browser-scrollbar--thumb-color: transparent;
|
|
47
47
|
--_cross-browser-scrollbar--track-color: transparent;
|
|
48
48
|
}
|
|
@@ -2,7 +2,5 @@ import type { StreamPageViewerModel } from '../stream-page-viewer';
|
|
|
2
2
|
import { DefaultChunksPlayerBuffer } from '../../ui/player/providers';
|
|
3
3
|
import type { IStreamsPlayerDataProvider, StreamPlayerModel } from './types';
|
|
4
4
|
export declare class StreamsPlayerBuffer extends DefaultChunksPlayerBuffer<StreamPageViewerModel, StreamPlayerModel> {
|
|
5
|
-
constructor(provider: IStreamsPlayerDataProvider
|
|
6
|
-
preloaded?: (self: StreamsPlayerBuffer) => void;
|
|
7
|
-
});
|
|
5
|
+
constructor(provider: IStreamsPlayerDataProvider);
|
|
8
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DefaultChunksPlayerBuffer } from '../../ui/player/providers';
|
|
2
2
|
export class StreamsPlayerBuffer extends DefaultChunksPlayerBuffer {
|
|
3
|
-
constructor(provider
|
|
3
|
+
constructor(provider) {
|
|
4
4
|
super({
|
|
5
5
|
kind: 'chunks',
|
|
6
6
|
initialData: {
|
|
@@ -10,6 +10,6 @@ export class StreamsPlayerBuffer extends DefaultChunksPlayerBuffer {
|
|
|
10
10
|
return await provider.loadMoreStreams();
|
|
11
11
|
},
|
|
12
12
|
loadChunkItems: provider.getStreamPages
|
|
13
|
-
}
|
|
13
|
+
});
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -17,7 +17,7 @@ import { default as Overview } from './stream-overview.svelte';
|
|
|
17
17
|
import { StreamPlayerLocalization } from './stream-player-localization';
|
|
18
18
|
import { StreamsPlayerBuffer } from './streams-player-buffer.svelte';
|
|
19
19
|
import { untrack } from 'svelte';
|
|
20
|
-
let { dataProvider, analyticsHandler, postSocialInteractionsHandler, amplificationParameters, playerSettings,
|
|
20
|
+
let { dataProvider, analyticsHandler, postSocialInteractionsHandler, amplificationParameters, playerSettings, closeOrchestrator, on } = $props();
|
|
21
21
|
const localization = $derived(new StreamPlayerLocalization((_a = playerSettings === null || playerSettings === void 0 ? void 0 : playerSettings.locale) !== null && _a !== void 0 ? _a : 'en'));
|
|
22
22
|
let currentStreamModel = $state(null);
|
|
23
23
|
let activePageId = $derived.by(() => { var _a, _b; return (_b = (_a = buffer === null || buffer === void 0 ? void 0 : buffer.current) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : ''; });
|
|
@@ -33,11 +33,10 @@ $effect(() => {
|
|
|
33
33
|
untrack(() => {
|
|
34
34
|
buffer = null;
|
|
35
35
|
contentPlayerConfig.playerBuffer = null;
|
|
36
|
-
initPlayerBuffer();
|
|
36
|
+
initPlayerBuffer(dataProvider);
|
|
37
37
|
});
|
|
38
38
|
return () => { };
|
|
39
39
|
});
|
|
40
|
-
$effect(() => contentPlayerConfig.updateMediaCenterData(mediaCenterData));
|
|
41
40
|
$effect(() => contentPlayerConfig.updateTrackingParams(currentStreamModel
|
|
42
41
|
? {
|
|
43
42
|
streamId: currentStreamModel.id,
|
|
@@ -45,7 +44,8 @@ $effect(() => contentPlayerConfig.updateTrackingParams(currentStreamModel
|
|
|
45
44
|
}
|
|
46
45
|
: null));
|
|
47
46
|
$effect(() => {
|
|
48
|
-
|
|
47
|
+
var _a;
|
|
48
|
+
const stream = (_a = buffer === null || buffer === void 0 ? void 0 : buffer.activeChunk) === null || _a === void 0 ? void 0 : _a.model;
|
|
49
49
|
untrack(() => {
|
|
50
50
|
var _a;
|
|
51
51
|
if (stream) {
|
|
@@ -77,20 +77,23 @@ const streamTrackingParams = $derived.by(() => {
|
|
|
77
77
|
}
|
|
78
78
|
: false;
|
|
79
79
|
});
|
|
80
|
-
const initPlayerBuffer = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
80
|
+
const initPlayerBuffer = (dataProvider) => __awaiter(void 0, void 0, void 0, function* () {
|
|
81
|
+
let newBuffer;
|
|
82
|
+
if (dataProvider.type === 'buffer') {
|
|
83
|
+
newBuffer = dataProvider.buffer;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
newBuffer = new StreamsPlayerBuffer(dataProvider.provider);
|
|
87
|
+
}
|
|
88
|
+
if (newBuffer.loaded.length && (on === null || on === void 0 ? void 0 : on.backgroundImageLoaded)) {
|
|
89
|
+
const coverUrl = newBuffer.loaded[0].cover;
|
|
90
|
+
if (coverUrl) {
|
|
91
|
+
yield preloadImage(coverUrl);
|
|
92
|
+
}
|
|
93
|
+
on.backgroundImageLoaded(coverUrl);
|
|
94
|
+
}
|
|
95
|
+
buffer = newBuffer;
|
|
96
|
+
contentPlayerConfig.playerBuffer = newBuffer;
|
|
94
97
|
});
|
|
95
98
|
const contentPlayerConfig = new ContentPlayerConfig({
|
|
96
99
|
playerBuffer: null,
|
|
@@ -103,10 +106,9 @@ const contentPlayerConfig = new ContentPlayerConfig({
|
|
|
103
106
|
}
|
|
104
107
|
},
|
|
105
108
|
socialInteractionsHandler: postSocialInteractionsHandler,
|
|
106
|
-
mediaCenterData,
|
|
107
109
|
settings: new ContentPlayerSettings(playerSettings),
|
|
110
|
+
closeOrchestrator,
|
|
108
111
|
callbacks: {
|
|
109
|
-
close: on === null || on === void 0 ? void 0 : on.playerClosed,
|
|
110
112
|
videoProgress: (pageId, videoId, progress) => {
|
|
111
113
|
onProgress(pageId, videoId, progress);
|
|
112
114
|
},
|
|
@@ -144,7 +146,9 @@ const onPageActivated = (id) => {
|
|
|
144
146
|
return;
|
|
145
147
|
}
|
|
146
148
|
const page = activeChunk.items.find((x) => x.id === id);
|
|
147
|
-
|
|
149
|
+
if (on === null || on === void 0 ? void 0 : on.backgroundImageLoaded) {
|
|
150
|
+
on.backgroundImageLoaded((page === null || page === void 0 ? void 0 : page.cover) || null);
|
|
151
|
+
}
|
|
148
152
|
if (page) {
|
|
149
153
|
analyticsHandler === null || analyticsHandler === void 0 ? void 0 : analyticsHandler.trackStreamPageView(id, activeChunk.model.id);
|
|
150
154
|
if (page.type === 'short-video' && page.shortVideo) {
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type { MediaCenterData } from '../../media-center/model/types';
|
|
2
1
|
import type { StreamsPlayerProps } from './types';
|
|
3
|
-
|
|
4
|
-
mediaCenterData?: MediaCenterData;
|
|
5
|
-
};
|
|
6
|
-
declare const StreamsPlayerView: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
2
|
+
declare const StreamsPlayerView: import("svelte").Component<StreamsPlayerProps, {}, "">;
|
|
7
3
|
type StreamsPlayerView = ReturnType<typeof StreamsPlayerView>;
|
|
8
4
|
export default StreamsPlayerView;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
2
2
|
import type { IPostSocialInteractionsHandler } from '../../posts/social-interactions';
|
|
3
3
|
import type { StreamPageViewerModel } from '../stream-page-viewer';
|
|
4
|
+
import type { ICloseOrchestrator } from '../../ui/player/close-orchestrator';
|
|
5
|
+
import type { PlayerColors } from '../../ui/player/colors';
|
|
6
|
+
import type { StreamsPlayerBuffer } from './streams-player-buffer.svelte';
|
|
4
7
|
export type StreamPlayerModel = {
|
|
5
8
|
id: string;
|
|
6
9
|
title: string;
|
|
@@ -12,20 +15,31 @@ export type StreamPlayerModel = {
|
|
|
12
15
|
pagesCount: number;
|
|
13
16
|
};
|
|
14
17
|
export type StreamsPlayerProps = {
|
|
15
|
-
dataProvider:
|
|
18
|
+
dataProvider: {
|
|
19
|
+
type: 'buffer';
|
|
20
|
+
buffer: StreamsPlayerBuffer;
|
|
21
|
+
} | {
|
|
22
|
+
type: 'provider';
|
|
23
|
+
provider: IStreamsPlayerDataProvider;
|
|
24
|
+
};
|
|
16
25
|
postSocialInteractionsHandler?: IPostSocialInteractionsHandler;
|
|
17
26
|
analyticsHandler?: IStreamAnalyticsHandler;
|
|
18
27
|
amplificationParameters?: StreamAmplificationParameters;
|
|
19
28
|
playerSettings?: StreamsPlayerSettings;
|
|
29
|
+
closeOrchestrator: ICloseOrchestrator;
|
|
20
30
|
on?: {
|
|
21
31
|
streamActivated?: (data: {
|
|
22
32
|
title: string;
|
|
23
33
|
image: string | null;
|
|
24
34
|
}) => void;
|
|
25
|
-
|
|
35
|
+
backgroundImageLoaded?: (imageUrl: string | null) => void;
|
|
26
36
|
};
|
|
27
37
|
};
|
|
28
|
-
export type StreamsPlayerSettings =
|
|
38
|
+
export type StreamsPlayerSettings = {
|
|
39
|
+
locale?: Locale;
|
|
40
|
+
showStreamsCloudWatermark?: boolean;
|
|
41
|
+
playerColors?: PlayerColors;
|
|
42
|
+
};
|
|
29
43
|
export type StreamAmplificationParameters = {
|
|
30
44
|
campaignId: string;
|
|
31
45
|
campaignName: string;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
<script lang="ts">import { LineClampLocalization } from './line-clamp-localization';
|
|
2
|
+
import { LineClampUtils } from './line-clamp-utils';
|
|
3
|
+
import { onDestroy, onMount } from 'svelte';
|
|
4
|
+
let { locale, enableShowMore = false, children } = $props();
|
|
5
|
+
const localization = $derived(new LineClampLocalization(locale !== null && locale !== void 0 ? locale : 'en'));
|
|
6
|
+
let parent;
|
|
7
|
+
let element;
|
|
8
|
+
let clampWrapperRef;
|
|
9
|
+
let isTruncated = $state(false);
|
|
10
|
+
let showingAllText = $state(false);
|
|
11
|
+
let resizeObserver = null;
|
|
12
|
+
const canShowMore = $derived(enableShowMore && isTruncated && !showingAllText);
|
|
13
|
+
onMount(() => {
|
|
14
|
+
let parentElement = element.parentElement;
|
|
15
|
+
if (!parentElement || !('clientHeight' in parentElement)) {
|
|
16
|
+
console.error('Unsupported parent for multiline clamper');
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
parent = parentElement;
|
|
20
|
+
clamp();
|
|
21
|
+
resizeObserver = new ResizeObserver(clamp);
|
|
22
|
+
resizeObserver.observe(parent);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
onDestroy(() => {
|
|
26
|
+
resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
|
|
27
|
+
resizeObserver = null;
|
|
28
|
+
});
|
|
29
|
+
const clamp = () => {
|
|
30
|
+
isTruncated = clampWrapperRef.scrollHeight > clampWrapperRef.offsetHeight;
|
|
31
|
+
if (showingAllText) {
|
|
32
|
+
setClampValue('unset');
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const clampValue = LineClampUtils.calculateClampValue(parent);
|
|
36
|
+
setClampValue(clampValue.toString());
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const setClampValue = (value) => {
|
|
40
|
+
clampWrapperRef.style.setProperty('-webkit-line-clamp', value);
|
|
41
|
+
};
|
|
42
|
+
const toggleShowMore = () => {
|
|
43
|
+
showingAllText = !showingAllText;
|
|
44
|
+
clamp();
|
|
45
|
+
};
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<div
|
|
49
|
+
class="line-clamp"
|
|
50
|
+
class:line-clamp--clickable={canShowMore}
|
|
51
|
+
bind:this={element}
|
|
52
|
+
onclick={() => canShowMore && toggleShowMore()}
|
|
53
|
+
onmousedown={() => {}}
|
|
54
|
+
role="none">
|
|
55
|
+
<div class="line-clamp__wrapper-container">
|
|
56
|
+
<div class="line-clamp__wrapper" bind:this={clampWrapperRef}>
|
|
57
|
+
{@render children()}
|
|
58
|
+
</div>
|
|
59
|
+
<!--Testing new concept-->
|
|
60
|
+
<!--{#if enableShowMore && isTruncated && !showingAllText}
|
|
61
|
+
<button type="button" class="line-clamp__show-more-button line-clamp__show-more-button--inline" onclick={toggleShowMore}>
|
|
62
|
+
{localization.showMore}
|
|
63
|
+
</button>
|
|
64
|
+
{/if}-->
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
{#if enableShowMore && showingAllText}
|
|
68
|
+
<button type="button" class="line-clamp__show-more-button" onclick={toggleShowMore}>
|
|
69
|
+
{localization.showLess}
|
|
70
|
+
</button>
|
|
71
|
+
{/if}
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
<style>.line-clamp {
|
|
75
|
+
width: 100%;
|
|
76
|
+
height: 100%;
|
|
77
|
+
display: flex;
|
|
78
|
+
flex-direction: column;
|
|
79
|
+
}
|
|
80
|
+
.line-clamp--clickable {
|
|
81
|
+
cursor: pointer;
|
|
82
|
+
pointer-events: auto;
|
|
83
|
+
}
|
|
84
|
+
.line-clamp__wrapper-container {
|
|
85
|
+
position: relative;
|
|
86
|
+
}
|
|
87
|
+
.line-clamp__wrapper {
|
|
88
|
+
display: -webkit-box;
|
|
89
|
+
overflow: hidden;
|
|
90
|
+
word-break: break-word;
|
|
91
|
+
white-space: var(--line-clamp-white-space, pre-line);
|
|
92
|
+
-webkit-box-orient: vertical;
|
|
93
|
+
}
|
|
94
|
+
.line-clamp__show-more-button {
|
|
95
|
+
font-size: 0.9em;
|
|
96
|
+
font-style: italic;
|
|
97
|
+
pointer-events: auto;
|
|
98
|
+
/*Testing new concept*/
|
|
99
|
+
/*&--inline {
|
|
100
|
+
position: absolute;
|
|
101
|
+
bottom: 0;
|
|
102
|
+
right: 0;
|
|
103
|
+
padding-left: 1em;
|
|
104
|
+
|
|
105
|
+
backdrop-filter:
|
|
106
|
+
brightness(2)
|
|
107
|
+
contrast(0.3)
|
|
108
|
+
saturate(0);
|
|
109
|
+
|
|
110
|
+
&::after {
|
|
111
|
+
content: '...';
|
|
112
|
+
position: absolute;
|
|
113
|
+
left: 0;
|
|
114
|
+
}
|
|
115
|
+
}*/
|
|
116
|
+
}
|
|
117
|
+
.line-clamp__show-more-button:not(.line-clamp__show-more-button--inline) {
|
|
118
|
+
margin-top: 0.5em;
|
|
119
|
+
}</style>
|