@dotcms/angular 1.0.6 → 1.1.1-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,6 +26,8 @@ The `@dotcms/angular` SDK is the DotCMS official Angular library. It empowers An
26
26
  - [Still Having Issues?](#still-having-issues)
27
27
  - [dotCMS Support](#dotcms-support)
28
28
  - [How To Contribute](#how-to-contribute)
29
+ - [Changelog](#changelog)
30
+ - [v1.1.1](#111)
29
31
  - [Licensing Information](#licensing-information)
30
32
 
31
33
  ## Prerequisites & Setup
@@ -86,6 +88,8 @@ This will automatically install the required dependencies:
86
88
 
87
89
  ## Configuration
88
90
 
91
+ ### Basic Configuration
92
+
89
93
  The recommended way to configure the DotCMS client in your Angular application is to use the `provideDotCMSClient` function in your `app.config.ts`:
90
94
 
91
95
  ```ts
@@ -98,12 +102,49 @@ export const appConfig: ApplicationConfig = {
98
102
  provideDotCMSClient({
99
103
  dotcmsUrl: environment.dotcmsUrl,
100
104
  authToken: environment.authToken,
101
- siteId: environment.siteId
105
+ siteId: environment.siteId,
106
+ // Optional: Custom HTTP client
107
+ httpClient: (http) => new AngularHttpClient(http)
102
108
  })
103
109
  ]
104
110
  };
105
111
  ```
106
112
 
113
+ ### Custom HTTP Client Configuration
114
+
115
+ For advanced use cases, you can provide a custom HTTP client implementation that leverages Angular's `HttpClient`:
116
+
117
+ ```ts
118
+ import { HttpClient } from '@angular/common/http';
119
+ import { BaseHttpClient, DotRequestOptions } from '@dotcms/types';
120
+
121
+ // Custom HTTP client using Angular's HttpClient
122
+ class AngularHttpClient extends BaseHttpClient {
123
+ constructor(private http: HttpClient) {
124
+ super();
125
+ }
126
+
127
+ async request<T>(url: string, options?: DotRequestOptions): Promise<T> {
128
+ return this.http.get<T>(url).toPromise();
129
+ }
130
+ }
131
+
132
+ // Configure with custom HTTP client
133
+ export const appConfig: ApplicationConfig = {
134
+ providers: [
135
+ provideHttpClient(), // Ensure Angular's HttpClient is available
136
+ provideDotCMSClient({
137
+ dotcmsUrl: environment.dotcmsUrl,
138
+ authToken: environment.authToken,
139
+ siteId: environment.siteId,
140
+ httpClient: (http: HttpClient) => new AngularHttpClient(http)
141
+ })
142
+ ]
143
+ };
144
+ ```
145
+
146
+ ### Using the Client
147
+
107
148
  Then, you can inject the `DotCMSClient` into your components or services:
108
149
 
109
150
  ```ts
@@ -198,11 +239,17 @@ Add the image loader to your `app.config.ts`:
198
239
 
199
240
  ```ts
200
241
  // src/app/app.config.ts
201
- import { provideDotCMSImageLoader } from '@dotcms/angular';
202
242
  import { ApplicationConfig } from '@angular/core';
243
+ import { provideDotCMSClient, provideDotCMSImageLoader } from '@dotcms/angular';
244
+ import { environment } from './environments/environment';
203
245
 
204
246
  export const appConfig: ApplicationConfig = {
205
247
  providers: [
248
+ provideDotCMSClient({
249
+ dotcmsUrl: environment.dotcmsUrl,
250
+ authToken: environment.authToken,
251
+ siteId: environment.siteId
252
+ }),
206
253
  provideDotCMSImageLoader(environment.dotcmsUrl)
207
254
  ]
208
255
  };
@@ -217,7 +264,7 @@ Once configured, you can use the `NgOptimizedImage` directive to render dotCMS i
217
264
  @Component({
218
265
  selector: 'my-dotcms-image',
219
266
  template: `
220
- <img [ngSrc]="imagePath" alt="Asset from dotCMS" />
267
+ <img [ngSrc]="imagePath" alt="Asset from dotCMS" width="400" height="300" />
221
268
  `,
222
269
  standalone: true
223
270
  })
@@ -230,6 +277,61 @@ export class MyDotCMSImageComponent {
230
277
  }
231
278
  ```
232
279
 
280
+ #### Custom Quality Control
281
+
282
+ You can control the image quality using the `loaderParams` attribute. This is particularly useful for optimizing performance or achieving specific visual requirements:
283
+
284
+ ```ts
285
+ // src/components/optimized-image.component.ts
286
+ @Component({
287
+ selector: 'optimized-image',
288
+ template: `
289
+ <!-- High quality for hero images -->
290
+ <img
291
+ [ngSrc]="heroImagePath"
292
+ alt="Hero image"
293
+ width="1200"
294
+ height="600"
295
+ [loaderParams]="{ quality: 85 }" />
296
+
297
+ <!-- Lower quality for thumbnails -->
298
+ <img
299
+ [ngSrc]="thumbnailPath"
300
+ alt="Thumbnail"
301
+ width="200"
302
+ height="150"
303
+ [loaderParams]="{ quality: 30 }" />
304
+
305
+ <!-- Custom language and quality -->
306
+ <img
307
+ [ngSrc]="imagePath"
308
+ alt="Localized image"
309
+ width="400"
310
+ height="300"
311
+ [loaderParams]="{ quality: 60, languageId: '2' }" />
312
+ `,
313
+ standalone: true
314
+ })
315
+ export class OptimizedImageComponent {
316
+ @Input() heroImagePath!: string;
317
+ @Input() thumbnailPath!: string;
318
+ @Input() imagePath!: string;
319
+ }
320
+ ```
321
+
322
+ **Quality Parameter Details:**
323
+ - **Range**: 1-100 (where 100 is highest quality)
324
+ - **Default**: 50 (balanced performance and quality)
325
+ - **Usage**: Pass via `loaderParams` object: `{ quality: 75 }`
326
+ - **Performance**: Lower values = smaller file sizes = faster loading
327
+
328
+ The image loader automatically handles:
329
+ - **Automatic resizing** based on the `width` and `height` attributes
330
+ - **Quality optimization** with a default quality of 50 for better performance
331
+ - **Language-specific images** using the current language context
332
+ - **Responsive images** that adapt to different screen sizes
333
+ - **Custom quality control** via the `loaderParams` attribute
334
+
233
335
  > 📚 Learn more about [`NgOptimizedImage`](https://angular.dev/guide/image-optimization)
234
336
 
235
337
  ## Quickstart: Render a Page with dotCMS
@@ -537,8 +639,7 @@ import { Component, OnDestroy, OnInit, signal, inject } from '@angular/core';
537
639
 
538
640
  import { getUVEState } from '@dotcms/uve';
539
641
  import { DotCMSPageAsset } from '@dotcms/types';
540
- import { DotCMSLayoutBody, DotCMSEditablePageService } from '@dotcms/angular';
541
- import { DOTCMS_CLIENT_TOKEN } from './app.config';
642
+ import { DotCMSLayoutBody, DotCMSEditablePageService, DotCMSClient } from '@dotcms/angular';
542
643
 
543
644
  @Component({
544
645
  imports: [DotCMSLayoutBody],
@@ -699,7 +800,49 @@ GitHub pull requests are the preferred method to contribute code to dotCMS. We w
699
800
 
700
801
  Please ensure your code follows the existing style and includes appropriate tests.
701
802
 
702
- ## Licensing Information
803
+ ## Changelog
804
+
805
+ ### [1.1.1]
806
+
807
+ #### ✨ Added - Enhanced Client Architecture
808
+
809
+ **New Features:**
810
+ - Added `DotCMSAngularProviderConfig` for Angular-specific configuration
811
+ - Custom HTTP client support with Angular's `HttpClient` integration
812
+ - Enhanced image optimization with automatic quality control (default: 50%)
813
+ - Improved provider system with better error handling and type safety
814
+
815
+ **No Breaking Changes:**
816
+ - `DotCMSClient` remains the same - no migration required
817
+ - All existing code continues to work without changes
818
+ - New features are additive and optional
819
+
820
+ #### 🔄 Enhanced - Provider System
821
+
822
+ **Improvements:**
823
+ - Enhanced `provideDotCMSClient` with optional custom HTTP client factory
824
+ - Added `DotCMSAngularProviderConfig` interface for better type safety
825
+ - Improved error handling and HTTP client architecture
826
+
827
+ **New Configuration Options:**
828
+ ```typescript
829
+ provideDotCMSClient({
830
+ dotcmsUrl: environment.dotcmsUrl,
831
+ authToken: environment.authToken,
832
+ siteId: environment.siteId,
833
+ httpClient: (http: HttpClient) => new AngularHttpClient(http) // New!
834
+ })
835
+ ```
836
+
837
+ #### 🎨 Enhanced - Image Loading
838
+
839
+ **Improvements:**
840
+ - Automatic quality optimization for better performance
841
+ - Enhanced responsive image support
842
+ - Improved language-specific image handling
843
+ - Better integration with Angular's `NgOptimizedImage` directive
844
+
845
+ ### Licensing Information
703
846
 
704
847
  dotCMS comes in multiple editions and as such is dual-licensed. The dotCMS Community Edition is licensed under the GPL 3.0 and is freely available for download, customization, and deployment for use within organizations of all stripes. dotCMS Enterprise Editions (EE) adds several enterprise features and is available via a supported, indemnified commercial license from dotCMS. For the differences between the editions, see [the feature page](http://www.dotcms.com/cms-platform/features).
705
848
 
@@ -3,6 +3,7 @@ import { inject, ViewContainerRef, TemplateRef, Input, Directive, makeEnvironmen
3
3
  import { UVE_MODE, DotCMSUVEAction, UVEEventType } from '@dotcms/types';
4
4
  import { getUVEState, sendMessageToUVE, initUVE, updateNavigation, createUVESubscription } from '@dotcms/uve';
5
5
  import { IMAGE_LOADER, NgComponentOutlet, AsyncPipe, NgTemplateOutlet, NgStyle } from '@angular/common';
6
+ import { HttpClient } from '@angular/common/http';
6
7
  import { createDotCMSClient } from '@dotcms/client';
7
8
  import { EditorComponent, TINYMCE_SCRIPT_SRC } from '@tinymce/tinymce-angular';
8
9
  import { DomSanitizer } from '@angular/platform-browser';
@@ -123,10 +124,11 @@ function createDotCMSURL(config, path) {
123
124
  const dotcmsHost = path ? new URL(path).origin : '';
124
125
  const imageSRC = src.includes('/dA/') ? src : `/dA/${src}`;
125
126
  const languageId = params?.languageId ?? '1';
127
+ const quality = params?.quality ?? 50;
126
128
  if (width) {
127
- return `${dotcmsHost}${imageSRC}/${width}w?language_id=${languageId}`;
129
+ return `${dotcmsHost}${imageSRC}/${width}w/${quality}q?language_id=${languageId}`;
128
130
  }
129
- return `${dotcmsHost}${imageSRC}?language_id=${languageId}`;
131
+ return `${dotcmsHost}${imageSRC}/${quality}q?language_id=${languageId}`;
130
132
  }
131
133
 
132
134
  // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
@@ -136,45 +138,52 @@ class DotCMSClient {
136
138
  }
137
139
  }
138
140
  /**
139
- * Creates environment providers for the DotCMS client to be used in Angular applications.
140
- * This function configures the DI container to provide a DotCMSClient instance
141
- * throughout the application using the specified configuration.
141
+ * Provides Angular environment providers for the DotCMS client.
142
142
  *
143
- * The provider should be registered at the application level (typically in main.ts)
144
- * to ensure a single instance is shared across the entire application.
143
+ * Registers a singleton DotCMS client instance in the Angular dependency injection system,
144
+ * configured with the given options. This allows you to inject `DotCMSClient` anywhere
145
+ * in your app using Angular's `inject()` function.
145
146
  *
146
- * @param options - Configuration object for the DotCMS client
147
- * @param options.apiUrl - The base URL for the DotCMS API
148
- * @param options.authToken - Authentication token for API requests (optional)
149
- * @param options.siteId - The site identifier (optional)
150
- * @returns Environment providers array that can be used with bootstrapApplication
147
+ * Should be added to the application's providers (e.g., in `main.ts` or `app.config.ts`).
148
+ *
149
+ * @param options - Configuration for the DotCMS client.
150
+ * @param options.dotcmsUrl - The base URL for the DotCMS instance (required).
151
+ * @param options.authToken - Authentication token for API requests (required).
152
+ * @param options.siteId - The site identifier (optional).
153
+ * @param options.requestOptions - Additional fetch options (optional).
154
+ * @param options.httpClient - Optional factory for a custom HTTP client, receives Angular's HttpClient.
155
+ * @returns Angular environment providers for the DotCMS client.
151
156
  *
152
157
  * @example
153
- * ```typescript
154
- * // main.ts
155
- * import { bootstrapApplication } from '@angular/platform-browser';
156
- * import { AppComponent } from './app/app.component';
157
158
  * import { provideDotCMSClient } from '@dotcms/angular';
158
159
  *
159
160
  * bootstrapApplication(AppComponent, {
160
161
  * providers: [
161
162
  * provideDotCMSClient({
162
- * apiUrl: 'https://demo.dotcms.com',
163
+ * dotcmsUrl: 'https://demo.dotcms.com',
163
164
  * authToken: 'your-auth-token',
164
- * siteId: 'your-site-id'
165
- * }),
166
- * // other providers...
165
+ * siteId: 'your-site-id',
166
+ * httpClient: (http) => new AngularHttpClient(http)
167
+ * })
167
168
  * ]
168
169
  * });
169
- * ```
170
- *
171
170
  */
172
171
  function provideDotCMSClient(options) {
173
- const dotCMSClient = createDotCMSClient(options);
174
172
  return makeEnvironmentProviders([
175
173
  {
176
174
  provide: DotCMSClient,
177
- useFactory: () => new DotCMSClient(dotCMSClient)
175
+ useFactory: () => {
176
+ const httpClient = options.httpClient
177
+ ? options.httpClient(inject(HttpClient))
178
+ : undefined;
179
+ const dotCMSClient = createDotCMSClient({
180
+ dotcmsUrl: options.dotcmsUrl,
181
+ authToken: options.authToken,
182
+ siteId: options.siteId,
183
+ httpClient: httpClient
184
+ });
185
+ return dotCMSClient;
186
+ }
178
187
  }
179
188
  ]);
180
189
  }
@@ -1708,7 +1717,7 @@ class RowComponent {
1708
1717
  this.customClasses = signal('');
1709
1718
  }
1710
1719
  ngOnChanges() {
1711
- this.customClasses.set(combineClasses([this.row.styleClass || 'dot-row']));
1720
+ this.customClasses.set(combineClasses([this.row.styleClass ?? '', 'dot-row']));
1712
1721
  }
1713
1722
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: RowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1714
1723
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: RowComponent, isStandalone: true, selector: "dotcms-row", inputs: { row: "row" }, usesOnChanges: true, ngImport: i0, template: `
@@ -1774,7 +1783,7 @@ class DotCMSLayoutBodyComponent {
1774
1783
  @if ($isEmpty() && $isDevMode()) {
1775
1784
  <dotcms-page-error-message />
1776
1785
  } @else {
1777
- @for (row of $rows(); track row.identifier) {
1786
+ @for (row of $rows(); track $index) {
1778
1787
  <dotcms-row [row]="row" />
1779
1788
  }
1780
1789
  }
@@ -1786,7 +1795,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImpor
1786
1795
  @if ($isEmpty() && $isDevMode()) {
1787
1796
  <dotcms-page-error-message />
1788
1797
  } @else {
1789
- @for (row of $rows(); track row.identifier) {
1798
+ @for (row of $rows(); track $index) {
1790
1799
  <dotcms-row [row]="row" />
1791
1800
  }
1792
1801
  }
@@ -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/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-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 standalone: true\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\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\n if (width) {\n return `${dotcmsHost}${imageSRC}/${width}w?language_id=${languageId}`;\n }\n\n return `${dotcmsHost}${imageSRC}?language_id=${languageId}`;\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { createDotCMSClient } from '@dotcms/client';\nimport { DotCMSClientConfig } 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 * Creates environment providers for the DotCMS client to be used in Angular applications.\n * This function configures the DI container to provide a DotCMSClient instance\n * throughout the application using the specified configuration.\n *\n * The provider should be registered at the application level (typically in main.ts)\n * to ensure a single instance is shared across the entire application.\n *\n * @param options - Configuration object for the DotCMS client\n * @param options.apiUrl - The base URL for the DotCMS API\n * @param options.authToken - Authentication token for API requests (optional)\n * @param options.siteId - The site identifier (optional)\n * @returns Environment providers array that can be used with bootstrapApplication\n *\n * @example\n * ```typescript\n * // main.ts\n * import { bootstrapApplication } from '@angular/platform-browser';\n * import { AppComponent } from './app/app.component';\n * import { provideDotCMSClient } from '@dotcms/angular';\n *\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideDotCMSClient({\n * apiUrl: 'https://demo.dotcms.com',\n * authToken: 'your-auth-token',\n * siteId: 'your-site-id'\n * }),\n * // other providers...\n * ]\n * });\n * ```\n *\n */\nexport function provideDotCMSClient(options: DotCMSClientConfig): EnvironmentProviders {\n const dotCMSClient = createDotCMSClient(options);\n\n return makeEnvironmentProviders([\n {\n provide: DotCMSClient,\n useFactory: () => new DotCMSClient(dotCMSClient)\n }\n ]);\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';\nimport { EventObj } from '@tinymce/tinymce-angular/editor/Events';\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/**\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() {\n return this.editorComponent?.editor;\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 {EventObj<MouseEvent>} { event }\n * @return {*}\n * @memberof DotCMSEditableTextComponent\n */\n onMouseDown({ event }: EventObj<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 content = this.editor.getContent({ format: this.format });\n\n if (!this.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 standalone: true,\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 standalone: true,\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 standalone: true,\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\n *ngComponentOutlet=\"\n contentComponent | async;\n inputs: { contentlet: $data() }\n \"></ng-container>\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() attrs: BlockEditorNode['attrs'];\n\n contentComponent: DynamicComponentEntity | undefined;\n protected readonly $data = computed(() => this.attrs?.['data']);\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 { ChangeDetectionStrategy, Component, computed, Input } from '@angular/core';\n\nimport { BlockEditorNode } from '@dotcms/types';\n\n@Component({\n selector: 'dotcms-block-editor-renderer-image',\n standalone: true,\n template: `\n <img [alt]=\"attrs?.['alt']\" [src]=\"$srcURL()\" />\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","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'dotcms-block-editor-renderer-bullet-list',\n standalone: true,\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 standalone: true,\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 standalone: true,\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 <thead>\n @for (rowNode of content?.slice(0, 1); track rowNode.type) {\n <tr>\n @for (cellNode of rowNode.content; track cellNode.type) {\n <th\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 \"></ng-container>\n </th>\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (rowNode of content?.slice(1); track rowNode.type) {\n <tr>\n @for (cellNode of rowNode.content; track cellNode.type) {\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 \"></ng-container>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n `\n})\nexport class DotTableBlock {\n @Input() content: BlockEditorNode[] | undefined;\n blockEditorItem = DotCMSBlockEditorItemComponent;\n}\n","import { ChangeDetectionStrategy, Component, computed, Input } from '@angular/core';\n\nimport { BlockEditorMark } from '@dotcms/types';\n\n@Component({\n selector: 'dotcms-block-editor-renderer-paragraph',\n standalone: true,\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 standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @switch (level) {\n @case ('1') {\n <h1>\n <ng-content />\n </h1>\n }\n @case ('2') {\n <h2>\n <ng-content />\n </h2>\n }\n @case ('3') {\n <h3>\n <ng-content />\n </h3>\n }\n @case ('4') {\n <h4>\n <ng-content />\n </h4>\n }\n @case ('5') {\n <h5>\n <ng-content />\n </h5>\n }\n @case ('6') {\n <h6>\n <ng-content />\n </h6>\n }\n @default {\n <h1>\n <ng-content />\n </h1>\n }\n }\n `\n})\nexport class DotHeadingBlock {\n @Input() level!: string;\n}\n\ninterface TextBlockProps {\n marks?: BlockEditorMark[];\n text?: string;\n}\n\n@Component({\n selector: 'dotcms-block-editor-renderer-text',\n standalone: true,\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 <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 standalone: true,\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 standalone: true,\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 { 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 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 \"></ng-container>\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\" />\n }\n\n @case (BLOCKS.DOT_CONTENT) {\n <dotcms-block-editor-renderer-contentlet\n [attrs]=\"node.attrs || {}\"\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\n *ngComponentOutlet=\"customRender | async; inputs: { content: node }\"></ng-container>\n</ng-template>\n","import { Component, Input, signal } from '@angular/core';\n\nimport { UVE_MODE, BlockEditorContent } 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@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!: BlockEditorContent;\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, 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('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.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 } 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 class=\"dot-row-container\">\n <div [class]=\"customClasses()\" 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\n customClasses = signal('');\n\n ngOnChanges() {\n this.customClasses.set(combineClasses([this.row.styleClass || 'dot-row']));\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 row.identifier) {\n <dotcms-row [row]=\"row\" />\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';\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 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/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-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 standalone: true\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 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';\nimport { EventObj } from '@tinymce/tinymce-angular/editor/Events';\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/**\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() {\n return this.editorComponent?.editor;\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 {EventObj<MouseEvent>} { event }\n * @return {*}\n * @memberof DotCMSEditableTextComponent\n */\n onMouseDown({ event }: EventObj<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 content = this.editor.getContent({ format: this.format });\n\n if (!this.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 standalone: true,\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 standalone: true,\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 standalone: true,\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\n *ngComponentOutlet=\"\n contentComponent | async;\n inputs: { contentlet: $data() }\n \"></ng-container>\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() attrs: BlockEditorNode['attrs'];\n\n contentComponent: DynamicComponentEntity | undefined;\n protected readonly $data = computed(() => this.attrs?.['data']);\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 { ChangeDetectionStrategy, Component, computed, Input } from '@angular/core';\n\nimport { BlockEditorNode } from '@dotcms/types';\n\n@Component({\n selector: 'dotcms-block-editor-renderer-image',\n standalone: true,\n template: `\n <img [alt]=\"attrs?.['alt']\" [src]=\"$srcURL()\" />\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","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'dotcms-block-editor-renderer-bullet-list',\n standalone: true,\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 standalone: true,\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 standalone: true,\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 <thead>\n @for (rowNode of content?.slice(0, 1); track rowNode.type) {\n <tr>\n @for (cellNode of rowNode.content; track cellNode.type) {\n <th\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 \"></ng-container>\n </th>\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (rowNode of content?.slice(1); track rowNode.type) {\n <tr>\n @for (cellNode of rowNode.content; track cellNode.type) {\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 \"></ng-container>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n `\n})\nexport class DotTableBlock {\n @Input() content: BlockEditorNode[] | undefined;\n blockEditorItem = DotCMSBlockEditorItemComponent;\n}\n","import { ChangeDetectionStrategy, Component, computed, Input } from '@angular/core';\n\nimport { BlockEditorMark } from '@dotcms/types';\n\n@Component({\n selector: 'dotcms-block-editor-renderer-paragraph',\n standalone: true,\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 standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @switch (level) {\n @case ('1') {\n <h1>\n <ng-content />\n </h1>\n }\n @case ('2') {\n <h2>\n <ng-content />\n </h2>\n }\n @case ('3') {\n <h3>\n <ng-content />\n </h3>\n }\n @case ('4') {\n <h4>\n <ng-content />\n </h4>\n }\n @case ('5') {\n <h5>\n <ng-content />\n </h5>\n }\n @case ('6') {\n <h6>\n <ng-content />\n </h6>\n }\n @default {\n <h1>\n <ng-content />\n </h1>\n }\n }\n `\n})\nexport class DotHeadingBlock {\n @Input() level!: string;\n}\n\ninterface TextBlockProps {\n marks?: BlockEditorMark[];\n text?: string;\n}\n\n@Component({\n selector: 'dotcms-block-editor-renderer-text',\n standalone: true,\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 <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 standalone: true,\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 standalone: true,\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 { 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 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 \"></ng-container>\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\" />\n }\n\n @case (BLOCKS.DOT_CONTENT) {\n <dotcms-block-editor-renderer-contentlet\n [attrs]=\"node.attrs || {}\"\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\n *ngComponentOutlet=\"customRender | async; inputs: { content: node }\"></ng-container>\n</ng-template>\n","import { Component, Input, signal } from '@angular/core';\n\nimport { UVE_MODE, BlockEditorContent } 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@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!: BlockEditorContent;\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, 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('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.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 } 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 class=\"dot-row-container\">\n <div [class]=\"customClasses()\" 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\n customClasses = signal('');\n\n ngOnChanges() {\n this.customClasses.set(combineClasses([this.row.styleClass ?? '', 'dot-row']));\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) {\n <dotcms-row [row]=\"row\" />\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';\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 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,6 +1,7 @@
1
+ import { HttpClient } from '@angular/common/http';
1
2
  import { EnvironmentProviders } from '@angular/core';
2
3
  import { createDotCMSClient } from '@dotcms/client';
3
- import { DotCMSClientConfig } from '@dotcms/types';
4
+ import { DotCMSClientConfig, DotHttpClient } from '@dotcms/types';
4
5
  /**
5
6
  * Type alias for the return type of createDotCMSClient function.
6
7
  * Used to ensure type consistency across the DotCMSClient interface and class.
@@ -22,39 +23,87 @@ export declare class DotCMSClient {
22
23
  constructor(client: ClientType);
23
24
  }
24
25
  /**
25
- * Creates environment providers for the DotCMS client to be used in Angular applications.
26
- * This function configures the DI container to provide a DotCMSClient instance
27
- * throughout the application using the specified configuration.
26
+ * Provides Angular environment providers for the DotCMS client.
28
27
  *
29
- * The provider should be registered at the application level (typically in main.ts)
30
- * to ensure a single instance is shared across the entire application.
28
+ * Registers a singleton DotCMS client instance in the Angular dependency injection system,
29
+ * configured with the given options. This allows you to inject `DotCMSClient` anywhere
30
+ * in your app using Angular's `inject()` function.
31
31
  *
32
- * @param options - Configuration object for the DotCMS client
33
- * @param options.apiUrl - The base URL for the DotCMS API
34
- * @param options.authToken - Authentication token for API requests (optional)
35
- * @param options.siteId - The site identifier (optional)
36
- * @returns Environment providers array that can be used with bootstrapApplication
32
+ * Should be added to the application's providers (e.g., in `main.ts` or `app.config.ts`).
33
+ *
34
+ * @param options - Configuration for the DotCMS client.
35
+ * @param options.dotcmsUrl - The base URL for the DotCMS instance (required).
36
+ * @param options.authToken - Authentication token for API requests (required).
37
+ * @param options.siteId - The site identifier (optional).
38
+ * @param options.requestOptions - Additional fetch options (optional).
39
+ * @param options.httpClient - Optional factory for a custom HTTP client, receives Angular's HttpClient.
40
+ * @returns Angular environment providers for the DotCMS client.
37
41
  *
38
42
  * @example
39
- * ```typescript
40
- * // main.ts
41
- * import { bootstrapApplication } from '@angular/platform-browser';
42
- * import { AppComponent } from './app/app.component';
43
43
  * import { provideDotCMSClient } from '@dotcms/angular';
44
44
  *
45
45
  * bootstrapApplication(AppComponent, {
46
46
  * providers: [
47
47
  * provideDotCMSClient({
48
- * apiUrl: 'https://demo.dotcms.com',
48
+ * dotcmsUrl: 'https://demo.dotcms.com',
49
49
  * authToken: 'your-auth-token',
50
- * siteId: 'your-site-id'
51
- * }),
52
- * // other providers...
50
+ * siteId: 'your-site-id',
51
+ * httpClient: (http) => new AngularHttpClient(http)
52
+ * })
53
53
  * ]
54
54
  * });
55
+ */
56
+ export declare function provideDotCMSClient(options: DotCMSAngularProviderConfig): EnvironmentProviders;
57
+ /**
58
+ * Configuration interface for the DotCMS Angular provider.
59
+ *
60
+ * Extends the base `DotCMSClientConfig` but replaces the `httpClient` property
61
+ * with an Angular-specific factory function that receives Angular's `HttpClient`
62
+ * and returns a `DotHttpClient` implementation.
63
+ *
64
+ * This interface is designed to work seamlessly with Angular's dependency injection
65
+ * system, allowing you to leverage Angular's built-in HTTP client while maintaining
66
+ * compatibility with the DotCMS client's expected interface.
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * const config: DotCMSAngularProviderConfig = {
71
+ * dotcmsUrl: 'https://demo.dotcms.com',
72
+ * authToken: 'your-auth-token',
73
+ * siteId: 'your-site-id',
74
+ * httpClient: (http: HttpClient) => new AngularHttpClient(http)
75
+ * };
55
76
  * ```
56
77
  *
78
+ * @example
79
+ * ```typescript
80
+ * // Using with provideDotCMSClient
81
+ * provideDotCMSClient({
82
+ * dotcmsUrl: 'https://demo.dotcms.com',
83
+ * authToken: 'your-auth-token',
84
+ * httpClient: (http) => new AngularHttpClient(http)
85
+ * })
86
+ * ```
57
87
  */
58
- export declare function provideDotCMSClient(options: DotCMSClientConfig): EnvironmentProviders;
88
+ export interface DotCMSAngularProviderConfig extends Omit<DotCMSClientConfig, 'httpClient'> {
89
+ /**
90
+ * Optional factory function that creates a custom HTTP client implementation.
91
+ *
92
+ * This function receives Angular's `HttpClient` instance and should return
93
+ * a `DotHttpClient` implementation. If not provided, the DotCMS client will
94
+ * use its default HTTP client implementation.
95
+ *
96
+ * @param http - Angular's HttpClient instance from dependency injection
97
+ * @returns A DotHttpClient implementation
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * httpClient: (http: HttpClient) => {
102
+ * return new AngularHttpClient(http);
103
+ * }
104
+ * ```
105
+ */
106
+ httpClient?: (http: HttpClient) => DotHttpClient;
107
+ }
59
108
  export {};
60
109
  //# sourceMappingURL=dotcms-client.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dotcms-client.provider.d.ts","sourceRoot":"","sources":["../../../../../../../libs/sdk/angular/src/lib/providers/dotcms-client/dotcms-client.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAA4B,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;GAGG;AACH,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAIxD;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAa,SAAQ,UAAU;CAAG;AAGnD,qBAAa,YAAY;gBACT,MAAM,EAAE,UAAU;CAGjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,GAAG,oBAAoB,CASrF"}
1
+ {"version":3,"file":"dotcms-client.provider.d.ts","sourceRoot":"","sources":["../../../../../../../libs/sdk/angular/src/lib/providers/dotcms-client/dotcms-client.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAoC,MAAM,eAAe,CAAC;AAEvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAElE;;;GAGG;AACH,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAIxD;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAa,SAAQ,UAAU;CAAG;AAGnD,qBAAa,YAAY;gBACT,MAAM,EAAE,UAAU;CAGjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,2BAA2B,GAAG,oBAAoB,CAmB9F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC;IACvF;;;;;;;;;;;;;;;;OAgBG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,aAAa,CAAC;CACpD"}
@@ -1 +1 @@
1
- {"version":3,"file":"dotcms-image_loader.d.ts","sourceRoot":"","sources":["../../../../../../../libs/sdk/angular/src/lib/providers/dotcms-image-loader/dotcms-image_loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA8BzC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAelE"}
1
+ {"version":3,"file":"dotcms-image_loader.d.ts","sourceRoot":"","sources":["../../../../../../../libs/sdk/angular/src/lib/providers/dotcms-image-loader/dotcms-image_loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAmCzC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAelE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotcms/angular",
3
- "version": "1.0.6",
3
+ "version": "1.1.1-next.1",
4
4
  "peerDependencies": {
5
5
  "rxjs": ">=7.0.0",
6
6
  "@angular/common": ">=17.0.0",
@@ -45,4 +45,4 @@
45
45
  }
46
46
  },
47
47
  "sideEffects": false
48
- }
48
+ }