@dotcms/angular 1.5.5-next.2131 → 1.5.5-next.2180

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -289,9 +289,13 @@ class DotCMSEditableTextComponent {
289
289
  if (name !== __DOTCMS_UVE_EVENT__.UVE_COPY_CONTENTLET_INLINE_EDITING_SUCCESS) {
290
290
  return;
291
291
  }
292
- const { oldInode, inode } = payload;
292
+ const { oldInode, inode, fieldName } = payload;
293
293
  const currentInode = this.contentlet.inode;
294
- if (currentInode === oldInode || currentInode === inode) {
294
+ const matchesInode = currentInode === oldInode || currentInode === inode;
295
+ // Match the field too: a contentlet's fields all share one inode, so an
296
+ // inode-only check focuses every editable field on the contentlet (the
297
+ // last one wins) instead of the one the user clicked.
298
+ if (matchesInode && fieldName === this.fieldName) {
295
299
  this.editorComponent.editor.focus();
296
300
  return;
297
301
  }
@@ -1 +1 @@
1
- {"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/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} 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 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 } = payload;\n const currentInode = this.contentlet.inode;\n\n if (currentInode === oldInode || currentInode === inode) {\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 } 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 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 } 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 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 { 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: [],\n template: `\n <figure [style]=\"$wrapperStyle()\">\n <img [alt]=\"attrs?.['alt']\" [src]=\"$srcURL()\" />\n </figure>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DotImageBlock {\n @Input() attrs!: BlockEditorNode['attrs'];\n\n protected readonly $srcURL = computed(() => this.attrs?.['src']);\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 } 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 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 } 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 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 } from '@angular/core';\n\nimport { BlockEditorNode } from '@dotcms/types';\nimport { BlockEditorDefaultBlocks } from '@dotcms/types/internal';\n\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 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 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.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 } 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 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 /** 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 <img\n [alt]=\"node.attrs?.['alt']\"\n [src]=\"node.attrs?.['src']\"\n style=\"max-width: 100%; height: auto\" />\n </figure>\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.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 {{ text }}\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 { computed, Injectable, signal } from '@angular/core';\n\nimport { DotCMSPageAsset, UVE_MODE } from '@dotcms/types';\nimport { getUVEState } from '@dotcms/uve';\nimport { DEVELOPMENT_MODE, PRODUCTION_MODE } 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 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 } 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 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 } 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 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 HostBinding,\n signal,\n ViewChild\n} from '@angular/core';\n\nimport { DotCMSBasicContentlet, EditableContainerData } from '@dotcms/types';\nimport { DotContentletAttributes } from '@dotcms/types/internal';\nimport { CUSTOM_NO_COMPONENT, getDotContentletAttributes } 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 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 @HostBinding('attr.data-dot-object') dotObject = 'contentlet';\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 $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 || !this.$isDevMode()) return {} as DotContentletAttributes;\n\n return getDotContentletAttributes(contentlet, this.containerData.identifier);\n });\n\n @HostBinding('attr.data-dot-identifier') identifier: string | null = null;\n @HostBinding('attr.data-dot-basetype') basetype: string | null = null;\n @HostBinding('attr.data-dot-title') title: string | null = null;\n @HostBinding('attr.data-dot-inode') inode: string | null = null;\n @HostBinding('attr.data-dot-type') type: string | null = null;\n @HostBinding('attr.data-dot-container') containerAttribute: string | null = null;\n @HostBinding('attr.data-dot-on-number-of-pages') onNumberOfPages: string | null = null;\n @HostBinding('attr.data-dot-style-properties') styleProperties: string | null = null;\n @HostBinding('style') styleAttribute: { [key: string]: unknown } | null = null;\n\n ngOnChanges() {\n this.$contentlet.set(this.contentlet);\n this.setupComponents();\n\n this.identifier = this.$dotAttributes()['data-dot-identifier'];\n this.basetype = this.$dotAttributes()['data-dot-basetype'];\n this.title = this.$dotAttributes()['data-dot-title'];\n this.inode = this.$dotAttributes()['data-dot-inode'];\n this.type = this.$dotAttributes()['data-dot-type'];\n this.containerAttribute = JSON.stringify(this.containerData);\n this.onNumberOfPages = this.$dotAttributes()['data-dot-on-number-of-pages'];\n this.styleProperties = this.$dotAttributes()['data-dot-style-properties'] || null;\n this.styleAttribute = this.$style();\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 HostBinding,\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 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 $dotAttributes = computed<DotContainerAttributes>(() => {\n const containerData = this.$containerData();\n\n if (!containerData || !this.#dotCMSStore.$isDevMode()) {\n return {} as DotContainerAttributes;\n }\n\n return getDotContainerAttributes(containerData);\n });\n\n @HostBinding('attr.data-dot-object') dotObject = 'container';\n @HostBinding('attr.data-dot-accept-types') acceptTypes: string | null = null;\n @HostBinding('attr.data-dot-identifier') identifier: string | null = null;\n @HostBinding('attr.data-max-contentlets') maxContentlets: string | null = null;\n @HostBinding('attr.data-dot-uuid') uuid: string | null = null;\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 this.acceptTypes = this.$dotAttributes()['data-dot-accept-types'];\n this.identifier = this.$dotAttributes()['data-dot-identifier'];\n this.maxContentlets = this.$dotAttributes()['data-max-contentlets'];\n this.uuid = this.$dotAttributes()['data-dot-uuid'];\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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"}
1
+ {"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/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} 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 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 } 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 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 } 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 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 { 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: [],\n template: `\n <figure [style]=\"$wrapperStyle()\">\n <img [alt]=\"attrs?.['alt']\" [src]=\"$srcURL()\" />\n </figure>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DotImageBlock {\n @Input() attrs!: BlockEditorNode['attrs'];\n\n protected readonly $srcURL = computed(() => this.attrs?.['src']);\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 } 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 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 } 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 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 } from '@angular/core';\n\nimport { BlockEditorNode } from '@dotcms/types';\nimport { BlockEditorDefaultBlocks } from '@dotcms/types/internal';\n\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 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 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.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 } 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 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 /** 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 <img\n [alt]=\"node.attrs?.['alt']\"\n [src]=\"node.attrs?.['src']\"\n style=\"max-width: 100%; height: auto\" />\n </figure>\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.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 {{ text }}\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 { computed, Injectable, signal } from '@angular/core';\n\nimport { DotCMSPageAsset, UVE_MODE } from '@dotcms/types';\nimport { getUVEState } from '@dotcms/uve';\nimport { DEVELOPMENT_MODE, PRODUCTION_MODE } 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 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 } 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 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 } 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 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 HostBinding,\n signal,\n ViewChild\n} from '@angular/core';\n\nimport { DotCMSBasicContentlet, EditableContainerData } from '@dotcms/types';\nimport { DotContentletAttributes } from '@dotcms/types/internal';\nimport { CUSTOM_NO_COMPONENT, getDotContentletAttributes } 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 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 @HostBinding('attr.data-dot-object') dotObject = 'contentlet';\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 $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 || !this.$isDevMode()) return {} as DotContentletAttributes;\n\n return getDotContentletAttributes(contentlet, this.containerData.identifier);\n });\n\n @HostBinding('attr.data-dot-identifier') identifier: string | null = null;\n @HostBinding('attr.data-dot-basetype') basetype: string | null = null;\n @HostBinding('attr.data-dot-title') title: string | null = null;\n @HostBinding('attr.data-dot-inode') inode: string | null = null;\n @HostBinding('attr.data-dot-type') type: string | null = null;\n @HostBinding('attr.data-dot-container') containerAttribute: string | null = null;\n @HostBinding('attr.data-dot-on-number-of-pages') onNumberOfPages: string | null = null;\n @HostBinding('attr.data-dot-style-properties') styleProperties: string | null = null;\n @HostBinding('style') styleAttribute: { [key: string]: unknown } | null = null;\n\n ngOnChanges() {\n this.$contentlet.set(this.contentlet);\n this.setupComponents();\n\n this.identifier = this.$dotAttributes()['data-dot-identifier'];\n this.basetype = this.$dotAttributes()['data-dot-basetype'];\n this.title = this.$dotAttributes()['data-dot-title'];\n this.inode = this.$dotAttributes()['data-dot-inode'];\n this.type = this.$dotAttributes()['data-dot-type'];\n this.containerAttribute = JSON.stringify(this.containerData);\n this.onNumberOfPages = this.$dotAttributes()['data-dot-on-number-of-pages'];\n this.styleProperties = this.$dotAttributes()['data-dot-style-properties'] || null;\n this.styleAttribute = this.$style();\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 HostBinding,\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 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 $dotAttributes = computed<DotContainerAttributes>(() => {\n const containerData = this.$containerData();\n\n if (!containerData || !this.#dotCMSStore.$isDevMode()) {\n return {} as DotContainerAttributes;\n }\n\n return getDotContainerAttributes(containerData);\n });\n\n @HostBinding('attr.data-dot-object') dotObject = 'container';\n @HostBinding('attr.data-dot-accept-types') acceptTypes: string | null = null;\n @HostBinding('attr.data-dot-identifier') identifier: string | null = null;\n @HostBinding('attr.data-max-contentlets') maxContentlets: string | null = null;\n @HostBinding('attr.data-dot-uuid') uuid: string | null = null;\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 this.acceptTypes = this.$dotAttributes()['data-dot-accept-types'];\n this.identifier = this.$dotAttributes()['data-dot-identifier'];\n this.maxContentlets = this.$dotAttributes()['data-max-contentlets'];\n this.uuid = this.$dotAttributes()['data-dot-uuid'];\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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dotcms-editable-text.component.d.ts","sourceRoot":"","sources":["../../../../../../../libs/sdk/angular/src/lib/components/dotcms-editable-text/dotcms-editable-text.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAsB,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EAMH,SAAS,EACT,MAAM,EAIT,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,qBAAqB,EAA6B,MAAM,eAAe,CAAC;AAKjF,OAAO,EAAkB,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;;AAE3F,iHAAiH;AACjH,UAAU,qBAAqB;IAC3B,UAAU,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAClD,OAAO,IAAI,OAAO,CAAC;IACnB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACjE,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,IAAI,OAAO,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,qBAgBa,2BAA2B,CAAC,CAAC,SAAS,qBAAqB,CACpE,YAAW,MAAM,EAAE,SAAS;;IAEA,eAAe,EAAG,eAAe,CAAC;IAE9D;;;;;OAKG;IACM,IAAI,EAAE,sBAAsB,CAAW;IAChD;;;;;OAKG;IACM,MAAM,EAAE,wBAAwB,CAAU;IACnD;;;;;OAKG;IACM,UAAU,EAAG,CAAC,CAAC;IACxB;;;;OAIG;IACM,SAAS,EAAG,MAAM,CAAC,CAAC;IAE7B;;;;;OAKG;IACH,SAAS,CAAC,OAAO,SAAM;IACvB;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IASzC;;;;;OAKG;IACH,IAAI,MAAM,IAAI,qBAAqB,GAAG,SAAS,CAE9C;IAED;;;;;;OAMG;IACH,SAAS,KAAK,UAAU,sCAIvB;IAED;;;;;OAKG;IACH,IAAI,eAAe,eAElB;IAED;;;;;;OAMG;IAEH,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY;IAgBhC,QAAQ;IAmBR,WAAW;IAOX;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,UAAU,CAAA;KAAE;IAyB5C;;;;;OAKG;IACH,UAAU;IA8BV;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;yCAvOf,2BAA2B;2CAA3B,2BAA2B;CA0OvC"}
1
+ {"version":3,"file":"dotcms-editable-text.component.d.ts","sourceRoot":"","sources":["../../../../../../../libs/sdk/angular/src/lib/components/dotcms-editable-text/dotcms-editable-text.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAsB,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EAMH,SAAS,EACT,MAAM,EAIT,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,qBAAqB,EAA6B,MAAM,eAAe,CAAC;AAKjF,OAAO,EAAkB,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;;AAE3F,iHAAiH;AACjH,UAAU,qBAAqB;IAC3B,UAAU,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAClD,OAAO,IAAI,OAAO,CAAC;IACnB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACjE,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,IAAI,OAAO,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,qBAgBa,2BAA2B,CAAC,CAAC,SAAS,qBAAqB,CACpE,YAAW,MAAM,EAAE,SAAS;;IAEA,eAAe,EAAG,eAAe,CAAC;IAE9D;;;;;OAKG;IACM,IAAI,EAAE,sBAAsB,CAAW;IAChD;;;;;OAKG;IACM,MAAM,EAAE,wBAAwB,CAAU;IACnD;;;;;OAKG;IACM,UAAU,EAAG,CAAC,CAAC;IACxB;;;;OAIG;IACM,SAAS,EAAG,MAAM,CAAC,CAAC;IAE7B;;;;;OAKG;IACH,SAAS,CAAC,OAAO,SAAM;IACvB;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IASzC;;;;;OAKG;IACH,IAAI,MAAM,IAAI,qBAAqB,GAAG,SAAS,CAE9C;IAED;;;;;;OAMG;IACH,SAAS,KAAK,UAAU,sCAIvB;IAED;;;;;OAKG;IACH,IAAI,eAAe,eAElB;IAED;;;;;;OAMG;IAEH,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY;IAoBhC,QAAQ;IAmBR,WAAW;IAOX;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,UAAU,CAAA;KAAE;IAyB5C;;;;;OAKG;IACH,UAAU;IA8BV;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;yCA3Of,2BAA2B;2CAA3B,2BAA2B;CA8OvC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotcms/angular",
3
- "version": "1.5.5-next.2131",
3
+ "version": "1.5.5-next.2180",
4
4
  "peerDependencies": {
5
5
  "rxjs": ">=7.0.0",
6
6
  "@angular/common": ">=17.0.0",