@ngstarter-ui/components 21.0.30 → 21.0.31

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.
Files changed (28) hide show
  1. package/ai/component-registry.json +49 -10
  2. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-CKrOhA7h.mjs → ngstarter-ui-components-content-editor-code-block.component-BZniTqu-.mjs} +2 -2
  3. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-CKrOhA7h.mjs.map → ngstarter-ui-components-content-editor-code-block.component-BZniTqu-.mjs.map} +1 -1
  4. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-zSApBzF3.mjs → ngstarter-ui-components-content-editor-embed-block-QzDMzd3u.mjs} +2 -2
  5. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-zSApBzF3.mjs.map → ngstarter-ui-components-content-editor-embed-block-QzDMzd3u.mjs.map} +1 -1
  6. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-Dv8d0nCy.mjs → ngstarter-ui-components-content-editor-heading-block.component-CnYRnDBY.mjs} +2 -2
  7. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-Dv8d0nCy.mjs.map → ngstarter-ui-components-content-editor-heading-block.component-CnYRnDBY.mjs.map} +1 -1
  8. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-g-H7a5Z_.mjs → ngstarter-ui-components-content-editor-image-block.component-IP_eRCQ2.mjs} +2 -2
  9. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-g-H7a5Z_.mjs.map → ngstarter-ui-components-content-editor-image-block.component-IP_eRCQ2.mjs.map} +1 -1
  10. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-PgqisgxY.mjs → ngstarter-ui-components-content-editor-list-block.component-amyfzXOW.mjs} +2 -2
  11. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-PgqisgxY.mjs.map → ngstarter-ui-components-content-editor-list-block.component-amyfzXOW.mjs.map} +1 -1
  12. package/fesm2022/{ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs → ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-DA-VnRa_.mjs} +453 -36
  13. package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-DA-VnRa_.mjs.map +1 -0
  14. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs → ngstarter-ui-components-content-editor-paragraph-block.component-DtophI4_.mjs} +2 -2
  15. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs.map → ngstarter-ui-components-content-editor-paragraph-block.component-DtophI4_.mjs.map} +1 -1
  16. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-Df92Nqvp.mjs → ngstarter-ui-components-content-editor-quote-block.component-B20eHQdw.mjs} +2 -2
  17. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-Df92Nqvp.mjs.map → ngstarter-ui-components-content-editor-quote-block.component-B20eHQdw.mjs.map} +1 -1
  18. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-D4rdPkGz.mjs → ngstarter-ui-components-content-editor-table-block.component-hJ4OxKRX.mjs} +4 -4
  19. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-D4rdPkGz.mjs.map → ngstarter-ui-components-content-editor-table-block.component-hJ4OxKRX.mjs.map} +1 -1
  20. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-DqS9Lhp_.mjs → ngstarter-ui-components-content-editor-video-block.component-Cs7L1wwX.mjs} +2 -2
  21. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-DqS9Lhp_.mjs.map → ngstarter-ui-components-content-editor-video-block.component-Cs7L1wwX.mjs.map} +1 -1
  22. package/fesm2022/ngstarter-ui-components-content-editor.mjs +1 -1
  23. package/fesm2022/ngstarter-ui-components-toolbar.mjs +2 -2
  24. package/fesm2022/ngstarter-ui-components-toolbar.mjs.map +1 -1
  25. package/package.json +1 -1
  26. package/styles/_global.scss +11 -0
  27. package/types/ngstarter-ui-components-content-editor.d.ts +226 -7
  28. package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, Signal, OnInit, OnDestroy, AfterViewInit, EventEmitter, Type, ViewContainerRef, ElementRef, Renderer2, NgZone } from '@angular/core';
2
+ import { InjectionToken, Signal, Type, InputSignal, OnInit, OnDestroy, AfterViewInit, EventEmitter, EnvironmentProviders, ViewContainerRef, ElementRef, Renderer2, NgZone } from '@angular/core';
3
3
  import { CdkDragDrop, CdkDragStart } from '@angular/cdk/drag-drop';
4
4
  import { Menu, MenuCloseReason } from '@ngstarter-ui/components/menu';
5
5
  import { Popover } from '@ngstarter-ui/components/popover';
