@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 +149 -6
- package/fesm2022/dotcms-angular.mjs +36 -27
- package/fesm2022/dotcms-angular.mjs.map +1 -1
- package/lib/providers/dotcms-client/dotcms-client.provider.d.ts +69 -20
- package/lib/providers/dotcms-client/dotcms-client.provider.d.ts.map +1 -1
- package/lib/providers/dotcms-image-loader/dotcms-image_loader.d.ts.map +1 -1
- package/package.json +2 -2
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
|
-
##
|
|
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
|
-
*
|
|
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
|
-
*
|
|
144
|
-
*
|
|
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
|
-
*
|
|
147
|
-
*
|
|
148
|
-
* @param options
|
|
149
|
-
*
|
|
150
|
-
*
|
|
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
|
-
*
|
|
163
|
+
* dotcmsUrl: 'https://demo.dotcms.com',
|
|
163
164
|
* authToken: 'your-auth-token',
|
|
164
|
-
* siteId: 'your-site-id'
|
|
165
|
-
*
|
|
166
|
-
*
|
|
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: () =>
|
|
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
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
-
*
|
|
30
|
-
*
|
|
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
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* @param options
|
|
35
|
-
*
|
|
36
|
-
*
|
|
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
|
-
*
|
|
48
|
+
* dotcmsUrl: 'https://demo.dotcms.com',
|
|
49
49
|
* authToken: 'your-auth-token',
|
|
50
|
-
* siteId: 'your-site-id'
|
|
51
|
-
*
|
|
52
|
-
*
|
|
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
|
|
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,
|
|
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;
|
|
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"}
|