@bbq-chat/widgets-angular 1.0.4 → 1.0.5

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,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Type, TemplateRef, InjectionToken, OnInit, AfterViewInit, OnDestroy, OnChanges, Injector, EnvironmentInjector, EventEmitter, ElementRef, ComponentRef, EmbeddedViewRef, SimpleChanges } from '@angular/core';
3
- import { ChatWidget, IWidgetActionHandler, WidgetEventManager, SsrWidgetRenderer } from '@bbq-chat/widgets';
2
+ import { Type, TemplateRef, InjectionToken, OnInit, AfterViewInit, OnDestroy, OnChanges, Injector, EnvironmentInjector, EventEmitter, ElementRef, ComponentRef, EmbeddedViewRef, SimpleChanges, QueryList, ViewContainerRef } from '@angular/core';
3
+ import { ChatWidget, IWidgetRenderer, IWidgetActionHandler, WidgetEventManager, SsrWidgetRenderer, ButtonWidget, CardWidget, InputWidget, TextAreaWidget, DropdownWidget, SliderWidget, ToggleWidget, FileUploadWidget, ThemeSwitcherWidget, DatePickerWidget, MultiSelectWidget, ProgressBarWidget, FormWidget, ImageWidget, ImageCollectionWidget } from '@bbq-chat/widgets';
4
4
  export { ButtonWidget, CardWidget, ChatWidget, DatePickerWidget, DropdownWidget, FileUploadWidget, FormWidget, ImageCollectionWidget, ImageWidget, InputWidget, MultiSelectWidget, ProgressBarWidget, SliderWidget, SsrWidgetRenderer, TextAreaWidget, ThemeSwitcherWidget, ToggleWidget, WidgetEventManager, customWidgetRegistry } from '@bbq-chat/widgets';
5
5
 
6
6
  /**
@@ -175,6 +175,65 @@ declare class WidgetRegistryService {
175
175
  static ɵprov: i0.ɵɵInjectableDeclaration<WidgetRegistryService>;
176
176
  }
177
177
 
178
+ /**
179
+ * Options for configuring the Angular widget renderer
180
+ */
181
+ interface AngularRendererOptions {
182
+ /**
183
+ * Per-widget-type component overrides. Key is widget.type.
184
+ */
185
+ components?: Partial<Record<string, Type<CustomWidgetComponent>>>;
186
+ }
187
+ /**
188
+ * Angular widget renderer
189
+ * Returns Angular component types for dynamic rendering
190
+ * Provides feature parity with SsrWidgetRenderer but uses Angular components
191
+ */
192
+ declare class AngularWidgetRenderer implements IWidgetRenderer {
193
+ readonly framework = "Angular";
194
+ private overrides;
195
+ private componentRegistry;
196
+ constructor(options?: AngularRendererOptions);
197
+ /**
198
+ * Register all built-in widget components
199
+ * Must be called after components are imported to avoid circular dependencies
200
+ */
201
+ registerBuiltInComponents(components: Record<string, Type<CustomWidgetComponent>>): void;
202
+ /**
203
+ * Register or override a widget component
204
+ * Use this to replace built-in components or add custom ones
205
+ *
206
+ * @example
207
+ * ```typescript
208
+ * renderer.registerComponent('button', MyCustomButtonComponent);
209
+ * ```
210
+ */
211
+ registerComponent(type: string, component: Type<CustomWidgetComponent>): void;
212
+ /**
213
+ * Register multiple widget components at once
214
+ *
215
+ * @example
216
+ * ```typescript
217
+ * renderer.registerComponents({
218
+ * button: MyButtonComponent,
219
+ * card: MyCardComponent
220
+ * });
221
+ * ```
222
+ */
223
+ registerComponents(components: Record<string, Type<CustomWidgetComponent>>): void;
224
+ /**
225
+ * Get the Angular component type for a given widget
226
+ * Returns the component class that should be dynamically instantiated
227
+ */
228
+ getComponentType(widget: ChatWidget): Type<CustomWidgetComponent> | null;
229
+ /**
230
+ * Legacy method for IWidgetRenderer interface compatibility
231
+ * Not used in Angular rendering but required by interface
232
+ * @deprecated Use getComponentType() instead for Angular rendering
233
+ */
234
+ renderWidget(widget: ChatWidget): string;
235
+ }
236
+
178
237
  /**
179
238
  * Injection token for WidgetEventManager factory
180
239
  *
@@ -204,6 +263,19 @@ declare const WIDGET_EVENT_MANAGER_FACTORY: InjectionToken<WidgetEventManagerFac
204
263
  * ```
205
264
  */
