@streamscloud/embeddable 10.1.2 → 11.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 +27 -7
- package/dist/ads/ad-card/cmp.ad-card.svelte.d.ts +5 -0
- package/dist/content-player/cmp.content-player.svelte +30 -40
- package/dist/content-player/content-player-config.svelte.d.ts +13 -2
- package/dist/content-player/content-player-config.svelte.js +8 -5
- package/dist/content-player/content-player-settings.d.ts +12 -0
- package/dist/content-player/content-player-settings.js +12 -0
- package/dist/content-player/controls-and-attachments.svelte +25 -54
- package/dist/content-player/header.svelte +10 -132
- package/dist/content-player/header.svelte.d.ts +0 -4
- package/dist/content-player/overview-panel.svelte +22 -72
- package/dist/content-player/overview-panel.svelte.d.ts +30 -7
- package/dist/content-player/ui-manager.svelte.d.ts +2 -4
- package/dist/content-player/ui-manager.svelte.js +3 -5
- package/dist/media-center/config/internal-media-center-config.js +2 -1
- package/dist/media-center/config/operations.generated.d.ts +13 -0
- package/dist/media-center/config/operations.generated.js +20 -0
- package/dist/media-center/config/operations.graphql +13 -0
- package/dist/media-center/config/types.d.ts +13 -0
- package/dist/media-center/media-center/cmp.media-center.svelte +117 -348
- package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +3 -1
- package/dist/media-center/media-center/{discover-panel-handler.svelte.d.ts → discover/discover-panel-handler.svelte.d.ts} +5 -6
- package/dist/media-center/media-center/{discover-panel-handler.svelte.js → discover/discover-panel-handler.svelte.js} +1 -8
- package/dist/media-center/media-center/discover/discover-panel-localization.d.ts +19 -0
- package/dist/media-center/media-center/discover/discover-panel-localization.js +78 -0
- package/dist/media-center/media-center/{discover-panel.svelte → discover/discover-panel.svelte} +18 -9
- package/dist/media-center/media-center/discover/discover-panel.svelte.d.ts +15 -0
- package/dist/media-center/media-center/discover/index.d.ts +2 -0
- package/dist/media-center/media-center/discover/index.js +2 -0
- package/dist/media-center/media-center/handlers/categories-handler.svelte.d.ts +21 -0
- package/dist/media-center/media-center/handlers/categories-handler.svelte.js +36 -0
- package/dist/media-center/media-center/handlers/feed-handler.svelte.d.ts +6 -0
- package/dist/media-center/media-center/handlers/feed-handler.svelte.js +12 -0
- package/dist/media-center/media-center/handlers/index.d.ts +2 -0
- package/dist/media-center/media-center/handlers/index.js +2 -0
- package/dist/media-center/media-center/header-footer/index.d.ts +3 -0
- package/dist/media-center/media-center/header-footer/index.js +3 -0
- package/dist/media-center/media-center/header-footer/media-center-footer.svelte +77 -0
- package/dist/media-center/media-center/header-footer/media-center-footer.svelte.d.ts +7 -0
- package/dist/media-center/media-center/header-footer/media-center-header-localization.d.ts +12 -0
- package/dist/media-center/media-center/header-footer/media-center-header-localization.js +40 -0
- package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte +91 -0
- package/dist/media-center/media-center/header-footer/media-center-header-mobile.svelte.d.ts +11 -0
- package/dist/media-center/media-center/header-footer/media-center-header.svelte +310 -0
- package/dist/media-center/media-center/header-footer/media-center-header.svelte.d.ts +13 -0
- package/dist/media-center/media-center/media-center-context.svelte.d.ts +50 -0
- package/dist/media-center/media-center/media-center-context.svelte.js +98 -0
- package/dist/media-center/media-center/{category-following-wrapper.svelte → menu/category-following-wrapper.svelte} +3 -2
- package/dist/media-center/media-center/{category-following-wrapper.svelte.d.ts → menu/category-following-wrapper.svelte.d.ts} +2 -2
- package/dist/media-center/media-center/menu/index.d.ts +2 -0
- package/dist/media-center/media-center/menu/index.js +2 -0
- package/dist/media-center/media-center/menu/menu-localization.d.ts +19 -0
- package/dist/media-center/media-center/menu/menu-localization.js +78 -0
- package/dist/media-center/media-center/menu/menu.svelte +345 -0
- package/dist/media-center/media-center/menu/menu.svelte.d.ts +14 -0
- package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.d.ts +10 -0
- package/dist/media-center/media-center/menu/popular-streams-panel-handler.svelte.js +26 -0
- package/dist/media-center/media-center/providers/index.d.ts +2 -0
- package/dist/media-center/media-center/providers/index.js +2 -0
- package/dist/media-center/media-center/providers/post-player-provider-generator.d.ts +8 -0
- package/dist/media-center/media-center/{post-player-provider-generator.js → providers/post-player-provider-generator.js} +3 -3
- package/dist/media-center/media-center/{streams-player-provider-generator.d.ts → providers/streams-player-provider-generator.d.ts} +2 -2
- package/dist/media-center/media-center/{streams-player-provider-generator.js → providers/streams-player-provider-generator.js} +2 -2
- package/dist/media-center/media-center/streams-in-category/index.d.ts +2 -0
- package/dist/media-center/media-center/streams-in-category/index.js +2 -0
- package/dist/media-center/media-center/{streams-in-category-panel-handler.svelte.d.ts → streams-in-category/streams-in-category-panel-handler.svelte.d.ts} +4 -4
- package/dist/media-center/media-center/{streams-in-category-panel-handler.svelte.js → streams-in-category/streams-in-category-panel-handler.svelte.js} +5 -5
- package/dist/media-center/media-center/{streams-in-category-panel.svelte → streams-in-category/streams-in-category-panel.svelte} +1 -1
- package/dist/media-center/media-center/{streams-in-category-panel.svelte.d.ts → streams-in-category/streams-in-category-panel.svelte.d.ts} +1 -1
- package/dist/media-center/media-center/types.d.ts +1 -1
- package/dist/media-center/model/types.d.ts +7 -6
- package/dist/posts/attachments/cmp.attachments.svelte +5 -3
- package/dist/posts/attachments/cmp.attachments.svelte.d.ts +6 -0
- package/dist/posts/controls/cmp.controls.svelte +3 -3
- package/dist/posts/controls/cmp.controls.svelte.d.ts +2 -0
- package/dist/posts/post-viewer/cmp.post-viewer.svelte +3 -1
- package/dist/posts/post-viewer/cmp.post-viewer.svelte.d.ts +4 -0
- package/dist/products/product-card/cmp.product-card.svelte +35 -11
- package/dist/products/product-card/cmp.product-card.svelte.d.ts +5 -0
- package/dist/streams/data-loaders/mapper.js +0 -5
- package/dist/streams/data-loaders/operations.generated.d.ts +0 -12
- package/dist/streams/data-loaders/operations.generated.js +0 -26
- package/dist/streams/data-loaders/operations.graphql +0 -6
- package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte +2 -1
- package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte.d.ts +4 -0
- package/dist/streams/stream-card/cmp.stream-card.svelte +5 -5
- package/dist/streams/streams-player/index.js +1 -1
- package/dist/streams/streams-player/stream-overview.svelte +6 -96
- package/dist/streams/streams-player/stream-overview.svelte.d.ts +0 -4
- package/dist/streams/streams-player/stream-player-localization.d.ts +0 -1
- package/dist/streams/streams-player/stream-player-localization.js +0 -6
- package/dist/streams/streams-player/streams-player-view.svelte +0 -2
- package/dist/streams/streams-player/types.d.ts +0 -4
- package/dist/ui/icon/cmp.icon.svelte +3 -2
- package/dist/ui/player/button/cmp.player-button.svelte +17 -5
- package/dist/ui/player/button/cmp.player-button.svelte.d.ts +3 -0
- package/dist/ui/player/button/cmp.player-buttons-group.svelte +20 -5
- package/dist/ui/player/button/cmp.player-buttons-group.svelte.d.ts +2 -0
- package/dist/ui/player/button/types.d.ts +2 -0
- package/package.json +1 -1
- package/dist/content-player/content-player-localization.d.ts +0 -6
- package/dist/content-player/content-player-localization.js +0 -15
- package/dist/media-center/media-center/desktop-categories-selector.svelte +0 -132
- package/dist/media-center/media-center/desktop-categories-selector.svelte.d.ts +0 -12
- package/dist/media-center/media-center/discover-panel.svelte.d.ts +0 -15
- package/dist/media-center/media-center/media-center-handler.svelte.d.ts +0 -28
- package/dist/media-center/media-center/media-center-handler.svelte.js +0 -73
- package/dist/media-center/media-center/media-center-localization.d.ts +0 -10
- package/dist/media-center/media-center/media-center-localization.js +0 -39
- package/dist/media-center/media-center/mobile-controls-panel.svelte +0 -268
- package/dist/media-center/media-center/mobile-controls-panel.svelte.d.ts +0 -20
- package/dist/media-center/media-center/post-player-provider-generator.d.ts +0 -8
|
@@ -4,7 +4,7 @@ import { Image } from '../../ui/image';
|
|
|
4
4
|
import { LineClamp } from '../../ui/line-clamp';
|
|
5
5
|
import { ProportionalContainer } from '../../ui/proportional-container';
|
|
6
6
|
import { ProductCardLocalization } from './product-card-localization';
|
|
7
|
-
let { product, includeBeforeNowPrefix, trackingParams, inert = false, locale = 'en', on } = $props();
|
|
7
|
+
let { product, colors, includeBeforeNowPrefix, trackingParams, inert = false, locale = 'en', on } = $props();
|
|
8
8
|
const localization = $derived(new ProductCardLocalization(locale));
|
|
9
9
|
const shortDescriptionPresented = $derived(product.shortDescription && product.shortDescription.length > 0);
|
|
10
10
|
const trackImpression = (node) => {
|
|
@@ -37,9 +37,22 @@ const onProductClicked = (event) => {
|
|
|
37
37
|
window.open(enrichedLink, '_blank', 'noopener noreferrer');
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
|
+
const styles = $derived.by(() => {
|
|
41
|
+
const values = [];
|
|
42
|
+
if (colors === null || colors === void 0 ? void 0 : colors.background) {
|
|
43
|
+
values.push(`--product-card--background-color: ${colors.background}`);
|
|
44
|
+
}
|
|
45
|
+
if (colors === null || colors === void 0 ? void 0 : colors.price) {
|
|
46
|
+
values.push(`--product-card--price-color: ${colors.price}`);
|
|
47
|
+
}
|
|
48
|
+
if (colors === null || colors === void 0 ? void 0 : colors.salePrice) {
|
|
49
|
+
values.push(`--product-card--sale-price-color: ${colors.salePrice}`);
|
|
50
|
+
}
|
|
51
|
+
return values.join(';');
|
|
52
|
+
});
|
|
40
53
|
</script>
|
|
41
54
|
|
|
42
|
-
<div class="product-card" inert={inert} use:trackImpression>
|
|
55
|
+
<div class="product-card" inert={inert} use:trackImpression style={styles}>
|
|
43
56
|
<ProportionalContainer ratio={1}>
|
|
44
57
|
<Image src={product.image} />
|
|
45
58
|
</ProportionalContainer>
|
|
@@ -63,7 +76,7 @@ const onProductClicked = (event) => {
|
|
|
63
76
|
{toPriceRepresentation({ amount: product.price, currency: product.currency })}
|
|
64
77
|
{/if}
|
|
65
78
|
</div>
|
|
66
|
-
<div class="product-price__price product-price__price--sale
|
|
79
|
+
<div class="product-price__price" class:product-price__price--sale={product.salePrice}>
|
|
67
80
|
{toPriceRepresentation({ amount: product.salePrice ?? product.price, currency: product.currency })}
|
|
68
81
|
</div>
|
|
69
82
|
</div>
|
|
@@ -90,6 +103,12 @@ const onProductClicked = (event) => {
|
|
|
90
103
|
.product-card {
|
|
91
104
|
--_product-card--aspect-ratio: var(--product-card--aspect-ratio, 10/16);
|
|
92
105
|
--_product-card--border-radius: var(--product-card--border-radius, 0.5rem);
|
|
106
|
+
--_product-card--background-color: var(--product-card--background-color, rgb(from #ffffff r g b/90%));
|
|
107
|
+
--_product-card--border-color: var(--product-card--background-color, #f2f2f3);
|
|
108
|
+
--_product-card--price-color: var(--product-card--price-color, inherit);
|
|
109
|
+
--_product-card--sale-price-color: var(--product-card--sale-price-color, inherit);
|
|
110
|
+
--product-price-color: var(--_product-card--price-color);
|
|
111
|
+
--product-price--sale--color: var(--_product-card--sale-price-color);
|
|
93
112
|
--image--border-radius: 0.25rem;
|
|
94
113
|
--image--object-fit: contain;
|
|
95
114
|
--image--width: auto;
|
|
@@ -102,17 +121,17 @@ const onProductClicked = (event) => {
|
|
|
102
121
|
container-type: inline-size;
|
|
103
122
|
aspect-ratio: var(--_product-card--aspect-ratio);
|
|
104
123
|
color: #000000;
|
|
105
|
-
background-color:
|
|
106
|
-
border: 1px solid
|
|
124
|
+
background-color: var(--_product-card--background-color);
|
|
125
|
+
border: 1px solid var(--_product-card--border-color);
|
|
107
126
|
border-radius: var(--_product-card--border-radius);
|
|
108
127
|
padding: 0.75rem 0.75rem 1.125rem;
|
|
109
128
|
justify-content: space-between;
|
|
110
129
|
/* Set 'container-type: inline-size;' to reference container*/
|
|
111
130
|
}
|
|
112
131
|
:global([data-theme="dark"]) .product-card {
|
|
113
|
-
background-color:
|
|
132
|
+
--_product-card--background-color: var(--product-card--background-color, rgb(from #121212 r g b/90%));
|
|
133
|
+
--_product-card--border-color: var(--product-card--background-color, #1e1e1e);
|
|
114
134
|
color: #ffffff;
|
|
115
|
-
border-color: #1e1e1e;
|
|
116
135
|
}
|
|
117
136
|
@container (width < 230px) {
|
|
118
137
|
.product-card {
|
|
@@ -196,19 +215,18 @@ const onProductClicked = (event) => {
|
|
|
196
215
|
}
|
|
197
216
|
|
|
198
217
|
.product-price {
|
|
199
|
-
--_product-price--
|
|
218
|
+
--_product-price--color: var(--product-price-color);
|
|
219
|
+
--_product-price--sale--color: var(--product-price--sale--color);
|
|
200
220
|
--_product-price--before--color: #6b7280;
|
|
201
221
|
--_product-price--before--font-size: 0.75em;
|
|
202
|
-
--_product-price--color: inherit;
|
|
203
222
|
--_product-price--font-size: 1.875em;
|
|
204
223
|
--_product-price--gap: 0.375em;
|
|
205
|
-
--_product-price--
|
|
224
|
+
--_product-price--align: right;
|
|
206
225
|
width: 100%;
|
|
207
226
|
display: flex;
|
|
208
227
|
flex-direction: column;
|
|
209
228
|
justify-items: end;
|
|
210
229
|
gap: var(--_product-price--gap);
|
|
211
|
-
min-height: var(--_product-price--min-height);
|
|
212
230
|
/* Set 'container-type: inline-size;' to reference container*/
|
|
213
231
|
}
|
|
214
232
|
@container (width < 230px) {
|
|
@@ -218,6 +236,9 @@ const onProductClicked = (event) => {
|
|
|
218
236
|
--_product-price--gap: 0.25rem;
|
|
219
237
|
}
|
|
220
238
|
}
|
|
239
|
+
:global([data-theme="dark"]) .product-price {
|
|
240
|
+
--_product-price--before--color: #d1d5db;
|
|
241
|
+
}
|
|
221
242
|
.product-price__before-price {
|
|
222
243
|
width: 100%;
|
|
223
244
|
color: var(--_product-price--before--color);
|
|
@@ -243,4 +264,7 @@ const onProductClicked = (event) => {
|
|
|
243
264
|
width: 100%;
|
|
244
265
|
white-space: nowrap;
|
|
245
266
|
overflow: hidden;
|
|
267
|
+
}
|
|
268
|
+
.product-price__price--sale {
|
|
269
|
+
color: var(--_product-price--sale--color);
|
|
246
270
|
}</style>
|
|
@@ -3,6 +3,11 @@ import { type TrackingParams } from '../../marketing-tracking';
|
|
|
3
3
|
import type { ProductCardModel } from './types';
|
|
4
4
|
type Props = {
|
|
5
5
|
product: ProductCardModel;
|
|
6
|
+
colors: {
|
|
7
|
+
background?: string | null;
|
|
8
|
+
price?: string | null;
|
|
9
|
+
salePrice?: string | null;
|
|
10
|
+
};
|
|
6
11
|
locale?: Locale;
|
|
7
12
|
includeBeforeNowPrefix?: boolean;
|
|
8
13
|
inert?: boolean;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ProfileType } from '../../core/enums';
|
|
2
2
|
export const mapToStreamPlayerModel = (payload) => {
|
|
3
|
-
const headerDataProvider = payload.availableFrom ?? payload.ownerProfile;
|
|
4
3
|
return {
|
|
5
4
|
id: payload.id,
|
|
6
5
|
title: payload.title,
|
|
@@ -9,10 +8,6 @@ export const mapToStreamPlayerModel = (payload) => {
|
|
|
9
8
|
createdAt: payload.createdAt,
|
|
10
9
|
publishedAt: payload.publishedAt,
|
|
11
10
|
organizationId: payload.ownerProfile.type === ProfileType.Organization ? payload.ownerProfile.id : null,
|
|
12
|
-
header: {
|
|
13
|
-
name: headerDataProvider.name,
|
|
14
|
-
image: headerDataProvider.image
|
|
15
|
-
},
|
|
16
11
|
pagesCount: payload.pagesCount
|
|
17
12
|
};
|
|
18
13
|
};
|
|
@@ -17,15 +17,9 @@ export type GetStreamsQuery = {
|
|
|
17
17
|
url: string;
|
|
18
18
|
} | null;
|
|
19
19
|
ownerProfile: {
|
|
20
|
-
image: string | null;
|
|
21
|
-
name: string;
|
|
22
20
|
id: string;
|
|
23
21
|
type: SchemaTypes.ProfileType;
|
|
24
22
|
};
|
|
25
|
-
availableFrom: {
|
|
26
|
-
image: string;
|
|
27
|
-
name: string;
|
|
28
|
-
} | null;
|
|
29
23
|
}>;
|
|
30
24
|
};
|
|
31
25
|
};
|
|
@@ -57,15 +51,9 @@ export type StreamPlayerPayloadFragment = {
|
|
|
57
51
|
url: string;
|
|
58
52
|
} | null;
|
|
59
53
|
ownerProfile: {
|
|
60
|
-
image: string | null;
|
|
61
|
-
name: string;
|
|
62
54
|
id: string;
|
|
63
55
|
type: SchemaTypes.ProfileType;
|
|
64
56
|
};
|
|
65
|
-
availableFrom: {
|
|
66
|
-
image: string;
|
|
67
|
-
name: string;
|
|
68
|
-
} | null;
|
|
69
57
|
};
|
|
70
58
|
export declare const StreamPlayerPayloadFragmentDoc: DocumentNode<StreamPlayerPayloadFragment, unknown>;
|
|
71
59
|
export declare const GetStreamsDocument: DocumentNode<GetStreamsQuery, GetStreamsQueryVariables>;
|
|
@@ -24,24 +24,11 @@ export const StreamPlayerPayloadFragmentDoc = {
|
|
|
24
24
|
selectionSet: {
|
|
25
25
|
kind: 'SelectionSet',
|
|
26
26
|
selections: [
|
|
27
|
-
{ kind: 'Field', name: { kind: 'Name', value: 'image' } },
|
|
28
|
-
{ kind: 'Field', name: { kind: 'Name', value: 'name' } },
|
|
29
27
|
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
|
|
30
28
|
{ kind: 'Field', name: { kind: 'Name', value: 'type' } }
|
|
31
29
|
]
|
|
32
30
|
}
|
|
33
31
|
},
|
|
34
|
-
{
|
|
35
|
-
kind: 'Field',
|
|
36
|
-
name: { kind: 'Name', value: 'availableFrom' },
|
|
37
|
-
selectionSet: {
|
|
38
|
-
kind: 'SelectionSet',
|
|
39
|
-
selections: [
|
|
40
|
-
{ kind: 'Field', name: { kind: 'Name', value: 'image' } },
|
|
41
|
-
{ kind: 'Field', name: { kind: 'Name', value: 'name' } }
|
|
42
|
-
]
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
32
|
{ kind: 'Field', name: { kind: 'Name', value: 'pagesCount' } }
|
|
46
33
|
]
|
|
47
34
|
}
|
|
@@ -108,24 +95,11 @@ export const GetStreamsDocument = {
|
|
|
108
95
|
selectionSet: {
|
|
109
96
|
kind: 'SelectionSet',
|
|
110
97
|
selections: [
|
|
111
|
-
{ kind: 'Field', name: { kind: 'Name', value: 'image' } },
|
|
112
|
-
{ kind: 'Field', name: { kind: 'Name', value: 'name' } },
|
|
113
98
|
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
|
|
114
99
|
{ kind: 'Field', name: { kind: 'Name', value: 'type' } }
|
|
115
100
|
]
|
|
116
101
|
}
|
|
117
102
|
},
|
|
118
|
-
{
|
|
119
|
-
kind: 'Field',
|
|
120
|
-
name: { kind: 'Name', value: 'availableFrom' },
|
|
121
|
-
selectionSet: {
|
|
122
|
-
kind: 'SelectionSet',
|
|
123
|
-
selections: [
|
|
124
|
-
{ kind: 'Field', name: { kind: 'Name', value: 'image' } },
|
|
125
|
-
{ kind: 'Field', name: { kind: 'Name', value: 'name' } }
|
|
126
|
-
]
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
103
|
{ kind: 'Field', name: { kind: 'Name', value: 'pagesCount' } }
|
|
130
104
|
]
|
|
131
105
|
}
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
import { PostViewer } from '../../../posts/post-viewer';
|
|
3
3
|
import { ShortVideoStreamElementLocalization } from './short-video-stream-element-localization';
|
|
4
4
|
import { mapToPostModel } from '../models';
|
|
5
|
-
let { data, trackingParams, locale, on } = $props();
|
|
5
|
+
let { data, trackingParams, locale, controlsColors = null, on } = $props();
|
|
6
6
|
const localization = $derived(new ShortVideoStreamElementLocalization(locale));
|
|
7
7
|
</script>
|
|
8
8
|
|
|
9
9
|
<PostViewer
|
|
10
10
|
model={new PostModel(mapToPostModel(data))}
|
|
11
|
+
controlsColors={controlsColors}
|
|
11
12
|
trackingParams={trackingParams ? { streamId: trackingParams.streamId, campaignId: trackingParams.campaignId } : false}
|
|
12
13
|
autoplay={false}
|
|
13
14
|
enableControls={false}
|
|
@@ -55,25 +55,25 @@ let { stream, aspectRatio = 9 / 16, on } = $props();
|
|
|
55
55
|
bottom: 0;
|
|
56
56
|
left: 0;
|
|
57
57
|
right: 0;
|
|
58
|
-
height: 2.5rem;
|
|
58
|
+
height: clamp(1.75rem, 20cqi, 2.5rem);
|
|
59
|
+
padding-inline: clamp(0.5rem, 6cqi, 0.75rem);
|
|
59
60
|
background: rgba(0, 0, 0, 0.8);
|
|
60
61
|
color: #ffffff;
|
|
61
|
-
padding: 0 0.75rem;
|
|
62
62
|
display: flex;
|
|
63
63
|
flex-direction: column;
|
|
64
64
|
align-content: center;
|
|
65
65
|
justify-content: center;
|
|
66
66
|
}
|
|
67
67
|
.stream-card__title {
|
|
68
|
-
font-size: 0.875rem;
|
|
69
|
-
font-weight:
|
|
68
|
+
font-size: clamp(0.5rem, 7cqi, 0.875rem);
|
|
69
|
+
font-weight: 600;
|
|
70
70
|
white-space: nowrap;
|
|
71
71
|
overflow: hidden;
|
|
72
72
|
text-overflow: ellipsis;
|
|
73
73
|
text-align: center;
|
|
74
74
|
}
|
|
75
75
|
.stream-card__sub-title {
|
|
76
|
-
font-size: 0.625rem;
|
|
76
|
+
font-size: clamp(0.4375rem, 5cqi, 0.625rem);
|
|
77
77
|
font-weight: 400;
|
|
78
78
|
white-space: nowrap;
|
|
79
79
|
overflow: hidden;
|
|
@@ -1,47 +1,9 @@
|
|
|
1
|
-
<script lang="ts">import { Image
|
|
1
|
+
<script lang="ts">import { Image } from '../../ui/image';
|
|
2
2
|
import { InfiniteScrolling } from '../../ui/infinite-scrolling';
|
|
3
|
-
import { LineClamp } from '../../ui/line-clamp';
|
|
4
3
|
import { ProportionalContainer } from '../../ui/proportional-container';
|
|
5
|
-
|
|
6
|
-
import { StreamPlayerLocalization } from './stream-player-localization';
|
|
7
|
-
let { model, buffer, activePageId, on, localization } = $props();
|
|
4
|
+
let { buffer, activePageId, on } = $props();
|
|
8
5
|
</script>
|
|
9
6
|
|
|
10
|
-
<div class="stream-overview-info">
|
|
11
|
-
<div class="stream-overview-owner">
|
|
12
|
-
<div class="stream-overview-owner__image">
|
|
13
|
-
<ImageRound src={model.header.image} />
|
|
14
|
-
</div>
|
|
15
|
-
<div class="stream-overview-owner__body">
|
|
16
|
-
<div class="stream-overview-owner__name">
|
|
17
|
-
<LineClamp maxLines={1}>
|
|
18
|
-
{model.header.name}
|
|
19
|
-
</LineClamp>
|
|
20
|
-
</div>
|
|
21
|
-
<div class="stream-overview-owner__meta">
|
|
22
|
-
<LineClamp maxLines={1}>
|
|
23
|
-
<TimeAgo date={model.publishedAt || model.createdAt} locale={localization.locale} />
|
|
24
|
-
</LineClamp>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
<div class="stream-overview-info__title">
|
|
29
|
-
<LineClamp maxLines={2}>
|
|
30
|
-
{model.title}
|
|
31
|
-
</LineClamp>
|
|
32
|
-
</div>
|
|
33
|
-
{#if model.subTitle}
|
|
34
|
-
<div class="stream-overview-info__subtitle">
|
|
35
|
-
<LineClamp maxLines={3}>
|
|
36
|
-
{model.subTitle}
|
|
37
|
-
</LineClamp>
|
|
38
|
-
</div>
|
|
39
|
-
{/if}
|
|
40
|
-
<div class="stream-overview-info__pages">
|
|
41
|
-
{localization.pagesCount(model.pagesCount)}
|
|
42
|
-
</div>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
7
|
<div class="stream-overview-pages">
|
|
46
8
|
{#if buffer.activeChunk}
|
|
47
9
|
<InfiniteScrolling loadMore={buffer.activeChunk.loadMore}>
|
|
@@ -73,34 +35,14 @@ let { model, buffer, activePageId, on, localization } = $props();
|
|
|
73
35
|
opacity: 1;
|
|
74
36
|
}
|
|
75
37
|
}
|
|
76
|
-
.stream-overview-info {
|
|
77
|
-
padding: 1rem;
|
|
78
|
-
}
|
|
79
|
-
.stream-overview-info__title {
|
|
80
|
-
font-size: 1.125rem;
|
|
81
|
-
line-height: 1.55;
|
|
82
|
-
font-weight: 600;
|
|
83
|
-
color: #ffffff;
|
|
84
|
-
}
|
|
85
|
-
.stream-overview-info__subtitle {
|
|
86
|
-
font-size: 0.875rem;
|
|
87
|
-
color: #ffffff;
|
|
88
|
-
}
|
|
89
|
-
.stream-overview-info__pages {
|
|
90
|
-
font-size: 0.625rem;
|
|
91
|
-
line-height: 1;
|
|
92
|
-
font-weight: 400;
|
|
93
|
-
letter-spacing: -0.0125rem;
|
|
94
|
-
color: #999999;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
38
|
.stream-overview-pages {
|
|
98
39
|
display: flex;
|
|
99
40
|
flex: 1;
|
|
100
41
|
justify-content: center;
|
|
101
42
|
overflow-y: auto;
|
|
102
43
|
overscroll-behavior: contain;
|
|
103
|
-
padding: 0.9375rem 0
|
|
44
|
+
padding-block: 0.9375rem 0;
|
|
45
|
+
padding-inline: 0.9375rem 1.3125rem;
|
|
104
46
|
--_cross-browser-scrollbar--thumb-color: transparent;
|
|
105
47
|
--_cross-browser-scrollbar--track-color: transparent;
|
|
106
48
|
}
|
|
@@ -137,7 +79,7 @@ let { model, buffer, activePageId, on, localization } = $props();
|
|
|
137
79
|
.stream-overview-pages__grid {
|
|
138
80
|
display: grid;
|
|
139
81
|
width: 100%;
|
|
140
|
-
grid-template-columns: repeat(auto-fill, minmax(
|
|
82
|
+
grid-template-columns: repeat(auto-fill, minmax(6.25rem, 1fr));
|
|
141
83
|
gap: 1.25rem;
|
|
142
84
|
}
|
|
143
85
|
}
|
|
@@ -153,37 +95,5 @@ let { model, buffer, activePageId, on, localization } = $props();
|
|
|
153
95
|
}
|
|
154
96
|
}
|
|
155
97
|
.stream-overview-pages__page--active {
|
|
156
|
-
outline: 2px solid #5a8dec;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
.stream-overview-owner {
|
|
160
|
-
display: flex;
|
|
161
|
-
gap: 0.5rem;
|
|
162
|
-
margin-bottom: 0.5rem;
|
|
163
|
-
}
|
|
164
|
-
.stream-overview-owner__image {
|
|
165
|
-
width: 2rem;
|
|
166
|
-
min-width: 2rem;
|
|
167
|
-
max-width: 2rem;
|
|
168
|
-
height: 2rem;
|
|
169
|
-
min-height: 2rem;
|
|
170
|
-
max-height: 2rem;
|
|
171
|
-
--image--rounded--inner--border-width: 0;
|
|
172
|
-
--image--rounded--outer--border-color: #f2f2f3;
|
|
173
|
-
--image--rounded--outer--border-width: 1px;
|
|
174
|
-
}
|
|
175
|
-
.stream-overview-owner__body {
|
|
176
|
-
display: flex;
|
|
177
|
-
flex-direction: column;
|
|
178
|
-
justify-content: center;
|
|
179
|
-
color: #ffffff;
|
|
180
|
-
}
|
|
181
|
-
.stream-overview-owner__name {
|
|
182
|
-
font-size: 0.75rem;
|
|
183
|
-
font-weight: 500;
|
|
184
|
-
letter-spacing: -0.015625rem;
|
|
185
|
-
}
|
|
186
|
-
.stream-overview-owner__meta {
|
|
187
|
-
font-size: 0.625rem;
|
|
188
|
-
letter-spacing: -0.0125rem;
|
|
98
|
+
outline: 2px solid var(--brand-color, #5a8dec);
|
|
189
99
|
}</style>
|
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import { StreamPlayerLocalization } from './stream-player-localization';
|
|
2
1
|
import type { StreamsPlayerBuffer } from './streams-player-buffer.svelte';
|
|
3
|
-
import type { StreamPlayerModel } from './types';
|
|
4
2
|
type Props = {
|
|
5
|
-
model: StreamPlayerModel;
|
|
6
3
|
buffer: StreamsPlayerBuffer;
|
|
7
4
|
activePageId: string;
|
|
8
|
-
localization: StreamPlayerLocalization;
|
|
9
5
|
on: {
|
|
10
6
|
setCurrentItem: (index: number) => void;
|
|
11
7
|
};
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import {} from '../../core/locale';
|
|
2
2
|
export class StreamPlayerLocalization {
|
|
3
3
|
streamNotFound;
|
|
4
|
-
pagesCount;
|
|
5
4
|
locale;
|
|
6
5
|
constructor(locale) {
|
|
7
6
|
this.streamNotFound = loc.streamNotFound[locale];
|
|
8
|
-
this.pagesCount = loc.pagesCount[locale];
|
|
9
7
|
this.locale = locale;
|
|
10
8
|
}
|
|
11
9
|
}
|
|
@@ -13,9 +11,5 @@ const loc = {
|
|
|
13
11
|
streamNotFound: {
|
|
14
12
|
en: 'Stream not found',
|
|
15
13
|
no: 'Stream ikke funnet'
|
|
16
|
-
},
|
|
17
|
-
pagesCount: {
|
|
18
|
-
en: (count) => (count === 1 ? '1 page' : `${count} pages`),
|
|
19
|
-
no: (count) => (count === 1 ? '1 side' : `${count} sider`)
|
|
20
14
|
}
|
|
21
15
|
};
|
|
@@ -238,10 +238,8 @@ const stopActivityTracking = () => {
|
|
|
238
238
|
{#snippet overviewPanelContent()}
|
|
239
239
|
{#if contentPlayerConfig.playerBuffer && buffer && currentStreamModel}
|
|
240
240
|
<Overview
|
|
241
|
-
model={currentStreamModel}
|
|
242
241
|
buffer={buffer}
|
|
243
242
|
activePageId={activePageId}
|
|
244
|
-
localization={localization}
|
|
245
243
|
on={{
|
|
246
244
|
setCurrentItem: handleChangePage
|
|
247
245
|
}} />
|
|
@@ -30,6 +30,7 @@ let { src, color = null } = $props();
|
|
|
30
30
|
.icon {
|
|
31
31
|
--_icon--color: var(--icon--color);
|
|
32
32
|
--_icon--size: var(--icon--size, 1.25em);
|
|
33
|
+
--_icon--stroke-color: var(--icon--stroke-color);
|
|
33
34
|
--_icon--stroke-width: var(--icon--stroke-width, 0);
|
|
34
35
|
--_icon--filter: var(--icon--filter, none);
|
|
35
36
|
display: contents;
|
|
@@ -89,10 +90,10 @@ let { src, color = null } = $props();
|
|
|
89
90
|
max-width: var(--_icon--size);
|
|
90
91
|
}
|
|
91
92
|
.icon :global(path) {
|
|
92
|
-
stroke: var(--_icon--color);
|
|
93
|
+
stroke: var(--_icon--stroke-color, var(--_icon--color));
|
|
93
94
|
stroke-width: var(--_icon--stroke-width);
|
|
94
95
|
}
|
|
95
96
|
:global([data-theme="dark"]) .icon :global(path) {
|
|
96
|
-
stroke: var(--_icon--color);
|
|
97
|
+
stroke: var(--_icon--stroke-color, var(--_icon--color));
|
|
97
98
|
stroke-width: var(--_icon--stroke-width);
|
|
98
99
|
}</style>
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
<script lang="ts">import { Icon, IconColor } from '../../icon';
|
|
2
|
-
let { icon, iconColor, scaleEffect = false, disabled = false, on } = $props();
|
|
2
|
+
let { icon, activeColor, inactiveColor, iconColor, scaleEffect = false, disabled = false, zoom = 1, on } = $props();
|
|
3
|
+
const styles = $derived.by(() => {
|
|
4
|
+
const values = [`zoom: ${zoom}`];
|
|
5
|
+
if (activeColor) {
|
|
6
|
+
values.push(`--player-button--color: ${activeColor}`);
|
|
7
|
+
}
|
|
8
|
+
if (inactiveColor) {
|
|
9
|
+
values.push(`--player-button--color--inactive: ${inactiveColor}`);
|
|
10
|
+
}
|
|
11
|
+
return values.join(';');
|
|
12
|
+
});
|
|
3
13
|
</script>
|
|
4
14
|
|
|
5
|
-
<button type="button" class="player-button" class:player-button--scale-effect={scaleEffect} disabled={disabled} onclick={on.click}>
|
|
15
|
+
<button type="button" class="player-button" style={styles} class:player-button--scale-effect={scaleEffect} disabled={disabled} onclick={on.click}>
|
|
6
16
|
<span class="player-button__icon">
|
|
7
17
|
<Icon src={icon} color={iconColor} />
|
|
8
18
|
</span>
|
|
@@ -20,22 +30,24 @@ let { icon, iconColor, scaleEffect = false, disabled = false, on } = $props();
|
|
|
20
30
|
}
|
|
21
31
|
}
|
|
22
32
|
.player-button {
|
|
33
|
+
--_player-button--color: var(--player-button--color, rgb(from #000000 r g b / 95%));
|
|
34
|
+
--_player-button--color--inactive: var(--player-button--color--inactive, rgb(from var(--_player-button--color, #000000) r g b / 60%));
|
|
23
35
|
--_player-button--icon-scale: 1;
|
|
24
36
|
pointer-events: auto;
|
|
25
37
|
padding: 0.625rem;
|
|
26
38
|
display: flex;
|
|
27
39
|
justify-content: center;
|
|
28
40
|
align-items: center;
|
|
29
|
-
background-color:
|
|
41
|
+
background-color: var(--_player-button--color--inactive);
|
|
30
42
|
transition: background-color 0.5s;
|
|
31
|
-
border: 1px solid
|
|
43
|
+
border: 1px solid var(--_player-button--color);
|
|
32
44
|
border-radius: 50%;
|
|
33
45
|
--icon--color: #ffffff;
|
|
34
46
|
--icon--size: 1.75rem;
|
|
35
47
|
/* Set 'container-type: inline-size;' to reference container*/
|
|
36
48
|
}
|
|
37
49
|
.player-button:hover:not(:disabled) {
|
|
38
|
-
background-color:
|
|
50
|
+
background-color: var(--_player-button--color);
|
|
39
51
|
}
|
|
40
52
|
.player-button:disabled {
|
|
41
53
|
opacity: 0.5;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { IconColor } from '../../icon';
|
|
2
2
|
type Props = {
|
|
3
3
|
icon: string;
|
|
4
|
+
activeColor: string | null;
|
|
5
|
+
inactiveColor: string | null;
|
|
4
6
|
iconColor?: IconColor;
|
|
5
7
|
disabled?: boolean;
|
|
6
8
|
scaleEffect?: boolean;
|
|
9
|
+
zoom?: number;
|
|
7
10
|
on: {
|
|
8
11
|
click: () => void;
|
|
9
12
|
};
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
<script lang="ts">import { Icon } from '../../icon';
|
|
2
|
-
let { scaleEffect = false, actions } = $props();
|
|
2
|
+
let { scaleEffect = false, borderColor, backgroundColor, actions } = $props();
|
|
3
|
+
const styles = $derived.by(() => {
|
|
4
|
+
const values = [];
|
|
5
|
+
if (borderColor) {
|
|
6
|
+
values.push(`--player-buttons-group--border-color: ${borderColor}`);
|
|
7
|
+
}
|
|
8
|
+
if (backgroundColor) {
|
|
9
|
+
values.push(`--player-buttons-group--background-color: ${backgroundColor}`);
|
|
10
|
+
}
|
|
11
|
+
return values.join(';');
|
|
12
|
+
});
|
|
3
13
|
</script>
|
|
4
14
|
|
|
5
|
-
<div class="player-buttons-group">
|
|
15
|
+
<div class="player-buttons-group" style={styles}>
|
|
6
16
|
{#each actions as action (action.icon)}
|
|
7
17
|
<button type="button" class="player-buttons-group__action" class:player-buttons-group__action--scale-effect={scaleEffect} onclick={action.callback}>
|
|
8
|
-
<span class="player-buttons-group__action-icon">
|
|
18
|
+
<span class="player-buttons-group__action-icon" style={`--icon--stroke-width:${action.iconStrokeWidth}; --icon--stroke-color:${action.iconStrokeColor}`}>
|
|
9
19
|
<Icon src={action.icon} color={action.iconColor} />
|
|
10
20
|
</span>
|
|
11
21
|
</button>
|
|
@@ -24,14 +34,19 @@ let { scaleEffect = false, actions } = $props();
|
|
|
24
34
|
}
|
|
25
35
|
}
|
|
26
36
|
.player-buttons-group {
|
|
37
|
+
--_player-buttons-group--border-color: var(--player-buttons-group--border-color, rgb(from #000000 r g b / 95%));
|
|
38
|
+
--_player-buttons-group--background-color: var(
|
|
39
|
+
--player-buttons-group--background-color,
|
|
40
|
+
rgb(from var(--_player-buttons-group--border-color, #000000) r g b / 60%)
|
|
41
|
+
);
|
|
27
42
|
cursor: pointer;
|
|
28
43
|
display: flex;
|
|
29
44
|
flex-direction: column;
|
|
30
45
|
justify-content: center;
|
|
31
46
|
gap: 1.125rem;
|
|
32
|
-
border: 1px solid
|
|
47
|
+
border: 1px solid var(--_player-buttons-group--border-color);
|
|
33
48
|
border-radius: 1.25rem;
|
|
34
|
-
background:
|
|
49
|
+
background: var(--_player-buttons-group--background-color);
|
|
35
50
|
padding: 1rem 0.625rem;
|
|
36
51
|
pointer-events: auto;
|
|
37
52
|
/* Set 'container-type: inline-size;' to reference container*/
|