@bbq-chat/widgets-angular 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +23 -0
- package/.prettierrc.json +8 -0
- package/EXAMPLES.md +468 -0
- package/ng-package.json +10 -0
- package/package.json +25 -23
- package/scripts/build.mjs +63 -0
- package/src/index.ts +11 -1
- package/src/public_api.ts +75 -0
- package/src/widget-di.tokens.ts +63 -0
- package/src/widget-renderer.component.ts +24 -8
- package/tsconfig.json +34 -0
- package/dist/LICENSE +0 -21
- package/dist/README.md +0 -252
- package/dist/custom-widget-renderer.types.d.ts +0 -79
- package/dist/custom-widget-renderer.types.d.ts.map +0 -1
- package/dist/custom-widget-renderer.types.js +0 -43
- package/dist/custom-widget-renderer.types.js.map +0 -1
- package/dist/index.cjs +0 -38
- package/dist/index.d.ts +0 -20
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -23
- package/dist/index.js.map +0 -1
- package/dist/package.json +0 -16
- package/dist/widget-registry.service.d.ts +0 -95
- package/dist/widget-registry.service.d.ts.map +0 -1
- package/dist/widget-registry.service.js +0 -129
- package/dist/widget-registry.service.js.map +0 -1
- package/dist/widget-renderer.component.d.ts +0 -93
- package/dist/widget-renderer.component.d.ts.map +0 -1
- package/dist/widget-renderer.component.js +0 -316
- package/dist/widget-renderer.component.js.map +0 -1
|
@@ -1,316 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { Component, Input, Output, EventEmitter, ElementRef, ViewChild, inject, Injector, createComponent, EnvironmentInjector, } from '@angular/core';
|
|
11
|
-
import { CommonModule } from '@angular/common';
|
|
12
|
-
import { SsrWidgetRenderer, WidgetEventManager, } from '@bbq-chat/widgets';
|
|
13
|
-
import { WidgetRegistryService } from './widget-registry.service';
|
|
14
|
-
import { isHtmlRenderer, isComponentRenderer, isTemplateRenderer, } from './custom-widget-renderer.types';
|
|
15
|
-
/**
|
|
16
|
-
* Angular component for rendering chat widgets
|
|
17
|
-
*
|
|
18
|
-
* This component handles rendering of chat widgets using the BbQ ChatWidgets library.
|
|
19
|
-
* It manages widget lifecycle, event handling, and cleanup.
|
|
20
|
-
*
|
|
21
|
-
* Supports three types of custom widget renderers:
|
|
22
|
-
* 1. HTML function renderers (return HTML strings)
|
|
23
|
-
* 2. Angular Component renderers (render as dynamic components)
|
|
24
|
-
* 3. Angular TemplateRef renderers (render as embedded views)
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```typescript
|
|
28
|
-
* <bbq-widget-renderer
|
|
29
|
-
* [widgets]="messageWidgets"
|
|
30
|
-
* (widgetAction)="handleWidgetAction($event)">
|
|
31
|
-
* </bbq-widget-renderer>
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
let WidgetRendererComponent = class WidgetRendererComponent {
|
|
35
|
-
constructor() {
|
|
36
|
-
/**
|
|
37
|
-
* Emits when a widget action is triggered
|
|
38
|
-
*/
|
|
39
|
-
this.widgetAction = new EventEmitter();
|
|
40
|
-
this.widgetItems = [];
|
|
41
|
-
this.renderer = new SsrWidgetRenderer();
|
|
42
|
-
this.isViewInitialized = false;
|
|
43
|
-
this.widgetRegistry = inject(WidgetRegistryService);
|
|
44
|
-
this.injector = inject(Injector);
|
|
45
|
-
this.environmentInjector = inject(EnvironmentInjector);
|
|
46
|
-
this.dynamicComponents = [];
|
|
47
|
-
this.dynamicViews = [];
|
|
48
|
-
}
|
|
49
|
-
ngOnInit() {
|
|
50
|
-
this.updateWidgetHtml();
|
|
51
|
-
}
|
|
52
|
-
ngOnChanges(changes) {
|
|
53
|
-
if (changes['widgets']) {
|
|
54
|
-
this.updateWidgetHtml();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
ngAfterViewInit() {
|
|
58
|
-
this.isViewInitialized = true;
|
|
59
|
-
this.setupEventHandlers();
|
|
60
|
-
// Render dynamic components/templates after view init
|
|
61
|
-
this.renderDynamicWidgets();
|
|
62
|
-
}
|
|
63
|
-
ngOnDestroy() {
|
|
64
|
-
this.cleanup();
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Base implementation for updating the rendered HTML for the current widgets.
|
|
68
|
-
*
|
|
69
|
-
* Subclasses may override this method to customize how widgets are rendered
|
|
70
|
-
* (for example, to inject additional markup or perform preprocessing).
|
|
71
|
-
*
|
|
72
|
-
* Since this is the base implementation, overriding implementations are not
|
|
73
|
-
* required to call `super.updateWidgetHtml()`.
|
|
74
|
-
*/
|
|
75
|
-
updateWidgetHtml() {
|
|
76
|
-
if (!this.widgets || this.widgets.length === 0) {
|
|
77
|
-
this.widgetItems = [];
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
this.widgetItems = this.widgets.map((widget, index) => {
|
|
81
|
-
const customRenderer = this.widgetRegistry.getRenderer(widget.type);
|
|
82
|
-
// Check template renderer first (most specific)
|
|
83
|
-
if (customRenderer && isTemplateRenderer(customRenderer)) {
|
|
84
|
-
return {
|
|
85
|
-
index,
|
|
86
|
-
widget,
|
|
87
|
-
isHtml: false,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
// Check component renderer second
|
|
91
|
-
if (customRenderer && isComponentRenderer(customRenderer)) {
|
|
92
|
-
return {
|
|
93
|
-
index,
|
|
94
|
-
widget,
|
|
95
|
-
isHtml: false,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
// Check HTML function renderer last (most general, matches any function)
|
|
99
|
-
if (customRenderer && isHtmlRenderer(customRenderer)) {
|
|
100
|
-
return {
|
|
101
|
-
index,
|
|
102
|
-
widget,
|
|
103
|
-
isHtml: true,
|
|
104
|
-
html: customRenderer(widget),
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
// Default: render using the BbQ library renderer
|
|
108
|
-
return {
|
|
109
|
-
index,
|
|
110
|
-
widget,
|
|
111
|
-
isHtml: true,
|
|
112
|
-
html: this.renderer.renderWidget(widget),
|
|
113
|
-
};
|
|
114
|
-
});
|
|
115
|
-
// After view updates, reinitialize widgets only if view is already initialized
|
|
116
|
-
if (this.isViewInitialized) {
|
|
117
|
-
setTimeout(() => {
|
|
118
|
-
this.setupEventHandlers();
|
|
119
|
-
this.renderDynamicWidgets();
|
|
120
|
-
}, 0);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Render dynamic components and templates for custom widgets
|
|
125
|
-
*/
|
|
126
|
-
renderDynamicWidgets() {
|
|
127
|
-
if (!this.containerRef?.nativeElement)
|
|
128
|
-
return;
|
|
129
|
-
// Use microtask to ensure Angular has completed change detection
|
|
130
|
-
Promise.resolve().then(() => {
|
|
131
|
-
if (!this.containerRef?.nativeElement)
|
|
132
|
-
return;
|
|
133
|
-
// Clean up existing dynamic components and views
|
|
134
|
-
this.cleanupDynamicWidgets();
|
|
135
|
-
const container = this.containerRef.nativeElement;
|
|
136
|
-
// Query all widget divs without the data-rendered filter
|
|
137
|
-
const dynamicWidgetDivs = Array.from(container.querySelectorAll('.bbq-widget'));
|
|
138
|
-
let dynamicIndex = 0;
|
|
139
|
-
this.widgetItems.forEach((item) => {
|
|
140
|
-
if (!item.isHtml) {
|
|
141
|
-
const customRenderer = this.widgetRegistry.getRenderer(item.widget.type);
|
|
142
|
-
if (!customRenderer)
|
|
143
|
-
return;
|
|
144
|
-
const targetDiv = dynamicWidgetDivs[dynamicIndex];
|
|
145
|
-
if (!targetDiv)
|
|
146
|
-
return;
|
|
147
|
-
// Clear the div content before rendering
|
|
148
|
-
targetDiv.innerHTML = '';
|
|
149
|
-
if (isComponentRenderer(customRenderer)) {
|
|
150
|
-
this.renderComponent(customRenderer, item.widget, targetDiv);
|
|
151
|
-
}
|
|
152
|
-
else if (isTemplateRenderer(customRenderer)) {
|
|
153
|
-
this.renderTemplate(customRenderer, item.widget, targetDiv);
|
|
154
|
-
}
|
|
155
|
-
dynamicIndex++;
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Render an Angular component for a custom widget
|
|
162
|
-
*
|
|
163
|
-
* Note: This method safely assigns properties to component instances
|
|
164
|
-
* by checking for property existence at runtime. This approach is necessary
|
|
165
|
-
* because we cannot statically verify that all components implement
|
|
166
|
-
* the CustomWidgetComponent interface.
|
|
167
|
-
*/
|
|
168
|
-
renderComponent(componentType, widget, targetElement) {
|
|
169
|
-
// Create the component using Angular's createComponent API
|
|
170
|
-
const componentRef = createComponent(componentType, {
|
|
171
|
-
environmentInjector: this.environmentInjector,
|
|
172
|
-
elementInjector: this.injector,
|
|
173
|
-
});
|
|
174
|
-
// Safely set component inputs if they exist
|
|
175
|
-
const instance = componentRef.instance;
|
|
176
|
-
if (instance && typeof instance === 'object') {
|
|
177
|
-
// Set widget property if it exists in the prototype chain
|
|
178
|
-
if ('widget' in instance) {
|
|
179
|
-
instance.widget = widget;
|
|
180
|
-
}
|
|
181
|
-
// Set widgetAction callback if it exists in the prototype chain
|
|
182
|
-
if ('widgetAction' in instance) {
|
|
183
|
-
instance.widgetAction = (actionName, payload) => {
|
|
184
|
-
this.widgetAction.emit({ actionName, payload });
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
// Attach the component's host view to the target element
|
|
189
|
-
targetElement.appendChild(componentRef.location.nativeElement);
|
|
190
|
-
// Store reference for cleanup
|
|
191
|
-
this.dynamicComponents.push(componentRef);
|
|
192
|
-
// Trigger change detection (use optional chaining for safety)
|
|
193
|
-
componentRef.changeDetectorRef?.detectChanges();
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Render an Angular template for a custom widget
|
|
197
|
-
*/
|
|
198
|
-
renderTemplate(templateRef, widget, targetElement) {
|
|
199
|
-
const context = {
|
|
200
|
-
$implicit: widget,
|
|
201
|
-
widget: widget,
|
|
202
|
-
emitAction: (actionName, payload) => {
|
|
203
|
-
this.widgetAction.emit({ actionName, payload });
|
|
204
|
-
},
|
|
205
|
-
};
|
|
206
|
-
const viewRef = templateRef.createEmbeddedView(context);
|
|
207
|
-
// Attach the view's DOM nodes to the target element
|
|
208
|
-
viewRef.rootNodes.forEach((node) => {
|
|
209
|
-
targetElement.appendChild(node);
|
|
210
|
-
});
|
|
211
|
-
// Store reference for cleanup
|
|
212
|
-
this.dynamicViews.push(viewRef);
|
|
213
|
-
// Trigger change detection
|
|
214
|
-
viewRef.detectChanges();
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Cleanup dynamic components and views
|
|
218
|
-
*/
|
|
219
|
-
cleanupDynamicWidgets() {
|
|
220
|
-
this.dynamicComponents.forEach((componentRef) => {
|
|
221
|
-
componentRef.destroy();
|
|
222
|
-
});
|
|
223
|
-
this.dynamicComponents = [];
|
|
224
|
-
this.dynamicViews.forEach((viewRef) => {
|
|
225
|
-
viewRef.destroy();
|
|
226
|
-
});
|
|
227
|
-
this.dynamicViews = [];
|
|
228
|
-
}
|
|
229
|
-
setupEventHandlers() {
|
|
230
|
-
if (!this.containerRef?.nativeElement)
|
|
231
|
-
return;
|
|
232
|
-
// Cleanup old resources before setting up new ones
|
|
233
|
-
this.cleanup();
|
|
234
|
-
const container = this.containerRef.nativeElement;
|
|
235
|
-
// Create a custom action handler that emits events
|
|
236
|
-
const actionHandler = {
|
|
237
|
-
handle: async (action, payload) => {
|
|
238
|
-
this.widgetAction.emit({ actionName: action, payload });
|
|
239
|
-
},
|
|
240
|
-
};
|
|
241
|
-
// Attach event handlers using WidgetEventManager
|
|
242
|
-
this.eventManager = new WidgetEventManager(actionHandler);
|
|
243
|
-
this.eventManager.attachHandlers(container);
|
|
244
|
-
}
|
|
245
|
-
handleClick(event) {
|
|
246
|
-
const target = event.target;
|
|
247
|
-
// Only trigger actions on non-form buttons and clickable elements (cards)
|
|
248
|
-
// Don't trigger on input elements or form buttons (let WidgetEventManager handle those)
|
|
249
|
-
const button = target.tagName === 'BUTTON' ? target : target.closest('button');
|
|
250
|
-
if (button && !button.closest('[data-widget-type="form"]')) {
|
|
251
|
-
const actionName = button.getAttribute('data-action');
|
|
252
|
-
if (actionName) {
|
|
253
|
-
try {
|
|
254
|
-
const payloadStr = button.getAttribute('data-payload');
|
|
255
|
-
const payload = payloadStr ? JSON.parse(payloadStr) : {};
|
|
256
|
-
this.widgetAction.emit({ actionName, payload });
|
|
257
|
-
}
|
|
258
|
-
catch (err) {
|
|
259
|
-
console.error('Failed to parse widget action payload:', err);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Cleanup all resources including event listeners.
|
|
266
|
-
*/
|
|
267
|
-
cleanup() {
|
|
268
|
-
// Cleanup dynamic widgets first
|
|
269
|
-
this.cleanupDynamicWidgets();
|
|
270
|
-
// Cleanup event manager
|
|
271
|
-
this.eventManager = undefined;
|
|
272
|
-
}
|
|
273
|
-
};
|
|
274
|
-
__decorate([
|
|
275
|
-
Input(),
|
|
276
|
-
__metadata("design:type", Object)
|
|
277
|
-
], WidgetRendererComponent.prototype, "widgets", void 0);
|
|
278
|
-
__decorate([
|
|
279
|
-
Output(),
|
|
280
|
-
__metadata("design:type", Object)
|
|
281
|
-
], WidgetRendererComponent.prototype, "widgetAction", void 0);
|
|
282
|
-
__decorate([
|
|
283
|
-
ViewChild('widgetContainer', { static: false }),
|
|
284
|
-
__metadata("design:type", ElementRef)
|
|
285
|
-
], WidgetRendererComponent.prototype, "containerRef", void 0);
|
|
286
|
-
WidgetRendererComponent = __decorate([
|
|
287
|
-
Component({
|
|
288
|
-
selector: 'bbq-widget-renderer',
|
|
289
|
-
standalone: true,
|
|
290
|
-
imports: [CommonModule],
|
|
291
|
-
template: `
|
|
292
|
-
<div #widgetContainer class="bbq-widgets-container" (click)="handleClick($event)">
|
|
293
|
-
@for (item of widgetItems; track item.index) {
|
|
294
|
-
@if (item.isHtml) {
|
|
295
|
-
<div class="bbq-widget" [innerHTML]="item.html"></div>
|
|
296
|
-
} @else {
|
|
297
|
-
<div class="bbq-widget" #dynamicWidget></div>
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
</div>
|
|
301
|
-
`,
|
|
302
|
-
styles: [
|
|
303
|
-
`
|
|
304
|
-
.bbq-widgets-container {
|
|
305
|
-
margin-top: 0.5rem;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
.bbq-widget {
|
|
309
|
-
margin-bottom: 0.5rem;
|
|
310
|
-
}
|
|
311
|
-
`,
|
|
312
|
-
],
|
|
313
|
-
})
|
|
314
|
-
], WidgetRendererComponent);
|
|
315
|
-
export { WidgetRendererComponent };
|
|
316
|
-
//# sourceMappingURL=widget-renderer.component.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"widget-renderer.component.js","sourceRoot":"","sources":["../src/widget-renderer.component.ts"],"names":[],"mappings":"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"}
|