@streamscloud/embeddable 16.0.7 → 16.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/dist/ads/ad-card/types.d.ts +1 -1
  2. package/dist/ads/ad-card/types.js +1 -1
  3. package/dist/articles/article/article-layout.svelte +32 -0
  4. package/dist/articles/article/article-layout.svelte.d.ts +9 -0
  5. package/dist/articles/article/article-proxy.svelte +8 -0
  6. package/dist/articles/article/article-proxy.svelte.d.ts +12 -0
  7. package/dist/articles/article/article-section.svelte +52 -0
  8. package/dist/articles/article/article-section.svelte.d.ts +9 -0
  9. package/dist/articles/article/article-view.svelte +38 -0
  10. package/dist/articles/article/article-view.svelte.d.ts +8 -0
  11. package/dist/articles/article/cmp.article.svelte +36 -0
  12. package/dist/articles/article/cmp.article.svelte.d.ts +12 -0
  13. package/dist/articles/article/cmp.facts-container.svelte +27 -0
  14. package/dist/articles/article/cmp.facts-container.svelte.d.ts +7 -0
  15. package/dist/articles/article/fields/alt-text.svelte +15 -0
  16. package/dist/articles/article/fields/alt-text.svelte.d.ts +6 -0
  17. package/dist/articles/article/fields/article-field.svelte +45 -0
  18. package/dist/articles/article/fields/article-field.svelte.d.ts +8 -0
  19. package/dist/articles/article/fields/byline-field.svelte +23 -0
  20. package/dist/articles/article/fields/byline-field.svelte.d.ts +8 -0
  21. package/dist/articles/article/fields/image-field.svelte +8 -0
  22. package/dist/articles/article/fields/image-field.svelte.d.ts +7 -0
  23. package/dist/articles/article/fields/media-field.svelte +8 -0
  24. package/dist/articles/article/fields/media-field.svelte.d.ts +7 -0
  25. package/dist/articles/article/fields/media-gallery-field.svelte +8 -0
  26. package/dist/articles/article/fields/media-gallery-field.svelte.d.ts +7 -0
  27. package/dist/articles/article/fields/rich-text-field.svelte +19 -0
  28. package/dist/articles/article/fields/rich-text-field.svelte.d.ts +7 -0
  29. package/dist/articles/article/fields/text-field.svelte +24 -0
  30. package/dist/articles/article/fields/text-field.svelte.d.ts +7 -0
  31. package/dist/articles/article/fields/types.d.ts +72 -0
  32. package/dist/articles/article/fields/types.js +1 -0
  33. package/dist/articles/article/fields/video-field.svelte +8 -0
  34. package/dist/articles/article/fields/video-field.svelte.d.ts +7 -0
  35. package/dist/articles/article/helpers.d.ts +5 -0
  36. package/dist/articles/article/helpers.js +27 -0
  37. package/dist/articles/article/index.d.ts +8 -0
  38. package/dist/articles/article/index.js +5 -0
  39. package/dist/articles/article/styles-transformer.d.ts +47 -0
  40. package/dist/articles/article/styles-transformer.js +38 -0
  41. package/dist/articles/article/types.d.ts +32 -0
  42. package/dist/articles/article/types.js +1 -0
  43. package/dist/articles/article-dialog/article-dialog-localization.d.ts +3 -0
  44. package/dist/articles/article-dialog/article-dialog-localization.js +9 -0
  45. package/dist/articles/article-dialog/cmp.article-dialog.svelte +103 -0
  46. package/dist/articles/article-dialog/cmp.article-dialog.svelte.d.ts +9 -0
  47. package/dist/articles/article-dialog/index.d.ts +6 -0
  48. package/dist/articles/article-dialog/index.js +10 -0
  49. package/dist/articles/article-dialog/types.d.ts +6 -0
  50. package/dist/articles/data-providers/index.d.ts +1 -0
  51. package/dist/articles/data-providers/index.js +1 -0
  52. package/dist/articles/data-providers/types.d.ts +14 -0
  53. package/dist/articles/data-providers/types.js +1 -0
  54. package/dist/core/enums.d.ts +15 -50
  55. package/dist/core/enums.js +1 -61
  56. package/dist/core/graphql.d.ts +4 -1
  57. package/dist/core/graphql.js +3 -3
  58. package/dist/core/media/index.d.ts +0 -1
  59. package/dist/core/media/index.js +0 -1
  60. package/dist/core/media/media-item-url.service.d.ts +6 -2
  61. package/dist/core/media/media-item-url.service.js +1 -3
  62. package/dist/external-api/article/cmp.embed-article.svelte +98 -0
  63. package/dist/external-api/article/cmp.embed-article.svelte.d.ts +47 -0
  64. package/dist/external-api/article/index.d.ts +1 -0
  65. package/dist/external-api/article/index.js +1 -0
  66. package/dist/external-api/data-providers/article/article-data-provider.d.ts +4 -0
  67. package/dist/external-api/data-providers/article/article-data-provider.js +32 -0
  68. package/dist/external-api/data-providers/article/index.d.ts +1 -0
  69. package/dist/external-api/data-providers/article/index.js +1 -0
  70. package/dist/external-api/data-providers/article/operations.generated.d.ts +104 -0
  71. package/dist/external-api/data-providers/article/operations.generated.js +262 -0
  72. package/dist/external-api/data-providers/article/operations.graphql +99 -0
  73. package/dist/external-api/data-providers/internal-media-center-data-provider.svelte.js +6 -5
  74. package/dist/external-api/data-providers/internal-short-video-player-items-provider.d.ts +1 -1
  75. package/dist/external-api/data-providers/internal-short-video-player-items-provider.js +2 -4
  76. package/dist/external-api/data-providers/internal-streams-player-data-provider.js +1 -1
  77. package/dist/external-api/data-providers/mapper.d.ts +1 -1
  78. package/dist/external-api/data-providers/mapper.js +5 -6
  79. package/dist/external-api/data-providers/mocks/mock-content-management-handler.svelte.js +2 -3
  80. package/dist/external-api/data-providers/post-data-loaders/posts-loader.d.ts +1 -1
  81. package/dist/external-api/data-providers/post-data-loaders/posts-loader.js +0 -1
  82. package/dist/external-api/data-providers/stream-data-loaders/mapper.js +1 -2
  83. package/dist/external-api/data-providers/stream-data-loaders/stream-pages-loader.d.ts +1 -1
  84. package/dist/external-api/data-providers/stream-data-loaders/stream-pages-loader.js +1 -2
  85. package/dist/external-api/data-providers/stream-data-loaders/streams-loader.d.ts +1 -1
  86. package/dist/external-api/data-providers/stream-data-loaders/streams-loader.js +1 -2
  87. package/dist/external-api/index.d.ts +2 -1
  88. package/dist/external-api/index.js +2 -1
  89. package/dist/media-center/config/types.d.ts +4 -1
  90. package/dist/media-center/config/types.js +1 -1
  91. package/dist/media-center/media-center/cmp.media-center-proxy.svelte +9 -4
  92. package/dist/media-center/media-center/cmp.media-center-proxy.svelte.d.ts +2 -3
  93. package/dist/media-center/media-center/discover/data-loading.js +1 -2
  94. package/dist/media-center/media-center/discover/discover-view-handler.svelte.js +1 -2
  95. package/dist/media-center/media-center/index.d.ts +0 -1
  96. package/dist/media-center/media-center/index.js +0 -1
  97. package/dist/media-center/media-center/media-center-settings.svelte.d.ts +1 -1
  98. package/dist/media-center/media-center/media-center-settings.svelte.js +2 -2
  99. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.d.ts +1 -1
  100. package/dist/media-center/media-center/moments/moments-feed-handler.svelte.js +2 -3
  101. package/dist/media-center/media-center/moments/moments-state.svelte.d.ts +1 -1
  102. package/dist/media-center/media-center/moments/moments-state.svelte.js +1 -3
  103. package/dist/media-center/media-center/posts-feed/feed-providers-generator.js +1 -2
  104. package/dist/media-center/media-center/posts-feed/posts-feed-handler.svelte.d.ts +1 -1
  105. package/dist/media-center/media-center/posts-feed/posts-feed-handler.svelte.js +2 -2
  106. package/dist/media-page/cmp.media-page.svelte +10 -9
  107. package/dist/media-page/index.js +4 -4
  108. package/dist/posts/attachments/cmp.attachments.svelte +2 -3
  109. package/dist/posts/model/post-model.d.ts +2 -1
  110. package/dist/posts/model/post-model.js +2 -1
  111. package/dist/posts/post-viewer/attachments-horizontal.svelte +1 -2
  112. package/dist/posts/post-viewer/cmp.post-viewer.svelte +12 -5
  113. package/dist/posts/post-viewer/cmp.post-viewer.svelte.d.ts +1 -0
  114. package/dist/posts/post-viewer/mapper.js +6 -7
  115. package/dist/posts/post-viewer/post-texts.svelte +8 -1
  116. package/dist/posts/post-viewer/post-texts.svelte.d.ts +3 -0
  117. package/dist/posts/posts-player/cmp.posts-player.svelte +23 -13
  118. package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +2 -0
  119. package/dist/posts/posts-player/index.d.ts +8 -1
  120. package/dist/posts/posts-player/index.js +7 -1
  121. package/dist/posts/posts-player/posts-player-proxy.svelte +3 -2
  122. package/dist/posts/posts-player/posts-player-proxy.svelte.d.ts +2 -0
  123. package/dist/posts/posts-player/posts-player-view.svelte +22 -9
  124. package/dist/posts/posts-player/types.d.ts +3 -0
  125. package/dist/products/price-helper.d.ts +1 -1
  126. package/dist/products/price-helper.js +3 -4
  127. package/dist/streams/layout/models/mapper.d.ts +1 -1
  128. package/dist/streams/layout/models/mapper.js +2 -6
  129. package/dist/streams/layout/models/stream-layout-media-item-model.d.ts +1 -1
  130. package/dist/streams/layout/models/stream-layout-media-item-model.js +1 -1
  131. package/dist/streams/layout/models/stream-layout-short-video-model.d.ts +1 -1
  132. package/dist/streams/layout/models/stream-layout-short-video-model.js +1 -1
  133. package/dist/streams/streams-player/cmp.streams-player.svelte +22 -13
  134. package/dist/streams/streams-player/streams-player-proxy.svelte +1 -1
  135. package/dist/ui/media-items/index.d.ts +3 -0
  136. package/dist/ui/media-items/index.js +3 -0
  137. package/dist/ui/{media-item-view → media-items/media-item-view}/cmp.media-item-view.svelte +23 -5
  138. package/dist/ui/{media-item-view → media-items/media-item-view}/cmp.media-item-view.svelte.d.ts +5 -3
  139. package/dist/ui/{media-items-gallery → media-items/media-items-gallery}/cmp.media-items-gallery.svelte +31 -31
  140. package/dist/ui/{media-items-gallery → media-items/media-items-gallery}/cmp.media-items-gallery.svelte.d.ts +5 -3
  141. package/dist/ui/{media-items-gallery/types.d.ts → media-items/media-items-gallery/gallery-layout.d.ts} +1 -1
  142. package/dist/ui/{media-items-gallery/types.js → media-items/media-items-gallery/gallery-layout.js} +1 -1
  143. package/dist/ui/media-items/types.d.ts +14 -0
  144. package/dist/ui/media-items/types.js +1 -0
  145. package/dist/ui/shadow-dom/cmp.shadow-root.svelte +3 -2
  146. package/dist/ui/shadow-dom/index.d.ts +1 -1
  147. package/dist/ui/shadow-dom/index.js +1 -1
  148. package/dist/ui/shadow-dom/shadow-root-service.d.ts +1 -0
  149. package/dist/ui/shadow-dom/shadow-root-service.js +8 -0
  150. package/package.json +11 -3
  151. package/dist/core/media/types.d.ts +0 -13
  152. package/dist/posts/posts-player/posts-player-host-settings.svelte.d.ts +0 -20
  153. package/dist/posts/posts-player/posts-player-host-settings.svelte.js +0 -15
  154. package/dist/streams/streams-player/streams-player-host-settings.svelte.d.ts +0 -20
  155. package/dist/streams/streams-player/streams-player-host-settings.svelte.js +0 -15
  156. /package/dist/{core/media → articles/article-dialog}/types.js +0 -0
  157. /package/dist/ui/{media-item-view → media-items/media-item-view}/index.d.ts +0 -0
  158. /package/dist/ui/{media-item-view → media-items/media-item-view}/index.js +0 -0
  159. /package/dist/ui/{media-items-gallery → media-items/media-items-gallery}/index.d.ts +0 -0
  160. /package/dist/ui/{media-items-gallery → media-items/media-items-gallery}/index.js +0 -0
