@ethlete/contentful 3.2.0 → 3.2.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ethlete/contentful
2
2
 
3
+ ## 3.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`6695e2b`](https://github.com/ethlete-io/ethdk/commit/6695e2b8f006d81b000cb93fbadaeed051760725) Thanks [@TomTomB](https://github.com/TomTomB)! - Add back missing contentful graph ql asset type
8
+
3
9
  ## 3.2.0
4
10
 
5
11
  ### Minor Changes
@@ -13,4 +13,4 @@ export const GQL_FRAGMENT_CONTENTFUL_ASSET = gql `
13
13
  size
14
14
  }
15
15
  `;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuZnJhZ21lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb250ZW50ZnVsL3NyYy9saWIvZ3FsL2Fzc2V0LmZyYWdtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7O0NBYS9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBncWwgfSBmcm9tICdAZXRobGV0ZS9xdWVyeSc7XG5cbmV4cG9ydCBjb25zdCBHUUxfRlJBR01FTlRfQ09OVEVOVEZVTF9BU1NFVCA9IGdxbGBcbiAgZnJhZ21lbnQgQXNzZXREYXRhIG9uIEFzc2V0IHtcbiAgICBzeXMge1xuICAgICAgaWRcbiAgICB9XG4gICAgdXJsXG4gICAgdGl0bGVcbiAgICB3aWR0aFxuICAgIGhlaWdodFxuICAgIGRlc2NyaXB0aW9uXG4gICAgY29udGVudFR5cGVcbiAgICBzaXplXG4gIH1cbmA7XG4iXX0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuZnJhZ21lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb250ZW50ZnVsL3NyYy9saWIvZ3FsL2Fzc2V0LmZyYWdtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7O0NBYS9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBncWwgfSBmcm9tICdAZXRobGV0ZS9xdWVyeSc7XG5cbmV4cG9ydCBjb25zdCBHUUxfRlJBR01FTlRfQ09OVEVOVEZVTF9BU1NFVCA9IGdxbGBcbiAgZnJhZ21lbnQgQXNzZXREYXRhIG9uIEFzc2V0IHtcbiAgICBzeXMge1xuICAgICAgaWRcbiAgICB9XG4gICAgdXJsXG4gICAgdGl0bGVcbiAgICB3aWR0aFxuICAgIGhlaWdodFxuICAgIGRlc2NyaXB0aW9uXG4gICAgY29udGVudFR5cGVcbiAgICBzaXplXG4gIH1cbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudGZ1bEdxbEFzc2V0IHtcbiAgc3lzOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgfTtcbiAgdGl0bGU6IHN0cmluZztcbiAgY29udGVudFR5cGU6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICB3aWR0aDogbnVtYmVyIHwgbnVsbDtcbiAgaGVpZ2h0OiBudW1iZXIgfCBudWxsO1xuICBzaXplOiBudW1iZXI7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"ethlete-contentful.mjs","sources":["../../../../libs/contentful/src/lib/components/audio/contentful-audio.component.ts","../../../../libs/contentful/src/lib/components/file/contentful-file.component.ts","../../../../libs/contentful/src/lib/constants/contentful.constants.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/video/contentful-video.component.ts","../../../../libs/contentful/src/lib/utils/contentful-config.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.errors.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/contentful.imports.ts","../../../../libs/contentful/src/lib/gql/asset.fragments.ts","../../../../libs/contentful/src/lib/utils/contentful.util.ts","../../../../libs/contentful/src/index.ts","../../../../libs/contentful/src/ethlete-contentful.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-audio',\n template: `\n @if (asset(); as data) {\n <figure [ngClass]=\"figureClass()\">\n <figcaption [ngClass]=\"figcaptionClass()\">{{ data.fields.title }}</figcaption>\n <audio [ngClass]=\"audioClass()\" controls src=\"{{ data.fields.file.url }}\"></audio>\n </figure>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgClass],\n})\nexport class ContentfulAudioComponent {\n asset = input.required<ContentfulAsset | null | undefined>();\n audioClass = input<NgClassType>(null);\n figureClass = input<NgClassType>(null);\n figcaptionClass = input<NgClassType>(null);\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-file',\n template: `\n @if (asset(); as data) {\n <a [href]=\"data.fields.file.url\" [ngClass]=\"fileClass()\" class=\"underline\" target=\"_blank\">\n {{ data.fields.title }} ({{ data.fields.file.details.size }} Bytes)\n </a>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgClass],\n})\nexport class ContentfulFileComponent {\n asset = input.required<ContentfulAsset | null | undefined>();\n fileClass = input<NgClassType>(null);\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { ContentfulConfig } from '../types';\n\nexport const CONTENTFUL_CONFIG = new InjectionToken<ContentfulConfig>('ContentfulConfig');\n","import { PictureSource } from '@ethlete/cdk';\nimport { ContentfulAsset, ContentfulImageFocusArea, ContentfulImageResizeBehavior } from '../../types';\n\nexport const generateDefaultContentfulImageSource = (data: ContentfulAsset): PictureSource => {\n const file = data.fields.file;\n\n return {\n type: file.contentType,\n srcset: file.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,\n srcsetSizes: string[],\n backgroundColor: string | null,\n quality: number | null,\n focusArea: ContentfulImageFocusArea | null,\n resizeBehavior: ContentfulImageResizeBehavior | null,\n): PictureSource[] => {\n const assetData = data;\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.fields.file.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 (quality !== null) {\n queryParams.push(`q=${quality}`);\n }\n\n if (focusArea) {\n queryParams.push(`f=${focusArea}`);\n }\n\n if (resizeBehavior) {\n queryParams.push(`fit=${resizeBehavior}`);\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 {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n numberAttribute,\n} from '@angular/core';\nimport { PictureComponent, normalizePictureSizes } from '@ethlete/cdk';\nimport { NgClassType } from '@ethlete/core';\nimport { CONTENTFUL_CONFIG } from '../../constants';\nimport { ContentfulAsset, ContentfulImageFocusArea, ContentfulImageResizeBehavior } from '../../types';\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]=\"imgClass()\"\n [hasPriority]=\"hasPriority()\"\n [figureClass]=\"figureClass()\"\n [pictureClass]=\"pictureClass()\"\n [figcaptionClass]=\"figcaptionClass()\"\n [defaultSrc]=\"_defaultSrc()\"\n [alt]=\"asset()?.fields?.title ?? null\"\n [figcaption]=\"asset()?.fields?.description ?? null\"\n [width]=\"asset()?.fields?.file?.details?.image?.width ?? null\"\n [height]=\"asset()?.fields?.file?.details?.image?.height ?? null\"\n [sizes]=\"sizes()\"\n [sources]=\"_sources()\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [PictureComponent],\n host: {\n class: 'et-contentful-image',\n },\n})\nexport class ContentfulImageComponent {\n _contentfulConfig = inject(CONTENTFUL_CONFIG);\n\n asset = input.required<ContentfulAsset | null | undefined>();\n backgroundColor = input<string | null>(null);\n srcsetSizes = input<string[]>(this._contentfulConfig.imageOptions.srcsetSizes);\n\n quality = input(null, { transform: numberAttribute });\n focusArea = input<ContentfulImageFocusArea | null>(null);\n resizeBehavior = input<ContentfulImageResizeBehavior | null>(null);\n hasPriority = input(false, { transform: booleanAttribute });\n imgClass = input<NgClassType>(null);\n figureClass = input<NgClassType>(null);\n figcaptionClass = input<NgClassType>(null);\n pictureClass = input<NgClassType>(null);\n sizes = input<string | null, string[] | string | null>(\n normalizePictureSizes(this._contentfulConfig.imageOptions.sizes),\n {\n transform: (v) => normalizePictureSizes(v),\n },\n );\n\n _sources = computed(() => {\n const asset = this.asset();\n const backgroundColor = this.backgroundColor();\n const srcsetSizes = this.srcsetSizes();\n const quality = this.quality();\n const focusArea = this.focusArea();\n const resizeBehavior = this.resizeBehavior();\n\n if (!asset) {\n return [];\n }\n\n return generateContentfulImageSources(asset, srcsetSizes, backgroundColor, quality, focusArea, resizeBehavior);\n });\n\n _defaultSrc = computed(() => {\n const asset = this.asset();\n\n return asset ? generateDefaultContentfulImageSource(asset) : null;\n });\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-video',\n template: `\n @if (asset(); as data) {\n <video [ngClass]=\"videoClass()\" controls>\n <source src=\"{{ data.fields.file.url }}\" type=\"{{ data.fields.file.contentType }}\" />\n </video>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgClass],\n})\nexport class ContentfulVideoComponent {\n asset = input.required<ContentfulAsset | null | undefined>();\n videoClass = input<NgClassType>(null);\n}\n","import { ContentfulAudioComponent } from '../components/audio';\nimport { ContentfulFileComponent } from '../components/file';\nimport { ContentfulImageComponent } from '../components/image';\nimport { ContentfulVideoComponent } from '../components/video';\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 { RuntimeError } from '@ethlete/core';\n\nexport const RICH_TEXT_RENDERER_ERRORS = {\n rich_text_undefined:\n 'The property value given at richTextPath is undefined. Use the richTextPath input to specify the path to the rich text object.',\n rich_text_wrong_type:\n 'The rich text object does not satisfy the RichTextResponse interface. It should contain a property named \"nodeType\" with the value \"document\".',\n\n asset_id_not_found: 'The asset ID was not found. This node is not supported.',\n entry_id_not_found: 'The entry ID was not found. This node is not supported.',\n\n asset_not_found: 'The asset was not found. This node is not supported.',\n entry_not_found: 'The entry was not found. This node is not supported.',\n\n custom_component_not_found: 'No custom component found for entry type. Please provide one for this type.',\n\n text_parent_not_found: 'The parent node is not found. This structure is not supported.',\n text_parent_wrong_type:\n 'The parent node neither a html element nor a custom component. This structure is not supported.',\n} as const;\n\nconst RICH_TEXT_RENDERER_ERROR_CODES = Object.keys(RICH_TEXT_RENDERER_ERRORS).reduce(\n (acc, key, index) => {\n acc[key as keyof typeof RICH_TEXT_RENDERER_ERRORS] = index;\n return acc;\n },\n {} as Record<keyof typeof RICH_TEXT_RENDERER_ERRORS, number>,\n);\n\nexport const richTextRendererError = (\n code: keyof typeof RICH_TEXT_RENDERER_ERRORS,\n devOnly: boolean,\n data?: unknown,\n) => {\n const message = `<et-contentful-rich-text-renderer>: ${RICH_TEXT_RENDERER_ERRORS[code]}`;\n\n throw new RuntimeError(RICH_TEXT_RENDERER_ERROR_CODES[code], message, devOnly, data);\n};\n","import { BLOCKS, INLINES } from '@contentful/rich-text-types';\nimport { isObject } from '@ethlete/core';\nimport { RichTextResponse } from '../../types';\n\nexport const isRichTextRootNode = (node: unknown): node is RichTextResponse => {\n return isObject(node) && 'nodeType' in node && node['nodeType'] === 'document';\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","import { ComponentType } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n Renderer2,\n ViewContainerRef,\n ViewEncapsulation,\n computed,\n inject,\n input,\n isDevMode,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { BLOCKS, Block, INLINES, Inline, Mark, Text } from '@contentful/rich-text-types';\nimport { getObjectProperty, isObject } from '@ethlete/core';\nimport { pairwise, startWith, tap } from 'rxjs';\nimport { CONTENTFUL_CONFIG } from '../../constants/contentful.constants';\nimport {\n ContentfulAsset,\n ContentfulCollection,\n ContentfulEntry,\n ContentfulEntryLinkItem,\n RichTextResponse,\n} from '../../types';\nimport { createContentfulConfig } from '../../utils/contentful-config';\nimport { richTextRendererError } from './rich-text-renderer.errors';\nimport { isRichTextRootNode, translateContentfulNodeTypeToHtmlTag } from './rich-text-renderer.util';\n\nexport const RENDER_COMMAND_TYPE = {\n HTML_OPEN: 0,\n HTML_CLOSE: 1,\n TEXT: 2,\n COMPONENT: 3,\n} as const;\n\nexport const RENDER_COMMAND_POSITION = {\n TYPE: 0,\n NESTING_LEVEL: 1,\n DOM_POSITION: 2,\n INDEX: 3,\n} as const;\n\nexport const HTML_OPEN_RENDER_COMMAND_POSITION = {\n ATTRIBUTES: 4,\n TAG_NAME: 5,\n ELEMENT_ID: 6,\n} as const;\n\nexport const HTML_CLOSE_RENDER_COMMAND_POSITION = {\n TAG_NAME: 4,\n ELEMENT_ID: 5,\n} as const;\n\nexport const TEXT_RENDER_COMMAND_POSITION = {\n TEXT: 4,\n} as const;\n\nexport const COMPONENT_RENDER_COMMAND_POSITION = {\n ATTRIBUTES: 4,\n COMPONENT: 5,\n INPUTS: 6,\n COMPONENT_TYPE: 7,\n} as const;\n\ntype HtmlOpenRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.HTML_OPEN,\n nestingLevel: number,\n domPosition: number,\n index: number,\n attributes: Record<string, string>,\n tagName: string,\n elementId: string,\n];\n\ntype HtmlCloseRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.HTML_CLOSE,\n nestingLevel: number,\n domPosition: number,\n index: number,\n tagName: string,\n elementId: string,\n];\n\ntype TextRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.TEXT,\n nestingLevel: number,\n domPosition: number,\n index: number,\n text: string,\n];\n\ntype ComponentRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.COMPONENT,\n nestingLevel: number,\n domPosition: number,\n index: number,\n attributes: Record<string, string>,\n component: ComponentType<unknown>,\n inputs: Record<string, unknown>,\n componentType: string,\n];\n\ntype RenderCommand = HtmlOpenRenderCommand | HtmlCloseRenderCommand | TextRenderCommand | ComponentRenderCommand;\n\nexport const RENDER_INSTRUCTION_POSITION = {\n TYPE: 0,\n COMMAND: 1,\n} as const;\n\nexport const RENDER_INSTRUCTION_TYPE = {\n CREATE: 0,\n UPDATE: 1,\n DELETE: 2,\n MOVE: 3,\n} as const;\n\ntype RenderInstructionTypeValue = (typeof RENDER_INSTRUCTION_TYPE)[keyof typeof RENDER_INSTRUCTION_TYPE];\n\ntype RenderInstruction = [RenderInstructionTypeValue, RenderCommand];\n\nconst MARK_TAILWIND_MAP: Record<string, string> = {\n bold: 'font-bold',\n italic: 'italic',\n underline: 'underline',\n code: 'font-mono',\n};\n\nexport const marksToClass = (marks: Mark[]) => {\n const classes: string[] = [];\n\n for (const mark of marks) {\n let klass = MARK_TAILWIND_MAP[mark.type];\n\n if (!klass) {\n console.warn(`No class found for mark type! Falling back to \"${mark.type}\".`, mark);\n\n klass = mark.type;\n }\n\n classes.push(klass);\n }\n\n return classes.join(' ');\n};\n\nexport const isHtmlOpenRenderCommand = (command: RenderCommand): command is HtmlOpenRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN;\n};\n\nexport const isHtmlCloseRenderCommand = (command: RenderCommand): command is HtmlCloseRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_CLOSE;\n};\n\nexport const isTextRenderCommand = (command: RenderCommand): command is TextRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.TEXT;\n};\n\nexport const isComponentRenderCommand = (command: RenderCommand): command is ComponentRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.COMPONENT;\n};\n\nexport const getRenderCommandId = (command: RenderCommand) => {\n if (isHtmlOpenRenderCommand(command)) {\n return command[HTML_OPEN_RENDER_COMMAND_POSITION.ELEMENT_ID];\n } else if (isHtmlCloseRenderCommand(command)) {\n return command[HTML_CLOSE_RENDER_COMMAND_POSITION.ELEMENT_ID];\n } else if (isTextRenderCommand(command)) {\n return command[TEXT_RENDER_COMMAND_POSITION.TEXT];\n } else {\n return command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT_TYPE];\n }\n};\n\nconst CLASS_ATTR = 'class';\nconst DEFAULT_COMPONENT_TYPES = {\n IMAGE: '$$$_et-image',\n VIDEO: '$$$_et-video',\n AUDIO: '$$$_et-audio',\n FILE: '$$$_et-file',\n};\n\ntype ExecutedCommandCacheItemBase = {\n element: HTMLElement;\n};\n\ntype ExecutedComponentCommandCacheItem = {\n command: ComponentRenderCommand;\n componentRef: ComponentRef<unknown>;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedHtmlCommandCacheItem = {\n command: HtmlOpenRenderCommand | HtmlCloseRenderCommand;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedTextCommandCacheItem = {\n command: TextRenderCommand;\n textNode: unknown;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedCommandCacheItem =\n | ExecutedComponentCommandCacheItem\n | ExecutedHtmlCommandCacheItem\n | ExecutedTextCommandCacheItem;\n\nexport const isExecutedComponentCommandCacheItem = (\n cache: ExecutedCommandCacheItem,\n): cache is ExecutedComponentCommandCacheItem => {\n return isComponentRenderCommand(cache.command);\n};\n\nexport const isExecutedHtmlOrTextCommandCacheItem = (\n cache: ExecutedCommandCacheItem,\n): cache is ExecutedHtmlCommandCacheItem => {\n return isHtmlCloseRenderCommand(cache.command) || isHtmlOpenRenderCommand(cache.command);\n};\n\nexport const isExecutedTextCommandCacheItem = (\n cache: ExecutedCommandCacheItem,\n): cache is ExecutedTextCommandCacheItem => {\n return isTextRenderCommand(cache.command);\n};\n\nexport const ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID = '$$$_et-contentful-any-entry-content-type-sys-id';\n\nexport type ContentfulIncludeMap = {\n /**\n * Select an entry by its ID and content type ID.\n *\n * The content type ID can be found inside the entry -> sys -> contentType -> sys -> id property.\n *\n * You can provide the `ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID` constant to match any entry sys ID.\n * But be aware that this will return the entry as is without any type checking.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getEntry: <T extends { [key: string]: any }>(id: string, contentTypeId: string) => ContentfulEntry<T> | null;\n\n /**\n * Select multiple entries by their IDs and content type ID.\n * If an entry is not found, it will be omitted from the result.\n *\n * The content type ID can be found inside the entry -> sys -> contentType -> sys -> id property.\n *\n * You can provide the `ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID` constant to match any entry sys ID.\n * But be aware that this will return the entry as is without any type checking.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getEntries: <T extends { [key: string]: any }>(\n ids: string[] | ContentfulEntryLinkItem[],\n contentTypeId: string,\n ) => ContentfulEntry<T>[];\n\n /**\n * Select an asset by its ID.\n */\n getAsset: (id: string) => ContentfulAsset | null;\n\n /**\n * Select multiple assets by their IDs. If an asset is not found, it will be omitted from the result.\n */\n getAssets: (ids: string[]) => ContentfulAsset[];\n};\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 _viewContainerRef = inject(ViewContainerRef);\n _renderer = inject(Renderer2);\n _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n _document = inject(DOCUMENT);\n _config = inject(CONTENTFUL_CONFIG, { optional: true }) ?? createContentfulConfig();\n\n /**\n * A cache for all executed commands that are not deleted.\n * This is used to keep track of all rendered elements and components.\n * The key is the render command element ID.\n */\n _executedCommandsCache = new Map<string, ExecutedCommandCacheItem>();\n\n /**\n * The contentful response gotten via their REST api.\n * @see https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/entries/entries-collection\n */\n content = input.required<ContentfulCollection | null | undefined>();\n\n /**\n * The path to where the rich text field is inside the contentful response. Dot and array notation is allowed.\n * @default \"items[0].fields.html\"\n */\n richTextPath = input.required<string>();\n\n /**\n * A map of all includes in the contentful response.\n * This is useful for looking up assets and entries that are referenced in the rich text without having to use loops.\n */\n contentIncludesMap = computed<ContentfulIncludeMap>(() => {\n const content = this.content();\n const assets = content?.includes.Asset;\n const entries = content?.includes.Entry;\n\n const assetMap = new Map(assets?.map((asset) => [asset.sys.id, asset]) ?? []);\n const entryMap = new Map(entries?.map((entry) => [entry.sys.id, entry]) ?? []);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntry = <T extends { [key: string]: any }>(id: string, contentTypeId: string) => {\n const entry = entryMap.get(id);\n\n if (!entry) {\n if (isDevMode()) {\n console.warn('Entry not found! Will return null. Is the include query param to low?', { id, entryMap });\n }\n\n return null;\n }\n\n if (contentTypeId === ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID) {\n return entry as ContentfulEntry<T>;\n }\n\n if (entry.sys.contentType.sys.id !== contentTypeId) {\n if (isDevMode()) {\n console.warn('Entry sys ID does not match the provided sys ID! Will return null.', {\n entry,\n sysId: contentTypeId,\n });\n }\n\n return null;\n }\n\n return entry as ContentfulEntry<T>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntries = <T extends { [key: string]: any }>(\n ids: string[] | ContentfulEntryLinkItem[],\n contentTypeId: string,\n ) => {\n const entries = ids\n .map((id) => (typeof id === 'string' ? id : id.sys.id))\n .map((id) => getEntry<T>(id, contentTypeId))\n .filter((entry): entry is ContentfulEntry<T> => entry !== null);\n\n return entries;\n };\n\n const getAsset = (id: string) => {\n return assetMap.get(id) ?? null;\n };\n\n const getAssets = (ids: string[]) => {\n return ids.map((id) => getAsset(id)).filter((asset): asset is ContentfulAsset => asset !== null);\n };\n\n return {\n getEntry,\n getEntries,\n getAsset,\n getAssets,\n };\n });\n\n /**\n * The rich text data that should be rendered.\n */\n richTextData = computed(() => {\n const content = this.content();\n const richTextPath = this.richTextPath();\n\n if (!content) {\n return null;\n }\n\n const richText = getObjectProperty(content as unknown as Record<string, unknown>, richTextPath);\n\n if (!isObject(richText)) {\n throw richTextRendererError('rich_text_undefined', false, { content, richTextPath });\n }\n\n if (!isRichTextRootNode(richText)) {\n throw richTextRendererError('rich_text_wrong_type', false, { content, richTextPath });\n }\n\n return richText as RichTextResponse;\n });\n\n renderCommands = computed(() => {\n const richTextData = this.richTextData();\n\n if (!richTextData) {\n return [];\n }\n\n return this._createRenderCommands(richTextData);\n });\n\n renderCommandHistory = toSignal(\n toObservable(this.renderCommands).pipe(startWith([] as RenderCommand[]), pairwise()),\n { initialValue: [[], []] },\n );\n\n previousRenderCommandMap = computed(() => {\n const [prevCommands] = this.renderCommandHistory();\n\n const map = new Map<string | number, RenderCommand>();\n\n for (const command of prevCommands) {\n map.set(getRenderCommandId(command), command);\n }\n\n return map;\n });\n\n renderInstructions = computed(() => {\n const commands = this.renderCommands();\n const previousRenderCommandMap = new Map(this.previousRenderCommandMap());\n\n const instructions: RenderInstruction[] = [];\n\n // remove deleted components as well as all other elements\n for (const [, command] of previousRenderCommandMap) {\n if (isComponentRenderCommand(command)) {\n // keep the component around if it's still in the new commands\n if (commands.some((c) => getRenderCommandId(c) === getRenderCommandId(command))) {\n continue;\n }\n }\n\n instructions.push([RENDER_INSTRUCTION_TYPE.DELETE, command]);\n\n // remove from map to mark as used\n previousRenderCommandMap.delete(getRenderCommandId(command));\n }\n\n // Find the indexes of the commands remaining in the previousRenderCommandMap in the new commands array.\n const lastComponentIndexes: { newIndex: number; prevIndex: number; command: RenderCommand }[] = [];\n for (const [id, command] of previousRenderCommandMap) {\n const index = commands.findIndex((c) => getRenderCommandId(c) === id);\n const newCommand = commands[index]!;\n\n if (index === -1) {\n throw new Error('Command not found!');\n }\n\n lastComponentIndexes.push({\n newIndex: index,\n prevIndex: command[RENDER_COMMAND_POSITION.INDEX],\n command: newCommand,\n });\n }\n\n lastComponentIndexes.sort((a, b) => a.newIndex - b.newIndex);\n\n // check if the prevIndex are in order ascending\n // for indexes that are not in order, create a move instruction\n // for indexes that are in order, create an update instruction\n let moveCheckIndex = 0;\n while (moveCheckIndex < lastComponentIndexes.length - 1) {\n const moveCurr = lastComponentIndexes[moveCheckIndex];\n const moveNext = lastComponentIndexes[moveCheckIndex + 1];\n\n if (!moveCurr || !moveNext) {\n break;\n }\n\n if (moveCurr.prevIndex > moveNext.prevIndex) {\n lastComponentIndexes.splice(moveCheckIndex + 1, 1);\n instructions.push([RENDER_INSTRUCTION_TYPE.MOVE, moveNext.command]);\n } else {\n instructions.push([RENDER_INSTRUCTION_TYPE.UPDATE, moveNext.command]);\n moveCheckIndex++;\n }\n }\n\n for (const command of commands) {\n const id = getRenderCommandId(command);\n\n if (isComponentRenderCommand(command)) {\n const previousCommand = previousRenderCommandMap.get(id);\n\n if (!previousCommand) {\n // create\n instructions.push([RENDER_INSTRUCTION_TYPE.CREATE, command]);\n }\n } else {\n // create\n instructions.push([RENDER_INSTRUCTION_TYPE.CREATE, command]);\n }\n }\n\n return instructions;\n });\n\n constructor() {\n toObservable(this.renderInstructions)\n .pipe(\n takeUntilDestroyed(),\n tap((instructions) => {\n this._execInstructions(instructions);\n }),\n )\n .subscribe();\n }\n\n private _createRenderCommands(richTextData: RichTextResponse) {\n /** List of all render commands */\n const rootCommands: RenderCommand[] = [];\n\n /** Counter for generating unique html element IDs. */\n let elementId = 0;\n\n /** Counter for generating unique component IDs. */\n const componentIdMap = new Map<string, number>();\n\n /** The nesting level of the current node. */\n let nestingLevel = 0;\n\n /** The position (index) of the current node inside the parent node. */\n let domPosition = 0;\n\n let commandIndex = 0;\n\n const traverse = (node: Block | Inline | Text, parent: RenderCommand | null = null) => {\n switch (node.nodeType) {\n case 'text': {\n // Render media\n const type = RENDER_COMMAND_TYPE.TEXT;\n const text = node.value;\n\n if (!text) break;\n\n const command: TextRenderCommand = [type, nestingLevel, domPosition, commandIndex++, text];\n\n rootCommands.push(command);\n domPosition++;\n\n if (!parent) {\n throw richTextRendererError('text_parent_not_found', false, { node });\n }\n if (!isHtmlOpenRenderCommand(parent) && !isComponentRenderCommand(parent)) {\n throw richTextRendererError('text_parent_wrong_type', false, { node, parent });\n }\n\n const attributesPosition =\n parent[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN\n ? HTML_OPEN_RENDER_COMMAND_POSITION.ATTRIBUTES\n : COMPONENT_RENDER_COMMAND_POSITION.ATTRIBUTES;\n\n const attributes = parent[attributesPosition];\n\n if (node.marks.length) {\n const markClasses = marksToClass(node.marks);\n\n if (CLASS_ATTR in attributes) {\n attributes[CLASS_ATTR] += ` ${markClasses}`;\n } else {\n attributes[CLASS_ATTR] = markClasses;\n }\n }\n\n break;\n }\n\n case BLOCKS.EMBEDDED_ASSET: {\n // Render media\n const type = RENDER_COMMAND_TYPE.COMPONENT;\n const assetId = node.data['target']?.sys?.id;\n\n if (!assetId) {\n throw richTextRendererError('asset_id_not_found', false, { node });\n }\n\n const asset = this.contentIncludesMap().getAsset(assetId);\n\n if (!asset) {\n throw richTextRendererError('asset_not_found', false, { assetId, node });\n }\n\n const contentType = asset.fields.file.contentType;\n const assetComponents = this._config.components;\n\n const isImage = contentType.startsWith('image/');\n const isVideo = contentType.startsWith('video/');\n const isAudio = contentType.startsWith('audio/');\n\n const component = isImage\n ? assetComponents.image\n : isVideo\n ? assetComponents.video\n : isAudio\n ? assetComponents.audio\n : assetComponents.file;\n\n const componentType = isImage\n ? DEFAULT_COMPONENT_TYPES.IMAGE\n : isVideo\n ? DEFAULT_COMPONENT_TYPES.VIDEO\n : isAudio\n ? DEFAULT_COMPONENT_TYPES.AUDIO\n : DEFAULT_COMPONENT_TYPES.FILE;\n\n let componentId = componentIdMap.get(componentType) ?? -1;\n const id = componentType + ++componentId;\n componentIdMap.set(componentType, componentId);\n\n const attributes = {};\n\n const inputs = {\n asset,\n };\n\n const command: ComponentRenderCommand = [\n type,\n nestingLevel,\n domPosition,\n commandIndex++,\n attributes,\n component,\n inputs,\n id,\n ];\n\n rootCommands.push(command);\n\n domPosition++;\n\n break;\n }\n\n case BLOCKS.EMBEDDED_ENTRY:\n case INLINES.EMBEDDED_ENTRY: {\n // Render component\n const type = RENDER_COMMAND_TYPE.COMPONENT;\n const entryId = node.data['target']?.sys?.id;\n\n if (!entryId) {\n throw richTextRendererError('entry_id_not_found', false, { node });\n }\n\n const entry = this.contentIncludesMap().getEntry(entryId, ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID);\n\n if (!entry) {\n throw richTextRendererError('entry_not_found', false, { entryId, node });\n }\n\n const componentType = entry.sys.contentType.sys.id;\n\n const component = this._config.customComponents[componentType];\n\n if (!component) {\n throw richTextRendererError('custom_component_not_found', false, {\n componentType,\n customComponents: this._config.customComponents,\n entry,\n });\n }\n\n const attributes = {};\n let componentId = componentIdMap.get(componentType) ?? -1;\n const id = componentType + ++componentId;\n componentIdMap.set(componentType, componentId);\n\n const inputs = {\n fields: entry.fields,\n metadata: entry.metadata,\n sys: entry.sys,\n includes: this.contentIncludesMap(),\n };\n\n const command: ComponentRenderCommand = [\n type,\n nestingLevel,\n domPosition,\n commandIndex++,\n attributes,\n component,\n inputs,\n id,\n ];\n\n rootCommands.push(command);\n\n domPosition++;\n\n break;\n }\n\n default: {\n const type = RENDER_COMMAND_TYPE.HTML_OPEN;\n const tag = translateContentfulNodeTypeToHtmlTag(node.nodeType);\n const attributes: Record<string, string> = {};\n const id = 'e' + elementId++;\n\n const command: HtmlOpenRenderCommand = [type, nestingLevel, domPosition, commandIndex++, attributes, tag, id];\n\n rootCommands.push(command);\n\n const domPositionAtThisLevel = domPosition;\n // Normal html elements can have children\n for (const child of node.content) {\n domPosition = 0;\n nestingLevel++;\n traverse(child, command);\n nestingLevel--;\n domPosition = domPositionAtThisLevel;\n }\n\n const lastCommand = rootCommands[rootCommands.length - 1];\n\n if (lastCommand?.[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN) {\n // If the last command is an open command, we can remove it since it's empty\n rootCommands.pop();\n } else {\n const closeId = 'e' + elementId++;\n\n const closeCommand: HtmlCloseRenderCommand = [\n RENDER_COMMAND_TYPE.HTML_CLOSE,\n nestingLevel,\n domPosition,\n commandIndex++,\n tag,\n closeId,\n ];\n rootCommands.push(closeCommand);\n\n domPosition++;\n }\n\n if (node.nodeType === INLINES.HYPERLINK) {\n const uri = node.data['uri'];\n attributes['href'] = uri;\n\n const host = this._document.location.host;\n const isExternal = !uri.includes(host);\n\n if (isExternal) {\n attributes['target'] = '_blank';\n }\n }\n\n break;\n }\n }\n };\n\n for (const node of richTextData.content) {\n traverse(node, null);\n }\n\n return rootCommands;\n }\n\n private _execInstructions(instructions: RenderInstruction[]) {\n for (const instruction of instructions) {\n const type = instruction[RENDER_INSTRUCTION_POSITION.TYPE];\n const command = instruction[RENDER_INSTRUCTION_POSITION.COMMAND];\n\n switch (type) {\n case RENDER_INSTRUCTION_TYPE.CREATE:\n this._runCreateInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.UPDATE:\n this._runUpdateInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.MOVE:\n this._runMoveInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.DELETE:\n this._runDeleteInstruction(command);\n break;\n }\n }\n }\n\n private _runCreateInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const parentElement = this._findParent(command);\n const nextElement = this._findFollowingElement(command);\n\n if (isComponentRenderCommand(command)) {\n const componentRef = this._viewContainerRef.createComponent(command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT]);\n\n this._updateComponentInputs(command, componentRef);\n\n const rootNode = this._getComponentRootNode(componentRef);\n\n this._renderInsertOrAppend(rootNode, parentElement, nextElement);\n\n this._executedCommandsCache.set(id, {\n command,\n componentRef,\n element: rootNode,\n });\n } else if (isTextRenderCommand(command)) {\n const text = command[TEXT_RENDER_COMMAND_POSITION.TEXT];\n const textNode = this._renderer.createText(text);\n const span = this._renderer.createElement('span');\n this._renderer.appendChild(span, textNode);\n\n this._renderInsertOrAppend(span, parentElement, nextElement);\n\n this._executedCommandsCache.set(id, {\n command,\n element: span,\n textNode,\n });\n } else if (isHtmlOpenRenderCommand(command)) {\n const tag = command[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME];\n const attributes = command[HTML_OPEN_RENDER_COMMAND_POSITION.ATTRIBUTES];\n const element = this._renderer.createElement(tag);\n\n for (const [key, value] of Object.entries(attributes)) {\n this._renderer.setAttribute(element, key, value);\n }\n\n this._renderInsertOrAppend(element, parentElement, nextElement);\n\n this._executedCommandsCache.set(id, {\n command,\n element,\n });\n }\n }\n\n private _runUpdateInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n const componentRef = cached.componentRef;\n\n if (!componentRef) {\n throw new Error('Component ref not found!');\n }\n\n this._updateComponentInputs(command, componentRef);\n }\n\n this._executedCommandsCache.set(id, {\n ...cached,\n command: command as any,\n });\n }\n\n private _runMoveInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n const componentRef = cached.componentRef;\n\n if (!componentRef) {\n throw new Error('Component ref not found!');\n }\n\n const rootNode = cached.element;\n const oldParentElement = cached.element.parentElement;\n\n this._renderer.removeChild(oldParentElement, rootNode);\n\n const newParentElement = this._findParent(command);\n const nextElement = this._findFollowingElement(command);\n\n this._renderInsertOrAppend(rootNode, newParentElement, nextElement);\n\n this._updateComponentInputs(command, componentRef);\n\n this._executedCommandsCache.set(id, {\n ...cached,\n command: command as any,\n });\n }\n }\n\n private _runDeleteInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n\n if (!cached) {\n if (isHtmlCloseRenderCommand(command)) {\n return;\n }\n\n throw new Error('Cached command not found!');\n }\n\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n cached.componentRef?.destroy();\n } else if (isTextRenderCommand(command)) {\n this._renderer.removeChild(cached.element?.parentElement, cached.element);\n } else if (isHtmlOpenRenderCommand(command)) {\n this._renderer.removeChild(cached.element?.parentElement, cached.element);\n }\n\n this._executedCommandsCache.delete(id);\n }\n\n private _getComponentRootNode(componentRef: ComponentRef<any>): HTMLElement {\n return (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n }\n\n private _updateComponentInputs(command: ComponentRenderCommand, componentRef: ComponentRef<any>) {\n for (const [key, value] of Object.entries(command[COMPONENT_RENDER_COMMAND_POSITION.INPUTS])) {\n if (!componentRef.instance[key]) continue;\n\n componentRef.setInput(key, value);\n }\n }\n\n private _findParent(command: RenderCommand) {\n const hostElement = this._elementRef.nativeElement;\n const nestingLevel = command[RENDER_COMMAND_POSITION.NESTING_LEVEL];\n let parentElement: HTMLElement | undefined = undefined;\n\n if (nestingLevel === 0) {\n parentElement = hostElement;\n } else {\n // Reverse search all render commands beginning from the current one using a for loop.\n // The parent is found when the command's nesting level ist the same as the current nesting level minus 1.\n // If the parent is not found, throw an error.\n const allCommands = this.renderCommands();\n const currentCommandIndex = command[RENDER_COMMAND_POSITION.INDEX];\n\n let parentCommand: RenderCommand | null = null;\n\n for (let i = currentCommandIndex - 1; i >= 0; i--) {\n const cmd = allCommands[i];\n\n if (!cmd) {\n throw new Error('Command not found!');\n }\n\n if (cmd[RENDER_COMMAND_POSITION.NESTING_LEVEL] === nestingLevel - 1) {\n parentCommand = cmd;\n break;\n }\n }\n\n if (!parentCommand) {\n throw new Error('Parent command not found!');\n }\n\n parentElement = this._executedCommandsCache.get(getRenderCommandId(parentCommand))?.element;\n }\n\n if (!parentElement) {\n throw new Error('Parent element not found!');\n }\n\n return parentElement;\n }\n\n private _findFollowingElement(command: RenderCommand) {\n const cacheArray = Array.from(this._executedCommandsCache.values());\n let nextElement: HTMLElement | undefined = undefined;\n\n const domPosition = command[RENDER_COMMAND_POSITION.DOM_POSITION];\n const nestingLevel = command[RENDER_COMMAND_POSITION.NESTING_LEVEL];\n const type = command[RENDER_COMMAND_POSITION.TYPE];\n\n // Try to find an already rendered element with a domPosition that is greater than the current domPosition. If there are multiple, use the one with the smallest domPosition.\n // If it does not exist, use .appendChild to simply append the element to the end of the parent element.\n // If it does exist, use .insertBefore to insert the element before the found element.\n for (const cached of cacheArray) {\n if (\n cached.command[RENDER_COMMAND_POSITION.DOM_POSITION] > domPosition &&\n cached.command[RENDER_COMMAND_POSITION.NESTING_LEVEL] === nestingLevel &&\n // Make sure the element does not find itself\n cached.command[RENDER_COMMAND_POSITION.TYPE] !== type\n ) {\n nextElement = cached.element;\n break;\n }\n }\n\n return nextElement;\n }\n\n private _renderInsertOrAppend(\n nodeToRender: HTMLElement,\n parentElement: HTMLElement,\n nextElement: HTMLElement | undefined,\n ) {\n if (nextElement) {\n this._renderer.insertBefore(parentElement, nodeToRender, nextElement);\n } else {\n this._renderer.appendChild(parentElement, nodeToRender);\n }\n }\n\n private _debugVisualizeRenderCommands(commands: RenderCommand[]) {\n const debug = commands.map((command) => this._stringifyRenderCommand(command)).flat();\n\n const prettified = formatHTML(debug);\n\n return prettified;\n }\n\n private _stringifyRenderCommand(command: RenderCommand) {\n const nestAttr = `nest=\"${command[RENDER_COMMAND_POSITION.NESTING_LEVEL]}\"`;\n const domAttr = `dom=\"${command[RENDER_COMMAND_POSITION.DOM_POSITION]}\"`;\n\n if (isHtmlOpenRenderCommand(command)) {\n return `<${command[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME]} ${nestAttr} ${domAttr}>`;\n } else if (isHtmlCloseRenderCommand(command)) {\n return `</${command[HTML_CLOSE_RENDER_COMMAND_POSITION.TAG_NAME]} ${nestAttr} ${domAttr}>`;\n } else if (isTextRenderCommand(command)) {\n return [`<span ${nestAttr} ${domAttr}>`, command[TEXT_RENDER_COMMAND_POSITION.TEXT], '</span>'];\n } else if (isComponentRenderCommand(command)) {\n const selector = command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT_TYPE];\n return [`<${selector} ${nestAttr} ${domAttr}>`, `</${selector}>`];\n } else {\n return 'UNKNOWN';\n }\n }\n\n private _stringifyRenderInstruction(instruction: RenderInstruction) {\n const type = instruction[RENDER_INSTRUCTION_POSITION.TYPE];\n const translatedType = Object.entries(RENDER_INSTRUCTION_TYPE).find(([, value]) => value === type)?.[0];\n\n const command = this._stringifyRenderCommand(instruction[RENDER_INSTRUCTION_POSITION.COMMAND]);\n\n return `${translatedType}: ${command}`;\n }\n}\n\nfunction formatHTML(html: string[]) {\n const result: string[] = [];\n let indent = 0;\n\n for (const tag of html) {\n if (tag.startsWith('</')) {\n indent--;\n }\n\n result.push(' '.repeat(indent * 2) + tag);\n\n if (tag.startsWith('<') && !tag.startsWith('</')) {\n indent++;\n }\n }\n\n return result.join('\\n');\n}\n","import { ContentfulAudioComponent } from './components/audio';\nimport { ContentfulFileComponent } from './components/file';\nimport { ContentfulImageComponent } from './components/image';\nimport { ContentfulRichTextRendererComponent } from './components/rich-text-renderer';\nimport { ContentfulVideoComponent } from './components/video';\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","import { CONTENTFUL_CONFIG } from '../constants';\nimport { ContentfulConfig } 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","export * from './lib/components/audio';\nexport * from './lib/components/file';\nexport * from './lib/components/image';\nexport * from './lib/components/rich-text-renderer';\nexport * from './lib/components/video';\nexport * from './lib/constants';\nexport * from './lib/contentful.imports';\nexport * from './lib/gql';\nexport * from './lib/types';\nexport * from './lib/utils';\n\n// Burst cache\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ethlete-contentful.mjs","sources":["../../../../libs/contentful/src/lib/components/audio/contentful-audio.component.ts","../../../../libs/contentful/src/lib/components/file/contentful-file.component.ts","../../../../libs/contentful/src/lib/constants/contentful.constants.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/video/contentful-video.component.ts","../../../../libs/contentful/src/lib/utils/contentful-config.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.errors.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/contentful.imports.ts","../../../../libs/contentful/src/lib/gql/asset.fragments.ts","../../../../libs/contentful/src/lib/utils/contentful.util.ts","../../../../libs/contentful/src/index.ts","../../../../libs/contentful/src/ethlete-contentful.ts"],"sourcesContent":["import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-audio',\n template: `\n @if (asset(); as data) {\n <figure [ngClass]=\"figureClass()\">\n <figcaption [ngClass]=\"figcaptionClass()\">{{ data.fields.title }}</figcaption>\n <audio [ngClass]=\"audioClass()\" controls src=\"{{ data.fields.file.url }}\"></audio>\n </figure>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgClass],\n})\nexport class ContentfulAudioComponent {\n asset = input.required<ContentfulAsset | null | undefined>();\n audioClass = input<NgClassType>(null);\n figureClass = input<NgClassType>(null);\n figcaptionClass = input<NgClassType>(null);\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-file',\n template: `\n @if (asset(); as data) {\n <a [href]=\"data.fields.file.url\" [ngClass]=\"fileClass()\" class=\"underline\" target=\"_blank\">\n {{ data.fields.title }} ({{ data.fields.file.details.size }} Bytes)\n </a>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgClass],\n})\nexport class ContentfulFileComponent {\n asset = input.required<ContentfulAsset | null | undefined>();\n fileClass = input<NgClassType>(null);\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { ContentfulConfig } from '../types';\n\nexport const CONTENTFUL_CONFIG = new InjectionToken<ContentfulConfig>('ContentfulConfig');\n","import { PictureSource } from '@ethlete/cdk';\nimport { ContentfulAsset, ContentfulImageFocusArea, ContentfulImageResizeBehavior } from '../../types';\n\nexport const generateDefaultContentfulImageSource = (data: ContentfulAsset): PictureSource => {\n const file = data.fields.file;\n\n return {\n type: file.contentType,\n srcset: file.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,\n srcsetSizes: string[],\n backgroundColor: string | null,\n quality: number | null,\n focusArea: ContentfulImageFocusArea | null,\n resizeBehavior: ContentfulImageResizeBehavior | null,\n): PictureSource[] => {\n const assetData = data;\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.fields.file.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 (quality !== null) {\n queryParams.push(`q=${quality}`);\n }\n\n if (focusArea) {\n queryParams.push(`f=${focusArea}`);\n }\n\n if (resizeBehavior) {\n queryParams.push(`fit=${resizeBehavior}`);\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 {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n numberAttribute,\n} from '@angular/core';\nimport { PictureComponent, normalizePictureSizes } from '@ethlete/cdk';\nimport { NgClassType } from '@ethlete/core';\nimport { CONTENTFUL_CONFIG } from '../../constants';\nimport { ContentfulAsset, ContentfulImageFocusArea, ContentfulImageResizeBehavior } from '../../types';\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]=\"imgClass()\"\n [hasPriority]=\"hasPriority()\"\n [figureClass]=\"figureClass()\"\n [pictureClass]=\"pictureClass()\"\n [figcaptionClass]=\"figcaptionClass()\"\n [defaultSrc]=\"_defaultSrc()\"\n [alt]=\"asset()?.fields?.title ?? null\"\n [figcaption]=\"asset()?.fields?.description ?? null\"\n [width]=\"asset()?.fields?.file?.details?.image?.width ?? null\"\n [height]=\"asset()?.fields?.file?.details?.image?.height ?? null\"\n [sizes]=\"sizes()\"\n [sources]=\"_sources()\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [PictureComponent],\n host: {\n class: 'et-contentful-image',\n },\n})\nexport class ContentfulImageComponent {\n _contentfulConfig = inject(CONTENTFUL_CONFIG);\n\n asset = input.required<ContentfulAsset | null | undefined>();\n backgroundColor = input<string | null>(null);\n srcsetSizes = input<string[]>(this._contentfulConfig.imageOptions.srcsetSizes);\n\n quality = input(null, { transform: numberAttribute });\n focusArea = input<ContentfulImageFocusArea | null>(null);\n resizeBehavior = input<ContentfulImageResizeBehavior | null>(null);\n hasPriority = input(false, { transform: booleanAttribute });\n imgClass = input<NgClassType>(null);\n figureClass = input<NgClassType>(null);\n figcaptionClass = input<NgClassType>(null);\n pictureClass = input<NgClassType>(null);\n sizes = input<string | null, string[] | string | null>(\n normalizePictureSizes(this._contentfulConfig.imageOptions.sizes),\n {\n transform: (v) => normalizePictureSizes(v),\n },\n );\n\n _sources = computed(() => {\n const asset = this.asset();\n const backgroundColor = this.backgroundColor();\n const srcsetSizes = this.srcsetSizes();\n const quality = this.quality();\n const focusArea = this.focusArea();\n const resizeBehavior = this.resizeBehavior();\n\n if (!asset) {\n return [];\n }\n\n return generateContentfulImageSources(asset, srcsetSizes, backgroundColor, quality, focusArea, resizeBehavior);\n });\n\n _defaultSrc = computed(() => {\n const asset = this.asset();\n\n return asset ? generateDefaultContentfulImageSource(asset) : null;\n });\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-video',\n template: `\n @if (asset(); as data) {\n <video [ngClass]=\"videoClass()\" controls>\n <source src=\"{{ data.fields.file.url }}\" type=\"{{ data.fields.file.contentType }}\" />\n </video>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [NgClass],\n})\nexport class ContentfulVideoComponent {\n asset = input.required<ContentfulAsset | null | undefined>();\n videoClass = input<NgClassType>(null);\n}\n","import { ContentfulAudioComponent } from '../components/audio';\nimport { ContentfulFileComponent } from '../components/file';\nimport { ContentfulImageComponent } from '../components/image';\nimport { ContentfulVideoComponent } from '../components/video';\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 { RuntimeError } from '@ethlete/core';\n\nexport const RICH_TEXT_RENDERER_ERRORS = {\n rich_text_undefined:\n 'The property value given at richTextPath is undefined. Use the richTextPath input to specify the path to the rich text object.',\n rich_text_wrong_type:\n 'The rich text object does not satisfy the RichTextResponse interface. It should contain a property named \"nodeType\" with the value \"document\".',\n\n asset_id_not_found: 'The asset ID was not found. This node is not supported.',\n entry_id_not_found: 'The entry ID was not found. This node is not supported.',\n\n asset_not_found: 'The asset was not found. This node is not supported.',\n entry_not_found: 'The entry was not found. This node is not supported.',\n\n custom_component_not_found: 'No custom component found for entry type. Please provide one for this type.',\n\n text_parent_not_found: 'The parent node is not found. This structure is not supported.',\n text_parent_wrong_type:\n 'The parent node neither a html element nor a custom component. This structure is not supported.',\n} as const;\n\nconst RICH_TEXT_RENDERER_ERROR_CODES = Object.keys(RICH_TEXT_RENDERER_ERRORS).reduce(\n (acc, key, index) => {\n acc[key as keyof typeof RICH_TEXT_RENDERER_ERRORS] = index;\n return acc;\n },\n {} as Record<keyof typeof RICH_TEXT_RENDERER_ERRORS, number>,\n);\n\nexport const richTextRendererError = (\n code: keyof typeof RICH_TEXT_RENDERER_ERRORS,\n devOnly: boolean,\n data?: unknown,\n) => {\n const message = `<et-contentful-rich-text-renderer>: ${RICH_TEXT_RENDERER_ERRORS[code]}`;\n\n throw new RuntimeError(RICH_TEXT_RENDERER_ERROR_CODES[code], message, devOnly, data);\n};\n","import { BLOCKS, INLINES } from '@contentful/rich-text-types';\nimport { isObject } from '@ethlete/core';\nimport { RichTextResponse } from '../../types';\n\nexport const isRichTextRootNode = (node: unknown): node is RichTextResponse => {\n return isObject(node) && 'nodeType' in node && node['nodeType'] === 'document';\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","import { ComponentType } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n Renderer2,\n ViewContainerRef,\n ViewEncapsulation,\n computed,\n inject,\n input,\n isDevMode,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { BLOCKS, Block, INLINES, Inline, Mark, Text } from '@contentful/rich-text-types';\nimport { getObjectProperty, isObject } from '@ethlete/core';\nimport { pairwise, startWith, tap } from 'rxjs';\nimport { CONTENTFUL_CONFIG } from '../../constants/contentful.constants';\nimport {\n ContentfulAsset,\n ContentfulCollection,\n ContentfulEntry,\n ContentfulEntryLinkItem,\n RichTextResponse,\n} from '../../types';\nimport { createContentfulConfig } from '../../utils/contentful-config';\nimport { richTextRendererError } from './rich-text-renderer.errors';\nimport { isRichTextRootNode, translateContentfulNodeTypeToHtmlTag } from './rich-text-renderer.util';\n\nexport const RENDER_COMMAND_TYPE = {\n HTML_OPEN: 0,\n HTML_CLOSE: 1,\n TEXT: 2,\n COMPONENT: 3,\n} as const;\n\nexport const RENDER_COMMAND_POSITION = {\n TYPE: 0,\n NESTING_LEVEL: 1,\n DOM_POSITION: 2,\n INDEX: 3,\n} as const;\n\nexport const HTML_OPEN_RENDER_COMMAND_POSITION = {\n ATTRIBUTES: 4,\n TAG_NAME: 5,\n ELEMENT_ID: 6,\n} as const;\n\nexport const HTML_CLOSE_RENDER_COMMAND_POSITION = {\n TAG_NAME: 4,\n ELEMENT_ID: 5,\n} as const;\n\nexport const TEXT_RENDER_COMMAND_POSITION = {\n TEXT: 4,\n} as const;\n\nexport const COMPONENT_RENDER_COMMAND_POSITION = {\n ATTRIBUTES: 4,\n COMPONENT: 5,\n INPUTS: 6,\n COMPONENT_TYPE: 7,\n} as const;\n\ntype HtmlOpenRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.HTML_OPEN,\n nestingLevel: number,\n domPosition: number,\n index: number,\n attributes: Record<string, string>,\n tagName: string,\n elementId: string,\n];\n\ntype HtmlCloseRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.HTML_CLOSE,\n nestingLevel: number,\n domPosition: number,\n index: number,\n tagName: string,\n elementId: string,\n];\n\ntype TextRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.TEXT,\n nestingLevel: number,\n domPosition: number,\n index: number,\n text: string,\n];\n\ntype ComponentRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.COMPONENT,\n nestingLevel: number,\n domPosition: number,\n index: number,\n attributes: Record<string, string>,\n component: ComponentType<unknown>,\n inputs: Record<string, unknown>,\n componentType: string,\n];\n\ntype RenderCommand = HtmlOpenRenderCommand | HtmlCloseRenderCommand | TextRenderCommand | ComponentRenderCommand;\n\nexport const RENDER_INSTRUCTION_POSITION = {\n TYPE: 0,\n COMMAND: 1,\n} as const;\n\nexport const RENDER_INSTRUCTION_TYPE = {\n CREATE: 0,\n UPDATE: 1,\n DELETE: 2,\n MOVE: 3,\n} as const;\n\ntype RenderInstructionTypeValue = (typeof RENDER_INSTRUCTION_TYPE)[keyof typeof RENDER_INSTRUCTION_TYPE];\n\ntype RenderInstruction = [RenderInstructionTypeValue, RenderCommand];\n\nconst MARK_TAILWIND_MAP: Record<string, string> = {\n bold: 'font-bold',\n italic: 'italic',\n underline: 'underline',\n code: 'font-mono',\n};\n\nexport const marksToClass = (marks: Mark[]) => {\n const classes: string[] = [];\n\n for (const mark of marks) {\n let klass = MARK_TAILWIND_MAP[mark.type];\n\n if (!klass) {\n console.warn(`No class found for mark type! Falling back to \"${mark.type}\".`, mark);\n\n klass = mark.type;\n }\n\n classes.push(klass);\n }\n\n return classes.join(' ');\n};\n\nexport const isHtmlOpenRenderCommand = (command: RenderCommand): command is HtmlOpenRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN;\n};\n\nexport const isHtmlCloseRenderCommand = (command: RenderCommand): command is HtmlCloseRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_CLOSE;\n};\n\nexport const isTextRenderCommand = (command: RenderCommand): command is TextRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.TEXT;\n};\n\nexport const isComponentRenderCommand = (command: RenderCommand): command is ComponentRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.COMPONENT;\n};\n\nexport const getRenderCommandId = (command: RenderCommand) => {\n if (isHtmlOpenRenderCommand(command)) {\n return command[HTML_OPEN_RENDER_COMMAND_POSITION.ELEMENT_ID];\n } else if (isHtmlCloseRenderCommand(command)) {\n return command[HTML_CLOSE_RENDER_COMMAND_POSITION.ELEMENT_ID];\n } else if (isTextRenderCommand(command)) {\n return command[TEXT_RENDER_COMMAND_POSITION.TEXT];\n } else {\n return command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT_TYPE];\n }\n};\n\nconst CLASS_ATTR = 'class';\nconst DEFAULT_COMPONENT_TYPES = {\n IMAGE: '$$$_et-image',\n VIDEO: '$$$_et-video',\n AUDIO: '$$$_et-audio',\n FILE: '$$$_et-file',\n};\n\ntype ExecutedCommandCacheItemBase = {\n element: HTMLElement;\n};\n\ntype ExecutedComponentCommandCacheItem = {\n command: ComponentRenderCommand;\n componentRef: ComponentRef<unknown>;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedHtmlCommandCacheItem = {\n command: HtmlOpenRenderCommand | HtmlCloseRenderCommand;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedTextCommandCacheItem = {\n command: TextRenderCommand;\n textNode: unknown;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedCommandCacheItem =\n | ExecutedComponentCommandCacheItem\n | ExecutedHtmlCommandCacheItem\n | ExecutedTextCommandCacheItem;\n\nexport const isExecutedComponentCommandCacheItem = (\n cache: ExecutedCommandCacheItem,\n): cache is ExecutedComponentCommandCacheItem => {\n return isComponentRenderCommand(cache.command);\n};\n\nexport const isExecutedHtmlOrTextCommandCacheItem = (\n cache: ExecutedCommandCacheItem,\n): cache is ExecutedHtmlCommandCacheItem => {\n return isHtmlCloseRenderCommand(cache.command) || isHtmlOpenRenderCommand(cache.command);\n};\n\nexport const isExecutedTextCommandCacheItem = (\n cache: ExecutedCommandCacheItem,\n): cache is ExecutedTextCommandCacheItem => {\n return isTextRenderCommand(cache.command);\n};\n\nexport const ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID = '$$$_et-contentful-any-entry-content-type-sys-id';\n\nexport type ContentfulIncludeMap = {\n /**\n * Select an entry by its ID and content type ID.\n *\n * The content type ID can be found inside the entry -> sys -> contentType -> sys -> id property.\n *\n * You can provide the `ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID` constant to match any entry sys ID.\n * But be aware that this will return the entry as is without any type checking.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getEntry: <T extends { [key: string]: any }>(id: string, contentTypeId: string) => ContentfulEntry<T> | null;\n\n /**\n * Select multiple entries by their IDs and content type ID.\n * If an entry is not found, it will be omitted from the result.\n *\n * The content type ID can be found inside the entry -> sys -> contentType -> sys -> id property.\n *\n * You can provide the `ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID` constant to match any entry sys ID.\n * But be aware that this will return the entry as is without any type checking.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getEntries: <T extends { [key: string]: any }>(\n ids: string[] | ContentfulEntryLinkItem[],\n contentTypeId: string,\n ) => ContentfulEntry<T>[];\n\n /**\n * Select an asset by its ID.\n */\n getAsset: (id: string) => ContentfulAsset | null;\n\n /**\n * Select multiple assets by their IDs. If an asset is not found, it will be omitted from the result.\n */\n getAssets: (ids: string[]) => ContentfulAsset[];\n};\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 _viewContainerRef = inject(ViewContainerRef);\n _renderer = inject(Renderer2);\n _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n _document = inject(DOCUMENT);\n _config = inject(CONTENTFUL_CONFIG, { optional: true }) ?? createContentfulConfig();\n\n /**\n * A cache for all executed commands that are not deleted.\n * This is used to keep track of all rendered elements and components.\n * The key is the render command element ID.\n */\n _executedCommandsCache = new Map<string, ExecutedCommandCacheItem>();\n\n /**\n * The contentful response gotten via their REST api.\n * @see https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/entries/entries-collection\n */\n content = input.required<ContentfulCollection | null | undefined>();\n\n /**\n * The path to where the rich text field is inside the contentful response. Dot and array notation is allowed.\n * @default \"items[0].fields.html\"\n */\n richTextPath = input.required<string>();\n\n /**\n * A map of all includes in the contentful response.\n * This is useful for looking up assets and entries that are referenced in the rich text without having to use loops.\n */\n contentIncludesMap = computed<ContentfulIncludeMap>(() => {\n const content = this.content();\n const assets = content?.includes.Asset;\n const entries = content?.includes.Entry;\n\n const assetMap = new Map(assets?.map((asset) => [asset.sys.id, asset]) ?? []);\n const entryMap = new Map(entries?.map((entry) => [entry.sys.id, entry]) ?? []);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntry = <T extends { [key: string]: any }>(id: string, contentTypeId: string) => {\n const entry = entryMap.get(id);\n\n if (!entry) {\n if (isDevMode()) {\n console.warn('Entry not found! Will return null. Is the include query param to low?', { id, entryMap });\n }\n\n return null;\n }\n\n if (contentTypeId === ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID) {\n return entry as ContentfulEntry<T>;\n }\n\n if (entry.sys.contentType.sys.id !== contentTypeId) {\n if (isDevMode()) {\n console.warn('Entry sys ID does not match the provided sys ID! Will return null.', {\n entry,\n sysId: contentTypeId,\n });\n }\n\n return null;\n }\n\n return entry as ContentfulEntry<T>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntries = <T extends { [key: string]: any }>(\n ids: string[] | ContentfulEntryLinkItem[],\n contentTypeId: string,\n ) => {\n const entries = ids\n .map((id) => (typeof id === 'string' ? id : id.sys.id))\n .map((id) => getEntry<T>(id, contentTypeId))\n .filter((entry): entry is ContentfulEntry<T> => entry !== null);\n\n return entries;\n };\n\n const getAsset = (id: string) => {\n return assetMap.get(id) ?? null;\n };\n\n const getAssets = (ids: string[]) => {\n return ids.map((id) => getAsset(id)).filter((asset): asset is ContentfulAsset => asset !== null);\n };\n\n return {\n getEntry,\n getEntries,\n getAsset,\n getAssets,\n };\n });\n\n /**\n * The rich text data that should be rendered.\n */\n richTextData = computed(() => {\n const content = this.content();\n const richTextPath = this.richTextPath();\n\n if (!content) {\n return null;\n }\n\n const richText = getObjectProperty(content as unknown as Record<string, unknown>, richTextPath);\n\n if (!isObject(richText)) {\n throw richTextRendererError('rich_text_undefined', false, { content, richTextPath });\n }\n\n if (!isRichTextRootNode(richText)) {\n throw richTextRendererError('rich_text_wrong_type', false, { content, richTextPath });\n }\n\n return richText as RichTextResponse;\n });\n\n renderCommands = computed(() => {\n const richTextData = this.richTextData();\n\n if (!richTextData) {\n return [];\n }\n\n return this._createRenderCommands(richTextData);\n });\n\n renderCommandHistory = toSignal(\n toObservable(this.renderCommands).pipe(startWith([] as RenderCommand[]), pairwise()),\n { initialValue: [[], []] },\n );\n\n previousRenderCommandMap = computed(() => {\n const [prevCommands] = this.renderCommandHistory();\n\n const map = new Map<string | number, RenderCommand>();\n\n for (const command of prevCommands) {\n map.set(getRenderCommandId(command), command);\n }\n\n return map;\n });\n\n renderInstructions = computed(() => {\n const commands = this.renderCommands();\n const previousRenderCommandMap = new Map(this.previousRenderCommandMap());\n\n const instructions: RenderInstruction[] = [];\n\n // remove deleted components as well as all other elements\n for (const [, command] of previousRenderCommandMap) {\n if (isComponentRenderCommand(command)) {\n // keep the component around if it's still in the new commands\n if (commands.some((c) => getRenderCommandId(c) === getRenderCommandId(command))) {\n continue;\n }\n }\n\n instructions.push([RENDER_INSTRUCTION_TYPE.DELETE, command]);\n\n // remove from map to mark as used\n previousRenderCommandMap.delete(getRenderCommandId(command));\n }\n\n // Find the indexes of the commands remaining in the previousRenderCommandMap in the new commands array.\n const lastComponentIndexes: { newIndex: number; prevIndex: number; command: RenderCommand }[] = [];\n for (const [id, command] of previousRenderCommandMap) {\n const index = commands.findIndex((c) => getRenderCommandId(c) === id);\n const newCommand = commands[index]!;\n\n if (index === -1) {\n throw new Error('Command not found!');\n }\n\n lastComponentIndexes.push({\n newIndex: index,\n prevIndex: command[RENDER_COMMAND_POSITION.INDEX],\n command: newCommand,\n });\n }\n\n lastComponentIndexes.sort((a, b) => a.newIndex - b.newIndex);\n\n // check if the prevIndex are in order ascending\n // for indexes that are not in order, create a move instruction\n // for indexes that are in order, create an update instruction\n let moveCheckIndex = 0;\n while (moveCheckIndex < lastComponentIndexes.length - 1) {\n const moveCurr = lastComponentIndexes[moveCheckIndex];\n const moveNext = lastComponentIndexes[moveCheckIndex + 1];\n\n if (!moveCurr || !moveNext) {\n break;\n }\n\n if (moveCurr.prevIndex > moveNext.prevIndex) {\n lastComponentIndexes.splice(moveCheckIndex + 1, 1);\n instructions.push([RENDER_INSTRUCTION_TYPE.MOVE, moveNext.command]);\n } else {\n instructions.push([RENDER_INSTRUCTION_TYPE.UPDATE, moveNext.command]);\n moveCheckIndex++;\n }\n }\n\n for (const command of commands) {\n const id = getRenderCommandId(command);\n\n if (isComponentRenderCommand(command)) {\n const previousCommand = previousRenderCommandMap.get(id);\n\n if (!previousCommand) {\n // create\n instructions.push([RENDER_INSTRUCTION_TYPE.CREATE, command]);\n }\n } else {\n // create\n instructions.push([RENDER_INSTRUCTION_TYPE.CREATE, command]);\n }\n }\n\n return instructions;\n });\n\n constructor() {\n toObservable(this.renderInstructions)\n .pipe(\n takeUntilDestroyed(),\n tap((instructions) => {\n this._execInstructions(instructions);\n }),\n )\n .subscribe();\n }\n\n private _createRenderCommands(richTextData: RichTextResponse) {\n /** List of all render commands */\n const rootCommands: RenderCommand[] = [];\n\n /** Counter for generating unique html element IDs. */\n let elementId = 0;\n\n /** Counter for generating unique component IDs. */\n const componentIdMap = new Map<string, number>();\n\n /** The nesting level of the current node. */\n let nestingLevel = 0;\n\n /** The position (index) of the current node inside the parent node. */\n let domPosition = 0;\n\n let commandIndex = 0;\n\n const traverse = (node: Block | Inline | Text, parent: RenderCommand | null = null) => {\n switch (node.nodeType) {\n case 'text': {\n // Render media\n const type = RENDER_COMMAND_TYPE.TEXT;\n const text = node.value;\n\n if (!text) break;\n\n const command: TextRenderCommand = [type, nestingLevel, domPosition, commandIndex++, text];\n\n rootCommands.push(command);\n domPosition++;\n\n if (!parent) {\n throw richTextRendererError('text_parent_not_found', false, { node });\n }\n if (!isHtmlOpenRenderCommand(parent) && !isComponentRenderCommand(parent)) {\n throw richTextRendererError('text_parent_wrong_type', false, { node, parent });\n }\n\n const attributesPosition =\n parent[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN\n ? HTML_OPEN_RENDER_COMMAND_POSITION.ATTRIBUTES\n : COMPONENT_RENDER_COMMAND_POSITION.ATTRIBUTES;\n\n const attributes = parent[attributesPosition];\n\n if (node.marks.length) {\n const markClasses = marksToClass(node.marks);\n\n if (CLASS_ATTR in attributes) {\n attributes[CLASS_ATTR] += ` ${markClasses}`;\n } else {\n attributes[CLASS_ATTR] = markClasses;\n }\n }\n\n break;\n }\n\n case BLOCKS.EMBEDDED_ASSET: {\n // Render media\n const type = RENDER_COMMAND_TYPE.COMPONENT;\n const assetId = node.data['target']?.sys?.id;\n\n if (!assetId) {\n throw richTextRendererError('asset_id_not_found', false, { node });\n }\n\n const asset = this.contentIncludesMap().getAsset(assetId);\n\n if (!asset) {\n throw richTextRendererError('asset_not_found', false, { assetId, node });\n }\n\n const contentType = asset.fields.file.contentType;\n const assetComponents = this._config.components;\n\n const isImage = contentType.startsWith('image/');\n const isVideo = contentType.startsWith('video/');\n const isAudio = contentType.startsWith('audio/');\n\n const component = isImage\n ? assetComponents.image\n : isVideo\n ? assetComponents.video\n : isAudio\n ? assetComponents.audio\n : assetComponents.file;\n\n const componentType = isImage\n ? DEFAULT_COMPONENT_TYPES.IMAGE\n : isVideo\n ? DEFAULT_COMPONENT_TYPES.VIDEO\n : isAudio\n ? DEFAULT_COMPONENT_TYPES.AUDIO\n : DEFAULT_COMPONENT_TYPES.FILE;\n\n let componentId = componentIdMap.get(componentType) ?? -1;\n const id = componentType + ++componentId;\n componentIdMap.set(componentType, componentId);\n\n const attributes = {};\n\n const inputs = {\n asset,\n };\n\n const command: ComponentRenderCommand = [\n type,\n nestingLevel,\n domPosition,\n commandIndex++,\n attributes,\n component,\n inputs,\n id,\n ];\n\n rootCommands.push(command);\n\n domPosition++;\n\n break;\n }\n\n case BLOCKS.EMBEDDED_ENTRY:\n case INLINES.EMBEDDED_ENTRY: {\n // Render component\n const type = RENDER_COMMAND_TYPE.COMPONENT;\n const entryId = node.data['target']?.sys?.id;\n\n if (!entryId) {\n throw richTextRendererError('entry_id_not_found', false, { node });\n }\n\n const entry = this.contentIncludesMap().getEntry(entryId, ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID);\n\n if (!entry) {\n throw richTextRendererError('entry_not_found', false, { entryId, node });\n }\n\n const componentType = entry.sys.contentType.sys.id;\n\n const component = this._config.customComponents[componentType];\n\n if (!component) {\n throw richTextRendererError('custom_component_not_found', false, {\n componentType,\n customComponents: this._config.customComponents,\n entry,\n });\n }\n\n const attributes = {};\n let componentId = componentIdMap.get(componentType) ?? -1;\n const id = componentType + ++componentId;\n componentIdMap.set(componentType, componentId);\n\n const inputs = {\n fields: entry.fields,\n metadata: entry.metadata,\n sys: entry.sys,\n includes: this.contentIncludesMap(),\n };\n\n const command: ComponentRenderCommand = [\n type,\n nestingLevel,\n domPosition,\n commandIndex++,\n attributes,\n component,\n inputs,\n id,\n ];\n\n rootCommands.push(command);\n\n domPosition++;\n\n break;\n }\n\n default: {\n const type = RENDER_COMMAND_TYPE.HTML_OPEN;\n const tag = translateContentfulNodeTypeToHtmlTag(node.nodeType);\n const attributes: Record<string, string> = {};\n const id = 'e' + elementId++;\n\n const command: HtmlOpenRenderCommand = [type, nestingLevel, domPosition, commandIndex++, attributes, tag, id];\n\n rootCommands.push(command);\n\n const domPositionAtThisLevel = domPosition;\n // Normal html elements can have children\n for (const child of node.content) {\n domPosition = 0;\n nestingLevel++;\n traverse(child, command);\n nestingLevel--;\n domPosition = domPositionAtThisLevel;\n }\n\n const lastCommand = rootCommands[rootCommands.length - 1];\n\n if (lastCommand?.[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN) {\n // If the last command is an open command, we can remove it since it's empty\n rootCommands.pop();\n } else {\n const closeId = 'e' + elementId++;\n\n const closeCommand: HtmlCloseRenderCommand = [\n RENDER_COMMAND_TYPE.HTML_CLOSE,\n nestingLevel,\n domPosition,\n commandIndex++,\n tag,\n closeId,\n ];\n rootCommands.push(closeCommand);\n\n domPosition++;\n }\n\n if (node.nodeType === INLINES.HYPERLINK) {\n const uri = node.data['uri'];\n attributes['href'] = uri;\n\n const host = this._document.location.host;\n const isExternal = !uri.includes(host);\n\n if (isExternal) {\n attributes['target'] = '_blank';\n }\n }\n\n break;\n }\n }\n };\n\n for (const node of richTextData.content) {\n traverse(node, null);\n }\n\n return rootCommands;\n }\n\n private _execInstructions(instructions: RenderInstruction[]) {\n for (const instruction of instructions) {\n const type = instruction[RENDER_INSTRUCTION_POSITION.TYPE];\n const command = instruction[RENDER_INSTRUCTION_POSITION.COMMAND];\n\n switch (type) {\n case RENDER_INSTRUCTION_TYPE.CREATE:\n this._runCreateInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.UPDATE:\n this._runUpdateInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.MOVE:\n this._runMoveInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.DELETE:\n this._runDeleteInstruction(command);\n break;\n }\n }\n }\n\n private _runCreateInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const parentElement = this._findParent(command);\n const nextElement = this._findFollowingElement(command);\n\n if (isComponentRenderCommand(command)) {\n const componentRef = this._viewContainerRef.createComponent(command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT]);\n\n this._updateComponentInputs(command, componentRef);\n\n const rootNode = this._getComponentRootNode(componentRef);\n\n this._renderInsertOrAppend(rootNode, parentElement, nextElement);\n\n this._executedCommandsCache.set(id, {\n command,\n componentRef,\n element: rootNode,\n });\n } else if (isTextRenderCommand(command)) {\n const text = command[TEXT_RENDER_COMMAND_POSITION.TEXT];\n const textNode = this._renderer.createText(text);\n const span = this._renderer.createElement('span');\n this._renderer.appendChild(span, textNode);\n\n this._renderInsertOrAppend(span, parentElement, nextElement);\n\n this._executedCommandsCache.set(id, {\n command,\n element: span,\n textNode,\n });\n } else if (isHtmlOpenRenderCommand(command)) {\n const tag = command[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME];\n const attributes = command[HTML_OPEN_RENDER_COMMAND_POSITION.ATTRIBUTES];\n const element = this._renderer.createElement(tag);\n\n for (const [key, value] of Object.entries(attributes)) {\n this._renderer.setAttribute(element, key, value);\n }\n\n this._renderInsertOrAppend(element, parentElement, nextElement);\n\n this._executedCommandsCache.set(id, {\n command,\n element,\n });\n }\n }\n\n private _runUpdateInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n const componentRef = cached.componentRef;\n\n if (!componentRef) {\n throw new Error('Component ref not found!');\n }\n\n this._updateComponentInputs(command, componentRef);\n }\n\n this._executedCommandsCache.set(id, {\n ...cached,\n command: command as any,\n });\n }\n\n private _runMoveInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n const componentRef = cached.componentRef;\n\n if (!componentRef) {\n throw new Error('Component ref not found!');\n }\n\n const rootNode = cached.element;\n const oldParentElement = cached.element.parentElement;\n\n this._renderer.removeChild(oldParentElement, rootNode);\n\n const newParentElement = this._findParent(command);\n const nextElement = this._findFollowingElement(command);\n\n this._renderInsertOrAppend(rootNode, newParentElement, nextElement);\n\n this._updateComponentInputs(command, componentRef);\n\n this._executedCommandsCache.set(id, {\n ...cached,\n command: command as any,\n });\n }\n }\n\n private _runDeleteInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n\n if (!cached) {\n if (isHtmlCloseRenderCommand(command)) {\n return;\n }\n\n throw new Error('Cached command not found!');\n }\n\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n cached.componentRef?.destroy();\n } else if (isTextRenderCommand(command)) {\n this._renderer.removeChild(cached.element?.parentElement, cached.element);\n } else if (isHtmlOpenRenderCommand(command)) {\n this._renderer.removeChild(cached.element?.parentElement, cached.element);\n }\n\n this._executedCommandsCache.delete(id);\n }\n\n private _getComponentRootNode(componentRef: ComponentRef<any>): HTMLElement {\n return (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n }\n\n private _updateComponentInputs(command: ComponentRenderCommand, componentRef: ComponentRef<any>) {\n for (const [key, value] of Object.entries(command[COMPONENT_RENDER_COMMAND_POSITION.INPUTS])) {\n if (!componentRef.instance[key]) continue;\n\n componentRef.setInput(key, value);\n }\n }\n\n private _findParent(command: RenderCommand) {\n const hostElement = this._elementRef.nativeElement;\n const nestingLevel = command[RENDER_COMMAND_POSITION.NESTING_LEVEL];\n let parentElement: HTMLElement | undefined = undefined;\n\n if (nestingLevel === 0) {\n parentElement = hostElement;\n } else {\n // Reverse search all render commands beginning from the current one using a for loop.\n // The parent is found when the command's nesting level ist the same as the current nesting level minus 1.\n // If the parent is not found, throw an error.\n const allCommands = this.renderCommands();\n const currentCommandIndex = command[RENDER_COMMAND_POSITION.INDEX];\n\n let parentCommand: RenderCommand | null = null;\n\n for (let i = currentCommandIndex - 1; i >= 0; i--) {\n const cmd = allCommands[i];\n\n if (!cmd) {\n throw new Error('Command not found!');\n }\n\n if (cmd[RENDER_COMMAND_POSITION.NESTING_LEVEL] === nestingLevel - 1) {\n parentCommand = cmd;\n break;\n }\n }\n\n if (!parentCommand) {\n throw new Error('Parent command not found!');\n }\n\n parentElement = this._executedCommandsCache.get(getRenderCommandId(parentCommand))?.element;\n }\n\n if (!parentElement) {\n throw new Error('Parent element not found!');\n }\n\n return parentElement;\n }\n\n private _findFollowingElement(command: RenderCommand) {\n const cacheArray = Array.from(this._executedCommandsCache.values());\n let nextElement: HTMLElement | undefined = undefined;\n\n const domPosition = command[RENDER_COMMAND_POSITION.DOM_POSITION];\n const nestingLevel = command[RENDER_COMMAND_POSITION.NESTING_LEVEL];\n const type = command[RENDER_COMMAND_POSITION.TYPE];\n\n // Try to find an already rendered element with a domPosition that is greater than the current domPosition. If there are multiple, use the one with the smallest domPosition.\n // If it does not exist, use .appendChild to simply append the element to the end of the parent element.\n // If it does exist, use .insertBefore to insert the element before the found element.\n for (const cached of cacheArray) {\n if (\n cached.command[RENDER_COMMAND_POSITION.DOM_POSITION] > domPosition &&\n cached.command[RENDER_COMMAND_POSITION.NESTING_LEVEL] === nestingLevel &&\n // Make sure the element does not find itself\n cached.command[RENDER_COMMAND_POSITION.TYPE] !== type\n ) {\n nextElement = cached.element;\n break;\n }\n }\n\n return nextElement;\n }\n\n private _renderInsertOrAppend(\n nodeToRender: HTMLElement,\n parentElement: HTMLElement,\n nextElement: HTMLElement | undefined,\n ) {\n if (nextElement) {\n this._renderer.insertBefore(parentElement, nodeToRender, nextElement);\n } else {\n this._renderer.appendChild(parentElement, nodeToRender);\n }\n }\n\n private _debugVisualizeRenderCommands(commands: RenderCommand[]) {\n const debug = commands.map((command) => this._stringifyRenderCommand(command)).flat();\n\n const prettified = formatHTML(debug);\n\n return prettified;\n }\n\n private _stringifyRenderCommand(command: RenderCommand) {\n const nestAttr = `nest=\"${command[RENDER_COMMAND_POSITION.NESTING_LEVEL]}\"`;\n const domAttr = `dom=\"${command[RENDER_COMMAND_POSITION.DOM_POSITION]}\"`;\n\n if (isHtmlOpenRenderCommand(command)) {\n return `<${command[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME]} ${nestAttr} ${domAttr}>`;\n } else if (isHtmlCloseRenderCommand(command)) {\n return `</${command[HTML_CLOSE_RENDER_COMMAND_POSITION.TAG_NAME]} ${nestAttr} ${domAttr}>`;\n } else if (isTextRenderCommand(command)) {\n return [`<span ${nestAttr} ${domAttr}>`, command[TEXT_RENDER_COMMAND_POSITION.TEXT], '</span>'];\n } else if (isComponentRenderCommand(command)) {\n const selector = command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT_TYPE];\n return [`<${selector} ${nestAttr} ${domAttr}>`, `</${selector}>`];\n } else {\n return 'UNKNOWN';\n }\n }\n\n private _stringifyRenderInstruction(instruction: RenderInstruction) {\n const type = instruction[RENDER_INSTRUCTION_POSITION.TYPE];\n const translatedType = Object.entries(RENDER_INSTRUCTION_TYPE).find(([, value]) => value === type)?.[0];\n\n const command = this._stringifyRenderCommand(instruction[RENDER_INSTRUCTION_POSITION.COMMAND]);\n\n return `${translatedType}: ${command}`;\n }\n}\n\nfunction formatHTML(html: string[]) {\n const result: string[] = [];\n let indent = 0;\n\n for (const tag of html) {\n if (tag.startsWith('</')) {\n indent--;\n }\n\n result.push(' '.repeat(indent * 2) + tag);\n\n if (tag.startsWith('<') && !tag.startsWith('</')) {\n indent++;\n }\n }\n\n return result.join('\\n');\n}\n","import { ContentfulAudioComponent } from './components/audio';\nimport { ContentfulFileComponent } from './components/file';\nimport { ContentfulImageComponent } from './components/image';\nimport { ContentfulRichTextRendererComponent } from './components/rich-text-renderer';\nimport { ContentfulVideoComponent } from './components/video';\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 interface ContentfulGqlAsset {\n sys: {\n id: string;\n };\n title: string;\n contentType: string;\n url: string;\n description: string | null;\n width: number | null;\n height: number | null;\n size: number;\n}\n","import { CONTENTFUL_CONFIG } from '../constants';\nimport { ContentfulConfig } 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","export * from './lib/components/audio';\nexport * from './lib/components/file';\nexport * from './lib/components/image';\nexport * from './lib/components/rich-text-renderer';\nexport * from './lib/components/video';\nexport * from './lib/constants';\nexport * from './lib/contentful.imports';\nexport * from './lib/gql';\nexport * from './lib/types';\nexport * from './lib/utils';\n\n// Burst cache\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1,13 @@
1
1
  export declare const GQL_FRAGMENT_CONTENTFUL_ASSET: string;
2
+ export interface ContentfulGqlAsset {
3
+ sys: {
4
+ id: string;
5
+ };
6
+ title: string;
7
+ contentType: string;
8
+ url: string;
9
+ description: string | null;
10
+ width: number | null;
11
+ height: number | null;
12
+ size: number;
13
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethlete/contentful",
3
- "version": "3.2.0",
3
+ "version": "3.2.1",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "17.3.3",
6
6
  "@angular/common": "17.3.3",