@streamscloud/embeddable 3.2.3 → 3.2.5
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/core/analytics.profile-id.d.ts +5 -0
- package/dist/core/analytics.profile-id.js +17 -0
- package/dist/core/document.event-handlers.d.ts +1 -0
- package/dist/core/document.event-handlers.js +5 -0
- package/dist/core/enums.d.ts +0 -2
- package/dist/core/enums.js +0 -2
- package/dist/core/graphql.d.ts +3 -1
- package/dist/core/graphql.js +12 -3
- package/dist/core/locale.d.ts +6 -0
- package/dist/core/locale.js +24 -0
- package/dist/core/utils/html-helper.d.ts +1 -0
- package/dist/core/utils/html-helper.js +4 -0
- package/dist/products/price-helper.js +1 -1
- package/dist/short-videos/short-video-viewer/cmp.ad.svelte +103 -37
- package/dist/short-videos/short-video-viewer/cmp.attachments-inline.svelte +2 -2
- package/dist/short-videos/short-video-viewer/cmp.attachments.svelte +2 -2
- package/dist/short-videos/short-video-viewer/cmp.attachments.svelte.d.ts +3 -2
- package/dist/short-videos/short-video-viewer/cmp.product.svelte +1 -1
- package/dist/short-videos/short-video-viewer/cmp.product.svelte.d.ts +3 -2
- package/dist/short-videos/short-video-viewer/cmp.short-video-details.svelte +1 -1
- package/dist/short-videos/short-video-viewer/cmp.short-video-details.svelte.d.ts +3 -2
- package/dist/short-videos/short-video-viewer/cmp.short-video-heading.svelte +6 -2
- package/dist/short-videos/short-video-viewer/cmp.short-video-heading.svelte.d.ts +1 -1
- package/dist/short-videos/short-video-viewer/cmp.short-video-viewer.svelte +1 -1
- package/dist/short-videos/short-video-viewer/cmp.short-video-viewer.svelte.d.ts +3 -2
- package/dist/short-videos/short-video-viewer/description.svelte +5 -0
- package/dist/short-videos/short-video-viewer/description.svelte.d.ts +1 -1
- package/dist/short-videos/short-video-viewer/index.d.ts +4 -2
- package/dist/short-videos/short-video-viewer/index.js +1 -0
- package/dist/short-videos/short-video-viewer/mapper.js +5 -4
- package/dist/short-videos/short-video-viewer/operations.generated.d.ts +10 -3
- package/dist/short-videos/short-video-viewer/operations.generated.js +17 -3
- package/dist/short-videos/short-video-viewer/operations.graphql +10 -3
- package/dist/short-videos/short-video-viewer/{short-video-attachments-localization.svelte.d.ts → short-video-attachments-localization.d.ts} +5 -4
- package/dist/short-videos/short-video-viewer/short-video-attachments-localization.js +21 -0
- package/dist/short-videos/short-video-viewer/{short-video-details-localization.svelte.d.ts → short-video-details-localization.d.ts} +7 -6
- package/dist/short-videos/short-video-viewer/short-video-details-localization.js +17 -0
- package/dist/short-videos/short-video-viewer/{short-video-product-localization.svelte.d.ts → short-video-product-localization.d.ts} +2 -1
- package/dist/short-videos/short-video-viewer/short-video-product-localization.js +13 -0
- package/dist/short-videos/short-video-viewer/short-video-viewer-localization.d.ts +14 -0
- package/dist/short-videos/short-video-viewer/short-video-viewer-localization.js +17 -0
- package/dist/short-videos/short-video-viewer/types.d.ts +10 -3
- package/dist/short-videos/short-videos-player/cmp.short-videos-player.svelte +88 -11
- package/dist/short-videos/short-videos-player/cmp.short-videos-player.svelte.d.ts +5 -5
- package/dist/short-videos/short-videos-player/controls.svelte +2 -2
- package/dist/short-videos/short-videos-player/controls.svelte.d.ts +1 -1
- package/dist/short-videos/short-videos-player/index.d.ts +51 -14
- package/dist/short-videos/short-videos-player/index.js +83 -12
- package/dist/short-videos/short-videos-player/operations.generated.d.ts +71 -0
- package/dist/short-videos/short-videos-player/operations.generated.js +207 -0
- package/dist/short-videos/short-videos-player/operations.graphql +8 -0
- package/dist/short-videos/short-videos-player/short-videos-player-localization.d.ts +16 -0
- package/dist/short-videos/short-videos-player/short-videos-player-localization.js +13 -0
- package/dist/short-videos/short-videos-player/types.d.ts +36 -0
- package/dist/short-videos/short-videos-player/types.js +6 -0
- package/dist/streams/layout/cmp.layout.svelte.d.ts +4 -2
- package/dist/streams/layout/cmp.slot-content.svelte +4 -4
- package/dist/streams/layout/cmp.slot-content.svelte.d.ts +2 -1
- package/dist/streams/layout/cmp.slot.svelte.d.ts +7 -2
- package/dist/streams/layout/component.d.ts +2 -0
- package/dist/streams/layout/element-views/cmp.annotation-stream-element.svelte +16 -0
- package/dist/streams/layout/element-views/cmp.annotation-stream-element.svelte.d.ts +7 -0
- package/dist/streams/layout/element-views/cmp.container-stream-element.svelte +1 -1
- package/dist/streams/layout/element-views/cmp.container-stream-element.svelte.d.ts +4 -3
- package/dist/streams/layout/element-views/cmp.image-ref-stream-element.svelte +15 -2
- package/dist/streams/layout/element-views/cmp.image-ref-stream-element.svelte.d.ts +7 -3
- package/dist/streams/layout/element-views/cmp.images-stream-element.svelte +2 -2
- package/dist/streams/layout/element-views/cmp.price-stream-element.svelte +15 -89
- package/dist/streams/layout/element-views/cmp.price-stream-element.svelte.d.ts +5 -4
- package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte +4 -2
- package/dist/streams/layout/element-views/cmp.short-video-stream-element.svelte.d.ts +3 -0
- package/dist/streams/layout/element-views/cmp.stock-stream-element.svelte +74 -0
- package/dist/streams/layout/element-views/cmp.stock-stream-element.svelte.d.ts +11 -0
- package/dist/streams/layout/element-views/cmp.stream-element.svelte +24 -17
- package/dist/streams/layout/element-views/cmp.stream-element.svelte.d.ts +4 -3
- package/dist/streams/layout/element-views/cmp.text-ref-stream-element.svelte.d.ts +2 -2
- package/dist/streams/layout/element-views/cmp.text-stream-element.svelte +6 -2
- package/dist/streams/layout/element-views/cmp.text-stream-element.svelte.d.ts +2 -0
- package/dist/streams/layout/element-views/cmp.web-view-stream-element.svelte +37 -0
- package/dist/streams/layout/element-views/cmp.web-view-stream-element.svelte.d.ts +7 -0
- package/dist/streams/layout/element-views/data-by-key-accessor.d.ts +3 -3
- package/dist/streams/layout/element-views/index.d.ts +16 -11
- package/dist/streams/layout/element-views/index.js +12 -9
- package/dist/streams/layout/element-views/price-element-view.svelte +168 -0
- package/dist/streams/layout/element-views/price-element-view.svelte.d.ts +15 -0
- package/dist/streams/layout/element-views/price-stream-element-localization.d.ts +13 -0
- package/dist/streams/layout/element-views/price-stream-element-localization.js +21 -0
- package/dist/streams/layout/element-views/short-video-stream-element-localization.d.ts +9 -0
- package/dist/streams/layout/element-views/short-video-stream-element-localization.js +7 -0
- package/dist/streams/layout/element-views/stock-stream-element-localization.d.ts +8 -0
- package/dist/streams/layout/element-views/stock-stream-element-localization.js +26 -0
- package/dist/streams/layout/element-views/stream-element-localization.d.ts +15 -0
- package/dist/streams/layout/element-views/stream-element-localization.js +11 -0
- package/dist/streams/layout/elements.d.ts +47 -12
- package/dist/streams/layout/elements.js +1 -1
- package/dist/streams/layout/enums.d.ts +34 -3
- package/dist/streams/layout/enums.js +46 -7
- package/dist/streams/layout/index.d.ts +3 -10
- package/dist/streams/layout/index.js +3 -2
- package/dist/streams/layout/layout.d.ts +2 -1
- package/dist/streams/layout/models/index.d.ts +1 -1
- package/dist/streams/layout/models/mapper.js +5 -4
- package/dist/streams/layout/models/stream-layout-media-item-model.d.ts +1 -1
- package/dist/streams/layout/models/stream-layout-media-item-model.js +1 -1
- package/dist/streams/layout/models/stream-layout-post-header-model.d.ts +1 -1
- package/dist/streams/layout/models/stream-layout-product-model.d.ts +1 -2
- package/dist/streams/layout/models/stream-layout-short-video-model.d.ts +13 -3
- package/dist/streams/layout/serializer.svelte.d.ts +29 -0
- package/dist/streams/layout/serializer.svelte.js +93 -0
- package/dist/streams/layout/slot-data-ref.d.ts +13 -0
- package/dist/streams/layout/slot-data-ref.js +1 -0
- package/dist/streams/layout/slot.d.ts +2 -0
- package/dist/streams/layout/styles-transformer.d.ts +3 -2
- package/dist/streams/layout/styles-transformer.js +54 -30
- package/dist/streams/layout/styles.d.ts +24 -14
- package/dist/streams/layout/svg-attributes.d.ts +7 -0
- package/dist/streams/layout/svg-attributes.js +8 -0
- package/dist/streams/layout/type-guards.d.ts +31 -0
- package/dist/streams/layout/type-guards.js +13 -1
- package/dist/streams/stream-page-viewer/cmp.stream-page-viewer.svelte +4 -2
- package/dist/streams/stream-page-viewer/cmp.stream-page-viewer.svelte.d.ts +3 -0
- package/dist/streams/stream-page-viewer/index.d.ts +1 -0
- package/dist/streams/stream-page-viewer/stream-page-viewer-localization.d.ts +9 -0
- package/dist/streams/stream-page-viewer/stream-page-viewer-localization.js +7 -0
- package/dist/streams/stream-player/cmp.stream-player.svelte +47 -7
- package/dist/streams/stream-player/cmp.stream-player.svelte.d.ts +6 -4
- package/dist/streams/stream-player/controls.svelte +46 -3
- package/dist/streams/stream-player/controls.svelte.d.ts +1 -1
- package/dist/streams/stream-player/index.d.ts +6 -4
- package/dist/streams/stream-player/index.js +15 -28
- package/dist/streams/stream-player/operations.generated.d.ts +1 -1
- package/dist/streams/stream-player/operations.generated.js +5 -3
- package/dist/streams/stream-player/operations.graphql +3 -3
- package/dist/streams/stream-player/stream-overview.svelte +2 -2
- package/dist/streams/stream-player/stream-overview.svelte.d.ts +1 -1
- package/dist/streams/stream-player/stream-player-buffer.svelte.js +2 -2
- package/dist/streams/stream-player/stream-player-localization.d.ts +26 -0
- package/dist/streams/stream-player/stream-player-localization.js +31 -0
- package/dist/ui/icon/cmp.icon.svelte +13 -26
- package/dist/ui/line-clamp/cmp.line-clamp.svelte +2 -2
- package/dist/ui/line-clamp/cmp.line-clamp.svelte.d.ts +3 -2
- package/dist/ui/line-clamp/index.d.ts +1 -1
- package/dist/ui/line-clamp/index.js +1 -1
- package/dist/ui/line-clamp/{line-clamp-localization.svelte.d.ts → line-clamp-localization.d.ts} +2 -1
- package/dist/ui/line-clamp/line-clamp-localization.js +19 -0
- package/dist/ui/shadow-dom/shadow-host.d.ts +1 -5
- package/dist/ui/shadow-dom/shadow-host.js +1 -14
- package/dist/ui/swipe-indicator/cmp.swipe-indicator.svelte +125 -0
- package/dist/ui/swipe-indicator/cmp.swipe-indicator.svelte.d.ts +9 -0
- package/dist/ui/swipe-indicator/index.d.ts +2 -0
- package/dist/ui/swipe-indicator/index.js +1 -0
- package/dist/ui/swipe-indicator/swipe-indicator-localization.d.ts +8 -0
- package/dist/ui/swipe-indicator/swipe-indicator-localization.js +13 -0
- package/dist/ui/time-ago/cmp.time-ago.svelte +1 -1
- package/dist/ui/time-ago/cmp.time-ago.svelte.d.ts +3 -2
- package/dist/ui/time-ago/index.d.ts +1 -1
- package/dist/ui/time-ago/{time-ago-localization.svelte.d.ts → time-ago-localization.d.ts} +2 -1
- package/dist/ui/time-ago/time-ago-localization.js +55 -0
- package/dist/ui/video/cmp.video.svelte +42 -18
- package/package.json +1 -1
- package/dist/short-videos/short-video-viewer/short-video-attachments-localization.svelte.js +0 -10
- package/dist/short-videos/short-video-viewer/short-video-details-localization.svelte.js +0 -10
- package/dist/short-videos/short-video-viewer/short-video-product-localization.svelte.js +0 -11
- package/dist/short-videos/short-video-viewer/short-video-viewer-localization.svelte.d.ts +0 -13
- package/dist/short-videos/short-video-viewer/short-video-viewer-localization.svelte.js +0 -10
- package/dist/short-videos/short-videos-player/short-videos-player-localization.svelte.d.ts +0 -8
- package/dist/short-videos/short-videos-player/short-videos-player-localization.svelte.js +0 -6
- package/dist/streams/layout/element-views/price-stream-element-localization.svelte.d.ts +0 -9
- package/dist/streams/layout/element-views/price-stream-element-localization.svelte.js +0 -8
- package/dist/streams/layout/element-views/stream-element-localization.svelte.d.ts +0 -8
- package/dist/streams/layout/element-views/stream-element-localization.svelte.js +0 -6
- package/dist/streams/layout/serializer.d.ts +0 -3
- package/dist/streams/layout/serializer.js +0 -6
- package/dist/streams/stream-page-viewer/stream-page-viewer-localization.svelte.d.ts +0 -13
- package/dist/streams/stream-page-viewer/stream-page-viewer-localization.svelte.js +0 -10
- package/dist/streams/stream-player/stream-player-localization.svelte.d.ts +0 -12
- package/dist/streams/stream-player/stream-player-localization.svelte.js +0 -10
- package/dist/ui/line-clamp/line-clamp-localization.svelte.js +0 -15
- package/dist/ui/time-ago/time-ago-localization.svelte.js +0 -39
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Key used for storing the profile ID in local storage
|
|
3
|
+
*/
|
|
4
|
+
const PROFILE_ID_STORAGE_KEY = 'streamscloud_profile_id';
|
|
5
|
+
/**
|
|
6
|
+
* Retrieves the profile ID from localStorage or generates a new one if it doesn't exist
|
|
7
|
+
* @returns The profile ID to use for analytics tracking
|
|
8
|
+
*/
|
|
9
|
+
export const getOrCreateProfileId = () => {
|
|
10
|
+
const storedProfileId = localStorage.getItem(PROFILE_ID_STORAGE_KEY);
|
|
11
|
+
if (!storedProfileId) {
|
|
12
|
+
const newProfileId = crypto.randomUUID();
|
|
13
|
+
localStorage.setItem(PROFILE_ID_STORAGE_KEY, newProfileId);
|
|
14
|
+
return newProfileId;
|
|
15
|
+
}
|
|
16
|
+
return storedProfileId;
|
|
17
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const handleEsc: (event: KeyboardEvent, callback: () => void) => void;
|
package/dist/core/enums.d.ts
CHANGED
package/dist/core/enums.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
export var PostSourceType;
|
|
2
2
|
(function (PostSourceType) {
|
|
3
|
-
PostSourceType["Channel"] = "CHANNEL";
|
|
4
|
-
PostSourceType["Group"] = "GROUP";
|
|
5
3
|
PostSourceType["MediaPage"] = "MEDIA_PAGE";
|
|
6
4
|
PostSourceType["Organization"] = "ORGANIZATION";
|
|
7
5
|
PostSourceType["UserProfile"] = "USER_PROFILE";
|
package/dist/core/graphql.d.ts
CHANGED
|
@@ -1 +1,3 @@
|
|
|
1
|
-
export declare const createLocalGQLClient: (
|
|
1
|
+
export declare const createLocalGQLClient: (graphqlOrigin?: string, headers?: HeadersInit, customFetch?: typeof fetch) => import("@urql/core").Client;
|
|
2
|
+
export declare const resolveGraphQLOrigin: (origin?: string) => string;
|
|
3
|
+
export declare const constructGraphQLUrl: (graphqlOrigin?: string) => string;
|
package/dist/core/graphql.js
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { createClient, fetchExchange } from '@urql/core';
|
|
2
|
-
export const createLocalGQLClient = (
|
|
3
|
-
url:
|
|
2
|
+
export const createLocalGQLClient = (graphqlOrigin, headers, customFetch) => createClient({
|
|
3
|
+
url: constructGraphQLUrl(resolveGraphQLOrigin(graphqlOrigin)),
|
|
4
4
|
requestPolicy: 'network-only',
|
|
5
5
|
fetchOptions: {
|
|
6
|
-
credentials: 'include'
|
|
6
|
+
credentials: 'include',
|
|
7
|
+
headers: headers
|
|
7
8
|
},
|
|
8
9
|
fetch: customFetch || fetch,
|
|
9
10
|
exchanges: [fetchExchange]
|
|
10
11
|
});
|
|
12
|
+
export const resolveGraphQLOrigin = (origin) => {
|
|
13
|
+
return origin || 'https://api.streamscloud.com';
|
|
14
|
+
};
|
|
15
|
+
export const constructGraphQLUrl = (graphqlOrigin) => {
|
|
16
|
+
let baseUrl = resolveGraphQLOrigin(graphqlOrigin);
|
|
17
|
+
baseUrl = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;
|
|
18
|
+
return `${baseUrl}external/graphql`;
|
|
19
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type Locale = 'en' | 'no';
|
|
2
|
+
export declare const getLocale: <T>(input?: Locale | T) => Locale | T;
|
|
3
|
+
export declare const isEn: <T>(input: Locale | T) => input is "en";
|
|
4
|
+
export declare const isNo: <T>(input: Locale | T) => input is "no";
|
|
5
|
+
export declare const isLocale: <T>(input: Locale | T) => input is Locale;
|
|
6
|
+
export declare const isLocalizationInterface: <T>(input: Locale | T) => input is T;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const getLocale = (input) => {
|
|
2
|
+
if (input === undefined || input === null) {
|
|
3
|
+
return 'en';
|
|
4
|
+
}
|
|
5
|
+
switch (input) {
|
|
6
|
+
case 'en':
|
|
7
|
+
case 'no':
|
|
8
|
+
return input;
|
|
9
|
+
default:
|
|
10
|
+
return input;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
export const isEn = (input) => {
|
|
14
|
+
return input === 'en';
|
|
15
|
+
};
|
|
16
|
+
export const isNo = (input) => {
|
|
17
|
+
return input === 'no';
|
|
18
|
+
};
|
|
19
|
+
export const isLocale = (input) => {
|
|
20
|
+
return input === 'en' || input === 'no';
|
|
21
|
+
};
|
|
22
|
+
export const isLocalizationInterface = (input) => {
|
|
23
|
+
return typeof input === 'object' && input !== null;
|
|
24
|
+
};
|
|
@@ -36,5 +36,6 @@ export declare class HtmlHelper {
|
|
|
36
36
|
* DomHelper.insert(siblingElement, newContentField, false);
|
|
37
37
|
*/
|
|
38
38
|
static insert(newElement: Element, siblingElement: Element, insertBefore?: boolean): void;
|
|
39
|
+
static sanitizeSvg(svg: string): string;
|
|
39
40
|
static pasteIntoInput(value: string, element: HTMLInputElement | HTMLTextAreaElement): void;
|
|
40
41
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import dp from 'dompurify';
|
|
1
2
|
export class HtmlHelper {
|
|
2
3
|
static clearSelection() {
|
|
3
4
|
if (window.getSelection) {
|
|
@@ -70,6 +71,9 @@ export class HtmlHelper {
|
|
|
70
71
|
HtmlHelper.insertAfter(newElement, siblingElement);
|
|
71
72
|
}
|
|
72
73
|
}
|
|
74
|
+
static sanitizeSvg(svg) {
|
|
75
|
+
return dp.sanitize(svg, { USE_PROFILES: { svg: true, svgFilters: true }, ADD_ATTR: ['dominant-baseline'] });
|
|
76
|
+
}
|
|
73
77
|
static pasteIntoInput(value, element) {
|
|
74
78
|
if (element.selectionStart || element.selectionStart === 0) {
|
|
75
79
|
const startPos = element.selectionStart;
|
|
@@ -20,7 +20,7 @@ export const toPriceRepresentation = (amount, currency, includeCurrency = true)
|
|
|
20
20
|
}
|
|
21
21
|
case Currency.Usd: {
|
|
22
22
|
const value = formatNumber(amount);
|
|
23
|
-
return includeCurrency ?
|
|
23
|
+
return includeCurrency ? `$ ${value}` : value;
|
|
24
24
|
}
|
|
25
25
|
default: {
|
|
26
26
|
Utils.assertUnreachable(currency);
|
|
@@ -1,27 +1,34 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
2
|
-
import { Image } from '../../ui/image';
|
|
1
|
+
<script lang="ts">import { Image } from '../../ui/image';
|
|
3
2
|
import { LineClamp } from '../../ui/line-clamp';
|
|
4
3
|
import { ProportionalContainer } from '../../ui/proportional-container';
|
|
5
4
|
let { ad } = $props();
|
|
6
5
|
</script>
|
|
7
6
|
|
|
8
|
-
<div class="
|
|
9
|
-
<ProportionalContainer ratio={
|
|
7
|
+
<div class="ad">
|
|
8
|
+
<ProportionalContainer ratio={234 / 277}>
|
|
10
9
|
<Image src={ad.image} alt={ad.title} />
|
|
11
10
|
</ProportionalContainer>
|
|
12
|
-
<div class="
|
|
11
|
+
<div class="ad__info">
|
|
13
12
|
{#if ad.title}
|
|
14
|
-
<
|
|
13
|
+
<div class="ad__title">{ad.title}</div>
|
|
15
14
|
{/if}
|
|
16
15
|
{#if ad.description}
|
|
17
|
-
<
|
|
18
|
-
<LineClamp value={ad.description} maxLines={
|
|
19
|
-
</
|
|
16
|
+
<div class="ad__description">
|
|
17
|
+
<LineClamp value={ad.description} maxLines={2} />
|
|
18
|
+
</div>
|
|
19
|
+
{/if}
|
|
20
|
+
{#if ad.price && ad.currency}
|
|
21
|
+
<div class="ad__price">{ad.currency} {ad.price}</div>
|
|
20
22
|
{/if}
|
|
21
|
-
{#if ad.
|
|
22
|
-
<div class="
|
|
23
|
-
<a
|
|
24
|
-
|
|
23
|
+
{#if ad.ctaButton}
|
|
24
|
+
<div class="ad__button">
|
|
25
|
+
<a
|
|
26
|
+
href={ad.ctaButton.url}
|
|
27
|
+
target="_blank"
|
|
28
|
+
class="short-video-ad-viewer__link"
|
|
29
|
+
style="background-color: {ad.ctaButton.background}; color: {ad.ctaButton.textColor}; border: {ad.ctaButton
|
|
30
|
+
.border}; text-decoration: none; padding: 0.5em 1em; border-radius: 0.25em; display: inline-block;">
|
|
31
|
+
{ad.ctaButton.text}
|
|
25
32
|
</a>
|
|
26
33
|
</div>
|
|
27
34
|
{/if}
|
|
@@ -39,36 +46,95 @@ let { ad } = $props();
|
|
|
39
46
|
opacity: 1;
|
|
40
47
|
}
|
|
41
48
|
}
|
|
42
|
-
.
|
|
43
|
-
--
|
|
49
|
+
.ad {
|
|
50
|
+
--image--border-radius: 0.25rem;
|
|
51
|
+
--image--object-fit: fit;
|
|
52
|
+
--image--width: auto;
|
|
53
|
+
--image--height: auto;
|
|
54
|
+
width: 100%;
|
|
55
|
+
height: max-content;
|
|
44
56
|
display: flex;
|
|
45
57
|
flex-direction: column;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
58
|
+
position: relative;
|
|
59
|
+
container-type: inline-size;
|
|
60
|
+
aspect-ratio: 9/16;
|
|
61
|
+
background-color: #fafafa;
|
|
62
|
+
border: 0.038125rem solid #999999;
|
|
63
|
+
border-radius: 0.5rem;
|
|
64
|
+
padding: 0.75rem 0.75rem 1.125rem;
|
|
65
|
+
justify-content: space-between;
|
|
66
|
+
/* Set 'container-type: inline-size;' to reference container*/
|
|
51
67
|
}
|
|
52
|
-
|
|
53
|
-
|
|
68
|
+
@container (width < 230px) {
|
|
69
|
+
.ad {
|
|
70
|
+
padding: 0.5rem 0.5rem 0.75rem;
|
|
71
|
+
}
|
|
54
72
|
}
|
|
55
|
-
.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
73
|
+
.ad__info {
|
|
74
|
+
display: flex;
|
|
75
|
+
flex-direction: column;
|
|
76
|
+
gap: 0.375rem;
|
|
77
|
+
margin-top: 0.1875rem;
|
|
78
|
+
/* Set 'container-type: inline-size;' to reference container*/
|
|
61
79
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
80
|
+
@container (width < 230px) {
|
|
81
|
+
.ad__info {
|
|
82
|
+
gap: 0.25rem;
|
|
83
|
+
margin-top: 0.125rem;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
.ad__title {
|
|
87
|
+
font-weight: 700;
|
|
88
|
+
font-size: 1.125rem;
|
|
89
|
+
line-height: 1.375rem;
|
|
90
|
+
min-height: 1.375rem;
|
|
91
|
+
color: #000000;
|
|
92
|
+
/* Set 'container-type: inline-size;' to reference container*/
|
|
69
93
|
}
|
|
70
|
-
|
|
71
|
-
|
|
94
|
+
@container (width < 230px) {
|
|
95
|
+
.ad__title {
|
|
96
|
+
font-size: 0.75rem;
|
|
97
|
+
line-height: 0.875rem;
|
|
98
|
+
min-height: 0.875rem;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
.ad__description {
|
|
102
|
+
font-weight: 400;
|
|
103
|
+
color: #6b7280;
|
|
104
|
+
font-size: 0.9375rem;
|
|
105
|
+
line-height: 1.375rem;
|
|
106
|
+
min-height: 1.375rem;
|
|
107
|
+
/* Set 'container-type: inline-size;' to reference container*/
|
|
108
|
+
}
|
|
109
|
+
@container (width < 230px) {
|
|
110
|
+
.ad__description {
|
|
111
|
+
font-size: 0.625rem;
|
|
112
|
+
line-height: 0.875rem;
|
|
113
|
+
min-height: 0.875rem;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
.ad__price {
|
|
117
|
+
font-size: 1.875rem;
|
|
118
|
+
font-weight: 700;
|
|
119
|
+
text-align: right;
|
|
120
|
+
min-height: 3.53125rem;
|
|
121
|
+
color: #000000;
|
|
122
|
+
/* Set 'container-type: inline-size;' to reference container*/
|
|
123
|
+
}
|
|
124
|
+
@container (width < 230px) {
|
|
125
|
+
.ad__price {
|
|
126
|
+
font-size: 1.25rem;
|
|
127
|
+
min-height: 2.40625rem;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
.ad__button {
|
|
72
131
|
display: flex;
|
|
73
132
|
justify-content: center;
|
|
133
|
+
margin-top: auto;
|
|
134
|
+
width: 100%;
|
|
135
|
+
}
|
|
136
|
+
:global([data-theme="dark"]) .ad {
|
|
137
|
+
background-color: #121212;
|
|
138
|
+
color: #ffffff;
|
|
139
|
+
border-color: #1e1e1e;
|
|
74
140
|
}</style>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script lang="ts">import { Icon, IconColor } from '../../ui/icon';
|
|
2
2
|
import { ImageRounded } from '../../ui/image';
|
|
3
|
-
import IconTargetArrow from '@fluentui/svg-icons/icons/target_arrow_20_regular.svg';
|
|
3
|
+
import IconTargetArrow from '@fluentui/svg-icons/icons/target_arrow_20_regular.svg?raw';
|
|
4
4
|
let { model } = $props();
|
|
5
5
|
const attachmentsToShow = $derived.by(() => {
|
|
6
6
|
const products = model.products.filter((p) => !!p.image).map((p) => ({ isAd: false, image: p.image, link: p.link }));
|
|
7
|
-
const ads = (model.ad ? [model.ad] : []).filter((a) => !!a.image).map((a) => ({ isAd: true, image: a.image, link: a.
|
|
7
|
+
const ads = (model.ad ? [model.ad] : []).filter((a) => !!a.image).map((a) => { var _a; return ({ isAd: true, image: a.image, link: ((_a = a.ctaButton) === null || _a === void 0 ? void 0 : _a.url) || null }); });
|
|
8
8
|
return [...products, ...ads];
|
|
9
9
|
});
|
|
10
10
|
</script>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script lang="ts">import { default as ShortVideoAdViewer } from './cmp.ad.svelte';
|
|
2
2
|
import { default as ShortVideoProductViewer } from './cmp.product.svelte';
|
|
3
|
-
import {
|
|
3
|
+
import { ShortVideoAttachmentsLocalization } from './short-video-attachments-localization';
|
|
4
4
|
import {} from './types';
|
|
5
5
|
let { shortVideo, localization: localizationInit, on } = $props();
|
|
6
|
-
const localization = $derived(new
|
|
6
|
+
const localization = $derived(new ShortVideoAttachmentsLocalization(localizationInit));
|
|
7
7
|
</script>
|
|
8
8
|
|
|
9
9
|
{#if shortVideo.products.length || shortVideo.ad}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
2
|
+
import { type IShortVideoAttachmentsLocalization } from './short-video-attachments-localization';
|
|
2
3
|
import { type ShortVideoViewerModel } from './types';
|
|
3
4
|
type Props = {
|
|
4
5
|
shortVideo: ShortVideoViewerModel;
|
|
5
|
-
localization
|
|
6
|
+
localization: IShortVideoAttachmentsLocalization | Locale;
|
|
6
7
|
on?: {
|
|
7
8
|
productClick?: (productId: string) => void;
|
|
8
9
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">import { toPriceRepresentation } from '../../products/price-helper';
|
|
2
2
|
import { ImageRounded } from '../../ui/image';
|
|
3
3
|
import { ProportionalContainer } from '../../ui/proportional-container';
|
|
4
|
-
import { ShortVideoProductLocalization } from './short-video-product-localization
|
|
4
|
+
import { ShortVideoProductLocalization } from './short-video-product-localization';
|
|
5
5
|
let { product, fitToContainer = false, localization: localizationInit, on } = $props();
|
|
6
6
|
const localization = $derived(new ShortVideoProductLocalization(localizationInit));
|
|
7
7
|
const handleProductClick = (event) => {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
2
|
+
import { type IShortVideoProductLocalization } from './short-video-product-localization';
|
|
2
3
|
import type { ShortVideoViewerProductModel } from './types';
|
|
3
4
|
type Props = {
|
|
4
5
|
product: ShortVideoViewerProductModel;
|
|
5
6
|
fitToContainer?: boolean;
|
|
6
|
-
localization
|
|
7
|
+
localization: IShortVideoProductLocalization | Locale;
|
|
7
8
|
on?: {
|
|
8
9
|
productClick?: (productId: string) => void;
|
|
9
10
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">import { slideHorizontally } from '../../core/transitions';
|
|
2
2
|
import { default as ShortVideoAttachments } from './cmp.attachments.svelte';
|
|
3
3
|
import { default as ShortVideoHeading } from './cmp.short-video-heading.svelte';
|
|
4
|
-
import { ShortVideoDetailsLocalization } from './short-video-details-localization
|
|
4
|
+
import { ShortVideoDetailsLocalization } from './short-video-details-localization';
|
|
5
5
|
import {} from './types';
|
|
6
6
|
let { shortVideo, collapsed, localization: localizationInit, on } = $props();
|
|
7
7
|
const localization = $derived(new ShortVideoDetailsLocalization(localizationInit));
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
2
|
+
import { type IShortVideoDetailsLocalization } from './short-video-details-localization';
|
|
2
3
|
import { type ShortVideoViewerModel } from './types';
|
|
3
4
|
type Props = {
|
|
4
5
|
shortVideo: ShortVideoViewerModel;
|
|
5
6
|
collapsed: boolean;
|
|
6
|
-
localization
|
|
7
|
+
localization: IShortVideoDetailsLocalization | Locale;
|
|
7
8
|
on?: {
|
|
8
9
|
productClick?: (productId: string) => void;
|
|
9
10
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">import { ImageRound } from '../../ui/image';
|
|
2
2
|
import { TimeAgo } from '../../ui/time-ago';
|
|
3
|
-
import { ShortVideoViewerLocalization } from './short-video-viewer-localization
|
|
3
|
+
import { ShortVideoViewerLocalization } from './short-video-viewer-localization';
|
|
4
4
|
let { model, localization: localizationInit } = $props();
|
|
5
5
|
const localization = $derived(new ShortVideoViewerLocalization(localizationInit));
|
|
6
6
|
</script>
|
|
@@ -14,7 +14,7 @@ const localization = $derived(new ShortVideoViewerLocalization(localizationInit)
|
|
|
14
14
|
<div class="short-video-heading__source-name">{model.name}</div>
|
|
15
15
|
<p class="short-video-heading__metadata">
|
|
16
16
|
<TimeAgo date={model.displayDate} localization={localization.timeAgoLocalization} />
|
|
17
|
-
{#if Number.isInteger(model.viewsCount)}
|
|
17
|
+
{#if Number.isInteger(model.viewsCount) && model.viewsCount}
|
|
18
18
|
<span>·</span>
|
|
19
19
|
{localization.viewsCount(model.viewsCount)}
|
|
20
20
|
{/if}
|
|
@@ -36,7 +36,9 @@ const localization = $derived(new ShortVideoViewerLocalization(localizationInit)
|
|
|
36
36
|
.short-video-heading {
|
|
37
37
|
--_short-video-heading--container--font-size: var(--short-video-heading--container--font-size, 1em);
|
|
38
38
|
--_short-video-heading--text--color: var(--short-video-heading--text--color, #374151);
|
|
39
|
+
--_short-video-heading--text--shadow: var(--short-video-heading--text--shadow, 1px 1px hsl(0, 0%, 10%));
|
|
39
40
|
--_short-video-heading--meta--color: var(--short-video-heading--meta--color, #6b7280);
|
|
41
|
+
--_short-video-heading--meta--shadow: var(--short-video-heading--meta--shadow, 1px 1px hsl(0, 0%, 10%));
|
|
40
42
|
--_short-video-heading--padding: var(--short-video-heading--padding, 0);
|
|
41
43
|
display: flex;
|
|
42
44
|
align-items: center;
|
|
@@ -66,6 +68,7 @@ const localization = $derived(new ShortVideoViewerLocalization(localizationInit)
|
|
|
66
68
|
line-height: 1.25em;
|
|
67
69
|
font-weight: 500;
|
|
68
70
|
color: var(--_short-video-heading--text--color);
|
|
71
|
+
text-shadow: var(--_short-video-heading--text--shadow);
|
|
69
72
|
text-overflow: ellipsis;
|
|
70
73
|
width: 100%;
|
|
71
74
|
white-space: nowrap;
|
|
@@ -80,6 +83,7 @@ const localization = $derived(new ShortVideoViewerLocalization(localizationInit)
|
|
|
80
83
|
line-height: 1.2em;
|
|
81
84
|
font-weight: 400;
|
|
82
85
|
color: var(--_short-video-heading--meta--color);
|
|
86
|
+
text-shadow: var(--_short-video-heading--meta--shadow);
|
|
83
87
|
}
|
|
84
88
|
:global([data-theme="dark"]) .short-video-heading__metadata {
|
|
85
89
|
--_short-video-heading--meta--color: var(--short-video-heading--meta--color, #d1d5db);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type IShortVideoViewerLocalization } from './short-video-viewer-localization
|
|
1
|
+
import { type IShortVideoViewerLocalization } from './short-video-viewer-localization';
|
|
2
2
|
import type { ShortVideoViewerHeadingModel } from './types';
|
|
3
3
|
type Props = {
|
|
4
4
|
model: ShortVideoViewerHeadingModel;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Video } from '../../ui/video';
|
|
3
3
|
import { default as AttachmentsInline } from './cmp.attachments-inline.svelte';
|
|
4
4
|
import { default as ShortVideoDescription } from './description.svelte';
|
|
5
|
-
import { ShortVideoViewerLocalization } from './short-video-viewer-localization
|
|
5
|
+
import { ShortVideoViewerLocalization } from './short-video-viewer-localization';
|
|
6
6
|
import { ShortVideoViewerUiManager } from './ui-manager.svelte';
|
|
7
7
|
let { model, availableSideSpace = 0, showAttachments = true, autoplay = 'on-appearance', localization: localizationInit, on } = $props();
|
|
8
8
|
const localization = $derived(new ShortVideoViewerLocalization(localizationInit));
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Locale } from '../../core/locale';
|
|
2
|
+
import { type IShortVideoViewerLocalization } from './short-video-viewer-localization';
|
|
2
3
|
import type { ShortVideoViewerModel } from './types';
|
|
3
4
|
type Props = {
|
|
4
5
|
model: ShortVideoViewerModel;
|
|
5
6
|
availableSideSpace?: number;
|
|
6
7
|
showAttachments?: boolean;
|
|
7
8
|
autoplay?: true | false | 'on-appearance';
|
|
8
|
-
localization
|
|
9
|
+
localization: IShortVideoViewerLocalization | Locale;
|
|
9
10
|
on?: {
|
|
10
11
|
progress?: (progress: number) => void;
|
|
11
12
|
};
|
|
@@ -27,7 +27,9 @@ let { model, localization } = $props();
|
|
|
27
27
|
}
|
|
28
28
|
.short-video-description {
|
|
29
29
|
--_short-video-viewer--description--font--primary-color: var(--short-video-viewer--description--font--primary-color);
|
|
30
|
+
--_short-video-viewer--description--font--primary-shadow: var(--short-video-viewer--description--font--primary-shadow, 1px 1px hsl(0, 0%, 10%));
|
|
30
31
|
--_short-video-viewer--description--font--secondary-color: var(--short-video-viewer--description--font--secondary-color);
|
|
32
|
+
--_short-video-viewer--description--font--secondary-shadow: var(--short-video-viewer--description--font--secondary-shadow, 1px 1px hsl(0, 0%, 10%));
|
|
31
33
|
display: flex;
|
|
32
34
|
flex-direction: column;
|
|
33
35
|
padding-top: 0.75rem;
|
|
@@ -35,10 +37,13 @@ let { model, localization } = $props();
|
|
|
35
37
|
.short-video-description__heading {
|
|
36
38
|
--short-video-heading--padding: 0 0 0.875rem 0;
|
|
37
39
|
--short-video-heading--text--color: var(--_short-video-viewer--description--font--primary-color);
|
|
40
|
+
--short-video-heading--text--shadow: var(--_short-video-viewer--description--font--primary-shadow);
|
|
38
41
|
--short-video-heading--meta--color: var(--_short-video-viewer--description--font--secondary-color);
|
|
42
|
+
--short-video-heading--meta--shadow: var(--_short-video-viewer--description--font--secondary-shadow);
|
|
39
43
|
}
|
|
40
44
|
.short-video-description__text {
|
|
41
45
|
color: var(--_short-video-viewer--description--font--primary-color);
|
|
46
|
+
text-shadow: var(--_short-video-viewer--description--font--primary-shadow);
|
|
42
47
|
font-size: 0.9375rem;
|
|
43
48
|
line-height: 1.25rem;
|
|
44
49
|
font-weight: 400;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ShortVideoViewerLocalization } from './short-video-viewer-localization
|
|
1
|
+
import type { ShortVideoViewerLocalization } from './short-video-viewer-localization';
|
|
2
2
|
import type { ShortVideoViewerModel } from './types';
|
|
3
3
|
type Props = {
|
|
4
4
|
model: ShortVideoViewerModel;
|
|
@@ -5,5 +5,7 @@ export { default as ShortVideoViewerAttachments } from './cmp.attachments.svelte
|
|
|
5
5
|
export { default as ShortVideoViewerAttachmentsInline } from './cmp.attachments-inline.svelte';
|
|
6
6
|
export { default as ShortVideoDetails } from './cmp.short-video-details.svelte';
|
|
7
7
|
export type { ShortVideoViewerModel, ShortVideoViewerAdModel, ShortVideoViewerProductModel } from './types';
|
|
8
|
-
export type { IShortVideoViewerLocalization } from './short-video-viewer-localization
|
|
9
|
-
export type { IShortVideoDetailsLocalization } from './short-video-details-localization
|
|
8
|
+
export type { IShortVideoViewerLocalization } from './short-video-viewer-localization';
|
|
9
|
+
export type { IShortVideoDetailsLocalization } from './short-video-details-localization';
|
|
10
|
+
export type { IShortVideoAttachmentsLocalization } from './short-video-attachments-localization';
|
|
11
|
+
export { mapShortVideoViewerModel } from './mapper';
|
|
@@ -4,3 +4,4 @@ export { default as ShortVideoProductViewer } from './cmp.product.svelte';
|
|
|
4
4
|
export { default as ShortVideoViewerAttachments } from './cmp.attachments.svelte';
|
|
5
5
|
export { default as ShortVideoViewerAttachmentsInline } from './cmp.attachments-inline.svelte';
|
|
6
6
|
export { default as ShortVideoDetails } from './cmp.short-video-details.svelte';
|
|
7
|
+
export { mapShortVideoViewerModel } from './mapper';
|
|
@@ -37,9 +37,9 @@ const mapToShortVideoViewerAdModel = (payload) => {
|
|
|
37
37
|
image: getMediaItemImageUrl(payload.media[0]),
|
|
38
38
|
title: payload.title,
|
|
39
39
|
description: payload.description,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
price: payload.price,
|
|
41
|
+
currency: payload.currency,
|
|
42
|
+
ctaButton: payload.ctaButton
|
|
43
43
|
};
|
|
44
44
|
};
|
|
45
45
|
const mapToShortVideoViewerProductModel = (payload) => {
|
|
@@ -51,6 +51,7 @@ const mapToShortVideoViewerProductModel = (payload) => {
|
|
|
51
51
|
link: payload.link,
|
|
52
52
|
currency: payload.priceAndAvailability.currency,
|
|
53
53
|
price: payload.priceAndAvailability.price,
|
|
54
|
-
salePrice: effectiveSalePrice?.salePrice ?? null
|
|
54
|
+
salePrice: effectiveSalePrice?.salePrice ?? null,
|
|
55
|
+
shortDescription: payload.shortDescription ?? null
|
|
55
56
|
};
|
|
56
57
|
};
|
|
@@ -13,6 +13,7 @@ export type ShortVideoViewerPayloadFragment = {
|
|
|
13
13
|
title: string;
|
|
14
14
|
id: string;
|
|
15
15
|
link: string | null;
|
|
16
|
+
shortDescription: string | null;
|
|
16
17
|
media: Array<{
|
|
17
18
|
url: string;
|
|
18
19
|
thumbnailUrl: string | null;
|
|
@@ -32,10 +33,16 @@ export type ShortVideoViewerPayloadFragment = {
|
|
|
32
33
|
id: string;
|
|
33
34
|
title: string;
|
|
34
35
|
description: string | null;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
openLinkInNewWindow: boolean | null;
|
|
36
|
+
price: number | null;
|
|
37
|
+
currency: SchemaTypes.Currency | null;
|
|
38
38
|
type: SchemaTypes.AdType;
|
|
39
|
+
ctaButton: {
|
|
40
|
+
background: string;
|
|
41
|
+
textColor: string;
|
|
42
|
+
text: string;
|
|
43
|
+
url: string;
|
|
44
|
+
border: string;
|
|
45
|
+
} | null;
|
|
39
46
|
media: Array<{
|
|
40
47
|
url: string;
|
|
41
48
|
thumbnailUrl: string | null;
|
|
@@ -44,6 +44,7 @@ export const ShortVideoViewerPayloadFragmentDoc = {
|
|
|
44
44
|
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
|
|
45
45
|
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
|
|
46
46
|
{ kind: 'Field', name: { kind: 'Name', value: 'link' } },
|
|
47
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'shortDescription' } },
|
|
47
48
|
{
|
|
48
49
|
kind: 'Field',
|
|
49
50
|
name: { kind: 'Name', value: 'priceAndAvailability' },
|
|
@@ -79,9 +80,22 @@ export const ShortVideoViewerPayloadFragmentDoc = {
|
|
|
79
80
|
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
|
|
80
81
|
{ kind: 'Field', name: { kind: 'Name', value: 'title' } },
|
|
81
82
|
{ kind: 'Field', name: { kind: 'Name', value: 'description' } },
|
|
82
|
-
{ kind: 'Field', name: { kind: 'Name', value: '
|
|
83
|
-
{ kind: 'Field', name: { kind: 'Name', value: '
|
|
84
|
-
{
|
|
83
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'price' } },
|
|
84
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'currency' } },
|
|
85
|
+
{
|
|
86
|
+
kind: 'Field',
|
|
87
|
+
name: { kind: 'Name', value: 'ctaButton' },
|
|
88
|
+
selectionSet: {
|
|
89
|
+
kind: 'SelectionSet',
|
|
90
|
+
selections: [
|
|
91
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'background' } },
|
|
92
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'textColor' } },
|
|
93
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'text' } },
|
|
94
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'url' } },
|
|
95
|
+
{ kind: 'Field', name: { kind: 'Name', value: 'border' } }
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
},
|
|
85
99
|
{ kind: 'Field', name: { kind: 'Name', value: 'type' } },
|
|
86
100
|
{
|
|
87
101
|
kind: 'Field',
|