206
265
  declare const SSR_WIDGET_RENDERER: InjectionToken<SsrWidgetRenderer>;
266
+ /**
267
+ * Injection token for AngularWidgetRenderer
268
+ *
269
+ * Use this token to inject an AngularWidgetRenderer instance in your components.
270
+ * This is the recommended renderer for Angular applications as it provides
271
+ * native Angular component rendering instead of HTML string rendering.
272
+ *
273
+ * @example
274
+ * ```typescript
275
+ * constructor(@Inject(ANGULAR_WIDGET_RENDERER) private renderer: AngularWidgetRenderer) {}
276
+ * ```
277
+ */
278
+ declare const ANGULAR_WIDGET_RENDERER: InjectionToken<AngularWidgetRenderer>;
207
279
  /**
208
280
  * Factory function for creating WidgetEventManager instances
209
281
  *
@@ -223,6 +295,15 @@ declare function widgetEventManagerFactoryProvider(): WidgetEventManagerFactory;
223
295
  * @returns A new SsrWidgetRenderer instance
224
296
  */
225
297
  declare function ssrWidgetRendererFactory(): SsrWidgetRenderer;
298
+ /**
299
+ * Factory function for creating AngularWidgetRenderer instances
300
+ *
301
+ * This factory creates an AngularWidgetRenderer with all built-in widget components
302
+ * pre-registered. This is the recommended renderer for Angular applications.
303
+ *
304
+ * @returns A new AngularWidgetRenderer instance with built-in components registered
305
+ */
306
+ declare function angularWidgetRendererFactory(): AngularWidgetRenderer;
226
307
 
227
308
  /**
228
309
  * Angular component for rendering chat widgets
@@ -245,6 +326,7 @@ declare function ssrWidgetRendererFactory(): SsrWidgetRenderer;
245
326
  */
246
327
  declare class WidgetRendererComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {
247
328
  protected renderer: SsrWidgetRenderer;
329
+ protected angularRenderer: AngularWidgetRenderer | null;
248
330
  protected eventManagerFactory: WidgetEventManagerFactory;
249
331
  protected widgetRegistry: WidgetRegistryService;
250
332
  protected injector: Injector;
@@ -271,7 +353,7 @@ declare class WidgetRendererComponent implements OnInit, AfterViewInit, OnDestro
271
353
  protected isViewInitialized: boolean;
272
354
  protected dynamicComponents: Array<ComponentRef<any>>;
273
355
  protected dynamicViews: Array<EmbeddedViewRef<WidgetTemplateContext>>;
274
- constructor(renderer: SsrWidgetRenderer, eventManagerFactory: WidgetEventManagerFactory, widgetRegistry: WidgetRegistryService, injector: Injector, environmentInjector: EnvironmentInjector);
356
+ constructor(renderer: SsrWidgetRenderer, angularRenderer: AngularWidgetRenderer | null, eventManagerFactory: WidgetEventManagerFactory, widgetRegistry: WidgetRegistryService, injector: Injector, environmentInjector: EnvironmentInjector);
275
357
  ngOnInit(): void;
276
358
  ngOnChanges(changes: SimpleChanges): void;
277
359
  ngAfterViewInit(): void;
@@ -313,10 +395,211 @@ declare class WidgetRendererComponent implements OnInit, AfterViewInit, OnDestro
313
395
  * Cleanup all resources including event listeners.
314
396
  */
315
397
  private cleanup;
316
- static ɵfac: i0.ɵɵFactoryDeclaration<WidgetRendererComponent, never>;
398
+ static ɵfac: i0.ɵɵFactoryDeclaration<WidgetRendererComponent, [null, { optional: true; }, null, null, null, null]>;
317
399
  static ɵcmp: i0.ɵɵComponentDeclaration<WidgetRendererComponent, "bbq-widget-renderer", never, { "widgets": { "alias": "widgets"; "required": false; }; }, { "widgetAction": "widgetAction"; }, never, never, true, never>;
318
400
  }
