@ngstarter-ui/components 21.0.30 → 21.0.32

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 (40) hide show
  1. package/ai/component-registry.json +58 -14
  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-country-select.mjs +65 -4
  24. package/fesm2022/ngstarter-ui-components-country-select.mjs.map +1 -1
  25. package/fesm2022/ngstarter-ui-components-currency-select.mjs +65 -4
  26. package/fesm2022/ngstarter-ui-components-currency-select.mjs.map +1 -1
  27. package/fesm2022/ngstarter-ui-components-menu.mjs +10 -6
  28. package/fesm2022/ngstarter-ui-components-menu.mjs.map +1 -1
  29. package/fesm2022/ngstarter-ui-components-phone-input.mjs +113 -29
  30. package/fesm2022/ngstarter-ui-components-phone-input.mjs.map +1 -1
  31. package/fesm2022/ngstarter-ui-components-toolbar.mjs +2 -2
  32. package/fesm2022/ngstarter-ui-components-toolbar.mjs.map +1 -1
  33. package/package.json +1 -1
  34. package/styles/_global.scss +11 -0
  35. package/types/ngstarter-ui-components-content-editor.d.ts +226 -7
  36. package/types/ngstarter-ui-components-country-select.d.ts +12 -0
  37. package/types/ngstarter-ui-components-currency-select.d.ts +12 -0
  38. package/types/ngstarter-ui-components-menu.d.ts +3 -3
  39. package/types/ngstarter-ui-components-phone-input.d.ts +19 -2
  40. 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 };
@@ -12,6 +12,8 @@ interface Country {
12
12
  }
13
13
 