@@ -1,4 +1,4 @@
1
- import { AdType, type Currency } from '../../core/enums';
1
+ import type { AdType, Currency } from '../../core/enums';
2
2
  export type AdCardModel = {
3
3
  id: string;
4
4
  type: AdType;
@@ -1 +1 @@
1
- import { AdType } from '../../core/enums';
1
+ export {};
@@ -0,0 +1,32 @@
1
+ <script lang="ts">import { default as ArticleField } from './fields/article-field.svelte';
2
+ import { fieldIsFilled } from './helpers';
3
+ import { ArticleStylesHelper } from './styles-transformer';
4
+ let { layout, metadata } = $props();
5
+ const filledFields = $derived(layout.fields.filter(fieldIsFilled));
6
+ const styles = $derived.by(() => {
7
+ if (!layout.styles) {
8
+ return '';
9
+ }
10
+ const mobileStyles = ArticleStylesHelper.generatePaddingsCssVar({ styles: layout.styles, mobileView: true });
11
+ const desktopStyles = ArticleStylesHelper.generatePaddingsCssVar({ styles: layout.styles, mobileView: false });
12
+ return `--_article-layout--padding--desktop:${desktopStyles};--_article-layout--padding--mobile:${mobileStyles};`;
13
+ });
14
+ </script>
15
+
16
+ <div class="article-layout" style={styles}>
17
+ {#each filledFields as field (field.id)}
18
+ <ArticleField field={field} metadata={metadata} />
19
+ {/each}
20
+ </div>
21
+
22
+ <style>.article-layout {
23
+ display: flex;
24
+ flex-direction: column;
25
+ padding: var(--_article-layout--padding--desktop);
26
+ /* Set 'container-type: inline-size;' to reference container*/
27
+ }
28
+ @container (width < 576px) {
29
+ .article-layout {
30
+ padding: var(--_article-layout--padding--mobile);
31
+ }
32
+ }</style>
@@ -0,0 +1,9 @@
1
+ import type { FieldMetadata } from './fields/types';
2
+ import type { ArticleLayoutModel } from './types';
3
+ type Props = {
4
+ layout: ArticleLayoutModel;
5
+ metadata: FieldMetadata;
6
+ };
7
+ declare const ArticleLayout: import("svelte").Component<Props, {}, "">;
8
+ type ArticleLayout = ReturnType<typeof ArticleLayout>;
9
+ export default ArticleLayout;
@@ -0,0 +1,8 @@
1
+ <script lang="ts">import { ShadowRoot } from '../../ui/shadow-dom';
2
+ import { default as ArticleView } from './article-view.svelte';
3
+ let { sections, metadata, theme, locale } = $props();
4
+ </script>
5
+
6
+ <ShadowRoot locale={locale} theme={theme} backgroundDisabled={true} backgroundImageUrl="not-applicable">
7
+ <ArticleView sections={sections} metadata={metadata} />
8
+ </ShadowRoot>
@@ -0,0 +1,12 @@
1
+ import type { ThemeValue } from '../../core/theme';
2
+ import type { ArticleMetadata, ArticleSectionModel } from './types';
3
+ import type { AppLocaleValue } from '@streamscloud/kit/core/locale';
4
+ type Props = {
5
+ sections: ArticleSectionModel[];
6
+ metadata: ArticleMetadata;
7
+ theme: ThemeValue | undefined;
8
+ locale: AppLocaleValue | undefined;
9
+ };
10
+ declare const ArticleProxy: import("svelte").Component<Props, {}, "">;
11
+ type ArticleProxy = ReturnType<typeof ArticleProxy>;
12
+ export default ArticleProxy;
@@ -0,0 +1,52 @@
1
+ <script lang="ts">import { default as ArticleLayout } from './article-layout.svelte';
2
+ import { default as FactsContainer } from './cmp.facts-container.svelte';
3
+ import { layoutIsFilled } from './helpers';
4
+ import { ArticleStylesHelper } from './styles-transformer';
5
+ import { HtmlHelper } from '@streamscloud/kit/core/utils';
6
+ import { HtmlBlock } from '@streamscloud/kit/ui/html-block';
7
+ let { section, metadata } = $props();
8
+ const filledLayouts = $derived(section.layouts.filter(layoutIsFilled));
9
+ const styles = $derived.by(() => {
10
+ if (!section.styles) {
11
+ return '';
12
+ }
13
+ const mobileStyles = ArticleStylesHelper.generatePaddingsCssVar({ styles: section.styles, mobileView: true });
14
+ const desktopStyles = ArticleStylesHelper.generatePaddingsCssVar({ styles: section.styles, mobileView: false });
15
+ return `--_article-section--padding--desktop:${desktopStyles};--_article-section--padding--mobile:${mobileStyles};`;
16
+ });
17
+ const sectionFactsText = $derived(section.facts ? HtmlHelper.sanitizeHtml(section.facts) : null);
18
+ </script>
19
+
20
+ <div class="article-section" style={styles}>
21
+ <div class="article-section__layouts">
22
+ {#each filledLayouts as layout (layout.id)}
23
+ <ArticleLayout layout={layout} metadata={metadata} />
24
+ {/each}
25
+ </div>
26
+ {#if sectionFactsText}
27
+ <FactsContainer>
28
+ <HtmlBlock>
29
+ {@html sectionFactsText}
30
+ </HtmlBlock>
31
+ </FactsContainer>
32
+ {/if}
33
+ </div>
34
+
35
+ <style>.article-section {
36
+ display: flex;
37
+ gap: 2.5rem;
38
+ padding: var(--_article-section--padding--desktop);
39
+ }
40
+ .article-section__layouts {
41
+ flex: 1;
42
+ display: flex;
43
+ flex-direction: column;
44
+ }
45
+ .article-section {
46
+ /* Set 'container-type: inline-size;' to reference container*/
47
+ }
48
+ @container (width < 576px) {
49
+ .article-section {
50
+ padding: var(--_article-section--padding--mobile);
51
+ }
52
+ }</style>
@@ -0,0 +1,9 @@
1
+ import type { FieldMetadata } from './fields/types';
2
+ import type { ArticleSectionModel } from './types';
3
+ type Props = {
4
+ section: ArticleSectionModel;
5
+ metadata: FieldMetadata;
6
+ };
7
+ declare const ArticleSection: import("svelte").Component<Props, {}, "">;
8
+ type ArticleSection = ReturnType<typeof ArticleSection>;
9
+ export default ArticleSection;
@@ -0,0 +1,38 @@
1
+ <script lang="ts">import { default as ArticleSection } from './article-section.svelte';
2
+ import { sectionIsFilled } from './helpers';
3
+ let { sections, metadata } = $props();
4
+ const filledSections = $derived(sections.filter(sectionIsFilled));
5
+ const fieldMetadata = $derived({ displayDate: metadata.displayDate });
6
+ </script>
7
+
8
+ <div class="article-container">
9
+ <div class="article">
10
+ {#each filledSections as section (section.id)}
11
+ <ArticleSection section={section} metadata={fieldMetadata} />
12
+ {/each}
13
+ </div>
14
+ </div>
15
+
16
+ <style>.article-container {
17
+ --_article--max-width: var(--article--max-width, 100%);
18
+ --_article--min-height: var(--article--min-height, 0);
19
+ --_article--background: var(--article--background, light-dark(#ffffff, #2e2e2e));
20
+ --_article--container-background: var(--article--container-background, light-dark(#fafafa, #1c1c1c));
21
+ --_article--text-color: var(--article--text-color, light-dark(#000000, #ffffff));
22
+ container-type: inline-size;
23
+ min-height: var(--_article--min-height);
24
+ background: var(--_article--container-background);
25
+ overflow: hidden;
26
+ }
27
+
28
+ .article {
29
+ --article-field--text-color: var(--_article--text-color);
30
+ max-width: var(--_article--max-width);
31
+ margin: 0 auto;
32
+ min-height: var(--_article--min-height);
33
+ background: var(--_article--background);
34
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
35
+ padding-bottom: 6.25rem;
36
+ display: flex;
37
+ flex-direction: column;
38
+ }</style>
@@ -0,0 +1,8 @@
1
+ import type { ArticleMetadata, ArticleSectionModel } from './types';
2
+ type Props = {
3
+ sections: ArticleSectionModel[];
4
+ metadata: ArticleMetadata;
5
+ };
6
+ declare const ArticleView: import("svelte").Component<Props, {}, "">;
7
+ type ArticleView = ReturnType<typeof ArticleView>;
8
+ export default ArticleView;
@@ -0,0 +1,36 @@
1
+ <script lang="ts">import { createShadowRoot } from '../../ui/shadow-dom';
2
+ import { default as ArticleProxy } from './article-proxy.svelte';
3
+ import { mount, unmount } from 'svelte';
4
+ let { sections, metadata, theme, locale } = $props();
5
+ const initHost = (node) => {
6
+ const shadowRoot = createShadowRoot(node);
7
+ const mounted = mount(ArticleProxy, {
8
+ target: shadowRoot,
9
+ props: {
10
+ get sections() {
11
+ return sections;
12
+ },
13
+ get metadata() {
14
+ return metadata;
15
+ },
16
+ get theme() {
17
+ return theme;
18
+ },
19
+ get locale() {
20
+ return locale;
21
+ }
22
+ }
23
+ });
24
+ return {
25
+ destroy: () => {
26
+ unmount(mounted);
27
+ }
28
+ };
29
+ };
30
+ </script>
31
+
32
+ <div class="article-host" use:initHost></div>
33
+
34
+ <style>.article-host {
35
+ display: contents;
36
+ }</style>
@@ -0,0 +1,12 @@
1
+ import type { ThemeValue } from '../../core/theme';
2
+ import type { ArticleMetadata, ArticleSectionModel } from './types';
3
+ import type { AppLocaleValue } from '@streamscloud/kit/core/locale';
4
+ type Props = {
5
+ sections: ArticleSectionModel[];
6
+ metadata: ArticleMetadata;
7
+ theme?: ThemeValue;
8
+ locale?: AppLocaleValue;
9
+ };
10
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
11
+ type Cmp = ReturnType<typeof Cmp>;
12
+ export default Cmp;
@@ -0,0 +1,27 @@
1
+ <script lang="ts">let { children } = $props();
2
+ export {};
3
+ </script>
4
+
5
+ <div class="facts-container">
6
+ {@render children()}
7
+ </div>
8
+
9
+ <style>.facts-container {
10
+ --_facts-container--color: var(--facts-container--color, var(--article-field--text-color));
11
+ color: var(--_facts-container--color);
12
+ border: 1px solid light-dark(#d1d5db, #4b5563);
13
+ border-radius: 0.25rem;
14
+ font-size: 0.8125rem;
15
+ width: 12.5rem;
16
+ height: max-content;
17
+ padding: 1rem;
18
+ position: relative;
19
+ }
20
+ .facts-container::before {
21
+ content: " ";
22
+ position: absolute;
23
+ top: -0.125rem;
24
+ left: 0.625rem;
25
+ width: 1.25rem;
26
+ border-bottom: 2px solid light-dark(#144ab0, #5a8dec);
27
+ }</style>
@@ -0,0 +1,7 @@
1
+ import type { Snippet } from 'svelte';
2
+ type Props = {
3
+ children: Snippet;
4
+ };
5
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
6
+ type Cmp = ReturnType<typeof Cmp>;
7
+ export default Cmp;
@@ -0,0 +1,15 @@
1
+ <script lang="ts">let { value } = $props();
2
+ </script>
3
+
4
+ {#if value}
5
+ <div class="alt-text">{value}</div>
6
+ {/if}
7
+
8
+ <style>.alt-text {
9
+ font-size: 0.875rem;
10
+ line-height: 1.25rem;
11
+ padding: 0.625rem 3.75rem 0;
12
+ white-space: normal;
13
+ overflow-wrap: break-word;
14
+ text-align: center;
15
+ }</style>
@@ -0,0 +1,6 @@
1
+ type Props = {
2
+ value: string | null;
3
+ };
4
+ declare const AltText: import("svelte").Component<Props, {}, "">;
5
+ type AltText = ReturnType<typeof AltText>;
6
+ export default AltText;
@@ -0,0 +1,45 @@
1
+ <script lang="ts">import { ArticleStylesHelper } from '../styles-transformer';
2
+ import { default as BylineField } from './byline-field.svelte';
3
+ import { default as ImageField } from './image-field.svelte';
4
+ import { default as MediaField } from './media-field.svelte';
5
+ import { default as MediaGalleryField } from './media-gallery-field.svelte';
6
+ import { default as RichTextField } from './rich-text-field.svelte';
7
+ import { default as TextField } from './text-field.svelte';
8
+ import { default as VideoField } from './video-field.svelte';
9
+ let { field, metadata } = $props();
10
+ const styles = $derived.by(() => {
11
+ const mobileStyles = ArticleStylesHelper.generateMarginsCssVar({ styles: field.styles, mobileView: true });
12
+ const desktopStyles = ArticleStylesHelper.generateMarginsCssVar({ styles: field.styles, mobileView: false });
13
+ return `--_article-field--margin--desktop:${desktopStyles};--_article-field--margin--mobile:${mobileStyles};`;
14
+ });
15
+ </script>
16
+
17
+ <div class="article-field" style={styles}>
18
+ {#if field.fieldData.type === 'BYLINE'}
19
+ <BylineField field={field} metadata={metadata} />
20
+ {:else if field.fieldData.type === 'IMAGE'}
21
+ <ImageField field={field} />
22
+ {:else if field.fieldData.type === 'MEDIA'}
23
+ <MediaField field={field} />
24
+ {:else if field.fieldData.type === 'MEDIA_GALLERY'}
25
+ <MediaGalleryField field={field} />
26
+ {:else if field.fieldData.type === 'RICH_TEXT'}
27
+ <RichTextField field={field} />
28
+ {:else if field.fieldData.type === 'TEXT'}
29
+ <TextField field={field} />
30
+ {:else if field.fieldData.type === 'VIDEO'}
31
+ <VideoField field={field} />
32
+ {/if}
33
+ </div>
34
+
35
+ <style>.article-field {
36
+ display: flex;
37
+ flex-direction: column;
38
+ margin: var(--_article-field--margin--desktop);
39
+ /* Set 'container-type: inline-size;' to reference container*/
40
+ }
41
+ @container (width < 576px) {
42
+ .article-field {
43
+ margin: var(--_article-field--margin--mobile);
44
+ }
45
+ }</style>
@@ -0,0 +1,8 @@
1
+ import type { ArticleFieldModel, FieldMetadata } from './types';
2
+ type Props = {
3
+ field: ArticleFieldModel;
4
+ metadata: FieldMetadata;
5
+ };
6
+ declare const ArticleField: import("svelte").Component<Props, {}, "">;
7
+ type ArticleField = ReturnType<typeof ArticleField>;
8
+ export default ArticleField;
@@ -0,0 +1,23 @@
1
+ <script lang="ts">import { TimeAgo } from '@streamscloud/kit/ui/time-ago';
2
+ let { field, metadata } = $props();
3
+ const fieldData = $derived(field.fieldData.bylineData);
4
+ </script>
5
+
6
+ <div class="byline-field">
7
+ <div class="byline-field__author">{fieldData.authorName}</div>
8
+ <div class="byline-field__metadata">
9
+ <TimeAgo date={metadata.displayDate} />
10
+ </div>
11
+ </div>
12
+
13
+ <style>.byline-field {
14
+ --_byline-field--text-color: var(--article-field--text-color);
15
+ }
16
+ .byline-field__author {
17
+ font-size: 0.875em;
18
+ color: var(--_byline-field--text-color);
19
+ }
20
+ .byline-field__metadata {
21
+ font-size: 0.75em;
22
+ color: light-dark(#9ca3af, #d1d5db);
23
+ }</style>
@@ -0,0 +1,8 @@
1
+ import type { ArticleFieldModel, FieldMetadata } from './types';
2
+ type Props = {
3
+ field: ArticleFieldModel;
4
+ metadata: FieldMetadata;
5
+ };
6
+ declare const BylineField: import("svelte").Component<Props, {}, "">;
7
+ type BylineField = ReturnType<typeof BylineField>;
8
+ export default BylineField;
@@ -0,0 +1,8 @@
1
+ <script lang="ts">import { MediaItemView } from '../../../ui/media-items/media-item-view';
2
+ import { default as AltText } from './alt-text.svelte';
3
+ let { field } = $props();
4
+ const fieldData = $derived(field.fieldData.imageData);
5
+ </script>
6
+
7
+ <MediaItemView media={fieldData.image} ratio={fieldData.preferredMediaFormat} />
8
+ <AltText value={fieldData.altText} />
@@ -0,0 +1,7 @@
1
+ import type { ArticleFieldModel } from './types';
2
+ type Props = {
3
+ field: ArticleFieldModel;
4
+ };
5
+ declare const ImageField: import("svelte").Component<Props, {}, "">;
6
+ type ImageField = ReturnType<typeof ImageField>;
7
+ export default ImageField;
@@ -0,0 +1,8 @@
1
+ <script lang="ts">import { MediaItemView } from '../../../ui/media-items/media-item-view';
2
+ import { default as AltText } from './alt-text.svelte';
3
+ let { field } = $props();
4
+ const fieldData = $derived(field.fieldData.mediaData);
5
+ </script>
6
+
7
+ <MediaItemView media={fieldData.media} ratio={fieldData.preferredMediaFormat} />
8
+ <AltText value={fieldData.altText} />
@@ -0,0 +1,7 @@
1
+ import type { ArticleFieldModel } from './types';
2
+ type Props = {
3
+ field: ArticleFieldModel;
4
+ };
5
+ declare const MediaField: import("svelte").Component<Props, {}, "">;
6
+ type MediaField = ReturnType<typeof MediaField>;
7
+ export default MediaField;
@@ -0,0 +1,8 @@
1
+ <script lang="ts">import { MediaItemsGallery } from '../../../ui/media-items/media-items-gallery';
2
+ import { default as AltText } from './alt-text.svelte';
3
+ let { field } = $props();
4
+ const fieldData = $derived(field.fieldData.mediaGalleryData);
5
+ </script>
6
+
7
+ <MediaItemsGallery media={fieldData.media ?? []} singleImageRatio={fieldData.preferredMediaFormat} />
8
+ <AltText value={fieldData.altText} />
@@ -0,0 +1,7 @@
1
+ import type { ArticleFieldModel } from './types';
2
+ type Props = {
3
+ field: ArticleFieldModel;
4
+ };
5
+ declare const MediaGalleryField: import("svelte").Component<Props, {}, "">;
6
+ type MediaGalleryField = ReturnType<typeof MediaGalleryField>;
7
+ export default MediaGalleryField;
@@ -0,0 +1,19 @@
1
+ <script lang="ts">import { HtmlHelper } from '@streamscloud/kit/core/utils';
2
+ import { HtmlBlock } from '@streamscloud/kit/ui/html-block';
3
+ let { field } = $props();
4
+ const fieldData = $derived(field.fieldData.richTextData);
5
+ const fieldDataText = $derived(fieldData.text ? HtmlHelper.sanitizeHtml(fieldData.text) : null);
6
+ </script>
7
+
8
+ {#if fieldDataText}
9
+ <div class="rich-text-field" style:font-size={`${fieldData.textSize}em`}>
10
+ <HtmlBlock>
11
+ {@html fieldDataText}
12
+ </HtmlBlock>
13
+ </div>
14
+ {/if}
15
+
16
+ <style>.rich-text-field {
17
+ --_rich-text-field--text-color: var(--article-field--text-color);
18
+ color: var(--_rich-text-field--text-color);
19
+ }</style>
@@ -0,0 +1,7 @@
1
+ import type { ArticleFieldModel } from './types';
2
+ type Props = {
3
+ field: ArticleFieldModel;
4
+ };
5
+ declare const RichTextField: import("svelte").Component<Props, {}, "">;
6
+ type RichTextField = ReturnType<typeof RichTextField>;
7
+ export default RichTextField;
@@ -0,0 +1,24 @@
1
+ <script lang="ts">let { field } = $props();
2
+ const fieldData = $derived(field.fieldData.textData);
3
+ export {};
4
+ </script>
5
+
6
+ <div
7
+ class="text-field"
8
+ style:font-size={`${fieldData.textSize}em`}
9
+ class:text-field--semi-bold={fieldData.textWeight === 'SEMI_BOLD'}
10
+ class:text-field--bold={fieldData.textWeight === 'BOLD'}>
11
+ {fieldData.text}
12
+ </div>
13
+
14
+ <style>.text-field {
15
+ --_text-field--text-color: var(--article-field--text-color);
16
+ color: var(--_text-field--text-color);
17
+ line-height: 1.4;
18
+ }
19
+ .text-field--semi-bold {
20
+ font-weight: 500;
21
+ }
22
+ .text-field--bold {
23
+ font-weight: 700;
24
+ }</style>
@@ -0,0 +1,7 @@
1
+ import type { ArticleFieldModel } from './types';
2
+ type Props = {
3
+ field: ArticleFieldModel;
4
+ };
5
+ declare const TextField: import("svelte").Component<Props, {}, "">;
6
+ type TextField = ReturnType<typeof TextField>;
7
+ export default TextField;
@@ -0,0 +1,72 @@
1
+ import type { ArticleFieldType, GalleryFieldMode, MediaFormat, MediaType, TextFieldMode, TextFieldWeight } from '../../../core/enums';
2
+ export type ArticleFieldMediaItem = {
3
+ type: MediaType;
4
+ url: string;
5
+ thumbnailUrl?: string | null;
6
+ };
7
+ export type ArticleFieldGalleryMediaItem = ArticleFieldMediaItem & {
8
+ metadata: {
9
+ width: number;
10
+ height: number;
11
+ };
12
+ };
13
+ export type FieldMetadata = {
14
+ displayDate: string;
15
+ };
16
+ export type ArticleFieldModel = {
17
+ id: string;
18
+ name: string;
19
+ description: string | null;
20
+ styles: ArticleFieldStylesModel | null;
21
+ fieldData: ArticleFieldDataModel;
22
+ };
23
+ export type ArticleFieldStylesModel = {
24
+ marginTop: number | null;
25
+ marginBottom: number | null;
26
+ marginLeft: number | null;
27
+ marginRight: number | null;
28
+ };
29
+ export type ArticleFieldDataModel = {
30
+ type: ArticleFieldType;
31
+ bylineData?: BylineFieldDataModel | null;
32
+ imageData?: ImageFieldDataModel | null;
33
+ mediaData?: MediaFieldDataModel | null;
34
+ mediaGalleryData?: MediaGalleryFieldDataModel | null;
35
+ richTextData?: RichTextFieldDataModel | null;
36
+ textData?: TextFieldDataModel | null;
37
+ videoData?: VideoFieldDataModel | null;
38
+ };
39
+ export type BylineFieldDataModel = {
40
+ authorName: string | null;
41
+ };
42
+ export type ImageFieldDataModel = {
43
+ image: ArticleFieldMediaItem | null;
44
+ preferredMediaFormat: MediaFormat;
45
+ altText: string | null;
46
+ };
47
+ export type MediaFieldDataModel = {
48
+ media: ArticleFieldMediaItem | null;
49
+ preferredMediaFormat: MediaFormat;
50
+ altText: string | null;
51
+ };
52
+ export type MediaGalleryFieldDataModel = {
53
+ media: ArticleFieldGalleryMediaItem[] | null;
54
+ galleryMode: GalleryFieldMode;
55
+ preferredMediaFormat: MediaFormat;
56
+ altText: string | null;
57
+ };
58
+ export type RichTextFieldDataModel = {
59
+ text: string | null;
60
+ textSize: number;
61
+ };
62
+ export type TextFieldDataModel = {
63
+ text: string | null;
64
+ textMode: TextFieldMode;
65
+ textSize: number;
66
+ textWeight: TextFieldWeight;
67
+ };
68
+ export type VideoFieldDataModel = {
69
+ video: ArticleFieldMediaItem | null;
70
+ preferredMediaFormat: MediaFormat;
71
+ altText: string | null;
72
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ <script lang="ts">import { MediaItemView } from '../../../ui/media-items/media-item-view';
2
+ import { default as AltText } from './alt-text.svelte';
3
+ let { field } = $props();
4
+ const fieldData = $derived(field.fieldData.videoData);
5
+ </script>
6
+
7
+ <MediaItemView media={fieldData.video} ratio={fieldData.preferredMediaFormat} />
8
+ <AltText value={fieldData.altText} />
@@ -0,0 +1,7 @@
1
+ import type { ArticleFieldModel } from './types';
2
+ type Props = {
3
+ field: ArticleFieldModel;
4
+ };
5
+ declare const VideoField: import("svelte").Component<Props, {}, "">;
6
+ type VideoField = ReturnType<typeof VideoField>;
7
+ export default VideoField;
@@ -0,0 +1,5 @@
1
+ import type { ArticleFieldModel } from './fields/types';
2
+ import type { ArticleLayoutModel, ArticleSectionModel } from './types';
3
+ export declare const fieldIsFilled: (field: ArticleFieldModel) => boolean;
4
+ export declare const layoutIsFilled: (layout: ArticleLayoutModel) => boolean;
5
+ export declare const sectionIsFilled: (section: ArticleSectionModel) => boolean;
@@ -0,0 +1,27 @@
1
+ export const fieldIsFilled = (field) => {
2
+ const { fieldData } = field;
3
+ switch (fieldData.type) {
4
+ case 'BYLINE':
5
+ return !!fieldData.bylineData?.authorName;
6
+ case 'IMAGE':
7
+ return !!fieldData.imageData?.image?.url;
8
+ case 'MEDIA':
9
+ return !!fieldData.mediaData?.media?.url;
10
+ case 'MEDIA_GALLERY':
11
+ return !!fieldData.mediaGalleryData?.media?.length;
12
+ case 'RICH_TEXT':
13
+ return !!fieldData.richTextData?.text;
14
+ case 'TEXT':
15
+ return !!fieldData.textData?.text;
16
+ case 'VIDEO':
17
+ return !!fieldData.videoData?.video?.url;
18
+ default:
19
+ return false;
20
+ }
21
+ };
22
+ export const layoutIsFilled = (layout) => {
23
+ return layout.fields.some(fieldIsFilled);
24
+ };
25
+ export const sectionIsFilled = (section) => {
26
+ return section.layouts.some(layoutIsFilled) || !!section.facts;
27
+ };
@@ -0,0 +1,8 @@
1
+ export { default as Article } from './cmp.article.svelte';
2
+ export { default as ArticleView } from './article-view.svelte';
3
+ export { default as FactsContainer } from './cmp.facts-container.svelte';
4
+ export { fieldIsFilled, layoutIsFilled, sectionIsFilled } from './helpers';
5
+ export { ArticleStylesHelper } from './styles-transformer';
6
+ export type { ArticleData, ArticleDataProvider } from '../data-providers';
7
+ export type { ArticleLayoutModel, ArticleLayoutStylesModel, ArticleMetadata, ArticleSectionModel, ArticleSectionStylesModel, ArticleSeo } from './types';
8
+ export type { ArticleFieldDataModel, ArticleFieldModel, ArticleFieldStylesModel, BylineFieldDataModel, FieldMetadata, ImageFieldDataModel, MediaFieldDataModel, MediaGalleryFieldDataModel, RichTextFieldDataModel, TextFieldDataModel, VideoFieldDataModel } from './fields/types';