@ethlete/contentful 1.0.0 → 1.0.2
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/esm2022/lib/components/audio/contentful-audio.component.mjs +65 -0
- package/esm2022/lib/components/file/contentful-file.component.mjs +54 -0
- package/esm2022/lib/components/image/contentful-image.component.mjs +137 -0
- package/{esm2020 → esm2022}/lib/components/image/contentful-image.component.utils.mjs +1 -1
- package/esm2022/lib/components/rich-text-renderer/rich-text-renderer.component.mjs +113 -0
- package/esm2022/lib/components/video/contentful-video.component.mjs +57 -0
- package/{fesm2020 → fesm2022}/ethlete-contentful.mjs +25 -25
- package/fesm2022/ethlete-contentful.mjs.map +1 -0
- package/lib/components/audio/contentful-audio.component.d.ts +1 -1
- package/lib/components/file/contentful-file.component.d.ts +1 -1
- package/lib/components/image/contentful-image.component.d.ts +3 -3
- package/lib/components/image/contentful-image.component.utils.d.ts +1 -1
- package/lib/components/rich-text-renderer/rich-text-renderer.component.d.ts +1 -1
- package/lib/components/video/contentful-video.component.d.ts +1 -1
- package/package.json +10 -16
- package/esm2020/lib/components/audio/contentful-audio.component.mjs +0 -64
- package/esm2020/lib/components/file/contentful-file.component.mjs +0 -53
- package/esm2020/lib/components/image/contentful-image.component.mjs +0 -136
- package/esm2020/lib/components/rich-text-renderer/rich-text-renderer.component.mjs +0 -112
- package/esm2020/lib/components/video/contentful-video.component.mjs +0 -56
- package/fesm2015/ethlete-contentful.mjs +0 -753
- package/fesm2015/ethlete-contentful.mjs.map +0 -1
- package/fesm2020/ethlete-contentful.mjs.map +0 -1
- /package/{esm2020 → esm2022}/ethlete-contentful.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/audio/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/file/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/image/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/image/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/rich-text-renderer/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/rich-text-renderer/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/rich-text-renderer/rich-text-renderer.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/rich-text-renderer/rich-text-renderer.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/rich-text-renderer/rich-text-renderer.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/video/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/constants/contentful.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/constants/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/constants/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/contentful.imports.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/gql/asset.fragments.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/gql/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/contentful.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/contentful-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/contentful.util.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/public-api.mjs +0 -0
|
@@ -2,8 +2,8 @@ import { NgIf, NgClass, NgOptimizedImage, DOCUMENT } from '@angular/common';
|
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { InjectionToken, inject, ChangeDetectorRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, Renderer2, ElementRef, ComponentFactoryResolver, ApplicationRef, Injector } from '@angular/core';
|
|
4
4
|
import { DomPortalOutlet, ComponentPortal } from '@angular/cdk/portal';
|
|
5
|
-
import * as i1 from '@ethlete/
|
|
6
|
-
import { PictureDataDirective, PictureComponent } from '@ethlete/
|
|
5
|
+
import * as i1 from '@ethlete/cdk';
|
|
6
|
+
import { PictureDataDirective, PictureComponent } from '@ethlete/cdk';
|
|
7
7
|
import { BLOCKS, INLINES } from '@contentful/rich-text-types';
|
|
8
8
|
import { gql } from '@ethlete/query';
|
|
9
9
|
|
|
@@ -191,9 +191,8 @@ class ContentfulImageComponent {
|
|
|
191
191
|
this.sources = this._data ? generateContentfulImageSources(this._data, this.srcsetSizes, this.backgroundColor) : [];
|
|
192
192
|
this._cdr.markForCheck();
|
|
193
193
|
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
ContentfulImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: ContentfulImageComponent, isStandalone: true, selector: "et-contentful-image", inputs: { data: "data", sizes: "sizes", srcsetSizes: "srcsetSizes", backgroundColor: "backgroundColor" }, host: { classAttribute: "et-contentful-image" }, hostDirectives: [{ directive: i1.PictureDataDirective, inputs: ["imgClass", "imgClass", "hasPriority", "hasPriority", "figureClass", "figureClass", "pictureClass", "pictureClass", "figcaptionClass", "figcaptionClass"] }], ngImport: i0, template: `
|
|
194
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ContentfulImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
195
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: ContentfulImageComponent, isStandalone: true, selector: "et-contentful-image", inputs: { data: "data", sizes: "sizes", srcsetSizes: "srcsetSizes", backgroundColor: "backgroundColor" }, host: { classAttribute: "et-contentful-image" }, hostDirectives: [{ directive: i1.PictureDataDirective, inputs: ["imgClass", "imgClass", "hasPriority", "hasPriority", "figureClass", "figureClass", "pictureClass", "pictureClass", "figcaptionClass", "figcaptionClass"] }], ngImport: i0, template: `
|
|
197
196
|
<et-picture
|
|
198
197
|
[imgClass]="pictureData.imgClass"
|
|
199
198
|
[hasPriority]="pictureData.hasPriority"
|
|
@@ -208,8 +207,9 @@ ContentfulImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0
|
|
|
208
207
|
[sizes]="pictureData.sizes"
|
|
209
208
|
[sources]="sources"
|
|
210
209
|
/>
|
|
211
|
-
`, isInline: true, dependencies: [{ kind: "component", type: PictureComponent, selector: "et-picture", inputs: ["sources"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
212
|
-
|
|
210
|
+
`, isInline: true, dependencies: [{ kind: "component", type: PictureComponent, selector: "et-picture", inputs: ["sources"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
211
|
+
}
|
|
212
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ContentfulImageComponent, decorators: [{
|
|
213
213
|
type: Component,
|
|
214
214
|
args: [{
|
|
215
215
|
selector: 'et-contentful-image',
|
|
@@ -526,10 +526,10 @@ class ContentfulRichTextRendererComponent {
|
|
|
526
526
|
this._executeCommand({ command: childCommand, parent: element ?? parent });
|
|
527
527
|
}
|
|
528
528
|
}
|
|
529
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ContentfulRichTextRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
530
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: ContentfulRichTextRendererComponent, isStandalone: true, selector: "et-contentful-rich-text-renderer", inputs: { richText: "richText" }, host: { classAttribute: "et-contentful-rich-text-renderer" }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
529
531
|
}
|
|
530
|
-
|
|
531
|
-
ContentfulRichTextRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: ContentfulRichTextRendererComponent, isStandalone: true, selector: "et-contentful-rich-text-renderer", inputs: { richText: "richText" }, host: { classAttribute: "et-contentful-rich-text-renderer" }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
532
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ContentfulRichTextRendererComponent, decorators: [{
|
|
532
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ContentfulRichTextRendererComponent, decorators: [{
|
|
533
533
|
type: Component,
|
|
534
534
|
args: [{
|
|
535
535
|
selector: 'et-contentful-rich-text-renderer',
|
|
@@ -572,15 +572,15 @@ class ContentfulAudioComponent {
|
|
|
572
572
|
this.data = this._richTextData;
|
|
573
573
|
}
|
|
574
574
|
}
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
ContentfulAudioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: ContentfulAudioComponent, isStandalone: true, selector: "et-contentful-audio", inputs: { data: "data", audioClass: "audioClass", figureClass: "figureClass", figcaptionClass: "figcaptionClass" }, ngImport: i0, template: `
|
|
575
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ContentfulAudioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
576
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: ContentfulAudioComponent, isStandalone: true, selector: "et-contentful-audio", inputs: { data: "data", audioClass: "audioClass", figureClass: "figureClass", figcaptionClass: "figcaptionClass" }, ngImport: i0, template: `
|
|
578
577
|
<figure *ngIf="data" [ngClass]="figureClass">
|
|
579
578
|
<figcaption [ngClass]="figcaptionClass">{{ data.title }}</figcaption>
|
|
580
579
|
<audio [ngClass]="audioClass" controls src="{{ data.url }}"></audio>
|
|
581
580
|
</figure>
|
|
582
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
583
|
-
|
|
581
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
582
|
+
}
|
|
583
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ContentfulAudioComponent, decorators: [{
|
|
584
584
|
type: Component,
|
|
585
585
|
args: [{
|
|
586
586
|
selector: 'et-contentful-audio',
|
|
@@ -627,14 +627,14 @@ class ContentfulFileComponent {
|
|
|
627
627
|
this.data = this._richTextData;
|
|
628
628
|
}
|
|
629
629
|
}
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
ContentfulFileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: ContentfulFileComponent, isStandalone: true, selector: "et-contentful-file", inputs: { data: "data", fileClass: "fileClass" }, ngImport: i0, template: `
|
|
630
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ContentfulFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
631
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: ContentfulFileComponent, isStandalone: true, selector: "et-contentful-file", inputs: { data: "data", fileClass: "fileClass" }, ngImport: i0, template: `
|
|
633
632
|
<a *ngIf="data" [href]="data.url" [ngClass]="fileClass" class="underline" target="_blank">
|
|
634
633
|
{{ data.title }} ({{ data.size }} Bytes)
|
|
635
634
|
</a>
|
|
636
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
637
|
-
|
|
635
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
636
|
+
}
|
|
637
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ContentfulFileComponent, decorators: [{
|
|
638
638
|
type: Component,
|
|
639
639
|
args: [{
|
|
640
640
|
selector: 'et-contentful-file',
|
|
@@ -679,14 +679,14 @@ class ContentfulVideoComponent {
|
|
|
679
679
|
this.data = this._richTextData;
|
|
680
680
|
}
|
|
681
681
|
}
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
ContentfulVideoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: ContentfulVideoComponent, isStandalone: true, selector: "et-contentful-video", inputs: { data: "data", videoClass: "videoClass" }, ngImport: i0, template: `
|
|
682
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ContentfulVideoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
683
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: ContentfulVideoComponent, isStandalone: true, selector: "et-contentful-video", inputs: { data: "data", videoClass: "videoClass" }, ngImport: i0, template: `
|
|
685
684
|
<video *ngIf="data" [ngClass]="videoClass" controls>
|
|
686
685
|
<source src="{{ data.url }}" type="{{ data.contentType }}" />
|
|
687
686
|
</video>
|
|
688
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
689
|
-
|
|
687
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
688
|
+
}
|
|
689
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ContentfulVideoComponent, decorators: [{
|
|
690
690
|
type: Component,
|
|
691
691
|
args: [{
|
|
692
692
|
selector: 'et-contentful-video',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethlete-contentful.mjs","sources":["../../../../libs/contentful/src/lib/constants/contentful.constants.ts","../../../../libs/contentful/src/lib/utils/contentful-config.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.constants.ts","../../../../libs/contentful/src/lib/utils/contentful.util.ts","../../../../libs/contentful/src/lib/components/image/contentful-image.component.utils.ts","../../../../libs/contentful/src/lib/components/image/contentful-image.component.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.util.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.component.ts","../../../../libs/contentful/src/lib/components/audio/contentful-audio.component.ts","../../../../libs/contentful/src/lib/components/file/contentful-file.component.ts","../../../../libs/contentful/src/lib/components/video/contentful-video.component.ts","../../../../libs/contentful/src/lib/contentful.imports.ts","../../../../libs/contentful/src/lib/gql/asset.fragments.ts","../../../../libs/contentful/src/ethlete-contentful.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { ContentfulConfig } from '../types';\n\nexport const CONTENTFUL_CONFIG = new InjectionToken<ContentfulConfig>('ContentfulConfig');\n","import {\n ContentfulAudioComponent,\n ContentfulFileComponent,\n ContentfulImageComponent,\n ContentfulVideoComponent,\n} from '../components';\nimport { ContentfulConfig } from '../types';\n\nexport const createContentfulConfig = (\n config: Partial<ContentfulConfig> | null | undefined = {},\n): ContentfulConfig => ({\n // This default config must be inline and not saved inside a const for some weird webpack reason\n ...{\n useTailwindClasses: false,\n components: {\n audio: ContentfulAudioComponent,\n file: ContentfulFileComponent,\n image: ContentfulImageComponent,\n video: ContentfulVideoComponent,\n },\n customComponents: {},\n imageOptions: {\n srcsetSizes: ['375w', '1280w', '1920w', '2560w'],\n sizes: [],\n backgroundColor: null,\n },\n },\n ...(config || {}),\n});\n","import { InjectionToken } from '@angular/core';\n\nexport const RICH_TEXT_RENDERER_COMPONENT_DATA = new InjectionToken<unknown>('RICH_TEXT_RENDERER_COMPONENT_DATA');\n","import { CONTENTFUL_CONFIG } from '../constants';\nimport { ContentfulAsset, ContentfulConfig, ContentfulImage } from '../types';\nimport { createContentfulConfig } from './contentful-config';\n\nexport const provideContentfulConfig = (contentfulConfig: Partial<ContentfulConfig> | null | undefined = {}) => {\n return { provide: CONTENTFUL_CONFIG, useValue: createContentfulConfig(contentfulConfig) };\n};\n\nexport const isContentfulImage = (v: ContentfulAsset | ContentfulImage | null | undefined): v is ContentfulImage => {\n return !!v && 'asset' in v && 'alt' in v && 'resizeBehavior' in v && 'focusArea' in v;\n};\n\nexport const isContentfulAsset = (v: ContentfulAsset | ContentfulImage | null | undefined): v is ContentfulAsset => {\n return !!v && 'contentType' in v && 'description' in v && 'height' in v && 'url' in v && 'width' in v;\n};\n","import { PictureSource } from '@ethlete/cdk';\nimport { ContentfulAsset, ContentfulImage } from '../../types';\nimport { isContentfulImage } from '../../utils';\n\nexport const generateDefaultContentfulImageSource = (data: ContentfulAsset): PictureSource => {\n const { url, contentType } = data;\n\n return {\n type: contentType,\n srcset: url,\n };\n};\n\n/**\n * Parses source set sizes into an object containing with and height. Eg.\n * - `\"400\"` - 400px width\n * - `\"400x300\"` - 400px width and 300px height\n * - `\"400w\"` - 400px width\n * - `\"400h\"` - 400px height\n * - `\"400wx300h\"` - 400px width and 300px height\n **/\nexport const parseContentfulImageSize = (size: string): { width: number | null; height: number | null } => {\n let width: string | null | undefined = null;\n let height: string | null | undefined = null;\n\n if (size.includes('x')) {\n const [w, h] = size.split('x');\n\n width = w;\n height = h;\n } else if (size.includes('h')) {\n height = size;\n } else {\n width = size;\n }\n\n return {\n width: width ? parseInt(width, 10) : null,\n height: height ? parseInt(height, 10) : null,\n };\n};\n\nexport const generateContentfulImageSources = (\n data: ContentfulAsset | ContentfulImage,\n srcsetSizes: string[],\n backgroundColor: string | null,\n): PictureSource[] => {\n const assetData = isContentfulImage(data) ? data.asset : data;\n const imageData = isContentfulImage(data) ? data : null;\n\n if (!assetData) {\n return [];\n }\n\n const sources: PictureSource[] = [];\n\n const SOURCE_TYPES = ['image/avif', 'image/webp', 'image/png', 'image/jpg'];\n\n for (const type of SOURCE_TYPES) {\n const baseUrl = assetData.url;\n const sourceSets: string[] = [];\n const queryParams: string[] = [];\n\n // Set the format (e.g. 'fm=webp')\n queryParams.push(`fm=${type.split('/')[1]}`);\n\n if (backgroundColor) {\n queryParams.push(`bg=rgb:${backgroundColor}`);\n }\n\n if (imageData) {\n if (imageData.quality) {\n queryParams.push(`q=${imageData.quality}`);\n }\n\n if (imageData.focusArea) {\n queryParams.push(`f=${imageData.focusArea}`);\n }\n\n if (imageData.resizeBehavior) {\n queryParams.push(`fit=${imageData.resizeBehavior}`);\n }\n }\n\n if (srcsetSizes?.length) {\n const urlWithParams = `${baseUrl}?${queryParams.join('&')}`;\n\n for (const size of srcsetSizes) {\n const { width, height } = parseContentfulImageSize(size);\n\n if (width && height) {\n sourceSets.push(`${urlWithParams}&w=${width}&h=${height} ${width}w`);\n } else if (width) {\n sourceSets.push(`${urlWithParams}&w=${width} ${width}w`);\n } else if (height) {\n sourceSets.push(`${urlWithParams}&h=${height} ${height}h`);\n }\n }\n }\n\n sources.push({\n type,\n srcset: sourceSets.length ? sourceSets.join(', ') : `${baseUrl}?${queryParams.join('&')}`,\n });\n }\n\n return sources;\n};\n","import { NgClass, NgIf, NgOptimizedImage } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { PictureComponent, PictureDataDirective, PictureSource } from '@ethlete/cdk';\nimport { ContentfulAsset, ContentfulImage } from '../../types';\nimport { isContentfulImage } from '../../utils';\nimport { RICH_TEXT_RENDERER_COMPONENT_DATA } from '../rich-text-renderer';\nimport {\n generateContentfulImageSources,\n generateDefaultContentfulImageSource,\n} from './contentful-image.component.utils';\n\n@Component({\n selector: 'et-contentful-image',\n template: `\n <et-picture\n [imgClass]=\"pictureData.imgClass\"\n [hasPriority]=\"pictureData.hasPriority\"\n [figureClass]=\"pictureData.figureClass\"\n [pictureClass]=\"pictureData.pictureClass\"\n [figcaptionClass]=\"pictureData.figcaptionClass\"\n [defaultSrc]=\"pictureData.defaultSrc\"\n [alt]=\"pictureData.alt\"\n [figcaption]=\"pictureData.figcaption\"\n [width]=\"pictureData.width\"\n [height]=\"pictureData.height\"\n [sizes]=\"pictureData.sizes\"\n [sources]=\"sources\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgIf, NgClass, NgOptimizedImage, PictureComponent],\n hostDirectives: [\n {\n directive: PictureDataDirective,\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['imgClass', 'hasPriority', 'figureClass', 'pictureClass', 'figcaptionClass'],\n },\n ],\n host: {\n class: 'et-contentful-image',\n },\n})\nexport class ContentfulImageComponent implements OnInit {\n private _richTextData = inject<ContentfulAsset | ContentfulImage>(RICH_TEXT_RENDERER_COMPONENT_DATA, {\n optional: true,\n });\n\n protected readonly pictureData = inject(PictureDataDirective);\n readonly _cdr = inject(ChangeDetectorRef);\n\n @Input()\n get data() {\n return this._data;\n }\n set data(v: ContentfulAsset | ContentfulImage | null | undefined) {\n const assetData = isContentfulImage(v) ? v.asset : v;\n const imageData = isContentfulImage(v) ? v : null;\n\n if (assetData && !assetData.contentType) {\n this._data = null;\n\n console.warn('The provided asset is invalid', v);\n\n return;\n }\n\n if (assetData && !assetData.contentType.startsWith('image/')) {\n throw new Error('The provided asset is not an image');\n }\n\n this._data = v ?? null;\n this.pictureData.defaultSrc = assetData ? generateDefaultContentfulImageSource(assetData) : null;\n this.pictureData.alt = imageData?.alt ?? assetData?.description ?? null;\n this.pictureData.width = assetData?.width ?? null;\n this.pictureData.height = assetData?.height ?? null;\n this.pictureData.figcaption = imageData?.caption ?? null;\n\n this.updateSizes();\n }\n private _data: ContentfulAsset | ContentfulImage | null = null;\n\n @Input()\n get sizes(): string[] {\n return this._sizes;\n }\n set sizes(v: string[]) {\n this._sizes = v;\n this.pictureData.sizes = this.sizes?.join(', ') ?? null;\n }\n private _sizes: string[] = [];\n\n @Input()\n get srcsetSizes(): string[] {\n return this._srcsetSizes;\n }\n set srcsetSizes(v: string[]) {\n this._srcsetSizes = v;\n this.updateSizes();\n }\n private _srcsetSizes: string[] = [];\n\n @Input()\n get backgroundColor() {\n return this._backgroundColor;\n }\n set backgroundColor(v: string | null) {\n this._backgroundColor = v;\n this.updateSizes();\n }\n private _backgroundColor: string | null = null;\n\n protected sources: PictureSource[] = [];\n\n ngOnInit(): void {\n if (this._richTextData && !this.data) {\n this.data = this._richTextData;\n }\n }\n\n private updateSizes() {\n this.sources = this._data ? generateContentfulImageSources(this._data, this.srcsetSizes, this.backgroundColor) : [];\n\n this._cdr.markForCheck();\n }\n}\n","import { Block, BLOCKS, Inline, INLINES, Mark, Text } from '@contentful/rich-text-types';\nimport { ContentfulAsset, ContentfulConfig, ContentfulEntryBase, RichTextResponse } from '../../types';\nimport { ContentfulImageComponent } from '../image';\nimport { ContentfulResourceMap, RichTextRenderCommand } from './rich-text-renderer.types';\n\nexport const createRenderCommandsFromContentfulRichText = (options: {\n data: RichTextResponse;\n config: ContentfulConfig;\n}) => {\n const { data, config } = options;\n\n const commands: RichTextRenderCommand[] = [];\n const resourceMap = createContentfulResourceMap(data.links);\n\n createContentfulRenderCommand(data.json, { children: commands, payload: data.json.nodeType }, resourceMap, config);\n\n return commands;\n};\n\nexport const createContentfulRenderCommand = (\n node: Block | Inline | Text,\n parent: RichTextRenderCommand,\n resourceMap: ContentfulResourceMap,\n config: ContentfulConfig,\n) => {\n const { nodeType, data: nodeData } = node;\n\n const { children, marks, value } = getContentfulNodeProps(node);\n\n const command: RichTextRenderCommand = {\n payload: translateContentfulNodeTypeToHtmlTag(nodeType),\n data: value,\n attributes: {\n ...(marks\n ? {\n class: transformContentfulMarks(marks, config.useTailwindClasses),\n }\n : {}),\n ...(nodeData['uri'] ? { href: nodeData['uri'], target: '_blank' } : {}),\n },\n children: [],\n };\n\n const entryId = nodeData['target']?.sys?.id;\n\n if (nodeType === BLOCKS.EMBEDDED_ASSET) {\n const asset = resourceMap.assetsBlock.get(entryId);\n\n if (asset) {\n const isImage = asset.contentType.startsWith('image/');\n const isVideo = asset.contentType.startsWith('video/');\n const isAudio = asset.contentType.startsWith('audio/');\n\n command.data = asset;\n\n if (isImage) {\n command.payload = config.components.image;\n } else if (isVideo) {\n command.payload = config.components.video;\n } else if (isAudio) {\n command.payload = config.components.audio;\n } else {\n command.payload = config.components.file;\n }\n } else {\n console.warn(`No asset found for entry id \"${entryId}\"!`, nodeData);\n }\n } else if (nodeType === BLOCKS.EMBEDDED_ENTRY || nodeType === INLINES.EMBEDDED_ENTRY) {\n const entry = resourceMap.entriesBlock.get(entryId) ?? resourceMap.entriesInline.get(entryId);\n\n if (entry) {\n const type = entry?.__typename ?? 'ET_UNKNOWN';\n\n // \"Image\" is a special wrapper content model for contentful assets.\n // It must be created by the user.\n const component = type === 'Image' ? ContentfulImageComponent : config.customComponents?.[type];\n\n if (component) {\n command.payload = component;\n command.data = entry;\n } else {\n command.data = `ERROR: No component found for embedded entry \"${type}\" as \"${nodeType}\"!`;\n }\n } else {\n console.warn(`No entry found for entry id \"${entryId}\"!`, nodeData);\n }\n }\n\n if (children && (children.length !== 1 || children[0].nodeType !== 'text')) {\n children.forEach((child) => {\n createContentfulRenderCommand(child, command, resourceMap, config);\n });\n }\n\n parent.children.push(command);\n\n return command;\n};\n\nexport const getContentfulNodeProps = (node: Block | Inline | Text) => {\n const children = 'content' in node ? node.content : null;\n let marks: Mark[] | null = null;\n let value: string | null = null;\n\n if (children && children.length === 1 && children[0].nodeType === 'text') {\n marks = children[0].marks?.length ? children[0].marks : null;\n value = children[0].value;\n } else {\n marks = 'marks' in node ? (node.marks?.length ? node.marks : null) : null;\n value = 'value' in node ? node.value : null;\n }\n\n return {\n children,\n marks,\n value,\n };\n};\n\nexport const transformContentfulMarks = (marks: Mark[], useTailwindClasses: boolean) => {\n return marks\n .map((mark) => {\n switch (mark.type) {\n case 'bold':\n return useTailwindClasses ? 'font-bold' : mark.type;\n case 'italic':\n return useTailwindClasses ? 'italic' : mark.type;\n case 'underline':\n return useTailwindClasses ? 'underline' : mark.type;\n case 'code':\n return useTailwindClasses ? 'font-mono' : mark.type;\n default:\n return mark.type;\n }\n })\n .join(' ');\n};\n\nexport const translateContentfulNodeTypeToHtmlTag = (nodeType: 'text' | BLOCKS | INLINES) => {\n switch (nodeType) {\n case BLOCKS.HEADING_1:\n return 'h1';\n case BLOCKS.HEADING_2:\n return 'h2';\n case BLOCKS.HEADING_3:\n return 'h3';\n case BLOCKS.HEADING_4:\n return 'h4';\n case BLOCKS.HEADING_5:\n return 'h5';\n case BLOCKS.HEADING_6:\n return 'h6';\n case BLOCKS.PARAGRAPH:\n return 'p';\n case BLOCKS.UL_LIST:\n return 'ul';\n case BLOCKS.OL_LIST:\n return 'ol';\n case BLOCKS.LIST_ITEM:\n return 'li';\n case BLOCKS.HR:\n return 'hr';\n case BLOCKS.QUOTE:\n return 'blockquote';\n case BLOCKS.TABLE:\n return 'table';\n case BLOCKS.TABLE_ROW:\n return 'tr';\n case BLOCKS.TABLE_CELL:\n return 'td';\n case BLOCKS.TABLE_HEADER_CELL:\n return 'th';\n case BLOCKS.EMBEDDED_ASSET:\n return 'div';\n\n case INLINES.HYPERLINK:\n return 'a';\n case INLINES.ENTRY_HYPERLINK:\n return 'a';\n case INLINES.ASSET_HYPERLINK:\n return 'a';\n\n case 'text':\n return 'span';\n\n // Will be ignored by the renderer\n case 'document':\n return 'document';\n\n case BLOCKS.EMBEDDED_ENTRY:\n return 'div';\n case INLINES.EMBEDDED_ENTRY:\n return 'div';\n\n default:\n return 'div';\n }\n};\n\nexport const createContentfulResourceMap = (links: RichTextResponse['links']): ContentfulResourceMap => {\n const resourceMap = {\n assetsBlock: createContentfulMap<ContentfulAsset>(links?.assets?.block),\n entriesInline: createContentfulMap(links?.entries?.inline),\n entriesBlock: createContentfulMap(links?.entries?.block),\n } as const;\n\n return resourceMap;\n};\n\nexport const createContentfulMap = <T extends ContentfulEntryBase>(links: Array<T> | null | undefined) => {\n const assetMap = new Map<string, T>();\n\n if (links) {\n for (const link of links) {\n if (!link?.sys?.id) {\n console.warn('Link has no sys.id property. Please include it inside your query.', link);\n continue;\n }\n\n assetMap.set(link.sys.id, link);\n }\n }\n\n return assetMap;\n};\n","import { ComponentPortal, DomPortalOutlet } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n ComponentFactoryResolver,\n ElementRef,\n inject,\n Injector,\n Input,\n Renderer2,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ContentfulImageComponent } from '..';\nimport { CONTENTFUL_CONFIG } from '../../constants/contentful.constants';\nimport { RichTextResponse } from '../../types';\nimport { createContentfulConfig } from '../../utils/contentful-config';\nimport { RICH_TEXT_RENDERER_COMPONENT_DATA } from './rich-text-renderer.constants';\nimport { RichTextRenderCommand } from './rich-text-renderer.types';\nimport { createRenderCommandsFromContentfulRichText } from './rich-text-renderer.util';\n\n@Component({\n selector: 'et-contentful-rich-text-renderer',\n template: ``,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n class: 'et-contentful-rich-text-renderer',\n },\n})\nexport class ContentfulRichTextRendererComponent {\n @Input()\n get richText() {\n return this._richText;\n }\n set richText(v: RichTextResponse | null | undefined) {\n this._richText = v ?? null;\n\n this.resetAndRender();\n }\n private _richText: RichTextResponse | null = null;\n\n private _renderer = inject(Renderer2);\n private _elementRef = inject(ElementRef);\n private _componentFactoryResolver = inject(ComponentFactoryResolver);\n private _document = inject<Document>(DOCUMENT);\n private _appRef = inject(ApplicationRef);\n private _injector = inject(Injector);\n private _config = inject(CONTENTFUL_CONFIG, { optional: true }) ?? createContentfulConfig();\n\n resetAndRender() {\n // clear childNodes to prevent appending new richtext elements to existing one\n const childElements = this._elementRef.nativeElement.childNodes;\n for (const child of childElements) {\n this._renderer.removeChild(this._elementRef.nativeElement, child);\n }\n\n if (!this._richText) {\n return;\n }\n\n const commands = createRenderCommandsFromContentfulRichText({ data: this._richText, config: this._config });\n\n this._render(commands);\n }\n\n private _render(commands: RichTextRenderCommand[]) {\n // create a document fragment to hold the elements while we create them\n const fragment = document.createDocumentFragment();\n\n const hostCommand: RichTextRenderCommand = {\n payload: 'document',\n children: commands,\n };\n\n // loop over the commands\n this._executeCommand({ command: hostCommand, parent: fragment });\n\n // append the fragment to the host element\n this._renderer.appendChild(this._elementRef.nativeElement, fragment);\n }\n\n private _executeCommand(data: { command: RichTextRenderCommand; parent: Element | DocumentFragment }) {\n const { command, parent } = data;\n\n let element: Element | null = null;\n if (command.payload !== 'document') {\n if (typeof command.payload === 'string') {\n element = this._renderer.createElement(command.payload);\n\n if (command.data) {\n this._renderer.setProperty(element, 'innerText', command.data);\n }\n\n if (command.attributes) {\n for (const [name, value] of Object.entries(command.attributes)) {\n this._renderer.setAttribute(element, name, value);\n }\n }\n this._renderer.appendChild(parent, element);\n } else {\n const injector = Injector.create({\n providers: [\n {\n provide: RICH_TEXT_RENDERER_COMPONENT_DATA,\n useValue: command.data,\n },\n ],\n parent: this._injector,\n });\n\n const portal = new DomPortalOutlet(\n parent as Element,\n this._componentFactoryResolver,\n this._appRef,\n injector,\n this._document,\n );\n\n const comp = new ComponentPortal(command.payload);\n const ref = comp.attach(portal);\n\n if (ref.instance instanceof ContentfulImageComponent) {\n ref.instance.sizes = this._config.imageOptions.sizes;\n ref.instance.srcsetSizes = this._config.imageOptions.srcsetSizes;\n ref.instance.backgroundColor = this._config.imageOptions.backgroundColor;\n }\n\n element = ref.location.nativeElement;\n }\n }\n\n // loop over the commands\n for (const childCommand of command.children) {\n this._executeCommand({ command: childCommand, parent: element ?? parent });\n }\n }\n}\n","import { NgClass, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulAsset } from '../../types';\nimport { RICH_TEXT_RENDERER_COMPONENT_DATA } from '../rich-text-renderer';\n\n@Component({\n selector: 'et-contentful-audio',\n template: `\n <figure *ngIf=\"data\" [ngClass]=\"figureClass\">\n <figcaption [ngClass]=\"figcaptionClass\">{{ data.title }}</figcaption>\n <audio [ngClass]=\"audioClass\" controls src=\"{{ data.url }}\"></audio>\n </figure>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgIf, NgClass],\n})\nexport class ContentfulAudioComponent implements OnInit {\n private _richTextData = inject<ContentfulAsset>(RICH_TEXT_RENDERER_COMPONENT_DATA, { optional: true });\n\n @Input()\n get data() {\n return this._data;\n }\n set data(v: ContentfulAsset | null | undefined) {\n if (v && !v.contentType) {\n this._data = null;\n\n console.warn('The provided asset is invalid', v);\n\n return;\n }\n\n if (v && !v.contentType.startsWith('audio/')) {\n throw new Error('The provided asset is not an audio');\n }\n\n this._data = v ?? null;\n }\n private _data: ContentfulAsset | null = null;\n\n @Input()\n audioClass: NgClassType = null;\n\n @Input()\n figureClass: NgClassType = null;\n\n @Input()\n figcaptionClass: NgClassType = null;\n\n ngOnInit(): void {\n if (this._richTextData && !this.data) {\n this.data = this._richTextData;\n }\n }\n}\n","import { NgClass, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulAsset } from '../../types';\nimport { RICH_TEXT_RENDERER_COMPONENT_DATA } from '../rich-text-renderer';\n\n@Component({\n selector: 'et-contentful-file',\n template: `\n <a *ngIf=\"data\" [href]=\"data.url\" [ngClass]=\"fileClass\" class=\"underline\" target=\"_blank\">\n {{ data.title }} ({{ data.size }} Bytes)\n </a>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgIf, NgClass],\n})\nexport class ContentfulFileComponent implements OnInit {\n private _richTextData = inject<ContentfulAsset>(RICH_TEXT_RENDERER_COMPONENT_DATA, { optional: true });\n\n @Input()\n get data() {\n return this._data;\n }\n set data(v: ContentfulAsset | null | undefined) {\n if (v && !v.contentType) {\n this._data = null;\n\n console.warn('The provided asset is invalid', v);\n\n return;\n }\n\n this._data = v ?? null;\n }\n private _data: ContentfulAsset | null = null;\n\n @Input()\n fileClass: NgClassType = null;\n\n ngOnInit(): void {\n if (this._richTextData && !this.data) {\n this.data = this._richTextData;\n }\n }\n}\n","import { NgClass, NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulAsset } from '../../types';\nimport { RICH_TEXT_RENDERER_COMPONENT_DATA } from '../rich-text-renderer';\n\n@Component({\n selector: 'et-contentful-video',\n template: `\n <video *ngIf=\"data\" [ngClass]=\"videoClass\" controls>\n <source src=\"{{ data.url }}\" type=\"{{ data.contentType }}\" />\n </video>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgIf, NgClass],\n})\nexport class ContentfulVideoComponent implements OnInit {\n private _richTextData = inject<ContentfulAsset>(RICH_TEXT_RENDERER_COMPONENT_DATA, { optional: true });\n\n @Input()\n get data() {\n return this._data;\n }\n set data(v: ContentfulAsset | null | undefined) {\n if (v && !v.contentType) {\n this._data = null;\n\n console.warn('The provided asset is invalid', v);\n\n return;\n }\n\n if (v && !v.contentType.startsWith('video/')) {\n throw new Error('The provided asset is not an video');\n }\n\n this._data = v ?? null;\n }\n private _data: ContentfulAsset | null = null;\n\n @Input()\n videoClass: NgClassType = null;\n\n ngOnInit(): void {\n if (this._richTextData && !this.data) {\n this.data = this._richTextData;\n }\n }\n}\n","import {\n ContentfulAudioComponent,\n ContentfulFileComponent,\n ContentfulImageComponent,\n ContentfulRichTextRendererComponent,\n ContentfulVideoComponent,\n} from './public-api';\n\nexport const ContentfulImports = [\n ContentfulAudioComponent,\n ContentfulFileComponent,\n ContentfulImageComponent,\n ContentfulVideoComponent,\n ContentfulRichTextRendererComponent,\n] as const;\n","import { gql } from '@ethlete/query';\n\nexport const GQL_FRAGMENT_CONTENTFUL_ASSET = gql`\n fragment AssetData on Asset {\n sys {\n id\n }\n url\n title\n width\n height\n description\n contentType\n size\n }\n`;\n\nexport const GQL_FRAGMENT_CONTENTFUL_IMAGE = gql`\n fragment ImageData on Image {\n sys {\n id\n }\n asset {\n ...AssetData\n }\n alt\n caption\n resizeBehavior\n focusArea\n quality\n __typename\n }\n`;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -12,5 +12,5 @@ export declare class ContentfulAudioComponent implements OnInit {
|
|
|
12
12
|
figcaptionClass: NgClassType;
|
|
13
13
|
ngOnInit(): void;
|
|
14
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<ContentfulAudioComponent, never>;
|
|
15
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ContentfulAudioComponent, "et-contentful-audio", never, { "data": "data"; "audioClass": "audioClass"; "figureClass": "figureClass"; "figcaptionClass": "figcaptionClass"; }, {}, never, never, true, never>;
|
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ContentfulAudioComponent, "et-contentful-audio", never, { "data": { "alias": "data"; "required": false; }; "audioClass": { "alias": "audioClass"; "required": false; }; "figureClass": { "alias": "figureClass"; "required": false; }; "figcaptionClass": { "alias": "figcaptionClass"; "required": false; }; }, {}, never, never, true, never>;
|
|
16
16
|
}
|
|
@@ -10,5 +10,5 @@ export declare class ContentfulFileComponent implements OnInit {
|
|
|
10
10
|
fileClass: NgClassType;
|
|
11
11
|
ngOnInit(): void;
|
|
12
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<ContentfulFileComponent, never>;
|
|
13
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ContentfulFileComponent, "et-contentful-file", never, { "data": "data"; "fileClass": "fileClass"; }, {}, never, never, true, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ContentfulFileComponent, "et-contentful-file", never, { "data": { "alias": "data"; "required": false; }; "fileClass": { "alias": "fileClass"; "required": false; }; }, {}, never, never, true, never>;
|
|
14
14
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ChangeDetectorRef, OnInit } from '@angular/core';
|
|
2
|
-
import { PictureDataDirective, PictureSource } from '@ethlete/
|
|
2
|
+
import { PictureDataDirective, PictureSource } from '@ethlete/cdk';
|
|
3
3
|
import { ContentfulAsset, ContentfulImage } from '../../types';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@ethlete/
|
|
5
|
+
import * as i1 from "@ethlete/cdk";
|
|
6
6
|
export declare class ContentfulImageComponent implements OnInit {
|
|
7
7
|
private _richTextData;
|
|
8
8
|
protected readonly pictureData: PictureDataDirective;
|
|
@@ -23,5 +23,5 @@ export declare class ContentfulImageComponent implements OnInit {
|
|
|
23
23
|
ngOnInit(): void;
|
|
24
24
|
private updateSizes;
|
|
25
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<ContentfulImageComponent, never>;
|
|
26
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ContentfulImageComponent, "et-contentful-image", never, { "data": "data"; "sizes": "sizes"; "srcsetSizes": "srcsetSizes"; "backgroundColor": "backgroundColor"; }, {}, never, never, true, [{ directive: typeof i1.PictureDataDirective; inputs: { "imgClass": "imgClass"; "hasPriority": "hasPriority"; "figureClass": "figureClass"; "pictureClass": "pictureClass"; "figcaptionClass": "figcaptionClass"; }; outputs: {}; }]>;
|
|
26
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ContentfulImageComponent, "et-contentful-image", never, { "data": { "alias": "data"; "required": false; }; "sizes": { "alias": "sizes"; "required": false; }; "srcsetSizes": { "alias": "srcsetSizes"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; }, {}, never, never, true, [{ directive: typeof i1.PictureDataDirective; inputs: { "imgClass": "imgClass"; "hasPriority": "hasPriority"; "figureClass": "figureClass"; "pictureClass": "pictureClass"; "figcaptionClass": "figcaptionClass"; }; outputs: {}; }]>;
|
|
27
27
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PictureSource } from '@ethlete/
|
|
1
|
+
import { PictureSource } from '@ethlete/cdk';
|
|
2
2
|
import { ContentfulAsset, ContentfulImage } from '../../types';
|
|
3
3
|
export declare const generateDefaultContentfulImageSource: (data: ContentfulAsset) => PictureSource;
|
|
4
4
|
/**
|
|
@@ -15,5 +15,5 @@ export declare class ContentfulRichTextRendererComponent {
|
|
|
15
15
|
private _render;
|
|
16
16
|
private _executeCommand;
|
|
17
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<ContentfulRichTextRendererComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ContentfulRichTextRendererComponent, "et-contentful-rich-text-renderer", never, { "richText": "richText"; }, {}, never, never, true, never>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ContentfulRichTextRendererComponent, "et-contentful-rich-text-renderer", never, { "richText": { "alias": "richText"; "required": false; }; }, {}, never, never, true, never>;
|
|
19
19
|
}
|
|
@@ -10,5 +10,5 @@ export declare class ContentfulVideoComponent implements OnInit {
|
|
|
10
10
|
videoClass: NgClassType;
|
|
11
11
|
ngOnInit(): void;
|
|
12
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<ContentfulVideoComponent, never>;
|
|
13
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ContentfulVideoComponent, "et-contentful-video", never, { "data": "data"; "videoClass": "videoClass"; }, {}, never, never, true, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ContentfulVideoComponent, "et-contentful-video", never, { "data": { "alias": "data"; "required": false; }; "videoClass": { "alias": "videoClass"; "required": false; }; }, {}, never, never, true, never>;
|
|
14
14
|
}
|
package/package.json
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ethlete/contentful",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"tslib": "^2.
|
|
5
|
+
"tslib": "^2.5.0"
|
|
6
6
|
},
|
|
7
7
|
"peerDependencies": {
|
|
8
|
-
"@angular/common": "^
|
|
9
|
-
"@angular/core": "^
|
|
10
|
-
"@ethlete/core": "1.
|
|
11
|
-
"@ethlete/
|
|
8
|
+
"@angular/common": "^15.2.1 || ^16.0.0",
|
|
9
|
+
"@angular/core": "^15.2.1 || ^16.0.0",
|
|
10
|
+
"@ethlete/core": "1.10.1",
|
|
11
|
+
"@ethlete/cdk": "2.3.2"
|
|
12
12
|
},
|
|
13
|
-
"module": "
|
|
14
|
-
"es2020": "fesm2020/ethlete-contentful.mjs",
|
|
15
|
-
"esm2020": "esm2020/ethlete-contentful.mjs",
|
|
16
|
-
"fesm2020": "fesm2020/ethlete-contentful.mjs",
|
|
17
|
-
"fesm2015": "fesm2015/ethlete-contentful.mjs",
|
|
13
|
+
"module": "fesm2022/ethlete-contentful.mjs",
|
|
18
14
|
"typings": "index.d.ts",
|
|
19
15
|
"exports": {
|
|
20
16
|
"./package.json": {
|
|
@@ -22,11 +18,9 @@
|
|
|
22
18
|
},
|
|
23
19
|
".": {
|
|
24
20
|
"types": "./index.d.ts",
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"node": "./fesm2015/ethlete-contentful.mjs",
|
|
29
|
-
"default": "./fesm2020/ethlete-contentful.mjs"
|
|
21
|
+
"esm2022": "./esm2022/ethlete-contentful.mjs",
|
|
22
|
+
"esm": "./esm2022/ethlete-contentful.mjs",
|
|
23
|
+
"default": "./fesm2022/ethlete-contentful.mjs"
|
|
30
24
|
}
|
|
31
25
|
},
|
|
32
26
|
"sideEffects": false
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { NgClass, NgIf } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation } from '@angular/core';
|
|
3
|
-
import { RICH_TEXT_RENDERER_COMPONENT_DATA } from '../rich-text-renderer';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class ContentfulAudioComponent {
|
|
6
|
-
constructor() {
|
|
7
|
-
this._richTextData = inject(RICH_TEXT_RENDERER_COMPONENT_DATA, { optional: true });
|
|
8
|
-
this._data = null;
|
|
9
|
-
this.audioClass = null;
|
|
10
|
-
this.figureClass = null;
|
|
11
|
-
this.figcaptionClass = null;
|
|
12
|
-
}
|
|
13
|
-
get data() {
|
|
14
|
-
return this._data;
|
|
15
|
-
}
|
|
16
|
-
set data(v) {
|
|
17
|
-
if (v && !v.contentType) {
|
|
18
|
-
this._data = null;
|
|
19
|
-
console.warn('The provided asset is invalid', v);
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
if (v && !v.contentType.startsWith('audio/')) {
|
|
23
|
-
throw new Error('The provided asset is not an audio');
|
|
24
|
-
}
|
|
25
|
-
this._data = v ?? null;
|
|
26
|
-
}
|
|
27
|
-
ngOnInit() {
|
|
28
|
-
if (this._richTextData && !this.data) {
|
|
29
|
-
this.data = this._richTextData;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
ContentfulAudioComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ContentfulAudioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
34
|
-
ContentfulAudioComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: ContentfulAudioComponent, isStandalone: true, selector: "et-contentful-audio", inputs: { data: "data", audioClass: "audioClass", figureClass: "figureClass", figcaptionClass: "figcaptionClass" }, ngImport: i0, template: `
|
|
35
|
-
<figure *ngIf="data" [ngClass]="figureClass">
|
|
36
|
-
<figcaption [ngClass]="figcaptionClass">{{ data.title }}</figcaption>
|
|
37
|
-
<audio [ngClass]="audioClass" controls src="{{ data.url }}"></audio>
|
|
38
|
-
</figure>
|
|
39
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ContentfulAudioComponent, decorators: [{
|
|
41
|
-
type: Component,
|
|
42
|
-
args: [{
|
|
43
|
-
selector: 'et-contentful-audio',
|
|
44
|
-
template: `
|
|
45
|
-
<figure *ngIf="data" [ngClass]="figureClass">
|
|
46
|
-
<figcaption [ngClass]="figcaptionClass">{{ data.title }}</figcaption>
|
|
47
|
-
<audio [ngClass]="audioClass" controls src="{{ data.url }}"></audio>
|
|
48
|
-
</figure>
|
|
49
|
-
`,
|
|
50
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
51
|
-
encapsulation: ViewEncapsulation.None,
|
|
52
|
-
standalone: true,
|
|
53
|
-
imports: [NgIf, NgClass],
|
|
54
|
-
}]
|
|
55
|
-
}], propDecorators: { data: [{
|
|
56
|
-
type: Input
|
|
57
|
-
}], audioClass: [{
|
|
58
|
-
type: Input
|
|
59
|
-
}], figureClass: [{
|
|
60
|
-
type: Input
|
|
61
|
-
}], figcaptionClass: [{
|
|
62
|
-
type: Input
|
|
63
|
-
}] } });
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGZ1bC1hdWRpby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbnRlbnRmdWwvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGlvL2NvbnRlbnRmdWwtYXVkaW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdHLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWUxRSxNQUFNLE9BQU8sd0JBQXdCO0lBYnJDO1FBY1Usa0JBQWEsR0FBRyxNQUFNLENBQWtCLGlDQUFpQyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFxQi9GLFVBQUssR0FBMkIsSUFBSSxDQUFDO1FBRzdDLGVBQVUsR0FBZ0IsSUFBSSxDQUFDO1FBRy9CLGdCQUFXLEdBQWdCLElBQUksQ0FBQztRQUdoQyxvQkFBZSxHQUFnQixJQUFJLENBQUM7S0FPckM7SUFuQ0MsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxDQUFxQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFFbEIsT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVqRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RDtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN6QixDQUFDO0lBWUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQzs7cUhBckNVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLG1NQVh6Qjs7Ozs7R0FLVCw0REFJUyxJQUFJLDZGQUFFLE9BQU87MkZBRVosd0JBQXdCO2tCQWJwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRTs7Ozs7R0FLVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO2lCQUN6Qjs4QkFLSyxJQUFJO3NCQURQLEtBQUs7Z0JBc0JOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcywgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NsYXNzVHlwZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQ29udGVudGZ1bEFzc2V0IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgUklDSF9URVhUX1JFTkRFUkVSX0NPTVBPTkVOVF9EQVRBIH0gZnJvbSAnLi4vcmljaC10ZXh0LXJlbmRlcmVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtY29udGVudGZ1bC1hdWRpbycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGZpZ3VyZSAqbmdJZj1cImRhdGFcIiBbbmdDbGFzc109XCJmaWd1cmVDbGFzc1wiPlxuICAgICAgPGZpZ2NhcHRpb24gW25nQ2xhc3NdPVwiZmlnY2FwdGlvbkNsYXNzXCI+e3sgZGF0YS50aXRsZSB9fTwvZmlnY2FwdGlvbj5cbiAgICAgIDxhdWRpbyBbbmdDbGFzc109XCJhdWRpb0NsYXNzXCIgY29udHJvbHMgc3JjPVwie3sgZGF0YS51cmwgfX1cIj48L2F1ZGlvPlxuICAgIDwvZmlndXJlPlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nSWYsIE5nQ2xhc3NdLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50ZnVsQXVkaW9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIF9yaWNoVGV4dERhdGEgPSBpbmplY3Q8Q29udGVudGZ1bEFzc2V0PihSSUNIX1RFWFRfUkVOREVSRVJfQ09NUE9ORU5UX0RBVEEsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgQElucHV0KClcbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cbiAgc2V0IGRhdGEodjogQ29udGVudGZ1bEFzc2V0IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2ICYmICF2LmNvbnRlbnRUeXBlKSB7XG4gICAgICB0aGlzLl9kYXRhID0gbnVsbDtcblxuICAgICAgY29uc29sZS53YXJuKCdUaGUgcHJvdmlkZWQgYXNzZXQgaXMgaW52YWxpZCcsIHYpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHYgJiYgIXYuY29udGVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFzc2V0IGlzIG5vdCBhbiBhdWRpbycpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEgPSB2ID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfZGF0YTogQ29udGVudGZ1bEFzc2V0IHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgYXVkaW9DbGFzczogTmdDbGFzc1R5cGUgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIGZpZ3VyZUNsYXNzOiBOZ0NsYXNzVHlwZSA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgZmlnY2FwdGlvbkNsYXNzOiBOZ0NsYXNzVHlwZSA9IG51bGw7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JpY2hUZXh0RGF0YSAmJiAhdGhpcy5kYXRhKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLl9yaWNoVGV4dERhdGE7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { NgClass, NgIf } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation } from '@angular/core';
|
|
3
|
-
import { RICH_TEXT_RENDERER_COMPONENT_DATA } from '../rich-text-renderer';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class ContentfulFileComponent {
|
|
6
|
-
constructor() {
|
|
7
|
-
this._richTextData = inject(RICH_TEXT_RENDERER_COMPONENT_DATA, { optional: true });
|
|
8
|
-
this._data = null;
|
|
9
|
-
this.fileClass = null;
|
|
10
|
-
}
|
|
11
|
-
get data() {
|
|
12
|
-
return this._data;
|
|
13
|
-
}
|
|
14
|
-
set data(v) {
|
|
15
|
-
if (v && !v.contentType) {
|
|
16
|
-
this._data = null;
|
|
17
|
-
console.warn('The provided asset is invalid', v);
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
this._data = v ?? null;
|
|
21
|
-
}
|
|
22
|
-
ngOnInit() {
|
|
23
|
-
if (this._richTextData && !this.data) {
|
|
24
|
-
this.data = this._richTextData;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
ContentfulFileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ContentfulFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
29
|
-
ContentfulFileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: ContentfulFileComponent, isStandalone: true, selector: "et-contentful-file", inputs: { data: "data", fileClass: "fileClass" }, ngImport: i0, template: `
|
|
30
|
-
<a *ngIf="data" [href]="data.url" [ngClass]="fileClass" class="underline" target="_blank">
|
|
31
|
-
{{ data.title }} ({{ data.size }} Bytes)
|
|
32
|
-
</a>
|
|
33
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
34
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: ContentfulFileComponent, decorators: [{
|
|
35
|
-
type: Component,
|
|
36
|
-
args: [{
|
|
37
|
-
selector: 'et-contentful-file',
|
|
38
|
-
template: `
|
|
39
|
-
<a *ngIf="data" [href]="data.url" [ngClass]="fileClass" class="underline" target="_blank">
|
|
40
|
-
{{ data.title }} ({{ data.size }} Bytes)
|
|
41
|
-
</a>
|
|
42
|
-
`,
|
|
43
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
44
|
-
encapsulation: ViewEncapsulation.None,
|
|
45
|
-
standalone: true,
|
|
46
|
-
imports: [NgIf, NgClass],
|
|
47
|
-
}]
|
|
48
|
-
}], propDecorators: { data: [{
|
|
49
|
-
type: Input
|
|
50
|
-
}], fileClass: [{
|
|
51
|
-
type: Input
|
|
52
|
-
}] } });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGZ1bC1maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29udGVudGZ1bC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS9jb250ZW50ZnVsLWZpbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdHLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWMxRSxNQUFNLE9BQU8sdUJBQXVCO0lBWnBDO1FBYVUsa0JBQWEsR0FBRyxNQUFNLENBQWtCLGlDQUFpQyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFpQi9GLFVBQUssR0FBMkIsSUFBSSxDQUFDO1FBRzdDLGNBQVMsR0FBZ0IsSUFBSSxDQUFDO0tBTy9CO0lBekJDLElBQ0ksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsQ0FBcUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBRWxCLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFakQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFNRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7U0FDaEM7SUFDSCxDQUFDOztvSEEzQlUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsZ0lBVnhCOzs7O0dBSVQsNERBSVMsSUFBSSw2RkFBRSxPQUFPOzJGQUVaLHVCQUF1QjtrQkFabkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUU7Ozs7R0FJVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO2lCQUN6Qjs4QkFLSyxJQUFJO3NCQURQLEtBQUs7Z0JBa0JOLFNBQVM7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDbGFzc1R5cGUgfSBmcm9tICdAZXRobGV0ZS9jb3JlJztcbmltcG9ydCB7IENvbnRlbnRmdWxBc3NldCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IFJJQ0hfVEVYVF9SRU5ERVJFUl9DT01QT05FTlRfREFUQSB9IGZyb20gJy4uL3JpY2gtdGV4dC1yZW5kZXJlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LWNvbnRlbnRmdWwtZmlsZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGEgKm5nSWY9XCJkYXRhXCIgW2hyZWZdPVwiZGF0YS51cmxcIiBbbmdDbGFzc109XCJmaWxlQ2xhc3NcIiBjbGFzcz1cInVuZGVybGluZVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAge3sgZGF0YS50aXRsZSB9fSAoe3sgZGF0YS5zaXplIH19IEJ5dGVzKVxuICAgIDwvYT5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0lmLCBOZ0NsYXNzXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudGZ1bEZpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIF9yaWNoVGV4dERhdGEgPSBpbmplY3Q8Q29udGVudGZ1bEFzc2V0PihSSUNIX1RFWFRfUkVOREVSRVJfQ09NUE9ORU5UX0RBVEEsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgQElucHV0KClcbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cbiAgc2V0IGRhdGEodjogQ29udGVudGZ1bEFzc2V0IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2ICYmICF2LmNvbnRlbnRUeXBlKSB7XG4gICAgICB0aGlzLl9kYXRhID0gbnVsbDtcblxuICAgICAgY29uc29sZS53YXJuKCdUaGUgcHJvdmlkZWQgYXNzZXQgaXMgaW52YWxpZCcsIHYpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YSA9IHYgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF9kYXRhOiBDb250ZW50ZnVsQXNzZXQgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKVxuICBmaWxlQ2xhc3M6IE5nQ2xhc3NUeXBlID0gbnVsbDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmljaFRleHREYXRhICYmICF0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuX3JpY2hUZXh0RGF0YTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|