@dotcms/uve 0.0.1-beta.14 → 0.0.1-beta.16

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.
@@ -1,4 +1,5 @@
1
- import { DotCMSContainerBound } from '@dotcms/uve/internal';
1
+ import { BlockEditorState, DotCMSContainerBound } from '@dotcms/uve/internal';
2
+ import { Block } from '@dotcms/uve/types';
2
3
  /**
3
4
  * Sets the bounds of the containers in the editor.
4
5
  * Retrieves the containers from the DOM and sends their position data to the editor.
@@ -6,3 +7,17 @@ import { DotCMSContainerBound } from '@dotcms/uve/internal';
6
7
  * @memberof DotCMSPageEditor
7
8
  */
8
9
  export declare function setBounds(bounds: DotCMSContainerBound[]): void;
10
+ /**
11
+ * Validates the structure of a Block Editor block.
12
+ *
13
+ * This function checks that:
14
+ * 1. The blocks parameter is a valid object
15
+ * 2. The block has a 'doc' type
16
+ * 3. The block has a valid content array that is not empty
17
+ *
18
+ * @param {Block} blocks - The blocks structure to validate
19
+ * @returns {BlockEditorState} Object containing validation state and any error message
20
+ * @property {boolean} BlockEditorState.isValid - Whether the blocks structure is valid
21
+ * @property {string | null} BlockEditorState.error - Error message if invalid, null if valid
22
+ */
23
+ export declare const isValidBlocks: (blocks: Block) => BlockEditorState;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Enum representing the different types of blocks available in the Block Editor
3
+ *
4
+ * @export
5
+ * @enum {string}
6
+ */
7
+ export declare enum Blocks {
8
+ /** Represents a paragraph block */
9
+ PARAGRAPH = "paragraph",
10
+ /** Represents a heading block */
11
+ HEADING = "heading",
12
+ /** Represents a text block */
13
+ TEXT = "text",
14
+ /** Represents a bullet/unordered list block */
15
+ BULLET_LIST = "bulletList",
16
+ /** Represents an ordered/numbered list block */
17
+ ORDERED_LIST = "orderedList",
18
+ /** Represents a list item within a list block */
19
+ LIST_ITEM = "listItem",
20
+ /** Represents a blockquote block */
21
+ BLOCK_QUOTE = "blockquote",
22
+ /** Represents a code block */
23
+ CODE_BLOCK = "codeBlock",
24
+ /** Represents a hard break (line break) */
25
+ HARDBREAK = "hardBreak",
26
+ /** Represents a horizontal rule/divider */
27
+ HORIZONTAL_RULE = "horizontalRule",
28
+ /** Represents a DotCMS image block */
29
+ DOT_IMAGE = "dotImage",
30
+ /** Represents a DotCMS video block */
31
+ DOT_VIDEO = "dotVideo",
32
+ /** Represents a table block */
33
+ TABLE = "table",
34
+ /** Represents a DotCMS content block */
35
+ DOT_CONTENT = "dotContent"
36
+ }
37
+ /**
38
+ * Represents the validation state of a Block Editor instance
39
+ *
40
+ * @interface BlockEditorState
41
+ * @property {boolean} isValid - Whether the blocks structure is valid
42
+ * @property {string | null} error - Error message if blocks are invalid, null otherwise
43
+ */
44
+ export interface BlockEditorState {
45
+ error: string | null;
46
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Represents a Mark used by text content in the Block Editor
3
+ *
4
+ * @export
5
+ * @interface Mark
6
+ */
7
+ export interface Mark {
8
+ type: string;
9
+ attrs: Record<string, string>;
10
+ }
11
+ /**
12
+ * Represents a Content Node used by the Block Editor
13
+ *
14
+ * @export
15
+ * @interface ContentNode
16
+ */
17
+ export interface ContentNode {
18
+ /** The type of content node */
19
+ type: string;
20
+ /** Child content nodes */
21
+ content?: ContentNode[];
22
+ /** Optional attributes for the node */
23
+ attrs?: Record<string, any>;
24
+ /** Optional marks applied to text content */
25
+ marks?: Mark[];
26
+ /** Optional text content */
27
+ text?: string;
28
+ }
29
+ /**
30
+ * Represents a Block in the Block Editor
31
+ *
32
+ * @export
33
+ * @interface Block
34
+ */
35
+ export interface Block {
36
+ content?: ContentNode[];
37
+ type: string;
38
+ }
@@ -1,4 +1,5 @@
1
1
  import { ContentTypeMainFields, DotCMSContainerBound } from './internal';
2
+ import { DEVELOPMENT_MODE, PRODUCTION_MODE } from '../../../internal';
2
3
  /**
3
4
  * Represents the state of the Universal Visual Editor (UVE)
4
5
  * @interface
@@ -17,6 +18,11 @@ export interface UVEState {
17
18
  publishDate: string | null;
18
19
  languageId: string | null;
19
20
  }
21
+ /**
22
+ * The mode of the page renderer component
23
+ * @enum {string}
24
+ */
25
+ export type DotCMSPageRendererMode = typeof PRODUCTION_MODE | typeof DEVELOPMENT_MODE;
20
26
  /**
21
27
  * Possible modes of UVE (Universal Visual Editor)
22
28
  * @enum {string}
@@ -179,3 +185,41 @@ export type UVEEventPayloadMap = {
179
185
  [UVEEventType.IFRAME_SCROLL]: 'up' | 'down';
180
186
  [UVEEventType.CONTENTLET_HOVERED]: unknown;
181
187
  };
188
+ /**
189
+ *
190
+ * Interface representing the data needed for container editing
191
+ * @interface EditableContainerData
192
+ */
193
+ export interface EditableContainerData {
194
+ uuid: string;
195
+ identifier: string;
196
+ acceptTypes: string;
197
+ maxContentlets: number;
198
+ variantId?: string;
199
+ }
200
+ /**
201
+ *
202
+ * Interface representing the data attributes of a DotCMS container.
203
+ * @interface DotContainerAttributes
204
+ */
205
+ export interface DotContainerAttributes {
206
+ 'data-dot-object': string;
207
+ 'data-dot-accept-types': string;
208
+ 'data-dot-identifier': string;
209
+ 'data-max-contentlets': string;
210
+ 'data-dot-uuid': string;
211
+ }
212
+ /**
213
+ *
214
+ * Interface representing the data attributes of a DotCMS contentlet.
215
+ * @interface DotContentletAttributes
216
+ */
217
+ export interface DotContentletAttributes {
218
+ 'data-dot-identifier': string;
219
+ 'data-dot-basetype': string;
220
+ 'data-dot-title': string;
221
+ 'data-dot-inode': string;
222
+ 'data-dot-type': string;
223
+ 'data-dot-container': string;
224
+ 'data-dot-on-number-of-pages': string;
225
+ }
@@ -0,0 +1,421 @@
1
+ export interface DotCMSPageAsset {
2
+ canCreateTemplate?: boolean;
3
+ containers: {
4
+ [key: string]: DotCMSPageAssetContainer;
5
+ };
6
+ layout: DotCMSLayout;
7
+ page: DotCMSPage;
8
+ site: DotCMSSite;
9
+ template: DotCMSTemplate;
10
+ viewAs?: DotCMSViewAs;
11
+ vanityUrl?: DotCMSVanityUrl;
12
+ }
13
+ export interface DotPageAssetLayoutRow {
14
+ identifier: number;
15
+ value?: string;
16
+ id?: string;
17
+ columns: DotPageAssetLayoutColumn[];
18
+ styleClass?: string;
19
+ }
20
+ export interface DotCMSVanityUrl {
21
+ pattern: string;
22
+ vanityUrlId: string;
23
+ url: string;
24
+ siteId: string;
25
+ languageId: number;
26
+ forwardTo: string;
27
+ response: number;
28
+ order: number;
29
+ temporaryRedirect: boolean;
30
+ permanentRedirect: boolean;
31
+ forward: boolean;
32
+ }
33
+ export interface DotPageAssetLayoutColumn {
34
+ preview: boolean;
35
+ containers: DotCMSColumnContainer[];
36
+ widthPercent: number;
37
+ width: number;
38
+ leftOffset: number;
39
+ left: number;
40
+ styleClass?: string;
41
+ }
42
+ export interface DotCMSColumnContainer {
43
+ identifier: string;
44
+ uuid: string;
45
+ historyUUIDs: string[];
46
+ }
47
+ export interface DotCMSPageAssetContainer {
48
+ container: DotCMSContainer;
49
+ containerStructures: DotCMSContainerStructure[];
50
+ contentlets: {
51
+ [key: string]: DotCMSContentlet[];
52
+ };
53
+ }
54
+ export interface DotCMSContainer {
55
+ identifier: string;
56
+ uuid: string;
57
+ iDate: number;
58
+ type: string;
59
+ owner?: string;
60
+ inode: string;
61
+ source: string;
62
+ title: string;
63
+ friendlyName: string;
64
+ modDate: number;
65
+ modUser: string;
66
+ sortOrder: number;
67
+ showOnMenu: boolean;
68
+ code?: string;
69
+ maxContentlets: number;
70
+ useDiv: boolean;
71
+ sortContentletsBy?: string;
72
+ preLoop: string;
73
+ postLoop: string;
74
+ staticify: boolean;
75
+ luceneQuery?: string;
76
+ notes: string;
77
+ languageId?: number;
78
+ path?: string;
79
+ live: boolean;
80
+ locked: boolean;
81
+ working: boolean;
82
+ deleted: boolean;
83
+ name: string;
84
+ archived: boolean;
85
+ permissionId: string;
86
+ versionId: string;
87
+ versionType: string;
88
+ permissionType: string;
89
+ categoryId: string;
90
+ idate: number;
91
+ new: boolean;
92
+ acceptTypes: string;
93
+ contentlets: DotCMSContentlet[];
94
+ parentPermissionable: DotCMSSiteParentPermissionable;
95
+ }
96
+ export interface DotCMSContentlet {
97
+ archived: boolean;
98
+ baseType: string;
99
+ deleted?: boolean;
100
+ binary?: string;
101
+ binaryContentAsset?: string;
102
+ binaryVersion?: string;
103
+ contentType: string;
104
+ file?: string;
105
+ folder: string;
106
+ hasLiveVersion?: boolean;
107
+ hasTitleImage: boolean;
108
+ host: string;
109
+ hostName: string;
110
+ identifier: string;
111
+ inode: string;
112
+ image?: any;
113
+ languageId: number;
114
+ language?: string;
115
+ live: boolean;
116
+ locked: boolean;
117
+ mimeType?: string;
118
+ modDate: string;
119
+ modUser: string;
120
+ modUserName: string;
121
+ owner: string;
122
+ sortOrder: number;
123
+ stInode: string;
124
+ title: string;
125
+ titleImage: string;
126
+ text?: string;
127
+ url: string;
128
+ working: boolean;
129
+ body?: string;
130
+ contentTypeIcon?: string;
131
+ variant?: string;
132
+ __icon__?: string;
133
+ [key: string]: any;
134
+ }
135
+ export interface DotcmsNavigationItem {
136
+ code?: any;
137
+ folder: string;
138
+ children?: DotcmsNavigationItem[];
139
+ host: string;
140
+ languageId: number;
141
+ href: string;
142
+ title: string;
143
+ type: string;
144
+ hash: number;
145
+ target: string;
146
+ order: number;
147
+ }
148
+ interface DotCMSTemplate {
149
+ iDate: number;
150
+ type: string;
151
+ owner: string;
152
+ inode: string;
153
+ identifier: string;
154
+ source: string;
155
+ title: string;
156
+ friendlyName: string;
157
+ modDate: number;
158
+ modUser: string;
159
+ sortOrder: number;
160
+ showOnMenu: boolean;
161
+ image: string;
162
+ drawed: boolean;
163
+ drawedBody: string;
164
+ theme: string;
165
+ anonymous: boolean;
166
+ template: boolean;
167
+ name: string;
168
+ live: boolean;
169
+ archived: boolean;
170
+ locked: boolean;
171
+ working: boolean;
172
+ permissionId: string;
173
+ versionId: string;
174
+ versionType: string;
175
+ deleted: boolean;
176
+ permissionType: string;
177
+ categoryId: string;
178
+ idate: number;
179
+ new: boolean;
180
+ canEdit: boolean;
181
+ }
182
+ interface DotCMSPage {
183
+ template: string;
184
+ modDate: number;
185
+ metadata: string;
186
+ cachettl: string;
187
+ pageURI: string;
188
+ title: string;
189
+ type: string;
190
+ showOnMenu: string;
191
+ httpsRequired: boolean;
192
+ inode: string;
193
+ disabledWYSIWYG: any[];
194
+ seokeywords: string;
195
+ host: string;
196
+ lastReview: number;
197
+ working: boolean;
198
+ locked: boolean;
199
+ stInode: string;
200
+ friendlyName: string;
201
+ live: boolean;
202
+ owner: string;
203
+ identifier: string;
204
+ nullProperties: any[];
205
+ friendlyname: string;
206
+ pagemetadata: string;
207
+ languageId: number;
208
+ url: string;
209
+ seodescription: string;
210
+ modUserName: string;
211
+ folder: string;
212
+ deleted: boolean;
213
+ sortOrder: number;
214
+ modUser: string;
215
+ pageUrl: string;
216
+ workingInode: string;
217
+ shortyWorking: string;
218
+ canEdit: boolean;
219
+ canRead: boolean;
220
+ canLock: boolean;
221
+ lockedOn: number;
222
+ lockedBy: string;
223
+ lockedByName: string;
224
+ liveInode: string;
225
+ shortyLive: string;
226
+ }
227
+ interface DotCMSViewAs {
228
+ language: {
229
+ id: number;
230
+ languageCode: string;
231
+ countryCode: string;
232
+ language: string;
233
+ country: string;
234
+ };
235
+ mode: string;
236
+ }
237
+ interface DotCMSLayout {
238
+ pageWidth: string;
239
+ width: string;
240
+ layout: string;
241
+ title: string;
242
+ header: boolean;
243
+ footer: boolean;
244
+ body: DotPageAssetLayoutBody;
245
+ sidebar: DotPageAssetLayoutSidebar;
246
+ }
247
+ interface DotCMSContainerStructure {
248
+ id: string;
249
+ structureId: string;
250
+ containerInode: string;
251
+ containerId: string;
252
+ code: string;
253
+ contentTypeVar: string;
254
+ }
255
+ interface DotPageAssetLayoutSidebar {
256
+ preview: boolean;
257
+ containers: DotCMSContainer[];
258
+ location: string;
259
+ widthPercent: number;
260
+ width: string;
261
+ }
262
+ interface DotPageAssetLayoutBody {
263
+ rows: DotPageAssetLayoutRow[];
264
+ }
265
+ interface DotCMSSite {
266
+ lowIndexPriority: boolean;
267
+ name: string;
268
+ default: boolean;
269
+ aliases: string;
270
+ parent: boolean;
271
+ tagStorage: string;
272
+ systemHost: boolean;
273
+ inode: string;
274
+ versionType: string;
275
+ structureInode: string;
276
+ hostname: string;
277
+ hostThumbnail?: any;
278
+ owner: string;
279
+ permissionId: string;
280
+ permissionType: string;
281
+ type: string;
282
+ identifier: string;
283
+ modDate: number;
284
+ host: string;
285
+ live: boolean;
286
+ indexPolicy: string;
287
+ categoryId: string;
288
+ actionId?: any;
289
+ new: boolean;
290
+ archived: boolean;
291
+ locked: boolean;
292
+ disabledWysiwyg: any[];
293
+ modUser: string;
294
+ working: boolean;
295
+ titleImage: {
296
+ present: boolean;
297
+ };
298
+ folder: string;
299
+ htmlpage: boolean;
300
+ fileAsset: boolean;
301
+ vanityUrl: boolean;
302
+ keyValue: boolean;
303
+ structure?: DotCMSSiteStructure;
304
+ title: string;
305
+ languageId: number;
306
+ indexPolicyDependencies: string;
307
+ contentTypeId: string;
308
+ versionId: string;
309
+ lastReview: number;
310
+ nextReview?: any;
311
+ reviewInterval?: any;
312
+ sortOrder: number;
313
+ contentType: DotCMSSiteContentType;
314
+ }
315
+ interface DotCMSSiteContentType {
316
+ owner?: any;
317
+ parentPermissionable: DotCMSSiteParentPermissionable;
318
+ permissionId: string;
319
+ permissionType: string;
320
+ }
321
+ export interface DotCMSSiteParentPermissionable {
322
+ Inode: string;
323
+ Identifier: string;
324
+ permissionByIdentifier: boolean;
325
+ type: string;
326
+ owner?: any;
327
+ identifier: string;
328
+ permissionId: string;
329
+ parentPermissionable?: any;
330
+ permissionType: string;
331
+ inode: string;
332
+ childrenPermissionable?: any;
333
+ variantId?: string;
334
+ }
335
+ interface DotCMSSiteStructure {
336
+ iDate: number;
337
+ type: string;
338
+ owner?: any;
339
+ inode: string;
340
+ identifier: string;
341
+ name: string;
342
+ description: string;
343
+ defaultStructure: boolean;
344
+ reviewInterval?: any;
345
+ reviewerRole?: any;
346
+ pagedetail?: any;
347
+ structureType: number;
348
+ fixed: boolean;
349
+ system: boolean;
350
+ velocityVarName: string;
351
+ urlMapPattern?: any;
352
+ host: string;
353
+ folder: string;
354
+ publishDateVar?: any;
355
+ expireDateVar?: any;
356
+ modDate: number;
357
+ fields: DotCMSSiteField[];
358
+ widget: boolean;
359
+ detailPage?: any;
360
+ fieldsBySortOrder: DotCMSSiteField[];
361
+ form: boolean;
362
+ htmlpageAsset: boolean;
363
+ content: boolean;
364
+ fileAsset: boolean;
365
+ persona: boolean;
366
+ permissionId: string;
367
+ permissionType: string;
368
+ live: boolean;
369
+ categoryId: string;
370
+ idate: number;
371
+ new: boolean;
372
+ archived: boolean;
373
+ locked: boolean;
374
+ modUser: string;
375
+ working: boolean;
376
+ title: string;
377
+ versionId: string;
378
+ versionType: string;
379
+ }
380
+ interface DotCMSSiteField {
381
+ iDate: number;
382
+ type: string;
383
+ owner?: any;
384
+ inode: string;
385
+ identifier: string;
386
+ structureInode: string;
387
+ fieldName: string;
388
+ fieldType: string;
389
+ fieldRelationType?: any;
390
+ fieldContentlet: string;
391
+ required: boolean;
392
+ velocityVarName: string;
393
+ sortOrder: number;
394
+ values?: any;
395
+ regexCheck?: any;
396
+ hint?: any;
397
+ defaultValue?: any;
398
+ indexed: boolean;
399
+ listed: boolean;
400
+ fixed: boolean;
401
+ readOnly: boolean;
402
+ searchable: boolean;
403
+ unique: boolean;
404
+ modDate: number;
405
+ dataType: string;
406
+ live: boolean;
407
+ categoryId: string;
408
+ idate: number;
409
+ new: boolean;
410
+ archived: boolean;
411
+ locked: boolean;
412
+ modUser: string;
413
+ working: boolean;
414
+ permissionId: string;
415
+ parentPermissionable?: any;
416
+ permissionType: string;
417
+ title: string;
418
+ versionId: string;
419
+ versionType: string;
420
+ }
421
+ export {};
package/src/types.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  export * from './lib/types/editor/public';
2
2
  export * from './lib/types/events/public';
3
+ export * from './lib/types/block-editor-renderer/public';
4
+ export * from './lib/types/page/public';