@@ -105,6 +105,28 @@ interface ContentEditorTableBlockSettings {
105
105
  interface ContentEditorOptions {
106
106
  [prop: string]: any;
107
107
  }
108
+ interface ContentEditorBlockRendererDef {
109
+ type: string;
110
+ component: Type<unknown>;
111
+ }
112
+ interface ContentEditorBlockRendererInputs<TContent = unknown, TSettings = unknown> extends Record<string, unknown> {
113
+ block: ContentEditorBlock | null;
114
+ id: string;
115
+ type: string;
116
+ content: TContent;
117
+ props: ContentEditorItemProperty[];
118
+ settings: TSettings;
119
+ index: number;
120
+ }
121
+ interface ContentEditorBlockRendererInputSignals<TContent = unknown, TSettings = unknown> {
122
+ block: InputSignal<ContentEditorBlock | null>;
123
+ id: InputSignal<string>;
124
+ type: InputSignal<string>;
125
+ content: InputSignal<TContent>;
126
+ props: InputSignal<ContentEditorItemProperty[]>;
127
+ settings: InputSignal<TSettings>;
128
+ index: InputSignal<number>;
129
+ }
108
130
 
109
131
  declare class CommandBarComponent implements OnInit, OnDestroy {
110
132
  private _document;
@@ -112,6 +134,7 @@ declare class CommandBarComponent implements OnInit, OnDestroy {
112
134
  private _renderer;
113
135
  private _dialog;
114
136
  observedElement: HTMLElement | null;
137
+ private _linkDialogOpen;
115
138
  props: _angular_core.WritableSignal<ContentEditorItemProperty[]>;
116
139
  alignment: _angular_core.Signal<string>;
117
140
  ngOnInit(): void;
@@ -178,6 +201,7 @@ declare class BlockSelectionDirective implements OnDestroy {
178
201
  }
179
202
 
180
203
  declare class ContentBuilderComponent implements OnInit, AfterViewInit, OnDestroy {
204
+ private static readonly DRAFT_STORAGE_PREFIX;
181
205
  private _platformId;
182
206
  private _store;
183
207
  private elRef;
@@ -193,6 +217,7 @@ declare class ContentBuilderComponent implements OnInit, AfterViewInit, OnDestro
193
217
  private blockDefs;
194
218
  content: _angular_core.InputSignal<ContentEditorBlock[]>;
195
219
  contentChangedDelay: _angular_core.InputSignalWithTransform<number, unknown>;
220
+ persistDraft: _angular_core.InputSignalWithTransform<boolean, unknown>;
196
221
  suggestions: _angular_core.InputSignal<any>;
197
222
  options: _angular_core.InputSignal<ContentEditorOptions>;
198
223
  scrollContainer: _angular_core.InputSignal<string | undefined>;
@@ -257,6 +282,10 @@ declare class ContentBuilderComponent implements OnInit, AfterViewInit, OnDestro
257
282
  protected onSuggestionsMenuOpen(): void;
258
283
  protected onSuggestionsMenuClose(reason: MenuCloseReason): void;
259
284
  ngOnDestroy(): void;
285
+ private _getDraftContent;
286
+ private _saveDraft;
287
+ private _canUseDraftStorage;
288
+ private _getDraftStorageKey;
260
289
  onSettingsPopoverClose(): void;
261
290
  protected _onPaste(event: ClipboardEvent): void;
262
291
  private _handleTextPaste;
@@ -264,12 +293,202 @@ declare class ContentBuilderComponent implements OnInit, AfterViewInit, OnDestro
264
293
  private _mapNodeToBlock;
265
294
  private _mapListItems;
266
295
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentBuilderComponent, never>;
267
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentBuilderComponent, "ngs-content-builder", ["ngsContentBuilder"], { "content": { "alias": "content"; "required": false; "isSignal": true; }; "contentChangedDelay": { "alias": "contentChangedDelay"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "scrollContainer": { "alias": "scrollContainer"; "required": false; "isSignal": true; }; }, { "contentChanged": "contentChanged"; }, never, never, true, [{ directive: typeof BlockSelectionDirective; inputs: { "autoScrollContainerSelector": "autoScrollContainerSelector"; }; outputs: {}; }]>;
296
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentBuilderComponent, "ngs-content-editor-builder", ["ngsContentEditorBuilder"], { "content": { "alias": "content"; "required": false; "isSignal": true; }; "contentChangedDelay": { "alias": "contentChangedDelay"; "required": false; "isSignal": true; }; "persistDraft": { "alias": "persistDraft"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "scrollContainer": { "alias": "scrollContainer"; "required": false; "isSignal": true; }; }, { "contentChanged": "contentChanged"; }, never, never, true, [{ directive: typeof BlockSelectionDirective; inputs: { "autoScrollContainerSelector": "autoScrollContainerSelector"; }; outputs: {}; }]>;
297
+ }
298
+
299
+ interface ContentEditorRenderItem {
300
+ block: ContentEditorBlock;
301
+ component: Type<unknown> | null;
302
+ inputs: ContentEditorBlockRendererInputs;
303
+ }
304
+ declare class ContentEditorRenderer {
305
+ private readonly providedRendererGroups;
306
+ content: _angular_core.InputSignal<readonly ContentEditorBlock[]>;
307
+ blocks: _angular_core.InputSignal<readonly ContentEditorBlock[] | null>;
308
+ readonly rendererMap: _angular_core.Signal<Map<string, Type<unknown>>>;
309
+ protected readonly items: _angular_core.Signal<ContentEditorRenderItem[]>;
310
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentEditorRenderer, never>;
311
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentEditorRenderer, "ngs-content-editor-renderer", ["ngsContentEditorRenderer"], { "content": { "alias": "content"; "required": false; "isSignal": true; }; "blocks": { "alias": "blocks"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
312
+ }
313
+
314
+ declare const CONTENT_EDITOR_BLOCK_RENDERERS: InjectionToken<readonly (readonly ContentEditorBlockRendererDef[])[]>;
315
+ declare function provideContentEditorRenderers(renderers: ReadonlyArray<ContentEditorBlockRendererDef>): EnvironmentProviders;
316
+ declare function provideContentEditorRenderer(renderer: ContentEditorBlockRendererDef): EnvironmentProviders;
317
+
318
+ declare const CONTENT_EDITOR_DEFAULT_RENDERERS: ReadonlyArray<ContentEditorBlockRendererDef>;
319
+
320
+ interface ContentEditorCodeRendererSettings {
321
+ language?: string;
322
+ }
323
+ declare class ContentEditorCodeRenderer implements ContentEditorBlockRendererInputSignals<unknown, ContentEditorCodeRendererSettings> {
324
+ block: _angular_core.InputSignal<ContentEditorBlock | null>;
325
+ id: _angular_core.InputSignal<string>;
326
+ type: _angular_core.InputSignal<string>;
327
+ content: _angular_core.InputSignal<unknown>;
328
+ props: _angular_core.InputSignal<ContentEditorItemProperty[]>;
329
+ settings: _angular_core.InputSignal<ContentEditorCodeRendererSettings>;
330
+ index: _angular_core.InputSignal<number>;
331
+ protected readonly code: _angular_core.Signal<string>;
332
+ protected readonly language: _angular_core.Signal<string>;
333
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentEditorCodeRenderer, never>;
334
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentEditorCodeRenderer, "ngs-content-editor-code-renderer", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "props": { "alias": "props"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
335
+ }
336
+
337
+ declare class ContentEditorDividerRenderer implements ContentEditorBlockRendererInputSignals<unknown, Record<string, unknown>> {
338
+ block: _angular_core.InputSignal<ContentEditorBlock | null>;
339
+ id: _angular_core.InputSignal<string>;
340
+ type: _angular_core.InputSignal<string>;
341
+ content: _angular_core.InputSignal<unknown>;
342
+ props: _angular_core.InputSignal<ContentEditorItemProperty[]>;
343
+ settings: _angular_core.InputSignal<Record<string, unknown>>;
344
+ index: _angular_core.InputSignal<number>;
345
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentEditorDividerRenderer, never>;
346
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentEditorDividerRenderer, "ngs-content-editor-divider-renderer", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "props": { "alias": "props"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
347
+ }
348
+
349
+ declare class ContentEditorEmbedRenderer implements ContentEditorBlockRendererInputSignals<Partial<ContentEditorEmbedContent> | null, Partial<ContentEditorEmbedBlockSettings>> {
350
+ block: _angular_core.InputSignal<ContentEditorBlock | null>;
351
+ id: _angular_core.InputSignal<string>;
352
+ type: _angular_core.InputSignal<string>;
353
+ content: _angular_core.InputSignal<Partial<ContentEditorEmbedContent> | null>;
354
+ props: _angular_core.InputSignal<ContentEditorItemProperty[]>;
355
+ settings: _angular_core.InputSignal<Partial<ContentEditorEmbedBlockSettings>>;
356
+ index: _angular_core.InputSignal<number>;
357
+ protected readonly url: _angular_core.Signal<string>;
358
+ protected readonly embedType: _angular_core.Signal<string>;
359
+ protected readonly width: _angular_core.Signal<number>;
360
+ protected readonly height: _angular_core.Signal<number>;
361
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentEditorEmbedRenderer, never>;
362
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentEditorEmbedRenderer, "ngs-content-editor-embed-renderer", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "props": { "alias": "props"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
363
+ }
364
+
365
+ type ContentEditorTextAlignment = 'left' | 'center' | 'right' | 'justify';
366
+
367
+ declare class ContentEditorHeadingRenderer implements ContentEditorBlockRendererInputSignals<unknown, Partial<ContentEditorHeadingBlockSettings>> {
368
+ block: _angular_core.InputSignal<ContentEditorBlock | null>;
369
+ id: _angular_core.InputSignal<string>;
370
+ type: _angular_core.InputSignal<string>;
371
+ content: _angular_core.InputSignal<unknown>;
372
+ settings: _angular_core.InputSignal<Partial<ContentEditorHeadingBlockSettings>>;
373
+ props: _angular_core.InputSignal<ContentEditorItemProperty[]>;
374
+ index: _angular_core.InputSignal<number>;
375
+ protected readonly html: _angular_core.Signal<string>;
376
+ protected readonly level: _angular_core.Signal<1 | 2 | 3>;
377
+ protected readonly alignment: _angular_core.Signal<ContentEditorTextAlignment>;
378
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentEditorHeadingRenderer, never>;
379
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentEditorHeadingRenderer, "ngs-content-editor-heading-renderer", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "props": { "alias": "props"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
380
+ }
381
+
382
+ declare class ContentEditorImageRenderer implements ContentEditorBlockRendererInputSignals<Partial<ContentEditorImageContent> | null, Partial<ContentEditorImageBlockSettings>> {
383
+ block: _angular_core.InputSignal<ContentEditorBlock | null>;
384
+ id: _angular_core.InputSignal<string>;
385
+ type: _angular_core.InputSignal<string>;
386
+ content: _angular_core.InputSignal<Partial<ContentEditorImageContent> | null>;
387
+ props: _angular_core.InputSignal<ContentEditorItemProperty[]>;
388
+ settings: _angular_core.InputSignal<Partial<ContentEditorImageBlockSettings>>;
389
+ index: _angular_core.InputSignal<number>;
390
+ protected readonly src: _angular_core.Signal<string>;
391
+ protected readonly alt: _angular_core.Signal<string>;
392
+ protected readonly width: _angular_core.Signal<number | null>;
393
+ protected readonly height: _angular_core.Signal<number | null>;
394
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentEditorImageRenderer, never>;
395
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentEditorImageRenderer, "ngs-content-editor-image-renderer", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "props": { "alias": "props"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
396
+ }
397
+
398
+ declare class ContentEditorListRenderer implements ContentEditorBlockRendererInputSignals<ContentEditorListItem[], Partial<ContentEditorListSettings>> {
399
+ block: _angular_core.InputSignal<ContentEditorBlock | null>;
400
+ id: _angular_core.InputSignal<string>;
401
+ type: _angular_core.InputSignal<string>;
402
+ content: _angular_core.InputSignal<ContentEditorListItem[]>;
403
+ props: _angular_core.InputSignal<ContentEditorItemProperty[]>;
404
+ settings: _angular_core.InputSignal<Partial<ContentEditorListSettings>>;
405
+ index: _angular_core.InputSignal<number>;
406
+ protected readonly items: _angular_core.Signal<ContentEditorListItem[]>;
407
+ protected readonly listStyle: _angular_core.Signal<string>;
408
+ protected childItems(item: ContentEditorListItem): ContentEditorListItem[];
409
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentEditorListRenderer, never>;
410
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentEditorListRenderer, "ngs-content-editor-list-renderer", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "props": { "alias": "props"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
411
+ }
412
+
413
+ declare class ContentEditorParagraphRenderer implements ContentEditorBlockRendererInputSignals<unknown, Record<string, unknown>> {
414
+ block: _angular_core.InputSignal<ContentEditorBlock | null>;
415
+ id: _angular_core.InputSignal<string>;
416
+ type: _angular_core.InputSignal<string>;
417
+ content: _angular_core.InputSignal<unknown>;
418
+ props: _angular_core.InputSignal<ContentEditorItemProperty[]>;
419
+ settings: _angular_core.InputSignal<Record<string, unknown>>;
420
+ index: _angular_core.InputSignal<number>;
421
+ protected readonly html: _angular_core.Signal<string>;
422
+ protected readonly alignment: _angular_core.Signal<ContentEditorTextAlignment>;
423
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentEditorParagraphRenderer, never>;
424
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentEditorParagraphRenderer, "ngs-content-editor-paragraph-renderer", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "props": { "alias": "props"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
425
+ }
426
+
427
+ interface ContentEditorQuoteRendererContentPart {
428
+ content?: string;
429
+ props?: ContentEditorItemProperty[];
430
+ }
431
+ interface ContentEditorQuoteRendererContent {
432
+ cite?: ContentEditorQuoteRendererContentPart;
433
+ caption?: ContentEditorQuoteRendererContentPart;
434
+ }
435
+ declare class ContentEditorQuoteRenderer implements ContentEditorBlockRendererInputSignals<ContentEditorQuoteRendererContent | null, Record<string, unknown>> {
436
+ block: _angular_core.InputSignal<ContentEditorBlock | null>;
437
+ id: _angular_core.InputSignal<string>;
438
+ type: _angular_core.InputSignal<string>;
439
+ content: _angular_core.InputSignal<ContentEditorQuoteRendererContent | null>;
440
+ props: _angular_core.InputSignal<ContentEditorItemProperty[]>;
441
+ settings: _angular_core.InputSignal<Record<string, unknown>>;
442
+ index: _angular_core.InputSignal<number>;
443
+ protected readonly quoteHtml: _angular_core.Signal<string>;
444
+ protected readonly captionHtml: _angular_core.Signal<string>;
445
+ protected readonly quoteAlignment: _angular_core.Signal<ContentEditorTextAlignment>;
446
+ protected readonly captionAlignment: _angular_core.Signal<ContentEditorTextAlignment>;
447
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentEditorQuoteRenderer, never>;
448
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentEditorQuoteRenderer, "ngs-content-editor-quote-renderer", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "props": { "alias": "props"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
449
+ }
450
+
451
+ interface ContentEditorTableCell {
452
+ content?: string;
453
+ props?: unknown[];
454
+ styles?: Record<string, unknown>;
455
+ options?: {
456
+ colspan?: number;
457
+ rowspan?: number;
458
+ width?: number | string;
459
+ };
460
+ }
461
+ declare class ContentEditorTableRenderer implements ContentEditorBlockRendererInputSignals<ContentEditorTableCell[][], ContentEditorTableBlockSettings> {
462
+ block: _angular_core.InputSignal<ContentEditorBlock | null>;
463
+ id: _angular_core.InputSignal<string>;
464
+ type: _angular_core.InputSignal<string>;
465
+ content: _angular_core.InputSignal<ContentEditorTableCell[][]>;
466
+ props: _angular_core.InputSignal<ContentEditorItemProperty[]>;
467
+ settings: _angular_core.InputSignal<ContentEditorTableBlockSettings>;
468
+ index: _angular_core.InputSignal<number>;
469
+ protected readonly rows: _angular_core.Signal<ContentEditorTableCell[][]>;
470
+ protected readonly firstRow: _angular_core.Signal<ContentEditorTableCell[]>;
471
+ protected width(cell: ContentEditorTableCell): number | null;
472
+ protected colSpan(cell: ContentEditorTableCell): number;
473
+ protected rowSpan(cell: ContentEditorTableCell): number;
474
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentEditorTableRenderer, never>;
475
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentEditorTableRenderer, "ngs-content-editor-table-renderer", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "props": { "alias": "props"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
268
476
  }
269
477
 
270
- declare class ContentViewerComponent {
271
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentViewerComponent, never>;
272
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentViewerComponent, "ngs-content-viewer", never, {}, {}, never, never, true, never>;
478
+ declare class ContentEditorVideoRenderer implements ContentEditorBlockRendererInputSignals<Partial<ContentEditorVideoContent> | null, Partial<ContentEditorVideoBlockSettings>> {
479
+ block: _angular_core.InputSignal<ContentEditorBlock | null>;
480
+ id: _angular_core.InputSignal<string>;
481
+ type: _angular_core.InputSignal<string>;
482
+ content: _angular_core.InputSignal<Partial<ContentEditorVideoContent> | null>;
483
+ props: _angular_core.InputSignal<ContentEditorItemProperty[]>;
484
+ settings: _angular_core.InputSignal<Partial<ContentEditorVideoBlockSettings>>;
485
+ index: _angular_core.InputSignal<number>;
486
+ protected readonly src: _angular_core.Signal<string>;
487
+ protected readonly caption: _angular_core.Signal<string>;
488
+ protected readonly width: _angular_core.Signal<number | null>;
489
+ protected readonly height: _angular_core.Signal<number | null>;
490
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContentEditorVideoRenderer, never>;
491
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContentEditorVideoRenderer, "ngs-content-editor-video-renderer", never, { "block": { "alias": "block"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "props": { "alias": "props"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
273
492
  }
274
493
 
275
494
  interface ISelectionPopupComponent {
@@ -317,5 +536,5 @@ declare class TextSelectionPopupDirective implements OnDestroy {
317
536
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TextSelectionPopupDirective, "[ngsTextSelectionPopup]", never, { "targetComponent": { "alias": "targetComponent"; "required": false; }; "closestContentObserverClass": { "alias": "closestContentObserverClass"; "required": false; }; }, { "tagSelected": "tagSelected"; }, never, never, true, never>;
318
537
  }
319
538
 
320
- export { BlockSelectionDirective, CONTENT_BUILDER, CONTENT_EDITOR_BLOCK, CommandBarComponent, ContentBuilderComponent, ContentViewerComponent, TextSelectionPopupDirective };
321
- export type { ContentEditorBlock, ContentEditorBlockDef, ContentEditorBlockEmpty, ContentEditorDataBlock, ContentEditorEmbedBlockSettings, ContentEditorEmbedContent, ContentEditorHeadingBlockSettings, ContentEditorImageBlockSettings, ContentEditorImageContent, ContentEditorItemProperty, ContentEditorListItem, ContentEditorListSettings, ContentEditorOptions, ContentEditorSuggestionHeading, ContentEditorSuggestionItem, ContentEditorTableBlockSettings, ContentEditorVideoBlockSettings, ContentEditorVideoContent, ISelectionPopupComponent };
539
+ export { BlockSelectionDirective, CONTENT_BUILDER, CONTENT_EDITOR_BLOCK, CONTENT_EDITOR_BLOCK_RENDERERS, CONTENT_EDITOR_DEFAULT_RENDERERS, CommandBarComponent, ContentBuilderComponent, ContentEditorCodeRenderer, ContentEditorDividerRenderer, ContentEditorEmbedRenderer, ContentEditorHeadingRenderer, ContentEditorImageRenderer, ContentEditorListRenderer, ContentEditorParagraphRenderer, ContentEditorQuoteRenderer, ContentEditorRenderer, ContentEditorTableRenderer, ContentEditorVideoRenderer, TextSelectionPopupDirective, provideContentEditorRenderer, provideContentEditorRenderers };
540
+ export type { ContentEditorBlock, ContentEditorBlockDef, ContentEditorBlockEmpty, ContentEditorBlockRendererDef, ContentEditorBlockRendererInputSignals, ContentEditorBlockRendererInputs, ContentEditorCodeRendererSettings, ContentEditorDataBlock, ContentEditorEmbedBlockSettings, ContentEditorEmbedContent, ContentEditorHeadingBlockSettings, ContentEditorImageBlockSettings, ContentEditorImageContent, ContentEditorItemProperty, ContentEditorListItem, ContentEditorListSettings, ContentEditorOptions, ContentEditorQuoteRendererContent, ContentEditorQuoteRendererContentPart, ContentEditorSuggestionHeading, ContentEditorSuggestionItem, ContentEditorTableBlockSettings, ContentEditorTableCell, ContentEditorVideoBlockSettings, ContentEditorVideoContent, ISelectionPopupComponent };