14
14
  declare class CountrySelect implements OnInit, OnDestroy, ControlValueAccessor, FormFieldControl<string | null> {
15
+ private static readonly COUNTRY_RENDER_CHUNK_SIZE;
16
+ private static readonly COUNTRY_RENDER_CHUNK_DELAY;
15
17
  private _elementRef;
16
18
  private _renderer;
17
19
  private _formField;
@@ -19,6 +21,7 @@ declare class CountrySelect implements OnInit, OnDestroy, ControlValueAccessor,
19
21
  id: string;
20
22
  readonly stateChanges: Subject<void>;
21
23
  protected searchTerm: _angular_core.ModelSignal<string>;
24
+ protected visibleCountryCount: _angular_core.WritableSignal<number>;
22
25
  private readonly _valueSignal;
23
26
  private readonly _focusedSignal;
24
27
  private _touched;
@@ -28,6 +31,7 @@ declare class CountrySelect implements OnInit, OnDestroy, ControlValueAccessor,
28
31
  readonly showCountryCode: _angular_core.InputSignalWithTransform<boolean, unknown>;
29
32
  readonly internalCountries: Country[];
30
33
  readonly filteredCountries: _angular_core.Signal<Country[]>;
34
+ readonly visibleCountries: _angular_core.Signal<Country[]>;
31
35
  readonly selectedCountryDisplay: _angular_core.Signal<Country | undefined>;
32
36
  readonly ngsSelect: _angular_core.Signal<Select>;
33
37
  readonly searchInput: _angular_core.Signal<ElementRef<HTMLInputElement>>;
@@ -39,6 +43,8 @@ declare class CountrySelect implements OnInit, OnDestroy, ControlValueAccessor,
39
43
  readonly closed: _angular_core.OutputEmitterRef<void>;
40
44
  private onChangeFn;
41
45
  private onTouchedFn;
46
+ private _countryRenderTimeout;
47
+ private _countrySearchFocusTimeout;
42
48
  constructor();
43
49
  ngOnInit(): void;
44
50
  ngOnDestroy(): void;
@@ -65,9 +71,15 @@ declare class CountrySelect implements OnInit, OnDestroy, ControlValueAccessor,
65
71
  setDisabledState(isDisabled: boolean): void;
66
72
  onSelectionChange(event: SelectChange): void;
67
73
  clearSearch(event: MouseEvent): void;
74
+ onCountrySearch(searchTerm: string): void;
68
75
  onSelectOpened(): void;
69
76
  onSelectClosed(): void;
70
77
  focus(): void;
78
+ private getInitialVisibleCountryCount;
79
+ private scheduleCountryRendering;
80
+ private clearCountrySelectTimeouts;
81
+ private clearCountryRenderTimeout;
82
+ private clearCountrySearchFocusTimeout;
71
83
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CountrySelect, never>;
72
84
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CountrySelect, "ngs-country-select", ["ngsCountrySelect"], { "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; "placeholderInputSignal": { "alias": "placeholder"; "required": false; "isSignal": true; }; "isRequiredSignal": { "alias": "required"; "required": false; "isSignal": true; }; "isDisabledSignal": { "alias": "disabled"; "required": false; "isSignal": true; }; "showCountryCode": { "alias": "showCountryCode"; "required": false; "isSignal": true; }; }, { "searchTerm": "searchTermChange"; "isRequiredSignal": "requiredChange"; "isDisabledSignal": "disabledChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
73
85
  }
@@ -14,6 +14,8 @@ interface Currency {
14
14
  }
15
15
 
16
16
  declare class CurrencySelect implements OnInit, OnDestroy, ControlValueAccessor, FormFieldControl<string | null> {
17
+ private static readonly CURRENCY_RENDER_CHUNK_SIZE;
18
+ private static readonly CURRENCY_RENDER_CHUNK_DELAY;
17
19
  private _elementRef;
18
20
  private _renderer;
19
21
  private _formField;
@@ -23,6 +25,7 @@ declare class CurrencySelect implements OnInit, OnDestroy, ControlValueAccessor,
23
25
  controlType: string;
24
26
  autofilled?: boolean;
25
27
  protected searchTerm: _angular_core.ModelSignal<string>;
28
+ protected visibleCurrencyCount: _angular_core.WritableSignal<number>;
26
29
  private readonly _valueSignal;
27
30
  private readonly _focusedSignal;
28
31
  private _touched;
@@ -32,6 +35,7 @@ declare class CurrencySelect implements OnInit, OnDestroy, ControlValueAccessor,
32
35
  showCountryName: _angular_core.InputSignalWithTransform<boolean, unknown>;
33
36
  readonly internalCurrencies: Currency[];
34
37
  readonly filteredCurrencies: _angular_core.Signal<Currency[]>;
38
+ readonly visibleCurrencies: _angular_core.Signal<Currency[]>;
35
39
  readonly selectedCurrencyDisplay: _angular_core.Signal<Currency | undefined>;
36
40
  readonly ngsSelect: _angular_core.Signal<Select | undefined>;
37
41
  readonly searchInput: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
@@ -43,6 +47,8 @@ declare class CurrencySelect implements OnInit, OnDestroy, ControlValueAccessor,
43
47
  readonly closed: _angular_core.OutputEmitterRef<void>;
44
48
  private onChangeFn;
45
49
  private onTouchedFn;
50
+ private _currencyRenderTimeout;
51
+ private _currencySearchFocusTimeout;
46
52
  constructor();
47
53
  ngOnInit(): void;
48
54
  ngOnDestroy(): void;
@@ -69,9 +75,15 @@ declare class CurrencySelect implements OnInit, OnDestroy, ControlValueAccessor,
69
75
  setDisabledState(isDisabled: boolean): void;
70
76
  onSelectionChange(event: SelectChange): void;
71
77
  clearSearch(event: MouseEvent): void;
78
+ onCurrencySearch(searchTerm: string): void;
72
79
  onSelectOpened(): void;
73
80
  onSelectClosed(): void;
74
81
  focus(): void;
82
+ private getInitialVisibleCurrencyCount;
83
+ private scheduleCurrencyRendering;
84
+ private clearCurrencySelectTimeouts;
85
+ private clearCurrencyRenderTimeout;
86
+ private clearCurrencySearchFocusTimeout;
75
87
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<CurrencySelect, never>;
76
88
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<CurrencySelect, "ngs-currency-select", ["ngsCurrencySelect"], { "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; "placeholderInputSignal": { "alias": "placeholder"; "required": false; "isSignal": true; }; "isRequiredSignal": { "alias": "required"; "required": false; "isSignal": true; }; "isDisabledSignal": { "alias": "disabled"; "required": false; "isSignal": true; }; "showCountryName": { "alias": "showCountryName"; "required": false; "isSignal": true; }; }, { "searchTerm": "searchTermChange"; "isRequiredSignal": "requiredChange"; "isDisabledSignal": "disabledChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
77
89
  }
@@ -101,7 +101,7 @@ declare class Menu implements OnDestroy {
101
101
  _triggerClosed(trigger: any): void;
102
102
  hasOpenChild(): boolean;
103
103
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Menu, never>;
104
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Menu, "ngs-menu", ["ngsMenu"], { "role": { "alias": "role"; "required": false; "isSignal": true; }; "classList": { "alias": "classList"; "required": false; "isSignal": true; }; "xPosition": { "alias": "xPosition"; "required": false; "isSignal": true; }; "yPosition": { "alias": "yPosition"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, ["content", "items"], ["[ngs-menu-header]", "*", "[ngs-menu-footer]"], true, never>;
104
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Menu, "ngs-menu", ["ngsMenu"], { "role": { "alias": "role"; "required": false; "isSignal": true; }; "classList": { "alias": "classList"; "required": false; "isSignal": true; }; "xPosition": { "alias": "xPosition"; "required": false; "isSignal": true; }; "yPosition": { "alias": "yPosition"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, ["content", "items"], ["ngs-menu-header,[ngs-menu-header]", "*", "ngs-menu-footer,[ngs-menu-footer]"], true, never>;
105
105
  }
106
106
 
107
107
  declare class MenuDivider {
@@ -143,12 +143,12 @@ declare class ContextMenuTrigger implements OnDestroy {
143
143
 
144
144
  declare class MenuHeader {
145
145
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuHeader, never>;
146
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuHeader, "ngs-menu-header", never, {}, {}, never, ["*"], true, never>;
146
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuHeader, "ngs-menu-header", ["ngsMenuHeader"], {}, {}, never, ["*"], true, never>;
147
147
  }
148
148
 
149
149
  declare class MenuFooter {
150
150
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuFooter, never>;
151
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuFooter, "ngs-menu-footer", never, {}, {}, never, ["*"], true, never>;
151
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuFooter, "ngs-menu-footer", ["ngsMenuFooter"], {}, {}, never, ["*"], true, never>;
152
152
  }
153
153
 
154
154
  /**
@@ -16,6 +16,8 @@ type PhoneNumberFormat = 'default' | 'national' | 'international';
16
16
 
17
17
  declare class PhoneInput implements OnInit, AfterViewInit, DoCheck, OnDestroy, FormFieldControl<any> {
18
18
  ngControl: NgControl;
19
+ private static readonly COUNTRY_RENDER_CHUNK_SIZE;
20
+ private static readonly COUNTRY_RENDER_CHUNK_DELAY;
19
21
  private _destroyRef;
20
22
  private _changeDetectorRef;
21
23
  private countryCodeData;
@@ -24,7 +26,7 @@ declare class PhoneInput implements OnInit, AfterViewInit, DoCheck, OnDestroy, F
24
26
  private _errorStateMatcher;
25
27
  private _parentForm;
26
28
  static nextId: number;
27
- readonly menuSearchInput: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
29
+ readonly searchInput: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
28
30
  readonly focusable: _angular_core.Signal<ElementRef<any>>;
29
31
  private _focused;
30
32
  private _errorState;
@@ -40,8 +42,13 @@ declare class PhoneInput implements OnInit, AfterViewInit, DoCheck, OnDestroy, F
40
42
  selectedCountry: _angular_core.WritableSignal<Country | null>;
41
43
  numberInstance?: PhoneNumber;
42
44
  private _value;
43
- searchCriteria?: string;
45
+ searchTerm: _angular_core.WritableSignal<string>;
46
+ visibleCountryCount: _angular_core.WritableSignal<number>;
47
+ filteredCountries: _angular_core.Signal<Country[]>;
48
+ visibleCountries: _angular_core.Signal<Country[]>;
44
49
  private _previousFormattedNumber?;
50
+ private _countryRenderTimeout;
51
+ private _countrySearchFocusTimeout;
45
52
  onTouched: () => void;
46
53
  propagateChange: (_: any) => void;
47
54
  get focused(): boolean;
@@ -72,6 +79,16 @@ declare class PhoneInput implements OnInit, AfterViewInit, DoCheck, OnDestroy, F
72
79
  ngOnDestroy(): void;
73
80
  onPhoneNumberChange(): void;
74
81
  onCountrySelect(country: Country, el: any): void;
82
+ protected focusSearchInput(): void;
83
+ protected openCountryMenu(): void;
84
+ protected closeCountryMenu(): void;
85
+ protected onCountrySearch(searchTerm: string): void;
86
+ protected clearSearch(event: MouseEvent): void;
87
+ protected countryFlagEmoji(shortCode: string | undefined | null): string;
88
+ private scheduleCountryRendering;
89
+ private clearCountryMenuTimeouts;
90
+ private clearCountryRenderTimeout;
91
+ private clearCountrySearchFocusTimeout;
75
92
  getCountry(shortCode: CountryCode): Country;
76
93
  onInputKeyPress(event: any): void;
77
94
  protected fetchCountryData(): void;