319
401
 
402
+ declare class ButtonWidgetComponent implements CustomWidgetComponent {
403
+ widget: any;
404
+ widgetAction?: (actionName: string, payload: unknown) => void;
405
+ get buttonWidget(): ButtonWidget;
406
+ onClick(): void;
407
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonWidgetComponent, never>;
408
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonWidgetComponent, "bbq-button-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
409
+ }
410
+
411
+ declare class CardWidgetComponent implements CustomWidgetComponent {
412
+ widget: any;
413
+ widgetAction?: (actionName: string, payload: unknown) => void;
414
+ get cardWidget(): CardWidget;
415
+ onClick(): void;
416
+ static ɵfac: i0.ɵɵFactoryDeclaration<CardWidgetComponent, never>;
417
+ static ɵcmp: i0.ɵɵComponentDeclaration<CardWidgetComponent, "bbq-card-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
418
+ }
419
+
420
+ declare class InputWidgetComponent implements CustomWidgetComponent, OnInit {
421
+ widget: any;
422
+ widgetAction?: (actionName: string, payload: unknown) => void;
423
+ value: string;
424
+ inputId: string;
425
+ get inputWidget(): InputWidget;
426
+ get showLabel(): boolean;
427
+ get inputClasses(): string[];
428
+ private get isFormAppearance();
429
+ ngOnInit(): void;
430
+ static ɵfac: i0.ɵɵFactoryDeclaration<InputWidgetComponent, never>;
431
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputWidgetComponent, "bbq-input-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
432
+ }
433
+
434
+ declare class TextAreaWidgetComponent implements CustomWidgetComponent, OnInit {
435
+ widget: any;
436
+ widgetAction?: (actionName: string, payload: unknown) => void;
437
+ value: string;
438
+ textareaId: string;
439
+ get textareaWidget(): TextAreaWidget;
440
+ get showLabel(): boolean;
441
+ get textareaClasses(): string[];
442
+ private get isFormAppearance();
443
+ ngOnInit(): void;
444
+ static ɵfac: i0.ɵɵFactoryDeclaration<TextAreaWidgetComponent, never>;
445
+ static ɵcmp: i0.ɵɵComponentDeclaration<TextAreaWidgetComponent, "bbq-textarea-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
446
+ }
447
+
448
+ declare class DropdownWidgetComponent implements CustomWidgetComponent, OnInit {
449
+ widget: any;
450
+ widgetAction?: (actionName: string, payload: unknown) => void;
451
+ value: string;
452
+ selectId: string;
453
+ get dropdownWidget(): DropdownWidget;
454
+ get showLabel(): boolean;
455
+ get selectClasses(): string[];
456
+ private get isFormAppearance();
457
+ ngOnInit(): void;
458
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownWidgetComponent, never>;
459
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownWidgetComponent, "bbq-dropdown-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
460
+ }
461
+
462
+ declare class SliderWidgetComponent implements CustomWidgetComponent, OnInit {
463
+ widget: any;
464
+ widgetAction?: (actionName: string, payload: unknown) => void;
465
+ value: number;
466
+ sliderId: string;
467
+ get sliderWidget(): SliderWidget;
468
+ get showLabel(): boolean;
469
+ get sliderClasses(): string[];
470
+ private get isFormAppearance();
471
+ ngOnInit(): void;
472
+ static ɵfac: i0.ɵɵFactoryDeclaration<SliderWidgetComponent, never>;
473
+ static ɵcmp: i0.ɵɵComponentDeclaration<SliderWidgetComponent, "bbq-slider-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
474
+ }
475
+
476
+ declare class ToggleWidgetComponent implements CustomWidgetComponent, OnInit {
477
+ widget: any;
478
+ widgetAction?: (actionName: string, payload: unknown) => void;
479
+ checked: boolean;
480
+ checkboxId: string;
481
+ get toggleWidget(): ToggleWidget;
482
+ get showLabel(): boolean;
483
+ get checkboxClasses(): string[];
484
+ private get isFormAppearance();
485
+ ngOnInit(): void;
486
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToggleWidgetComponent, never>;
487
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToggleWidgetComponent, "bbq-toggle-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
488
+ }
489
+
490
+ declare class FileUploadWidgetComponent implements CustomWidgetComponent, OnInit {
491
+ widget: any;
492
+ widgetAction?: (actionName: string, payload: unknown) => void;
493
+ inputId: string;
494
+ get fileUploadWidget(): FileUploadWidget;
495
+ get showLabel(): boolean;
496
+ get inputClasses(): string[];
497
+ private get isFormAppearance();
498
+ ngOnInit(): void;
499
+ onFileChange(event: Event): void;
500
+ static ɵfac: i0.ɵɵFactoryDeclaration<FileUploadWidgetComponent, never>;
501
+ static ɵcmp: i0.ɵɵComponentDeclaration<FileUploadWidgetComponent, "bbq-fileupload-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
502
+ }
503
+
504
+ declare class ThemeSwitcherWidgetComponent implements CustomWidgetComponent, OnInit {
505
+ widget: any;
506
+ widgetAction?: (actionName: string, payload: unknown) => void;
507
+ value: string;
508
+ selectId: string;
509
+ get themeSwitcherWidget(): ThemeSwitcherWidget;
510
+ ngOnInit(): void;
511
+ static ɵfac: i0.ɵɵFactoryDeclaration<ThemeSwitcherWidgetComponent, never>;
512
+ static ɵcmp: i0.ɵɵComponentDeclaration<ThemeSwitcherWidgetComponent, "bbq-themeswitcher-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
513
+ }
514
+
515
+ declare class DatePickerWidgetComponent implements CustomWidgetComponent, OnInit {
516
+ widget: any;
517
+ widgetAction?: (actionName: string, payload: unknown) => void;
518
+ value: string;
519
+ inputId: string;
520
+ get datePickerWidget(): DatePickerWidget;
521
+ get showLabel(): boolean;
522
+ get inputClasses(): string[];
523
+ private get isFormAppearance();
524
+ ngOnInit(): void;
525
+ static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerWidgetComponent, never>;
526
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerWidgetComponent, "bbq-datepicker-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
527
+ }
528
+
529
+ declare class MultiSelectWidgetComponent implements CustomWidgetComponent, OnInit {
530
+ widget: any;
531
+ widgetAction?: (actionName: string, payload: unknown) => void;
532
+ values: string[];
533
+ selectId: string;
534
+ get multiSelectWidget(): MultiSelectWidget;
535
+ get showLabel(): boolean;
536
+ get selectClasses(): string[];
537
+ private get isFormAppearance();
538
+ ngOnInit(): void;
539
+ static ɵfac: i0.ɵɵFactoryDeclaration<MultiSelectWidgetComponent, never>;
540
+ static ɵcmp: i0.ɵɵComponentDeclaration<MultiSelectWidgetComponent, "bbq-multiselect-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
541
+ }
542
+
543
+ declare class ProgressBarWidgetComponent implements CustomWidgetComponent, OnInit {
544
+ widget: any;
545
+ widgetAction?: (actionName: string, payload: unknown) => void;
546
+ progressId: string;
547
+ percentage: number;
548
+ get progressBarWidget(): ProgressBarWidget;
549
+ ngOnInit(): void;
550
+ static ɵfac: i0.ɵɵFactoryDeclaration<ProgressBarWidgetComponent, never>;
551
+ static ɵcmp: i0.ɵɵComponentDeclaration<ProgressBarWidgetComponent, "bbq-progressbar-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
552
+ }
553
+
554
+ declare class FormWidgetComponent implements CustomWidgetComponent, OnInit, AfterViewInit, OnDestroy {
555
+ private injector;
556
+ private environmentInjector;
557
+ widget: any;
558
+ widgetAction?: (actionName: string, payload: unknown) => void;
559
+ fieldContainers: QueryList<ViewContainerRef>;
560
+ formId: string;
561
+ formData: Record<string, any>;
562
+ showValidationMessage: boolean;
563
+ private componentRefs;
564
+ private fieldComponentRegistry;
565
+ get formWidget(): FormWidget;
566
+ constructor(injector: Injector, environmentInjector: EnvironmentInjector);
567
+ ngOnInit(): void;
568
+ ngAfterViewInit(): void;
569
+ ngOnDestroy(): void;
570
+ private renderFieldWidgets;
571
+ private renderInputFallback;
572
+ getFieldId(fieldName: string): string;
573
+ getFieldProp(field: any, prop: string): any;
574
+ onActionClick(actionType: string): void;
575
+ private validateForm;
576
+ private gatherFormData;
577
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormWidgetComponent, never>;
578
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormWidgetComponent, "bbq-form-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
579
+ }
580
+
581
+ declare class ImageWidgetComponent implements CustomWidgetComponent {
582
+ widget: any;
583
+ widgetAction?: (actionName: string, payload: unknown) => void;
584
+ get imageWidget(): ImageWidget;
585
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImageWidgetComponent, never>;
586
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImageWidgetComponent, "bbq-image-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
587
+ }
588
+
589
+ declare class ImageCollectionWidgetComponent implements CustomWidgetComponent {
590
+ widget: any;
591
+ widgetAction?: (actionName: string, payload: unknown) => void;
592
+ get imageCollectionWidget(): ImageCollectionWidget;
593
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImageCollectionWidgetComponent, never>;
594
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImageCollectionWidgetComponent, "bbq-imagecollection-widget", never, { "widget": { "alias": "widget"; "required": false; }; }, {}, never, never, true, never>;
595
+ }
596
+
597
+ /**
598
+ * Registry of all built-in widget components
599
+ * Maps widget type to Angular component class
600
+ */
601
+ declare const BUILT_IN_WIDGET_COMPONENTS: Record<string, Type<CustomWidgetComponent>>;
602
+
320
603
  /**
321
604
  * @bbq-chat/widgets-angular
322
605
  *
@@ -329,7 +612,7 @@ declare class WidgetRendererComponent implements OnInit, AfterViewInit, OnDestro
329
612
  * @packageDocumentation
330
613
  */
