{"version":3,"file":"dotcms-angular.mjs","sources":["../../../../../libs/sdk/angular/src/lib/directives/dotcms-show-when/dotcms-show-when.directive.ts","../../../../../libs/sdk/angular/src/lib/providers/dotcms-image-loader/dotcms-image_loader.ts","../../../../../libs/sdk/angular/src/lib/providers/dotcms-client/dotcms-client.provider.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-editable-text/utils.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-editable-text/dotcms-editable-text.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-editable-text/dotcms-editable-text.component.html","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/blocks/audio.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/blocks/code.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/blocks/dot-contentlet.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/blocks/grid-block.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/blocks/image.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/blocks/list.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/blocks/table.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/blocks/text.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/blocks/unknown.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/blocks/video.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/item/dotcms-block-editor-item.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/item/dotcms-block-editor-item.component.html","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/dotcms-block-editor-renderer.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer/dotcms-block-editor-renderer.component.html","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer-semantic/blocks/semantic-blocks.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer-semantic/dotcms-block-editor-renderer-native.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-block-editor-renderer-semantic/dotcms-block-editor-renderer-native.component.html","../../../../../libs/sdk/angular/src/lib/components/dotcms-layout-body/components/page-error-message/page-error-message.component.ts","../../../../../libs/sdk/angular/src/lib/store/dotcms.store.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-layout-body/components/container/components/container-not-found/container-not-found.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-layout-body/components/container/components/empty-container/empty-container.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-layout-body/components/fallback-component/fallback-component.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-layout-body/components/contentlet/contentlet.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-layout-body/components/container/container.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-layout-body/components/column/column.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-layout-body/components/row/row.component.ts","../../../../../libs/sdk/angular/src/lib/components/dotcms-layout-body/dotcms-layout-body.component.ts","../../../../../libs/sdk/angular/src/lib/services/dotcms-editable-page.service.ts","../../../../../libs/sdk/angular/src/dotcms-angular.ts"],"sourcesContent":["import { Directive, Input, ViewContainerRef, TemplateRef, inject } from '@angular/core';\n\nimport { UVE_MODE, UVEState } from '@dotcms/types';\nimport { getUVEState } from '@dotcms/uve';\n\n/**\n * Directive to show a template when the UVE is in a specific mode.\n *\n * @example\n * <div *dotCMSShowWhen=\"UVE_MODE.EDIT\">\n *     This will be shown when the UVE is in edit mode.\n * </div>\n *\n * @export\n * @class DotCMSShowWhenDirective\n */\n@Directive({\n    selector: '[dotCMSShowWhen]'\n})\nexport class DotCMSShowWhenDirective {\n    #when: UVE_MODE = UVE_MODE.EDIT;\n    #hasView = false;\n\n    @Input() set dotCMSShowWhen(value: UVE_MODE) {\n        this.#when = value;\n        this.updateViewContainer();\n    }\n\n    #viewContainerRef = inject(ViewContainerRef);\n    #templateRef = inject(TemplateRef);\n\n    private updateViewContainer() {\n        const state: UVEState | undefined = getUVEState();\n\n        const shouldShow = state?.mode === this.#when;\n\n        if (shouldShow && !this.#hasView) {\n            this.#viewContainerRef.createEmbeddedView(this.#templateRef);\n            this.#hasView = true;\n        } else if (!shouldShow && this.#hasView) {\n            this.#viewContainerRef.clear();\n            this.#hasView = false;\n        }\n    }\n}\n","import { IMAGE_LOADER, ImageLoaderConfig } from '@angular/common';\nimport { Provider } from '@angular/core';\n\n/**\n * Type definition for the DotCMS image loader parameters\n */\ninterface DotCMSImageLoaderParams {\n    isOutsideSRC?: boolean;\n    languageId?: string;\n    /**\n     * Quality of the image\n     * @default 50\n     */\n    quality?: number;\n}\n\n/**\n * Validates if a given path is a valid URL string\n *\n * @param path - The path to validate\n * @returns boolean indicating if the path is valid\n */\nfunction isValidPath(path: unknown): boolean {\n    if (typeof path !== 'string' || path.trim() === '') {\n        return false;\n    }\n\n    try {\n        new URL(path);\n\n        return true;\n    } catch {\n        return false;\n    }\n}\n\n/**\n * Provides a DotCMS image loader configuration for the Angular Image directive\n *\n * @param path - The base URL path to the DotCMS instance, or empty to use current site\n * @returns An array of providers for the IMAGE_LOADER token\n * @throws Error if the provided path is invalid\n * @example\n * ```typescript\n * // In your app.config.ts\n * export const appConfig: ApplicationConfig = {\n *   providers: [\n *     provideDotCMSImageLoader('https://demo.dotcms.com')\n *     // Or use current site:\n *     // provideDotCMSImageLoader()\n *   ]\n * };\n * ```\n */\nexport function provideDotCMSImageLoader(path?: string): Provider[] {\n    // If path is provided, validate it\n    if (path && !isValidPath(path)) {\n        throw new Error(\n            `Image loader has detected an invalid path (\\`${path}\\`). ` +\n                `To fix this, supply either the full URL to the dotCMS site, or leave it empty to use the current site.`\n        );\n    }\n\n    return [\n        {\n            provide: IMAGE_LOADER,\n            useValue: (config: ImageLoaderConfig) => createDotCMSURL(config, path)\n        }\n    ];\n}\n\n/**\n * Creates a DotCMS-compatible URL for image loading\n *\n * @param config - The image loader configuration\n * @param path - The base URL path to the DotCMS instance\n * @returns A fully qualified URL for the image\n * @internal\n */\nfunction createDotCMSURL(config: ImageLoaderConfig, path?: string): string {\n    const { loaderParams, src, width } = config;\n    const params = loaderParams as DotCMSImageLoaderParams;\n\n    if (params?.isOutsideSRC) {\n        return src;\n    }\n\n    // Use empty string as fallback to support using current site\n    const dotcmsHost = path ? new URL(path).origin : '';\n    const imageSRC = src.includes('/dA/') ? src : `/dA/${src}`;\n    const languageId = params?.languageId ?? '1';\n    const quality = params?.quality ?? 50;\n\n    if (width) {\n        return `${dotcmsHost}${imageSRC}/${width}w/${quality}q?language_id=${languageId}`;\n    }\n\n    return `${dotcmsHost}${imageSRC}/${quality}q?language_id=${languageId}`;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\n\nimport { createDotCMSClient } from '@dotcms/client';\nimport { DotCMSClientConfig, DotHttpClient } from '@dotcms/types';\n\n/**\n * Type alias for the return type of createDotCMSClient function.\n * Used to ensure type consistency across the DotCMSClient interface and class.\n */\ntype ClientType = ReturnType<typeof createDotCMSClient>;\n\n// This is a hack inspired by https://github.com/angular/angularfire/blob/c1c6af9779154caff6bc0d9b837f6c3e2d913456/src/firestore/firestore.ts#L8\n\n/**\n * Interface that extends the client type created by createDotCMSClient.\n * This interface provides type safety and IntelliSense support for the DotCMS client\n * when used as a dependency injection token in Angular applications.\n *\n * @example\n * ```typescript\n * dotcmsClient = inject(DotCMSClient);\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging, @typescript-eslint/no-empty-interface, @typescript-eslint/no-empty-object-type\nexport interface DotCMSClient extends ClientType {}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class DotCMSClient {\n    constructor(client: ClientType) {\n        return client;\n    }\n}\n\n/**\n * Provides Angular environment providers for the DotCMS client.\n *\n * Registers a singleton DotCMS client instance in the Angular dependency injection system,\n * configured with the given options. This allows you to inject `DotCMSClient` anywhere\n * in your app using Angular's `inject()` function.\n *\n * Should be added to the application's providers (e.g., in `main.ts` or `app.config.ts`).\n *\n * @param options - Configuration for the DotCMS client.\n *   @param options.dotcmsUrl - The base URL for the DotCMS instance (required).\n *   @param options.authToken - Authentication token for API requests (required).\n *   @param options.siteId - The site identifier (optional).\n *   @param options.requestOptions - Additional fetch options (optional).\n *   @param options.httpClient - Optional factory for a custom HTTP client, receives Angular's HttpClient.\n * @returns Angular environment providers for the DotCMS client.\n *\n * @example\n * import { provideDotCMSClient } from '@dotcms/angular';\n *\n * bootstrapApplication(AppComponent, {\n *   providers: [\n *     provideDotCMSClient({\n *       dotcmsUrl: 'https://demo.dotcms.com',\n *       authToken: 'your-auth-token',\n *       siteId: 'your-site-id',\n *       httpClient: (http) => new AngularHttpClient(http)\n *     })\n *   ]\n * });\n */\nexport function provideDotCMSClient(options: DotCMSAngularProviderConfig): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {\n            provide: DotCMSClient,\n            useFactory: () => {\n                const httpClient = options.httpClient\n                    ? options.httpClient(inject(HttpClient))\n                    : undefined;\n                const dotCMSClient = createDotCMSClient({\n                    dotcmsUrl: options.dotcmsUrl,\n                    authToken: options.authToken,\n                    siteId: options.siteId,\n                    logLevel: options.logLevel,\n                    httpClient: httpClient\n                });\n\n                return dotCMSClient;\n            }\n        }\n    ]);\n}\n\n/**\n * Configuration interface for the DotCMS Angular provider.\n *\n * Extends the base `DotCMSClientConfig` but replaces the `httpClient` property\n * with an Angular-specific factory function that receives Angular's `HttpClient`\n * and returns a `DotHttpClient` implementation.\n *\n * This interface is designed to work seamlessly with Angular's dependency injection\n * system, allowing you to leverage Angular's built-in HTTP client while maintaining\n * compatibility with the DotCMS client's expected interface.\n *\n * @example\n * ```typescript\n * const config: DotCMSAngularProviderConfig = {\n *   dotcmsUrl: 'https://demo.dotcms.com',\n *   authToken: 'your-auth-token',\n *   siteId: 'your-site-id',\n *   httpClient: (http: HttpClient) => new AngularHttpClient(http)\n * };\n * ```\n *\n * @example\n * ```typescript\n * // Using with provideDotCMSClient\n * provideDotCMSClient({\n *   dotcmsUrl: 'https://demo.dotcms.com',\n *   authToken: 'your-auth-token',\n *   httpClient: (http) => new AngularHttpClient(http)\n * })\n * ```\n */\nexport interface DotCMSAngularProviderConfig extends Omit<DotCMSClientConfig, 'httpClient'> {\n    /**\n     * Optional factory function that creates a custom HTTP client implementation.\n     *\n     * This function receives Angular's `HttpClient` instance and should return\n     * a `DotHttpClient` implementation. If not provided, the DotCMS client will\n     * use its default HTTP client implementation.\n     *\n     * @param http - Angular's HttpClient instance from dependency injection\n     * @returns A DotHttpClient implementation\n     *\n     * @example\n     * ```typescript\n     * httpClient: (http: HttpClient) => {\n     *   return new AngularHttpClient(http);\n     * }\n     * ```\n     */\n    httpClient?: (http: HttpClient) => DotHttpClient;\n}\n","import { EditorComponent } from '@tinymce/tinymce-angular';\n\nimport {\n    __BASE_TINYMCE_CONFIG_WITH_NO_DEFAULT__,\n    __DEFAULT_TINYMCE_CONFIG__\n} from '@dotcms/uve/internal';\n\nexport type DOT_EDITABLE_TEXT_MODE = 'minimal' | 'full' | 'plain';\n\nexport type DOT_EDITABLE_TEXT_FORMAT = 'html' | 'text';\n\nconst DEFAULT_TINYMCE_CONFIG: EditorComponent['init'] = {\n    ...__DEFAULT_TINYMCE_CONFIG__,\n    license_key: 'gpl' // Using self-hosted license key\n};\n\nexport const TINYMCE_CONFIG: {\n    [key in DOT_EDITABLE_TEXT_MODE]: EditorComponent['init'];\n} = {\n    minimal: {\n        ...DEFAULT_TINYMCE_CONFIG,\n        ...__BASE_TINYMCE_CONFIG_WITH_NO_DEFAULT__.minimal\n    },\n    full: {\n        ...DEFAULT_TINYMCE_CONFIG,\n        ...__BASE_TINYMCE_CONFIG_WITH_NO_DEFAULT__.full\n    },\n    plain: {\n        ...DEFAULT_TINYMCE_CONFIG,\n        ...__BASE_TINYMCE_CONFIG_WITH_NO_DEFAULT__.plain\n    }\n};\n","import { EditorComponent, TINYMCE_SCRIPT_SRC } from '@tinymce/tinymce-angular';\n\nimport {\n    Component,\n    ElementRef,\n    HostListener,\n    inject,\n    Input,\n    OnChanges,\n    OnInit,\n    Renderer2,\n    SecurityContext,\n    ViewChild,\n    ChangeDetectionStrategy\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { DotCMSBasicContentlet, DotCMSUVEAction, UVE_MODE } from '@dotcms/types';\nimport { __DOTCMS_UVE_EVENT__ } from '@dotcms/types/internal';\nimport { getUVEState, sendMessageToUVE } from '@dotcms/uve';\nimport { __TINYMCE_PATH_ON_DOTCMS__ } from '@dotcms/uve/internal';\n\nimport { TINYMCE_CONFIG, DOT_EDITABLE_TEXT_FORMAT, DOT_EDITABLE_TEXT_MODE } from './utils';\n\n/** Minimal TinyMCE editor API used by this component (avoids non-portable reference to nested tinymce types). */\ninterface DotEditableTextEditor {\n    getContent(options?: { format?: string }): string;\n    isDirty(): boolean;\n    setContent(content: string, options?: { format?: string }): void;\n    focus(): void;\n    hasFocus(): boolean;\n}\n\n/**\n * Dot editable text component.\n * This component is responsible to render a text field that can be edited inline.\n *\n * @export\n * @class DotCMSEditableTextComponent\n * @implements {OnInit}\n * @implements {OnChanges}\n */\n@Component({\n    selector: 'dotcms-editable-text',\n    templateUrl: './dotcms-editable-text.component.html',\n    styleUrl: './dotcms-editable-text.component.css',\n    imports: [EditorComponent],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    providers: [\n        {\n            provide: TINYMCE_SCRIPT_SRC,\n            useFactory: () => {\n                const { dotCMSHost } = getUVEState() || {};\n\n                return `${dotCMSHost || ''}${__TINYMCE_PATH_ON_DOTCMS__}`;\n            }\n        }\n    ]\n})\nexport class DotCMSEditableTextComponent<T extends DotCMSBasicContentlet>\n    implements OnInit, OnChanges\n{\n    @ViewChild(EditorComponent) editorComponent!: EditorComponent;\n\n    /**\n     * Represents the mode of the editor which can be `plain`, `minimal`, or `full`\n     *\n     * @type {DOT_EDITABLE_TEXT_MODE}\n     * @memberof DotCMSEditableTextComponent\n     */\n    @Input() mode: DOT_EDITABLE_TEXT_MODE = 'plain';\n    /**\n     * Represents the format of the editor which can be `text` or `html`\n     *\n     * @type {DOT_EDITABLE_TEXT_FORMAT}\n     * @memberof DotCMSEditableTextComponent\n     */\n    @Input() format: DOT_EDITABLE_TEXT_FORMAT = 'text';\n    /**\n     * Represents the `contentlet` that can be inline edited\n     *\n     * @type {DotCMSContentlet}\n     * @memberof DotCMSEditableTextComponent\n     */\n    @Input() contentlet!: T;\n    /**\n     * Represents the field name of the `contentlet` that can be edited\n     *\n     * @memberof DotCMSEditableTextComponent\n     */\n    @Input() fieldName!: keyof T;\n\n    /**\n     * Represents the content of the `contentlet` that can be edited\n     *\n     * @protected\n     * @memberof DotCMSEditableTextComponent\n     */\n    protected content = '';\n    /**\n     * Represents the configuration of the editor\n     *\n     * @protected\n     * @type {EditorComponent['init']}\n     * @memberof DotCMSEditableTextComponent\n     */\n    protected init!: EditorComponent['init'];\n\n    readonly #NotDotCMSHostMessage =\n        'The `dotCMSHost` parameter is not defined. Check that the UVE is sending the correct parameters.';\n\n    readonly #sanitizer = inject<DomSanitizer>(DomSanitizer);\n    readonly #renderer = inject<Renderer2>(Renderer2);\n    readonly #elementRef = inject<ElementRef>(ElementRef);\n\n    /**\n     * The TinyMCE editor\n     *\n     * @readonly\n     * @memberof DotCMSEditableTextComponent\n     */\n    get editor(): DotEditableTextEditor | undefined {\n        return this.editorComponent?.editor as DotEditableTextEditor | undefined;\n    }\n\n    /**\n     * Represents if the component is inside the editor\n     *\n     * @protected\n     * @type {boolean}\n     * @memberof DotCMSEditableTextComponent\n     */\n    protected get isEditMode() {\n        const { mode, dotCMSHost } = getUVEState() || {};\n\n        return mode === UVE_MODE.EDIT && dotCMSHost;\n    }\n\n    /**\n     * Returns the number of pages the contentlet is on\n     *\n     * @readonly\n     * @memberof DotCMSEditableTextComponent\n     */\n    get onNumberOfPages() {\n        return this.contentlet['onNumberOfPages'] || 1;\n    }\n\n    /**\n     * Handle copy contentlet inline editing success event\n     *\n     * @param {MessageEvent} { data }\n     * @return {*}\n     * @memberof DotCMSEditableTextComponent\n     */\n    @HostListener('window:message', ['$event'])\n    onMessage({ data }: MessageEvent) {\n        const { name, payload } = data;\n        if (name !== __DOTCMS_UVE_EVENT__.UVE_COPY_CONTENTLET_INLINE_EDITING_SUCCESS) {\n            return;\n        }\n\n        const { oldInode, inode, fieldName } = payload;\n        const currentInode = this.contentlet.inode;\n        const matchesInode = currentInode === oldInode || currentInode === inode;\n\n        // Match the field too: a contentlet's fields all share one inode, so an\n        // inode-only check focuses every editable field on the contentlet (the\n        // last one wins) instead of the one the user clicked.\n        if (matchesInode && fieldName === this.fieldName) {\n            this.editorComponent.editor.focus();\n\n            return;\n        }\n    }\n\n    ngOnInit() {\n        const { dotCMSHost } = getUVEState() || {};\n\n        if (!this.isEditMode) {\n            this.innerHTMLToElement();\n\n            if (!dotCMSHost) {\n                console.warn(this.#NotDotCMSHostMessage);\n            }\n\n            return;\n        }\n\n        this.init = {\n            ...TINYMCE_CONFIG[this.mode],\n            base_url: `${dotCMSHost}/ext/tinymcev7`\n        };\n    }\n\n    ngOnChanges() {\n        this.content = (this.contentlet[this.fieldName] as string) || '';\n        if (this.editor) {\n            this.editor.setContent(this.content, { format: this.format });\n        }\n    }\n\n    /**\n     * Handle mouse down event\n     *\n     * @param {{ event: MouseEvent }} { event }\n     * @return {*}\n     * @memberof DotCMSEditableTextComponent\n     */\n    onMouseDown({ event }: { event: MouseEvent }) {\n        if (Number(this.onNumberOfPages) <= 1 || this.editorComponent.editor.hasFocus()) {\n            return;\n        }\n\n        const { inode, languageId: language } = this.contentlet;\n\n        event.stopPropagation();\n        event.preventDefault();\n\n        try {\n            sendMessageToUVE({\n                action: DotCMSUVEAction.COPY_CONTENTLET_INLINE_EDITING,\n                payload: {\n                    dataset: {\n                        inode,\n                        language,\n                        fieldName: this.fieldName\n                    }\n                }\n            });\n        } catch (error) {\n            console.error('Failed to post message to editor:', error);\n        }\n    }\n    /**\n     * Handle focus out event\n     *\n     * @return {*}\n     * @memberof DotCMSEditableTextComponent\n     */\n    onFocusOut() {\n        const editor = this.editor;\n        if (!editor) {\n            return;\n        }\n        const content = editor.getContent({ format: this.format });\n\n        if (!editor.isDirty() || !this.didContentChange(content)) {\n            return;\n        }\n\n        const { inode, languageId: langId } = this.contentlet;\n\n        try {\n            sendMessageToUVE({\n                action: DotCMSUVEAction.UPDATE_CONTENTLET_INLINE_EDITING,\n                payload: {\n                    content,\n                    dataset: {\n                        inode,\n                        langId,\n                        fieldName: this.fieldName\n                    }\n                }\n            });\n        } catch (error) {\n            console.error('Failed to post message to editor:', error);\n        }\n    }\n\n    /**\n     * inner HTML to element\n     *\n     * @private\n     * @param {string} editedContent\n     * @return {*}\n     * @memberof DotCMSEditableTextComponent\n     */\n    private innerHTMLToElement() {\n        const element = this.#elementRef.nativeElement;\n        const safeHtml = this.#sanitizer.bypassSecurityTrustHtml(this.content);\n        const content = this.#sanitizer.sanitize(SecurityContext.HTML, safeHtml) || '';\n\n        this.#renderer.setProperty(element, 'innerHTML', content);\n    }\n\n    /**\n     * Check if the content has changed\n     *\n     * @private\n     * @param {string} editedContent\n     * @return {*}\n     * @memberof DotCMSEditableTextComponent\n     */\n    private didContentChange(editedContent: string) {\n        return this.content !== editedContent;\n    }\n}\n","@if (isEditMode) {\n    <editor\n        #tinyEditor\n        [init]=\"init\"\n        [initialValue]=\"content\"\n        (onMouseDown)=\"onMouseDown($event)\"\n        (onFocusOut)=\"onFocusOut()\" />\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { BlockEditorNode } from '@dotcms/types';\n\n/**\n * Renders a dotCMS audio block as a native `<audio>` element. Mirrors {@link DotVideoBlock}\n * but without poster/width/height, which are not meaningful for audio.\n */\n@Component({\n    selector: 'dotcms-block-editor-renderer-audio',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <audio [controls]=\"true\" preload=\"metadata\">\n            <source [src]=\"attrs?.['src']\" [type]=\"attrs?.['mimeType']\" />\n            Your browser does not support the\n            <code>audio</code>\n            element.\n        </audio>\n    `\n})\nexport class DotAudioBlock {\n    @Input() attrs!: BlockEditorNode['attrs'];\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-code-block',\n    template: `\n        <pre>\n            <code>\n                <ng-content />\n            </code>\n        </pre>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DotCodeBlock {}\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-block-quote',\n    template: `\n        <blockquote>\n            <ng-content />\n        </blockquote>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DotBlockQuote {}\n","import { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, Input } from '@angular/core';\n\nimport { BlockEditorNode, UVE_MODE } from '@dotcms/types';\nimport { getUVEState } from '@dotcms/uve';\n\nimport { DynamicComponentEntity } from '../../../models';\nimport { CustomRenderer } from '../dotcms-block-editor-renderer.component';\n\n@Component({\n    selector: 'dotcms-no-component-provided',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    template: `\n        <div data-testid=\"no-component-provided\" [style]=\"style\">\n            <strong style=\"color: #c05621\">Dev Warning</strong>\n            : No component or custom renderer provided for content type\n            <strong style=\"color: #c05621\">{{ contentType || 'Unknown' }}</strong>\n            .\n            <br />\n            Please refer to the\n            <a\n                href=\"https://dev.dotcms.com/docs/block-editor\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                style=\"color: #c05621\">\n                Block Editor Custom Renderers Documentation\n            </a>\n            for guidance.\n        </div>\n    `\n})\nexport class NoComponentProvided {\n    @Input() contentType: string | undefined;\n    protected readonly style = {\n        backgroundColor: '#fffaf0',\n        color: '#333',\n        padding: '1rem',\n        borderRadius: '0.5rem',\n        marginBottom: '1rem',\n        marginTop: '1rem',\n        border: '1px solid #ed8936'\n    };\n}\n\n/**\n * DotContent component that renders content based on content type\n */\n@Component({\n    selector: 'dotcms-block-editor-renderer-contentlet',\n    imports: [NgComponentOutlet, AsyncPipe, NoComponentProvided],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        @if (contentComponent) {\n            <ng-container *ngComponentOutlet=\"contentComponent | async; inputs: { node: node }\" />\n        } @else if (isDevMode) {\n            <dotcms-no-component-provided [contentType]=\"$data()?.contentType\" />\n        }\n    `\n})\nexport class DotContentletBlock {\n    @Input() customRenderers: CustomRenderer | undefined;\n    @Input() node: BlockEditorNode | undefined;\n\n    contentComponent: DynamicComponentEntity | undefined;\n    protected readonly $data = computed(() => this.node?.attrs?.['data']);\n\n    private readonly DOT_CONTENT_NO_DATA_MESSAGE =\n        '[DotCMSBlockEditorRenderer]: No data provided for Contentlet Block. Try to add a contentlet to the block editor. If the error persists, please contact the DotCMS support team.';\n    private readonly DOT_CONTENT_NO_MATCHING_COMPONENT_MESSAGE = (contentType: string) =>\n        `[DotCMSBlockEditorRenderer]: No matching component found for content type: ${contentType}. Provide a custom renderer for this content type to fix this error.`;\n    protected get isDevMode() {\n        return getUVEState()?.mode === UVE_MODE.EDIT;\n    }\n\n    ngOnInit() {\n        if (!this.$data()) {\n            console.error(this.DOT_CONTENT_NO_DATA_MESSAGE);\n\n            return;\n        }\n\n        const contentType = this.$data()?.contentType || '';\n        this.contentComponent = this.customRenderers?.[contentType];\n\n        if (!this.contentComponent) {\n            console.warn(this.DOT_CONTENT_NO_MATCHING_COMPONENT_MESSAGE(contentType));\n        }\n    }\n}\n","import { NgComponentOutlet } from '@angular/common';\nimport { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nimport { BlockEditorNode } from '@dotcms/types';\n\nimport { CustomRenderer } from '../dotcms-block-editor-renderer.component';\nimport { DotCMSBlockEditorItemComponent } from '../item/dotcms-block-editor-item.component';\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-grid-block',\n    imports: [NgComponentOutlet],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    template: `\n        <div\n            data-type=\"gridBlock\"\n            class=\"grid-block\"\n            [style.display]=\"'grid'\"\n            [style.grid-template-columns]=\"'repeat(12, 1fr)'\"\n            [style.gap]=\"'1rem'\">\n            @for (column of node?.content; track $index) {\n                <div\n                    data-type=\"gridColumn\"\n                    class=\"grid-block__column\"\n                    [style.grid-column]=\"'span ' + (columnSpans[$index] ?? 6)\">\n                    <ng-container\n                        *ngComponentOutlet=\"\n                            blockEditorItem;\n                            inputs: { content: column.content, customRenderers: customRenderers }\n                        \" />\n                </div>\n            }\n        </div>\n    `\n})\nexport class DotGridBlock {\n    @Input() node: BlockEditorNode | undefined;\n    @Input() customRenderers: CustomRenderer | undefined;\n\n    blockEditorItem = DotCMSBlockEditorItemComponent;\n\n    get columnSpans(): number[] {\n        const rawCols = Array.isArray(this.node?.attrs?.['columns'])\n            ? this.node.attrs['columns']\n            : [6, 6];\n\n        return rawCols.length === 2 &&\n            rawCols.every((v: unknown) => typeof v === 'number' && Number.isFinite(v))\n            ? rawCols\n            : [6, 6];\n    }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport { BlockEditorNode } from '@dotcms/types';\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-image',\n    imports: [NgTemplateOutlet],\n    template: `\n        <figure [style]=\"$wrapperStyle()\">\n            @if ($href(); as href) {\n                <!-- target/rel are attribute bindings so a null value omits the\n                     attribute instead of rendering the string \"null\". -->\n                <a [href]=\"href\" [attr.target]=\"$target()\" [attr.rel]=\"$rel()\">\n                    <ng-container [ngTemplateOutlet]=\"image\" />\n                </a>\n            } @else {\n                <ng-container [ngTemplateOutlet]=\"image\" />\n            }\n        </figure>\n\n        <ng-template #image>\n            <img [alt]=\"attrs()?.['alt']\" [src]=\"$srcURL()\" />\n        </ng-template>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DotImageBlock {\n    readonly attrs = input<BlockEditorNode['attrs']>();\n\n    protected readonly $srcURL = computed(() => this.attrs()?.['src']);\n\n    /**\n     * Link assigned to the image in the Block Editor, stored as `href` on the\n     * `dotImage` node. `null` when the image has no link, in which case it\n     * renders without an anchor. The truthiness check also covers the\n     * transient `''` the editor writes while unsetting a link.\n     */\n    protected readonly $href = computed(() => this.attrs()?.['href'] || null);\n\n    protected readonly $target = computed(() => this.attrs()?.['target'] || null);\n\n    /** Guards against reverse tabnabbing when the link opens in a new tab. */\n    protected readonly $rel = computed(() =>\n        this.$target() === '_blank' ? 'noopener noreferrer' : null\n    );\n\n    protected readonly $wrapperStyle = computed(() => {\n        const textWrap = this.attrs()?.['textWrap'];\n        const textAlign = this.attrs()?.['textAlign'];\n\n        if (textWrap === 'left') {\n            return { float: 'left', width: '50%', margin: '0 1rem 1rem 0' };\n        } else if (textWrap === 'right') {\n            return { float: 'right', width: '50%', margin: '0 0 1rem 1rem' };\n        } else if (textAlign) {\n            return { 'text-align': textAlign };\n        }\n\n        return {};\n    });\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-bullet-list',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <ul>\n            <ng-content />\n        </ul>\n    `\n})\nexport class DotBulletList {}\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-ordered-list',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <ol>\n            <ng-content />\n        </ol>\n    `\n})\nexport class DotOrdererList {}\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-list-item',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <li>\n            <ng-content />\n        </li>\n    `\n})\nexport class DotListItem {}\n","import { NgComponentOutlet } from '@angular/common';\nimport { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nimport { BlockEditorNode } from '@dotcms/types';\n\nimport { DotCMSBlockEditorItemComponent } from '../item/dotcms-block-editor-item.component';\n@Component({\n    selector: 'dotcms-block-editor-renderer-table',\n    imports: [NgComponentOutlet],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    template: `\n        <table\n            [attr.aria-label]=\"attrs?.['ariaLabel'] || null\"\n            [attr.aria-labelledby]=\"attrs?.['ariaLabelledby'] || null\">\n            @if (attrs?.['caption']) {\n                <caption>{{ attrs?.['caption'] }}</caption>\n            }\n            <tbody>\n                @for (rowNode of content; track $index) {\n                    <tr>\n                        @for (cellNode of rowNode.content; track $index) {\n                            <!--\n                                Cell type — not row index — decides th vs td. Matches the\n                                VTL renderer (storyblock/render.vtl) so headless markup\n                                stays consistent with server-rendered pages.\n                            -->\n                            @if (cellNode.type === 'tableHeader') {\n                                <th\n                                    [attr.colspan]=\"cellNode.attrs?.['colspan'] || 1\"\n                                    [attr.rowspan]=\"cellNode.attrs?.['rowspan'] || 1\"\n                                    [attr.scope]=\"cellNode.attrs?.['scope'] || null\">\n                                    <ng-container\n                                        *ngComponentOutlet=\"\n                                            blockEditorItem;\n                                            inputs: { content: cellNode.content }\n                                        \" />\n                                </th>\n                            } @else {\n                                <td\n                                    [attr.colspan]=\"cellNode.attrs?.['colspan'] || 1\"\n                                    [attr.rowspan]=\"cellNode.attrs?.['rowspan'] || 1\">\n                                    <ng-container\n                                        *ngComponentOutlet=\"\n                                            blockEditorItem;\n                                            inputs: { content: cellNode.content }\n                                        \" />\n                                </td>\n                            }\n                        }\n                    </tr>\n                }\n            </tbody>\n        </table>\n    `\n})\nexport class DotTableBlock {\n    @Input() content: BlockEditorNode[] | undefined;\n    /**\n     * Table-node attributes (`caption`, `ariaLabel`, `ariaLabelledby`). Optional for\n     * back-compat with older payloads that don't carry these.\n     */\n    @Input() attrs: BlockEditorNode['attrs'];\n    blockEditorItem = DotCMSBlockEditorItemComponent;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, Input } from '@angular/core';\n\nimport { BlockEditorMark } from '@dotcms/types';\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-paragraph',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <p>\n            <ng-content />\n        </p>\n    `\n})\nexport class DotParagraphBlock {}\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-heading',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [NgTemplateOutlet],\n    template: `\n        @switch ($normalizedLevel()) {\n            @case ('1') {\n                <h1>\n                    <ng-container *ngTemplateOutlet=\"content\" />\n                </h1>\n            }\n            @case ('2') {\n                <h2>\n                    <ng-container *ngTemplateOutlet=\"content\" />\n                </h2>\n            }\n            @case ('3') {\n                <h3>\n                    <ng-container *ngTemplateOutlet=\"content\" />\n                </h3>\n            }\n            @case ('4') {\n                <h4>\n                    <ng-container *ngTemplateOutlet=\"content\" />\n                </h4>\n            }\n            @case ('5') {\n                <h5>\n                    <ng-container *ngTemplateOutlet=\"content\" />\n                </h5>\n            }\n            @case ('6') {\n                <h6>\n                    <ng-container *ngTemplateOutlet=\"content\" />\n                </h6>\n            }\n            @default {\n                <h1>\n                    <ng-container *ngTemplateOutlet=\"content\" />\n                </h1>\n            }\n        }\n\n        <ng-template #content>\n            <ng-content />\n        </ng-template>\n    `\n})\nexport class DotHeadingBlock {\n    level = input.required<number | string>();\n\n    $normalizedLevel = computed(() => {\n        return this.level() != null && typeof this.level() === 'number'\n            ? String(this.level())\n            : (this.level() ?? '1');\n    });\n}\n\ninterface TextBlockProps {\n    marks?: BlockEditorMark[];\n    text?: string;\n}\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-text',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        @switch (marks?.[0]?.type) {\n            @case ('link') {\n                <a\n                    [attr.href]=\"$currentAttrs()['href'] || ''\"\n                    [attr.target]=\"$currentAttrs()['target'] || ''\"\n                    [attr.title]=\"$currentAttrs()['title'] || null\"\n                    [attr.aria-label]=\"$currentAttrs()['aria-label'] || null\"\n                    [attr.rel]=\"$currentAttrs()['rel'] || null\">\n                    <dotcms-block-editor-renderer-text [marks]=\"$remainingMarks()\" [text]=\"text\" />\n                </a>\n            }\n            @case ('bold') {\n                <strong>\n                    <dotcms-block-editor-renderer-text [marks]=\"$remainingMarks()\" [text]=\"text\" />\n                </strong>\n            }\n            @case ('underline') {\n                <u>\n                    <dotcms-block-editor-renderer-text [marks]=\"$remainingMarks()\" [text]=\"text\" />\n                </u>\n            }\n            @case ('italic') {\n                <em>\n                    <dotcms-block-editor-renderer-text [marks]=\"$remainingMarks()\" [text]=\"text\" />\n                </em>\n            }\n            @case ('strike') {\n                <s>\n                    <dotcms-block-editor-renderer-text [marks]=\"$remainingMarks()\" [text]=\"text\" />\n                </s>\n            }\n            @case ('superscript') {\n                <sup>\n                    <dotcms-block-editor-renderer-text [marks]=\"$remainingMarks()\" [text]=\"text\" />\n                </sup>\n            }\n            @case ('subscript') {\n                <sub>\n                    <dotcms-block-editor-renderer-text [marks]=\"$remainingMarks()\" [text]=\"text\" />\n                </sub>\n            }\n            @default {\n                {{ text }}\n            }\n        }\n    `\n})\nexport class DotTextBlock {\n    @Input() marks: TextBlockProps['marks'] = [];\n    @Input() text = '';\n\n    protected readonly $remainingMarks = computed(() => this.marks?.slice(1));\n\n    protected readonly $currentAttrs = computed(() => {\n        const attrs = { ...(this.marks?.[0]?.attrs || {}) };\n\n        if (attrs['class']) {\n            attrs['className'] = attrs['class'];\n            delete attrs['class'];\n        }\n\n        return attrs;\n    });\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nimport { BlockEditorNode, UVE_MODE } from '@dotcms/types';\nimport { getUVEState } from '@dotcms/uve';\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-unknown',\n    changeDetection: ChangeDetectionStrategy.Eager,\n    template: `\n        @if (isEditMode) {\n            <div [style]=\"style\" data-testid=\"unknown-block-type\">\n                <strong style=\"color: #c53030\">Warning:</strong>\n                The block type\n                <strong>{{ node.type }}</strong>\n                is not recognized. Please check your\n                <a\n                    href=\"https://dev.dotcms.com/docs/block-editor\"\n                    target=\"_blank\"\n                    rel=\"noopener noreferrer\">\n                    configuration\n                </a>\n                or contact support for assistance.\n            </div>\n        }\n    `\n})\nexport class DotUnknownBlockComponent {\n    @Input() node!: BlockEditorNode;\n\n    get isEditMode() {\n        return getUVEState()?.mode === UVE_MODE.EDIT;\n    }\n\n    protected readonly style = {\n        backgroundColor: '#fff5f5',\n        color: '#333',\n        padding: '1rem',\n        borderRadius: '0.5rem',\n        marginBottom: '1rem',\n        marginTop: '1rem',\n        border: '1px solid #fc8181'\n    };\n}\n","import { ChangeDetectionStrategy, Component, computed, Input } from '@angular/core';\n\nimport { BlockEditorNode } from '@dotcms/types';\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-video',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <video\n            [controls]=\"true\"\n            preload=\"metadata\"\n            [poster]=\"this.$posterURL()\"\n            [width]=\"attrs?.['width']\"\n            [height]=\"attrs?.['height']\">\n            <track default kind=\"captions\" srclang=\"en\" />\n            <source [src]=\"this.$srcURL()\" [type]=\"attrs?.['mimeType']\" />\n            Your browser does not support the\n            <code>video</code>\n            element.\n        </video>\n    `\n})\nexport class DotVideoBlock {\n    @Input() attrs!: BlockEditorNode['attrs'];\n\n    protected readonly $srcURL = computed(() => this.attrs?.['src']);\n\n    protected readonly $posterURL = computed(() => this.attrs?.['data']?.['thumbnail']);\n}\n","import { AsyncPipe, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\nimport { BlockEditorNode } from '@dotcms/types';\nimport { BlockEditorDefaultBlocks } from '@dotcms/types/internal';\n\nimport { DotAudioBlock } from '../blocks/audio.component';\nimport { DotCodeBlock, DotBlockQuote } from '../blocks/code.component';\nimport { DotContentletBlock } from '../blocks/dot-contentlet.component';\nimport { DotGridBlock } from '../blocks/grid-block.component';\nimport { DotImageBlock } from '../blocks/image.component';\nimport { DotBulletList, DotOrdererList, DotListItem } from '../blocks/list.component';\nimport { DotTableBlock } from '../blocks/table.component';\nimport { DotParagraphBlock, DotTextBlock, DotHeadingBlock } from '../blocks/text.component';\nimport { DotUnknownBlockComponent } from '../blocks/unknown.component';\nimport { DotVideoBlock } from '../blocks/video.component';\nimport { CustomRenderer } from '../dotcms-block-editor-renderer.component';\n\n@Component({\n    selector: 'dotcms-block-editor-renderer-block',\n    templateUrl: './dotcms-block-editor-item.component.html',\n    styleUrls: ['./dotcms-block-editor-item.component.scss'],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [\n        NgTemplateOutlet,\n        NgComponentOutlet,\n        AsyncPipe,\n        DotParagraphBlock,\n        DotTextBlock,\n        DotHeadingBlock,\n        DotBulletList,\n        DotOrdererList,\n        DotListItem,\n        DotCodeBlock,\n        DotBlockQuote,\n        DotImageBlock,\n        DotVideoBlock,\n        DotAudioBlock,\n        DotTableBlock,\n        DotGridBlock,\n        DotContentletBlock,\n        DotUnknownBlockComponent\n    ]\n})\nexport class DotCMSBlockEditorItemComponent {\n    @Input() content: BlockEditorNode[] | undefined;\n    @Input() customRenderers: CustomRenderer | undefined;\n\n    BLOCKS = BlockEditorDefaultBlocks;\n}\n","@for (node of content; track node) {\n    @if (customRenderers?.[node.type]) {\n        <ng-container\n            *ngTemplateOutlet=\"\n                customRender;\n                context: { customRender: customRenderers?.[node.type], node: node }\n            \" />\n    } @else {\n        @switch (node.type) {\n            @case (BLOCKS.PARAGRAPH) {\n                <dotcms-block-editor-renderer-paragraph [style]=\"node.attrs\">\n                    <dotcms-block-editor-renderer-block\n                        [content]=\"node.content\"\n                        [customRenderers]=\"customRenderers\" />\n                </dotcms-block-editor-renderer-paragraph>\n            }\n\n            @case (BLOCKS.TEXT) {\n                <dotcms-block-editor-renderer-text [marks]=\"node.marks\" [text]=\"node.text || ''\" />\n            }\n\n            @case (BLOCKS.HEADING) {\n                <dotcms-block-editor-renderer-heading\n                    [style]=\"node.attrs || {}\"\n                    [level]=\"node.attrs?.['level'] || '1'\">\n                    <dotcms-block-editor-renderer-block\n                        [content]=\"node.content\"\n                        [customRenderers]=\"customRenderers\" />\n                </dotcms-block-editor-renderer-heading>\n            }\n\n            @case (BLOCKS.BULLET_LIST) {\n                <dotcms-block-editor-renderer-bullet-list>\n                    <dotcms-block-editor-renderer-block\n                        [content]=\"node.content\"\n                        [customRenderers]=\"customRenderers\" />\n                </dotcms-block-editor-renderer-bullet-list>\n            }\n\n            @case (BLOCKS.ORDERED_LIST) {\n                <dotcms-block-editor-renderer-ordered-list>\n                    <dotcms-block-editor-renderer-block\n                        [content]=\"node.content\"\n                        [customRenderers]=\"customRenderers\" />\n                </dotcms-block-editor-renderer-ordered-list>\n            }\n\n            @case (BLOCKS.LIST_ITEM) {\n                <dotcms-block-editor-renderer-list-item>\n                    <dotcms-block-editor-renderer-block\n                        [content]=\"node.content\"\n                        [customRenderers]=\"customRenderers\" />\n                </dotcms-block-editor-renderer-list-item>\n            }\n\n            @case (BLOCKS.BLOCK_QUOTE) {\n                <dotcms-block-editor-renderer-block-quote>\n                    <dotcms-block-editor-renderer-block\n                        [content]=\"node.content\"\n                        [customRenderers]=\"customRenderers\" />\n                </dotcms-block-editor-renderer-block-quote>\n            }\n\n            @case (BLOCKS.CODE_BLOCK) {\n                <dotcms-block-editor-renderer-code-block>\n                    <dotcms-block-editor-renderer-block\n                        [content]=\"node.content\"\n                        [customRenderers]=\"customRenderers\" />\n                </dotcms-block-editor-renderer-code-block>\n            }\n\n            @case (BLOCKS.HARDBREAK) {\n                <br />\n            }\n\n            @case (BLOCKS.HORIZONTAL_RULE) {\n                <hr />\n            }\n\n            @case (BLOCKS.DOT_IMAGE) {\n                <dotcms-block-editor-renderer-image [attrs]=\"node.attrs || {}\" />\n            }\n\n            @case (BLOCKS.DOT_VIDEO) {\n                <dotcms-block-editor-renderer-video [attrs]=\"node.attrs || {}\" />\n            }\n\n            @case (BLOCKS.DOT_AUDIO) {\n                <dotcms-block-editor-renderer-audio [attrs]=\"node.attrs || {}\" />\n            }\n\n            @case (BLOCKS.TABLE) {\n                <dotcms-block-editor-renderer-table [content]=\"node.content\" [attrs]=\"node.attrs\" />\n            }\n\n            @case (BLOCKS.GRID_BLOCK) {\n                <dotcms-block-editor-renderer-grid-block\n                    [node]=\"node\"\n                    [customRenderers]=\"customRenderers\" />\n            }\n\n            @case (BLOCKS.DOT_CONTENT) {\n                <dotcms-block-editor-renderer-contentlet\n                    [node]=\"node\"\n                    [customRenderers]=\"customRenderers\" />\n            }\n\n            @default {\n                <dotcms-block-editor-renderer-unknown [node]=\"node\" />\n            }\n        }\n    }\n}\n\n<ng-template #customRender let-customRender=\"customRender\" let-node=\"node\">\n    <ng-container *ngComponentOutlet=\"customRender | async; inputs: { node: node }\" />\n</ng-template>\n","import { Component, Input, signal, ChangeDetectionStrategy } from '@angular/core';\n\nimport { UVE_MODE, BlockEditorNode } from '@dotcms/types';\nimport { BlockEditorState } from '@dotcms/types/internal';\nimport { getUVEState } from '@dotcms/uve';\nimport { isValidBlocks } from '@dotcms/uve/internal';\n\nimport { DotCMSBlockEditorItemComponent } from './item/dotcms-block-editor-item.component';\n\nimport { DynamicComponentEntity } from '../../models';\n\n/**\n * Represents a Custom Renderer used by the Block Editor Component\n *\n * @export\n * @interface CustomRenderer\n */\nexport type CustomRenderer = Record<string, DynamicComponentEntity>;\n\n/**\n * A component that renders content from DotCMS's Block Editor field.\n *\n * This component provides an easy way to render Block Editor content in your Angular applications.\n * It handles the rendering of standard blocks and allows customization through custom renderers.\n *\n * For more information about Block Editor, see {@link https://dev.dotcms.com/docs/block-editor}\n *\n * @example\n * ```html\n * <dotcms-block-editor-renderer\n *   [blocks]=\"myBlockEditorContent\"\n *   [customRenderers]=\"myCustomRenderers\">\n * </dotcms-block-editor-renderer>\n * ```\n *\n * @deprecated Use {@link DotCMSBlockEditorRendererNativeComponent}\n * (`<dotcms-block-editor-renderer-native>`) for accessible, semantic DOM output.\n * This component wraps every semantic tag in a custom element (e.g. a dispatcher\n * element sits between `<ul>` and its `<li>` children), which breaks the\n * `list → listitem` relationship required by the HTML spec and assistive technology.\n * The native renderer keeps the identical public input API — migration is just\n * swapping the tag and import. This component is retained for backward compatibility\n * and will be removed in a future major version.\n */\n@Component({\n    selector: 'dotcms-block-editor-renderer',\n    templateUrl: './dotcms-block-editor-renderer.component.html',\n    styleUrls: ['./dotcms-block-editor-renderer.component.scss'],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    imports: [DotCMSBlockEditorItemComponent]\n})\nexport class DotCMSBlockEditorRendererComponent {\n    @Input() blocks!: BlockEditorNode;\n    @Input() customRenderers: CustomRenderer | undefined;\n    @Input() class: string | undefined;\n    @Input() style: string | Record<string, string> | undefined;\n\n    $blockEditorState = signal<BlockEditorState>({ error: null });\n    $isInEditMode = signal(getUVEState()?.mode === UVE_MODE.EDIT);\n\n    ngOnInit() {\n        const state = isValidBlocks(this.blocks);\n\n        if (state.error) {\n            console.error('Error in dotcms-block-editor-renderer: ', state.error);\n        }\n\n        this.$blockEditorState.set(isValidBlocks(this.blocks));\n    }\n}\n","@if ($blockEditorState().error && $isInEditMode()) {\n    <div data-testid=\"invalid-blocks-message\">\n        {{ $blockEditorState().error }}\n    </div>\n} @else if (!$blockEditorState().error) {\n    <div [class]=\"class\" [style]=\"style\">\n        <dotcms-block-editor-renderer-block\n            [content]=\"blocks.content\"\n            [customRenderers]=\"customRenderers\" />\n    </div>\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * Internal semantic block components for the accessible Block Editor renderer.\n *\n * Each component uses an **attribute selector** so the host element *is* the real\n * semantic tag (`<ul>`, `<ol>`, `<li>`, ...). The template is just `<ng-content />`,\n * so no extra wrapper element is added to the DOM and the\n * `list → listitem` relationship required by the HTML spec and assistive\n * technology is preserved.\n *\n * These are not exported from the SDK; they are an implementation detail of\n * {@link DotCMSBlockEditorRendererNativeComponent}.\n *\n * @internal\n */\n@Component({\n    selector: 'ul[dotBulletList]',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <ng-content />\n    `\n})\nexport class DotSemanticBulletList {}\n\n@Component({\n    selector: 'ol[dotOrderedList]',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <ng-content />\n    `\n})\nexport class DotSemanticOrderedList {}\n\n@Component({\n    selector: 'li[dotListItem]',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <ng-content />\n    `\n})\nexport class DotSemanticListItem {}\n\n@Component({\n    selector: 'p[dotParagraph]',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <ng-content />\n    `\n})\nexport class DotSemanticParagraph {}\n\n@Component({\n    selector: 'blockquote[dotBlockQuote]',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <ng-content />\n    `\n})\nexport class DotSemanticBlockQuote {}\n\n@Component({\n    selector: 'pre[dotCodeBlock]',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `\n        <code><ng-content /></code>\n    `\n})\nexport class DotSemanticCodeBlock {}\n","import { AsyncPipe, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, OnInit, signal } from '@angular/core';\n\nimport { UVE_MODE, BlockEditorNode, BlockEditorMark } from '@dotcms/types';\nimport { BlockEditorState, BlockEditorDefaultBlocks } from '@dotcms/types/internal';\nimport { getUVEState } from '@dotcms/uve';\nimport { isValidBlocks } from '@dotcms/uve/internal';\n\nimport {\n    DotSemanticBlockQuote,\n    DotSemanticBulletList,\n    DotSemanticCodeBlock,\n    DotSemanticListItem,\n    DotSemanticOrderedList,\n    DotSemanticParagraph\n} from './blocks/semantic-blocks.component';\n\nimport { DotContentletBlock } from '../dotcms-block-editor-renderer/blocks/dot-contentlet.component';\nimport { DotUnknownBlockComponent } from '../dotcms-block-editor-renderer/blocks/unknown.component';\nimport { CustomRenderer } from '../dotcms-block-editor-renderer/dotcms-block-editor-renderer.component';\n\n/**\n * An accessible component that renders content from DotCMS's Block Editor field.\n *\n * This is the semantic-DOM successor to {@link DotCMSBlockEditorRendererComponent}.\n * It emits clean semantic HTML — `<ul><li><p>…</p></li></ul>` — with no custom\n * wrapper elements between semantic tags, so the `list → listitem` relationship\n * required by the HTML spec and assistive technology is preserved. The recursive\n * dispatch is performed with `ng-template` outlets, whose host `<ng-container>`s\n * render as HTML comment nodes (invisible to the accessibility tree).\n *\n * It exposes the **identical public input API** and the same `customRenderers`\n * contract as the deprecated renderer, so migration is just swapping the tag and\n * import.\n *\n * For more information about Block Editor, see {@link https://dev.dotcms.com/docs/block-editor}\n *\n * @example\n * ```html\n * <dotcms-block-editor-renderer-native\n *   [blocks]=\"myBlockEditorContent\"\n *   [customRenderers]=\"myCustomRenderers\">\n * </dotcms-block-editor-renderer-native>\n * ```\n */\n@Component({\n    selector: 'dotcms-block-editor-renderer-native',\n    templateUrl: './dotcms-block-editor-renderer-native.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        NgTemplateOutlet,\n        NgComponentOutlet,\n        AsyncPipe,\n        DotSemanticParagraph,\n        DotSemanticBulletList,\n        DotSemanticOrderedList,\n        DotSemanticListItem,\n        DotSemanticBlockQuote,\n        DotSemanticCodeBlock,\n        DotContentletBlock,\n        DotUnknownBlockComponent\n    ]\n})\nexport class DotCMSBlockEditorRendererNativeComponent implements OnInit {\n    /** The Block Editor `doc` node to render. */\n    readonly blocks = input<BlockEditorNode>();\n    /** Map of `node.type` → component to override the built-in render path. */\n    readonly customRenderers = input<CustomRenderer | undefined>(undefined);\n    /**\n     * CSS class on the wrapper element. Aliased as `class` so consumers can\n     * pass `[class]=\"…\"` like a normal Angular class binding.\n     */\n    readonly cssClass = input<string | undefined>(undefined, { alias: 'class' });\n    /** Inline style on the wrapper element. */\n    readonly style = input<string | Record<string, string> | undefined>(undefined);\n\n    $blockEditorState = signal<BlockEditorState>({ error: null });\n    $isInEditMode = signal(getUVEState()?.mode === UVE_MODE.EDIT);\n\n    protected readonly BLOCKS = BlockEditorDefaultBlocks;\n\n    ngOnInit() {\n        // `isValidBlocks` declares `blocks: BlockEditorNode` but its first guard\n        // handles `undefined` — the cast lines up the types without changing the\n        // published `@dotcms/uve` signature.\n        const state = isValidBlocks(this.blocks() as BlockEditorNode);\n\n        if (state.error) {\n            console.error('Error in dotcms-block-editor-renderer-native: ', state.error);\n        }\n\n        this.$blockEditorState.set(state);\n    }\n\n    /**\n     * Normalizes a heading `level` attribute (which may be a number such as `6`\n     * or a string such as `'6'`) to a string for use in the heading `@switch`.\n     * Returns `''` for missing or out-of-range levels so the template falls\n     * through to the safe `@default` case (`<h2>`).\n     */\n    asLevel(level: number | string | undefined): string {\n        const normalized = level != null ? String(level) : '';\n        return /^[1-6]$/.test(normalized) ? normalized : '';\n    }\n\n    /** The marks after the current (outermost) one — used to recurse inward. */\n    restMarks(marks: BlockEditorMark[] | undefined): BlockEditorMark[] {\n        return marks?.slice(1) ?? [];\n    }\n\n    /** The attributes of the current (outermost) mark. */\n    markAttrs(marks: BlockEditorMark[] | undefined): Record<string, string> {\n        return marks?.[0]?.attrs ?? {};\n    }\n\n    /**\n     * Wrapper style for a `dotImage` `<figure>`, derived from the node's\n     * `textWrap` (float left/right) or `textAlign` attribute.\n     */\n    imageStyle(attrs: BlockEditorNode['attrs']): Record<string, string> {\n        const textWrap = attrs?.['textWrap'];\n        const textAlign = attrs?.['textAlign'];\n\n        if (textWrap === 'left') {\n            return { float: 'left', width: '50%', margin: '0 1rem 1rem 0' };\n        }\n        if (textWrap === 'right') {\n            return { float: 'right', width: '50%', margin: '0 0 1rem 1rem' };\n        }\n        if (textAlign) {\n            return { 'text-align': textAlign };\n        }\n\n        return {};\n    }\n\n    /**\n     * The link assigned to a `dotImage` in the Block Editor, stored as\n     * `href`/`target` on the node. Returns `null` when the image has no link,\n     * i.e. when `href` is `null`. The truthiness check also covers the\n     * transient `''` the editor writes while unsetting a link.\n     *\n     * `rel` guards against reverse tabnabbing when the link opens in a new tab.\n     */\n    imageLink(\n        attrs: BlockEditorNode['attrs']\n    ): { href: string; target: string | null; rel: string | null } | null {\n        const href = attrs?.['href'];\n\n        if (!href) {\n            return null;\n        }\n\n        const target = attrs?.['target'] || null;\n\n        return { href, target, rel: target === '_blank' ? 'noopener noreferrer' : null };\n    }\n\n    /** Poster URL for a `dotVideo` `<video>` (from `attrs.data.thumbnail`). */\n    videoPoster(attrs: BlockEditorNode['attrs']): string | undefined {\n        return attrs?.['data']?.['thumbnail'];\n    }\n\n    /**\n     * The column span (1–12) for a grid column. Falls back to `6` for malformed\n     * `columns` attrs or for an out-of-range column index, matching the legacy\n     * renderer.\n     */\n    columnSpan(attrs: BlockEditorNode['attrs'], index: number): number {\n        const rawCols = Array.isArray(attrs?.['columns']) ? attrs['columns'] : [6, 6];\n        const valid =\n            rawCols.length === 2 &&\n            rawCols.every((v: unknown) => typeof v === 'number' && Number.isFinite(v));\n        const span = valid ? rawCols[index] : 6;\n        return typeof span === 'number' ? span : 6;\n    }\n}\n","@if ($blockEditorState().error && $isInEditMode()) {\n    <div data-testid=\"invalid-blocks-message\">\n        {{ $blockEditorState().error }}\n    </div>\n} @else if (!$blockEditorState().error) {\n    <div [class]=\"cssClass()\" [style]=\"style()\">\n        <ng-container *ngTemplateOutlet=\"nodeList; context: { $implicit: blocks()?.content }\" />\n    </div>\n}\n\n<!-- Renders a list of nodes by dispatching each one. -->\n<ng-template #nodeList let-content>\n    @for (node of content; track node) {\n        <ng-container *ngTemplateOutlet=\"dispatch; context: { $implicit: node }\" />\n    }\n</ng-template>\n\n<!--\n    Dispatches a single node to its semantic tag. The host ng-container of each\n    ngTemplateOutlet renders as an HTML comment node, so a list item stays a true\n    DOM child of its list element — the property that makes this AT-proof.\n-->\n<ng-template #dispatch let-node>\n    @if (customRenderers()?.[node.type]) {\n        <ng-container\n            *ngTemplateOutlet=\"\n                customRender;\n                context: { customRender: customRenderers()?.[node.type], node: node }\n            \" />\n    } @else {\n        @switch (node.type) {\n            @case (BLOCKS.PARAGRAPH) {\n                <p dotParagraph [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n                    <ng-container\n                        *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n                </p>\n            }\n\n            @case (BLOCKS.TEXT) {\n                <ng-container\n                    *ngTemplateOutlet=\"\n                        textRun;\n                        context: { marks: node.marks, text: node.text || '' }\n                    \" />\n            }\n\n            @case (BLOCKS.HEADING) {\n                @switch (asLevel(node.attrs?.['level'])) {\n                    @case ('1') {\n                        <h1 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n                            <ng-container\n                                *ngTemplateOutlet=\"\n                                    nodeList;\n                                    context: { $implicit: node.content }\n                                \" />\n                        </h1>\n                    }\n                    @case ('2') {\n                        <h2 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n                            <ng-container\n                                *ngTemplateOutlet=\"\n                                    nodeList;\n                                    context: { $implicit: node.content }\n                                \" />\n                        </h2>\n                    }\n                    @case ('3') {\n                        <h3 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n                            <ng-container\n                                *ngTemplateOutlet=\"\n                                    nodeList;\n                                    context: { $implicit: node.content }\n                                \" />\n                        </h3>\n                    }\n                    @case ('4') {\n                        <h4 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n                            <ng-container\n                                *ngTemplateOutlet=\"\n                                    nodeList;\n                                    context: { $implicit: node.content }\n                                \" />\n                        </h4>\n                    }\n                    @case ('5') {\n                        <h5 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n                            <ng-container\n                                *ngTemplateOutlet=\"\n                                    nodeList;\n                                    context: { $implicit: node.content }\n                                \" />\n                        </h5>\n                    }\n                    @case ('6') {\n                        <h6 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n                            <ng-container\n                                *ngTemplateOutlet=\"\n                                    nodeList;\n                                    context: { $implicit: node.content }\n                                \" />\n                        </h6>\n                    }\n                    @default {\n                        <!--\n                            Unknown level: fall back to <h2>, not <h1>. An\n                            unexpected <h1> in an article tanks the heading\n                            outline that assistive technology relies on, and\n                            articles typically already have a page <h1>.\n                        -->\n                        <h2 [style.text-align]=\"node.attrs?.['textAlign'] || null\">\n                            <ng-container\n                                *ngTemplateOutlet=\"\n                                    nodeList;\n                                    context: { $implicit: node.content }\n                                \" />\n                        </h2>\n                    }\n                }\n            }\n\n            @case (BLOCKS.BULLET_LIST) {\n                <ul dotBulletList>\n                    <ng-container\n                        *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n                </ul>\n            }\n\n            @case (BLOCKS.ORDERED_LIST) {\n                <ol dotOrderedList>\n                    <ng-container\n                        *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n                </ol>\n            }\n\n            @case (BLOCKS.LIST_ITEM) {\n                <li dotListItem>\n                    <ng-container\n                        *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n                </li>\n            }\n\n            @case (BLOCKS.BLOCK_QUOTE) {\n                <blockquote dotBlockQuote>\n                    <ng-container\n                        *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" />\n                </blockquote>\n            }\n\n            @case (BLOCKS.CODE_BLOCK) {\n                <pre dotCodeBlock>\n                    <ng-container\n                        *ngTemplateOutlet=\"nodeList; context: { $implicit: node.content }\" /></pre>\n            }\n\n            @case (BLOCKS.HARDBREAK) {\n                <br />\n            }\n\n            @case (BLOCKS.HORIZONTAL_RULE) {\n                <hr />\n            }\n\n            @case (BLOCKS.DOT_IMAGE) {\n                <figure [style]=\"imageStyle(node.attrs)\">\n                    @if (imageLink(node.attrs); as link) {\n                        <!-- target/rel are attribute bindings so a null value omits the\n                             attribute instead of rendering the string \"null\". -->\n                        <a [href]=\"link.href\" [attr.target]=\"link.target\" [attr.rel]=\"link.rel\">\n                            <ng-container *ngTemplateOutlet=\"dotImageEl\" />\n                        </a>\n                    } @else {\n                        <ng-container *ngTemplateOutlet=\"dotImageEl\" />\n                    }\n                </figure>\n\n                <ng-template #dotImageEl>\n                    <img\n                        [alt]=\"node.attrs?.['alt']\"\n                        [src]=\"node.attrs?.['src']\"\n                        style=\"max-width: 100%; height: auto\" />\n                </ng-template>\n            }\n\n            @case (BLOCKS.DOT_VIDEO) {\n                <video\n                    [controls]=\"true\"\n                    preload=\"metadata\"\n                    [poster]=\"videoPoster(node.attrs)\"\n                    [width]=\"node.attrs?.['width']\"\n                    [height]=\"node.attrs?.['height']\">\n                    <track default kind=\"captions\" srclang=\"en\" />\n                    <source [src]=\"node.attrs?.['src']\" [type]=\"node.attrs?.['mimeType']\" />\n                    Your browser does not support the\n                    <code>video</code>\n                    element.\n                </video>\n            }\n\n            @case (BLOCKS.DOT_AUDIO) {\n                <audio [controls]=\"true\" preload=\"metadata\">\n                    <source [src]=\"node.attrs?.['src']\" [type]=\"node.attrs?.['mimeType']\" />\n                    Your browser does not support the\n                    <code>audio</code>\n                    element.\n                </audio>\n            }\n\n            @case (BLOCKS.TABLE) {\n                <table>\n                    <thead>\n                        @for (rowNode of node.content?.slice(0, 1); track $index) {\n                            <tr>\n                                @for (cellNode of rowNode.content; track $index) {\n                                    <th\n                                        [attr.colspan]=\"cellNode.attrs?.['colspan'] || 1\"\n                                        [attr.rowspan]=\"cellNode.attrs?.['rowspan'] || 1\">\n                                        <ng-container\n                                            *ngTemplateOutlet=\"\n                                                nodeList;\n                                                context: { $implicit: cellNode.content }\n                                            \" />\n                                    </th>\n                                }\n                            </tr>\n                        }\n                    </thead>\n                    <tbody>\n                        @for (rowNode of node.content?.slice(1); track $index) {\n                            <tr>\n                                @for (cellNode of rowNode.content; track $index) {\n                                    <td\n                                        [attr.colspan]=\"cellNode.attrs?.['colspan'] || 1\"\n                                        [attr.rowspan]=\"cellNode.attrs?.['rowspan'] || 1\">\n                                        <ng-container\n                                            *ngTemplateOutlet=\"\n                                                nodeList;\n                                                context: { $implicit: cellNode.content }\n                                            \" />\n                                    </td>\n                                }\n                            </tr>\n                        }\n                    </tbody>\n                </table>\n            }\n\n            @case (BLOCKS.GRID_BLOCK) {\n                <div\n                    data-type=\"gridBlock\"\n                    class=\"grid-block\"\n                    style=\"display: grid; grid-template-columns: repeat(12, 1fr); gap: 1rem\">\n                    @for (column of node.content; track $index) {\n                        <div\n                            data-type=\"gridColumn\"\n                            class=\"grid-block__column\"\n                            [style.grid-column]=\"'span ' + columnSpan(node.attrs, $index)\">\n                            <ng-container\n                                *ngTemplateOutlet=\"\n                                    nodeList;\n                                    context: { $implicit: column.content }\n                                \" />\n                        </div>\n                    }\n                </div>\n            }\n\n            @case (BLOCKS.DOT_CONTENT) {\n                <dotcms-block-editor-renderer-contentlet\n                    [node]=\"node\"\n                    [customRenderers]=\"customRenderers()\" />\n            }\n\n            @default {\n                <dotcms-block-editor-renderer-unknown [node]=\"node\" />\n            }\n        }\n    }\n</ng-template>\n\n<ng-template #customRender let-customRender=\"customRender\" let-node=\"node\">\n    <ng-container *ngComponentOutlet=\"customRender | async; inputs: { node: node }\" />\n</ng-template>\n\n<!--\n    Renders a text node and its marks as native inline elements (<strong>, <u>,\n    <em>, <a>, ...) with no wrapper element. Recurses through itself (rendered as a\n    comment node) one mark at a time, so stacked marks nest directly:\n    <u><strong>text</strong></u>.\n-->\n<ng-template #textRun let-marks=\"marks\" let-text=\"text\">\n    @switch (marks?.[0]?.type) {\n        @case ('link') {\n            @if (markAttrs(marks)['href']) {\n                <a\n                    [attr.href]=\"markAttrs(marks)['href']\"\n                    [attr.target]=\"markAttrs(marks)['target'] || null\"\n                    [attr.title]=\"markAttrs(marks)['title'] || null\"\n                    [attr.aria-label]=\"markAttrs(marks)['aria-label'] || null\"\n                    [attr.rel]=\"\n                        markAttrs(marks)['rel'] ||\n                        (markAttrs(marks)['target'] === '_blank' ? 'noopener noreferrer' : null)\n                    \"\n                    [class]=\"markAttrs(marks)['class'] || null\">\n                    <ng-container\n                        *ngTemplateOutlet=\"\n                            textRun;\n                            context: { marks: restMarks(marks), text: text }\n                        \" />\n                </a>\n            } @else {\n                <!--\n                    Malformed link mark with no href: a hrefless <a> isn't a\n                    link to assistive tech (no role, not focusable). Skip the\n                    element and recurse — any remaining marks (bold, etc.)\n                    still render around the text.\n                -->\n                <ng-container\n                    *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n            }\n        }\n        @case ('bold') {\n            <strong>\n                <ng-container\n                    *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n            </strong>\n        }\n        @case ('underline') {\n            <u>\n                <ng-container\n                    *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n            </u>\n        }\n        @case ('italic') {\n            <em>\n                <ng-container\n                    *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n            </em>\n        }\n        @case ('strike') {\n            <s>\n                <ng-container\n                    *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n            </s>\n        }\n        @case ('superscript') {\n            <sup>\n                <ng-container\n                    *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n            </sup>\n        }\n        @case ('subscript') {\n            <sub>\n                <ng-container\n                    *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n            </sub>\n        }\n        @default {\n            @if (marks?.length) {\n                <!-- Unknown mark type: skip it but keep rendering any marks beneath. -->\n                <ng-container\n                    *ngTemplateOutlet=\"textRun; context: { marks: restMarks(marks), text: text }\" />\n            } @else {\n                <ng-container>{{ text }}</ng-container>\n            }\n        }\n    }\n</ng-template>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n/**\n * @description This component is used to display a message when a page is missing the required `layout.body` property.\n * @internal\n * @class PageErrorMessageComponent\n */\n@Component({\n    selector: 'dotcms-page-error-message',\n    imports: [],\n    template: `\n        <div\n            data-testid=\"error-message\"\n            style=\"padding: 1rem; border: 1px solid #e0e0e0; border-radius: 4px;\">\n            <p style=\"margin: 0 0 0.5rem; color: #666;\">\n                The\n                <code>page</code>\n                is missing the required\n                <code>layout.body</code>\n                property.\n            </p>\n            <p style=\"margin: 0; color: #666;\">\n                Make sure the page asset is properly loaded and includes a layout configuration.\n            </p>\n        </div>\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PageErrorMessageComponent implements OnInit {\n    ngOnInit() {\n        console.warn('Missing required layout.body property in page');\n    }\n}\n","import { fromEvent, map } from 'rxjs';\n\nimport { computed, Injectable, Signal, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { DotCMSPageAsset, UVE_MODE } from '@dotcms/types';\nimport { getUVEState } from '@dotcms/uve';\nimport {\n    ANALYTICS_READY_EVENT,\n    DEVELOPMENT_MODE,\n    isDotAnalyticsActive,\n    PRODUCTION_MODE\n} from '@dotcms/uve/internal';\n\nimport { DotCMSPageStore } from '../models';\n\nexport const EMPTY_DOTCMS_PAGE_STORE: DotCMSPageStore = {\n    page: {} as DotCMSPageAsset,\n    components: {},\n    mode: PRODUCTION_MODE\n};\n\n/**\n * @description This service is responsible for managing the page context.\n * @internal\n * @author dotCMS\n * @export\n * @class DotCMSStore\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class DotCMSStore {\n    private $store = signal<DotCMSPageStore>(EMPTY_DOTCMS_PAGE_STORE);\n\n    /**\n     * @description Get whether DotCMS Analytics is active on the page. Used in\n     * live mode to decide if the minimal contentlet attributes Analytics needs\n     * should be kept.\n     *\n     * Analytics may initialize after the page renders, so we track its `ready`\n     * event as a stream and project it into a signal. `fromEvent` registers via\n     * zone-patched `addEventListener`, so change detection is scheduled without\n     * any manual `NgZone` handling.\n     * @readonly\n     * @type {Signal<boolean>}\n     * @memberof DotCMSStore\n     */\n    $isAnalyticsActive: Signal<boolean> =\n        typeof window === 'undefined'\n            ? signal(false)\n            : toSignal(\n                  fromEvent(window, ANALYTICS_READY_EVENT).pipe(map(() => isDotAnalyticsActive())),\n                  { initialValue: isDotAnalyticsActive() }\n              );\n\n    /**\n     * @description Get the store\n     * @readonly\n     * @type {DotCMSPageStore}\n     * @memberof DotCMSStore\n     */\n    get store(): DotCMSPageStore {\n        return this.$store();\n    }\n\n    /**\n     * @description Set the store\n     * @param {DotCMSPageStore} value\n     * @memberof DotCMSStore\n     */\n    setStore(store: DotCMSPageStore): void {\n        this.$store.set(store);\n    }\n\n    /**\n     * @description Get if the current context is in development mode\n     * @readonly\n     * @type {boolean}\n     * @memberof DotCMSStore\n     */\n    $isDevMode = computed(() => {\n        const uveState = getUVEState();\n\n        if (uveState?.mode) {\n            return uveState?.mode === UVE_MODE.EDIT;\n        }\n\n        return this.$store()?.mode === DEVELOPMENT_MODE;\n    });\n}\n","import { NgStyle } from '@angular/common';\nimport { Component, inject, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\n\nimport { EMPTY_CONTAINER_STYLE_ANGULAR } from '@dotcms/uve/internal';\n\nimport { DotCMSStore } from '../../../../../../store/dotcms.store';\n\n/**\n * @description This component is used to display a message when a container is not found.\n * @export\n * @internal\n * @class ContainerNotFoundComponent\n * @implements {OnInit}\n */\n@Component({\n    selector: 'dotcms-container-not-found',\n    imports: [NgStyle],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    template: `\n        @if ($isDevMode()) {\n            <div [attr.data-testid]=\"'container-not-found'\" [ngStyle]=\"emptyContainerStyle\">\n                This container with identifier {{ identifier }} was not found.\n            </div>\n        }\n    `\n})\nexport class ContainerNotFoundComponent implements OnInit {\n    @Input() identifier = 'unknown';\n\n    #dotcmsContextService = inject(DotCMSStore);\n\n    $isDevMode = this.#dotcmsContextService.$isDevMode;\n    emptyContainerStyle = EMPTY_CONTAINER_STYLE_ANGULAR;\n\n    ngOnInit() {\n        if (this.$isDevMode()) {\n            console.error(`Container with identifier ${this.identifier} not found`);\n        }\n    }\n}\n","import { NgStyle } from '@angular/common';\nimport { Component, inject, ChangeDetectionStrategy } from '@angular/core';\n\nimport { EMPTY_CONTAINER_STYLE_ANGULAR } from '@dotcms/uve/internal';\n\nimport { DotCMSStore } from '../../../../../../store/dotcms.store';\n\n/**\n * @description This component is used to display a message when a container is empty.\n * @export\n * @internal\n * @class EmptyContainerComponent\n */\n@Component({\n    selector: 'dotcms-empty-container',\n    imports: [NgStyle],\n    changeDetection: ChangeDetectionStrategy.Eager,\n    template: `\n        @if ($isDevMode()) {\n            <div [ngStyle]=\"emptyContainerStyle\" data-testid=\"empty-container\">\n                <span data-testid=\"empty-container-message\" data-dot-object=\"empty-content\">\n                    This container is empty.\n                </span>\n            </div>\n        }\n    `\n})\nexport class EmptyContainerComponent {\n    emptyContainerStyle = EMPTY_CONTAINER_STYLE_ANGULAR;\n\n    #dotCMSStore = inject(DotCMSStore);\n\n    $isDevMode = this.#dotCMSStore.$isDevMode;\n}\n","import { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { DotCMSBasicContentlet } from '@dotcms/types';\n\nimport { DynamicComponentEntity } from '../../../../models';\n\n/**\n * @description Fallback component that renders when no custom component is found for a contentlet\n * @category Components\n * @internal\n * @class FallbackComponent\n */\n@Component({\n    selector: 'dotcms-fallback-component',\n    imports: [AsyncPipe, NgComponentOutlet],\n    template: `\n        @if (UserNoComponent) {\n            <ng-container *ngComponentOutlet=\"UserNoComponent | async; inputs: { contentlet }\" />\n        } @else {\n            <div data-testid=\"dotcms-fallback-component\">\n                <p>No component found for content type: {{ contentlet.contentType }}</p>\n            </div>\n        }\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FallbackComponent {\n    @Input() UserNoComponent: DynamicComponentEntity | null = null;\n    @Input() contentlet!: DotCMSBasicContentlet;\n}\n","import { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    ElementRef,\n    inject,\n    Input,\n    OnChanges,\n    signal,\n    ViewChild\n} from '@angular/core';\n\nimport { DotCMSBasicContentlet, EditableContainerData } from '@dotcms/types';\nimport { DotContentletAttributes } from '@dotcms/types/internal';\nimport {\n    CUSTOM_NO_COMPONENT,\n    getAnalyticsContentletAttributes,\n    getDotContentletAttributes\n} from '@dotcms/uve/internal';\n\nimport { DynamicComponentEntity } from '../../../../models';\nimport { DotCMSStore } from '../../../../store/dotcms.store';\nimport { FallbackComponent } from '../fallback-component/fallback-component.component';\n\n/**\n * @description Contentlet component that renders DotCMS content with development mode support\n *\n * @component\n * @param {DotCMSContentlet} contentlet - The contentlet to be rendered\n * @param {string} container - The container identifier\n * @class ContentletComponent\n */\n@Component({\n    selector: 'dotcms-contentlet',\n    imports: [FallbackComponent, AsyncPipe, NgComponentOutlet],\n    template: `\n        @if ($UserComponent()) {\n            <ng-container\n                *ngComponentOutlet=\"\n                    $UserComponent() | async;\n                    inputs: { contentlet: $contentlet() ?? contentlet }\n                \" />\n        } @else if ($isDevMode()) {\n            <dotcms-fallback-component\n                [UserNoComponent]=\"$UserNoComponent()\"\n                [contentlet]=\"$contentlet() ?? contentlet\" />\n        }\n    `,\n    // Editor-only metadata (data-dot-object, data-dot-container, etc.) is bound\n    // only in edit mode. In live mode we keep the minimal set Analytics needs\n    // via $dotAttributes (empty when Analytics is inactive).\n    host: {\n        '[attr.data-dot-object]': \"$isDevMode() ? 'contentlet' : null\",\n        '[attr.data-dot-identifier]': \"$dotAttributes()['data-dot-identifier'] ?? null\",\n        '[attr.data-dot-basetype]': \"$dotAttributes()['data-dot-basetype'] ?? null\",\n        '[attr.data-dot-title]': \"$dotAttributes()['data-dot-title'] ?? null\",\n        '[attr.data-dot-inode]': \"$dotAttributes()['data-dot-inode'] ?? null\",\n        '[attr.data-dot-type]': \"$dotAttributes()['data-dot-type'] ?? null\",\n        '[attr.data-dot-container]': '$isDevMode() ? getContainerAttribute() : null',\n        '[attr.data-dot-on-number-of-pages]':\n            \"$dotAttributes()['data-dot-on-number-of-pages'] ?? null\",\n        '[attr.data-dot-can-edit]': \"$dotAttributes()['data-dot-can-edit'] ?? null\",\n        '[attr.data-dot-style-properties]': \"$dotAttributes()['data-dot-style-properties'] ?? null\",\n        '[style]': '$style()'\n    },\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContentletComponent implements OnChanges {\n    @Input({ required: true }) contentlet!: DotCMSBasicContentlet;\n    @Input({ required: true }) containerData!: EditableContainerData;\n    @ViewChild('contentletRef') contentletRef!: ElementRef;\n\n    #dotCMSStore = inject(DotCMSStore);\n\n    $contentlet = signal<DotCMSBasicContentlet | null>(null);\n    $UserComponent = signal<DynamicComponentEntity | null>(null);\n    $UserNoComponent = signal<DynamicComponentEntity | null>(null);\n    $isDevMode = this.#dotCMSStore.$isDevMode;\n    $isAnalyticsActive = this.#dotCMSStore.$isAnalyticsActive;\n    $haveContent = signal(false);\n    $style = computed(() =>\n        this.$isDevMode() && !this.$haveContent() ? { minHeight: '4rem' } : {}\n    );\n    $dotAttributes = computed<DotContentletAttributes>(() => {\n        const contentlet = this.$contentlet();\n        if (!contentlet) return {} as DotContentletAttributes;\n\n        if (this.$isDevMode()) {\n            return getDotContentletAttributes(contentlet, this.containerData.identifier);\n        }\n\n        if (this.$isAnalyticsActive()) {\n            return getAnalyticsContentletAttributes(contentlet) as DotContentletAttributes;\n        }\n\n        return {} as DotContentletAttributes;\n    });\n\n    ngOnChanges() {\n        this.$contentlet.set(this.contentlet);\n        this.setupComponents();\n    }\n\n    /**\n     * Serializes the container data for the `data-dot-container` editor attribute.\n     * Only consumed by the host binding while in edit mode.\n     */\n    getContainerAttribute(): string {\n        return JSON.stringify(this.containerData);\n    }\n\n    ngAfterViewInit() {\n        this.checkContent();\n    }\n\n    private setupComponents() {\n        const store = this.#dotCMSStore.store;\n        if (!store) return;\n\n        if (!store?.components) return;\n\n        this.$UserComponent.set(store.components[this.contentlet?.contentType]);\n        this.$UserNoComponent.set(store.components[CUSTOM_NO_COMPONENT]);\n    }\n\n    private checkContent() {\n        const element = this.contentletRef?.nativeElement;\n        if (element) {\n            const hasContent = element.getBoundingClientRect().height > 0;\n            this.$haveContent.set(hasContent);\n        }\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    inject,\n    Input,\n    OnChanges,\n    signal\n} from '@angular/core';\n\nimport { DotCMSBasicContentlet, DotCMSColumnContainer, EditableContainerData } from '@dotcms/types';\nimport { DotContainerAttributes } from '@dotcms/types/internal';\nimport {\n    getContainersData,\n    getContentletsInContainer,\n    getDotContainerAttributes\n} from '@dotcms/uve/internal';\n\nimport { ContainerNotFoundComponent } from './components/container-not-found/container-not-found.component';\nimport { EmptyContainerComponent } from './components/empty-container/empty-container.component';\n\nimport { DotCMSStore } from '../../../../store/dotcms.store';\nimport { ContentletComponent } from '../../components/contentlet/contentlet.component';\n\n/**\n * @description This component renders a container with all its content using the layout provided by dotCMS Page API.\n *\n * @see {@link https://www.dotcms.com/docs/latest/page-rest-api-layout-as-a-service-laas}\n * @category Components\n * @internal\n * @class ContainerComponent\n */\n@Component({\n    selector: 'dotcms-container',\n    imports: [ContainerNotFoundComponent, EmptyContainerComponent, ContentletComponent],\n    template: `\n        @if (!$containerData()) {\n            <dotcms-container-not-found [identifier]=\"container.identifier\" />\n        } @else if ($isEmpty()) {\n            <dotcms-empty-container />\n        } @else {\n            @for (contentlet of $contentlets(); track contentlet.identifier) {\n                <dotcms-contentlet [contentlet]=\"contentlet\" [containerData]=\"$containerData()!\" />\n            }\n        }\n    `,\n    // Container metadata is editor-only — bound only in edit mode so it never\n    // leaks into live output. $dotAttributes is empty outside edit mode.\n    host: {\n        '[attr.data-dot-object]': \"$isDevMode() ? 'container' : null\",\n        '[attr.data-dot-accept-types]': \"$dotAttributes()['data-dot-accept-types'] ?? null\",\n        '[attr.data-dot-identifier]': \"$dotAttributes()['data-dot-identifier'] ?? null\",\n        '[attr.data-max-contentlets]': \"$dotAttributes()['data-max-contentlets'] ?? null\",\n        '[attr.data-dot-uuid]': \"$dotAttributes()['data-dot-uuid'] ?? null\"\n    },\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContainerComponent implements OnChanges {\n    /**\n     * The container data to be rendered\n     */\n    @Input({ required: true }) container!: DotCMSColumnContainer;\n\n    #dotCMSStore = inject(DotCMSStore);\n\n    $containerData = signal<EditableContainerData | null>(null);\n    $contentlets = signal<DotCMSBasicContentlet[]>([]);\n    $isEmpty = computed(() => this.$contentlets().length === 0);\n    $isDevMode = this.#dotCMSStore.$isDevMode;\n    $dotAttributes = computed<DotContainerAttributes>(() => {\n        const containerData = this.$containerData();\n\n        if (!containerData || !this.$isDevMode()) {\n            return {} as DotContainerAttributes;\n        }\n\n        return getDotContainerAttributes(containerData);\n    });\n\n    ngOnChanges() {\n        const { page } = this.#dotCMSStore.store ?? {};\n\n        if (!page) {\n            return;\n        }\n\n        this.$containerData.set(getContainersData(page, this.container));\n        this.$contentlets.set(getContentletsInContainer(page, this.container));\n    }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, OnChanges } from '@angular/core';\n\nimport { DotPageAssetLayoutColumn } from '@dotcms/types';\nimport { combineClasses, getColumnPositionClasses } from '@dotcms/uve/internal';\n\nimport { ContainerComponent } from '../container/container.component';\n/**\n * This component renders a column with all its content using the layout provided by dotCMS Page API.\n *\n * @see {@link https://www.dotcms.com/docs/latest/page-rest-api-layout-as-a-service-laas}\n * @category Components\n * @internal\n */\n@Component({\n    selector: 'dotcms-column',\n    imports: [ContainerComponent],\n    template: `\n        <div [class]=\"column.styleClass\" data-testid=\"dotcms-column\">\n            @for (container of column.containers; track $index) {\n                <dotcms-container [container]=\"container\" />\n            }\n        </div>\n    `,\n    styleUrl: './column.component.css',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ColumnComponent implements OnChanges {\n    /**\n     * The column data to be rendered\n     */\n    @Input({ required: true }) column!: DotPageAssetLayoutColumn;\n\n    @HostBinding('class') customClasses = '';\n\n    ngOnChanges() {\n        const positionClasses = getColumnPositionClasses(this.column);\n\n        this.customClasses = combineClasses([positionClasses.startClass, positionClasses.endClass]);\n    }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, signal } from '@angular/core';\n\nimport { DotPageAssetLayoutRow } from '@dotcms/types';\nimport { combineClasses, DOT_SECTION_ID_PREFIX } from '@dotcms/uve/internal';\n\nimport { ColumnComponent } from '../column/column.component';\n\n/**\n * @description This component renders a row with all its content using the layout provided by dotCMS Page API.\n *\n * @see {@link https://www.dotcms.com/docs/latest/page-rest-api-layout-as-a-service-laas}\n * @category Components\n * @internal\n * @class RowComponent\n */\n@Component({\n    selector: 'dotcms-row',\n    imports: [ColumnComponent],\n    template: `\n        <div [id]=\"sectionId()\" [class]=\"customClasses()\">\n            <div class=\"dot-row\" data-dot-object=\"row\" data-testid=\"dotcms-row\">\n                @for (column of row.columns; track $index) {\n                    <dotcms-column [column]=\"column\" />\n                }\n            </div>\n        </div>\n    `,\n    styleUrl: './row.component.css',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RowComponent implements OnChanges {\n    /**\n     * The row data to be rendered\n     */\n    @Input({ required: true }) row!: DotPageAssetLayoutRow;\n    @Input({ required: true }) sectionIndex!: number;\n\n    customClasses = signal('');\n    sectionId = signal('');\n\n    ngOnChanges() {\n        this.customClasses.set(combineClasses(['dot-row-container', this.row.styleClass ?? '']));\n        this.sectionId.set(`${DOT_SECTION_ID_PREFIX}${this.sectionIndex}`);\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    inject,\n    Input,\n    OnChanges,\n    signal\n} from '@angular/core';\n\nimport { DotCMSPageAsset, DotCMSPageRendererMode, DotPageAssetLayoutRow } from '@dotcms/types';\n\nimport { PageErrorMessageComponent } from './components/page-error-message/page-error-message.component';\nimport { RowComponent } from './components/row/row.component';\n\nimport { DotCMSPageComponent } from '../../models';\nimport { DotCMSStore } from '../../store/dotcms.store';\n/**\n * @description This component is used to render the layout for a DotCMS page.\n * @param {DotCMSPageAsset} page - The page to render the layout for\n * @param {DotCMSPageComponent} components - The components to render the layout for\n * @param {DotCMSPageRendererMode} mode - The mode to render the layout for\n *\n * @example\n * <dotcms-layout-body [page]=\"page\" [components]=\"components\" [mode]=\"'development'\" />\n *\n * @export\n * @implements {OnChanges}\n * @class DotCMSLayoutBodyComponent\n */\n@Component({\n    selector: 'dotcms-layout-body',\n    imports: [PageErrorMessageComponent, RowComponent],\n    providers: [DotCMSStore],\n    template: `\n        @if ($isEmpty() && $isDevMode()) {\n            <dotcms-page-error-message />\n        } @else {\n            @for (row of $rows(); track $index; let i = $index) {\n                <dotcms-row [row]=\"row\" [sectionIndex]=\"i + 1\" />\n            }\n        }\n    `,\n    styleUrl: './dotcms-layout-body.component.css',\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DotCMSLayoutBodyComponent implements OnChanges {\n    @Input({ required: true }) page!: DotCMSPageAsset;\n    @Input({ required: true }) components: DotCMSPageComponent = {};\n    @Input() mode: DotCMSPageRendererMode = 'production';\n\n    #dotCMSStore = inject(DotCMSStore);\n\n    $isDevMode = this.#dotCMSStore.$isDevMode;\n\n    $rows = signal<DotPageAssetLayoutRow[]>([]);\n\n    $isEmpty = signal(false);\n\n    ngOnChanges() {\n        this.#dotCMSStore.setStore({\n            page: this.page,\n            components: this.components,\n            mode: this.mode\n        });\n\n        this.$isEmpty.set(!this.page?.layout?.body);\n\n        this.$rows.set(this.page?.layout?.body?.rows ?? []);\n    }\n}\n","import { Observable, of, Subject } from 'rxjs';\n\nimport { Injectable } from '@angular/core';\n\nimport { finalize } from 'rxjs/operators';\n\nimport {\n    UVEEventType,\n    DotCMSPageResponse,\n    DotCMSComposedPageResponse,\n    DotCMSExtendedPageResponse\n} from '@dotcms/types';\nimport { createUVESubscription, getUVEState, initUVE, updateNavigation } from '@dotcms/uve';\nimport { registerStyleEditorSchemas } from '@dotcms/uve/internal';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class DotCMSEditablePageService {\n    /**\n     * Subject that emits the current editable page asset or null.\n     * Used internally to track changes to the page data.\n     *\n     * @private\n     * @type {Subject<DotCMSPageResponse | undefined>}\n     */\n    #responseSubject = new Subject<DotCMSPageResponse | undefined>();\n\n    /**\n     * Observable stream of the page asset changes.\n     * Exposes the pageAssetSubject as an Observable for subscribers.\n     *\n     * @private\n     * @type {Observable<DotCMSPageResponse | undefined>}\n     */\n    #response$ = this.#responseSubject.asObservable();\n\n    /**\n     * Listens for changes to an editable page and returns an Observable that emits the updated page data.\n     * This method initializes the UVE (Universal Visual Editor) and sets up subscriptions to track content changes.\n     *\n     * @example\n     * ```ts\n     * // Import the service\n     * import { DotCMSEditablePageService } from '@dotcms/angular';\n     *\n     * // Inject the service\n     * constructor(private editablePageService: DotCMSEditablePageService) {}\n     *\n     * // Get the page data from your API call\n     * const page = await client.page.get('/');\n     *\n     * // Listen for changes\n     * const subscription = this.editablePageService.listen(page).subscribe(updatedPage => {\n     *   if (updatedPage) {\n     *     // Handle updated page data\n     *     console.log('Page updated:', updatedPage);\n     *   }\n     * });\n     *\n     * // When done listening, unsubscribe\n     * subscription.unsubscribe();\n     * ```\n     *\n     * @param response Optional initial page data\n     * @returns Observable that emits the updated page data or undefined\n     */\n    listen<T extends DotCMSExtendedPageResponse>(\n        response?: DotCMSComposedPageResponse<T>\n    ): Observable<DotCMSComposedPageResponse<T> | undefined> {\n        if (!getUVEState()) {\n            return of(response);\n        }\n\n        const pageURI = response?.pageAsset?.page?.pageURI;\n\n        initUVE(response);\n\n        // Update the navigation to the pageURI, when we have a pageURI\n        // Sometimes the page is null due to permissions, so we don't want to update the navigation\n        // And wait for the UVE to resolve the page\n        if (pageURI) {\n            updateNavigation(pageURI);\n        }\n\n        if (response?.styleEditorSchemas?.length) {\n            registerStyleEditorSchemas(response.styleEditorSchemas);\n        }\n\n        const unsubscribeUVEChanges = this.#listenUVEChanges();\n\n        return this.#response$.pipe(\n            finalize(() => {\n                unsubscribeUVEChanges();\n            })\n        );\n    }\n\n    /**\n     * Sets up a subscription to listen for UVE content changes and updates the page asset subject.\n     * This is an internal method used by listenEditablePage() to handle UVE events.\n     *\n     * @returns {UVEUnsubscribeFunction} Function to unsubscribe from the UVE content changes\n     * @private\n     */\n    #listenUVEChanges() {\n        const { unsubscribe } = createUVESubscription(UVEEventType.CONTENT_CHANGES, (payload) => {\n            this.#responseSubject.next(payload);\n        });\n\n        return unsubscribe;\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}