331
614
 
332
- declare const VERSION = "1.0.3";
615
+ declare const VERSION = "1.0.4";
333
616
 
334
- export { SSR_WIDGET_RENDERER, VERSION, WIDGET_EVENT_MANAGER_FACTORY, WidgetRegistryService, WidgetRendererComponent, isComponentRenderer, isHtmlRenderer, isTemplateRenderer, ssrWidgetRendererFactory, widgetEventManagerFactoryProvider };
335
- export type { CustomWidgetComponent, CustomWidgetHtmlRenderer, CustomWidgetRenderer, CustomWidgetRendererConfig, WidgetEventManagerFactory, WidgetTemplateContext };
617
+ export { ANGULAR_WIDGET_RENDERER, AngularWidgetRenderer, BUILT_IN_WIDGET_COMPONENTS, ButtonWidgetComponent, CardWidgetComponent, DatePickerWidgetComponent, DropdownWidgetComponent, FileUploadWidgetComponent, FormWidgetComponent, ImageCollectionWidgetComponent, ImageWidgetComponent, InputWidgetComponent, MultiSelectWidgetComponent, ProgressBarWidgetComponent, SSR_WIDGET_RENDERER, SliderWidgetComponent, TextAreaWidgetComponent, ThemeSwitcherWidgetComponent, ToggleWidgetComponent, VERSION, WIDGET_EVENT_MANAGER_FACTORY, WidgetRegistryService, WidgetRendererComponent, angularWidgetRendererFactory, isComponentRenderer, isHtmlRenderer, isTemplateRenderer, ssrWidgetRendererFactory, widgetEventManagerFactoryProvider };
618
+ export type { AngularRendererOptions, CustomWidgetComponent, CustomWidgetHtmlRenderer, CustomWidgetRenderer, CustomWidgetRendererConfig, WidgetEventManagerFactory, WidgetTemplateContext };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bbq-chat/widgets-angular",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Angular components and services for BbQ ChatWidgets",
5
5
  "license": "MIT",
6
6
  "author": "BbQ ChatWidgets Contributors",