nerdagent-chat-widget-angular 1.0.2 → 1.0.3

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/dist/README.md ADDED
@@ -0,0 +1,121 @@
1
+ # @nerdagent/chat-widget-angular
2
+
3
+ Angular wrapper for the NerdAgent Chat Widget built with Stencil.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @nerdagent/chat-widget-angular
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### 1. Import the Module
14
+
15
+ ```typescript
16
+ import { NgModule } from '@angular/core';
17
+ import { BrowserModule } from '@angular/platform-browser';
18
+ import { NerdChatWidgetModule } from '@nerdagent/chat-widget-angular';
19
+
20
+ import { AppComponent } from './app.component';
21
+
22
+ @NgModule({
23
+ declarations: [
24
+ AppComponent
25
+ ],
26
+ imports: [
27
+ BrowserModule,
28
+ NerdChatWidgetModule
29
+ ],
30
+ providers: [],
31
+ bootstrap: [AppComponent]
32
+ })
33
+ export class AppModule { }
34
+ ```
35
+
36
+ ### 2. Use in Component Template
37
+
38
+ ```html
39
+ <nerd-chat-widget
40
+ agentName="Support Agent"
41
+ agentRole="Customer Support"
42
+ primaryColor="#2d3e50"
43
+ accentColor="#4e8cff"
44
+ welcomeMessage="Hi! How can I help?"
45
+ position="bottom-right"
46
+ [width]="350"
47
+ [height]="500"
48
+ [showMinimizeButton]="true"
49
+ [showTimestamps]="true"
50
+ [enableFileUpload]="false"
51
+ [enableSpeech]="false"
52
+ [showPoweredBy]="true"
53
+ (messageSent)="onMessageSent($event)"
54
+ (widgetOpened)="onWidgetOpened()"
55
+ (widgetClosed)="onWidgetClosed()">
56
+ </nerd-chat-widget>
57
+ ```
58
+
59
+ ### 3. Handle Events in Component
60
+
61
+ ```typescript
62
+ import { Component } from '@angular/core';
63
+
64
+ @Component({
65
+ selector: 'app-root',
66
+ templateUrl: './app.component.html'
67
+ })
68
+ export class AppComponent {
69
+
70
+ onMessageSent(event: { message: string; timestamp: Date }) {
71
+ console.log('Message sent:', event);
72
+ }
73
+
74
+ onWidgetOpened() {
75
+ console.log('Widget opened');
76
+ }
77
+
78
+ onWidgetClosed() {
79
+ console.log('Widget closed');
80
+ }
81
+ }
82
+ ```
83
+
84
+ ## API
85
+
86
+ ### Properties
87
+
88
+ | Property | Type | Default | Description |
89
+ |----------|------|---------|-------------|
90
+ | `agentName` | `string` | `'Support Agent'` | Name of the chat agent |
91
+ | `agentRole` | `string` | `'Customer Support'` | Role/title of the agent |
92
+ | `primaryColor` | `string` | `'#2d3e50'` | Primary theme color |
93
+ | `accentColor` | `string` | `'#4e8cff'` | Accent color for buttons |
94
+ | `welcomeMessage` | `string` | `'Hi! How can I help?'` | Initial message from agent |
95
+ | `placeholderText` | `string` | `'Type your message...'` | Input placeholder text |
96
+ | `position` | `WidgetPosition` | `'bottom-right'` | Widget position |
97
+ | `width` | `string` | `'350'` | Widget width in pixels |
98
+ | `height` | `string` | `'500'` | Widget height in pixels |
99
+ | `showMinimizeButton` | `boolean` | `true` | Show/hide minimize button |
100
+ | `showTimestamps` | `boolean` | `true` | Show/hide message timestamps |
101
+ | `enableFileUpload` | `boolean` | `false` | Enable file upload feature |
102
+ | `enableSpeech` | `boolean` | `false` | Enable speech input |
103
+ | `showPoweredBy` | `boolean` | `true` | Show/hide "Powered by" footer |
104
+
105
+ ### Events
106
+
107
+ | Event | Type | Description |
108
+ |-------|------|-------------|
109
+ | `messageSent` | `{ message: string; timestamp: Date }` | Emitted when a message is sent |
110
+ | `widgetOpened` | `void` | Emitted when the widget is opened |
111
+ | `widgetClosed` | `void` | Emitted when the widget is closed |
112
+
113
+ ### Types
114
+
115
+ ```typescript
116
+ type WidgetPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
117
+ ```
118
+
119
+ ## License
120
+
121
+ MIT
@@ -0,0 +1,4 @@
1
+ export { NerdChatWidgetModule } from './lib/chat-widget.module';
2
+ export { ChatWidgetComponent } from './lib/chat-widget.component';
3
+ export * from './lib/chat-widget.types';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgTmVyZENoYXRXaWRnZXRNb2R1bGUgfSBmcm9tICcuL2xpYi9jaGF0LXdpZGdldC5tb2R1bGUnO1xuZXhwb3J0IHsgQ2hhdFdpZGdldENvbXBvbmVudCB9IGZyb20gJy4vbGliL2NoYXQtd2lkZ2V0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jaGF0LXdpZGdldC50eXBlcyc7XG4iXX0=
@@ -0,0 +1,136 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ChatWidgetComponent {
4
+ chatWidget;
5
+ agentName = 'Support Agent';
6
+ agentRole = 'Customer Support';
7
+ primaryColor = '#2d3e50';
8
+ accentColor = '#4e8cff';
9
+ welcomeMessage = 'Hi! How can I help?';
10
+ placeholderText = 'Type your message...';
11
+ position = 'bottom-right';
12
+ width = '350';
13
+ height = '500';
14
+ showMinimizeButton = true;
15
+ showTimestamps = true;
16
+ enableFileUpload = false;
17
+ enableSpeech = false;
18
+ showPoweredBy = true;
19
+ messageSent = new EventEmitter();
20
+ widgetOpened = new EventEmitter();
21
+ widgetClosed = new EventEmitter();
22
+ eventListeners = [];
23
+ ngAfterViewInit() {
24
+ if (this.chatWidget?.nativeElement) {
25
+ this.setupEventListeners();
26
+ }
27
+ }
28
+ ngOnDestroy() {
29
+ this.removeEventListeners();
30
+ }
31
+ setupEventListeners() {
32
+ const widget = this.chatWidget.nativeElement;
33
+ const messageSentListener = (event) => {
34
+ this.messageSent.emit(event.detail);
35
+ };
36
+ const widgetOpenedListener = (event) => {
37
+ this.widgetOpened.emit();
38
+ };
39
+ const widgetClosedListener = (event) => {
40
+ this.widgetClosed.emit();
41
+ };
42
+ widget.addEventListener('messageSent', messageSentListener);
43
+ widget.addEventListener('widgetOpened', widgetOpenedListener);
44
+ widget.addEventListener('widgetClosed', widgetClosedListener);
45
+ // Store cleanup functions
46
+ this.eventListeners = [
47
+ () => widget.removeEventListener('messageSent', messageSentListener),
48
+ () => widget.removeEventListener('widgetOpened', widgetOpenedListener),
49
+ () => widget.removeEventListener('widgetClosed', widgetClosedListener),
50
+ ];
51
+ }
52
+ removeEventListeners() {
53
+ this.eventListeners.forEach(cleanup => cleanup());
54
+ this.eventListeners = [];
55
+ }
56
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
57
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ChatWidgetComponent, selector: "nerd-chat-widget", inputs: { agentName: "agentName", agentRole: "agentRole", primaryColor: "primaryColor", accentColor: "accentColor", welcomeMessage: "welcomeMessage", placeholderText: "placeholderText", position: "position", width: "width", height: "height", showMinimizeButton: "showMinimizeButton", showTimestamps: "showTimestamps", enableFileUpload: "enableFileUpload", enableSpeech: "enableSpeech", showPoweredBy: "showPoweredBy" }, outputs: { messageSent: "messageSent", widgetOpened: "widgetOpened", widgetClosed: "widgetClosed" }, viewQueries: [{ propertyName: "chatWidget", first: true, predicate: ["chatWidget"], descendants: true }], ngImport: i0, template: `
58
+ <nerd-chat-widget
59
+ #chatWidget
60
+ [attr.agent-name]="agentName"
61
+ [attr.agent-role]="agentRole"
62
+ [attr.primary-color]="primaryColor"
63
+ [attr.accent-color]="accentColor"
64
+ [attr.welcome-message]="welcomeMessage"
65
+ [attr.placeholder-text]="placeholderText"
66
+ [attr.position]="position"
67
+ [attr.width]="width"
68
+ [attr.height]="height"
69
+ [attr.show-minimize-button]="showMinimizeButton?.toString()"
70
+ [attr.show-timestamps]="showTimestamps?.toString()"
71
+ [attr.enable-file-upload]="enableFileUpload?.toString()"
72
+ [attr.enable-speech]="enableSpeech?.toString()"
73
+ [attr.show-powered-by]="showPoweredBy?.toString()">
74
+ </nerd-chat-widget>
75
+ `, isInline: true, dependencies: [{ kind: "component", type: ChatWidgetComponent, selector: "nerd-chat-widget", inputs: ["agentName", "agentRole", "primaryColor", "accentColor", "welcomeMessage", "placeholderText", "position", "width", "height", "showMinimizeButton", "showTimestamps", "enableFileUpload", "enableSpeech", "showPoweredBy"], outputs: ["messageSent", "widgetOpened", "widgetClosed"] }] });
76
+ }
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatWidgetComponent, decorators: [{
78
+ type: Component,
79
+ args: [{ selector: 'nerd-chat-widget', template: `
80
+ <nerd-chat-widget
81
+ #chatWidget
82
+ [attr.agent-name]="agentName"
83
+ [attr.agent-role]="agentRole"
84
+ [attr.primary-color]="primaryColor"
85
+ [attr.accent-color]="accentColor"
86
+ [attr.welcome-message]="welcomeMessage"
87
+ [attr.placeholder-text]="placeholderText"
88
+ [attr.position]="position"
89
+ [attr.width]="width"
90
+ [attr.height]="height"
91
+ [attr.show-minimize-button]="showMinimizeButton?.toString()"
92
+ [attr.show-timestamps]="showTimestamps?.toString()"
93
+ [attr.enable-file-upload]="enableFileUpload?.toString()"
94
+ [attr.enable-speech]="enableSpeech?.toString()"
95
+ [attr.show-powered-by]="showPoweredBy?.toString()">
96
+ </nerd-chat-widget>
97
+ ` }]
98
+ }], propDecorators: { chatWidget: [{
99
+ type: ViewChild,
100
+ args: ['chatWidget', { static: false }]
101
+ }], agentName: [{
102
+ type: Input
103
+ }], agentRole: [{
104
+ type: Input
105
+ }], primaryColor: [{
106
+ type: Input
107
+ }], accentColor: [{
108
+ type: Input
109
+ }], welcomeMessage: [{
110
+ type: Input
111
+ }], placeholderText: [{
112
+ type: Input
113
+ }], position: [{
114
+ type: Input
115
+ }], width: [{
116
+ type: Input
117
+ }], height: [{
118
+ type: Input
119
+ }], showMinimizeButton: [{
120
+ type: Input
121
+ }], showTimestamps: [{
122
+ type: Input
123
+ }], enableFileUpload: [{
124
+ type: Input
125
+ }], enableSpeech: [{
126
+ type: Input
127
+ }], showPoweredBy: [{
128
+ type: Input
129
+ }], messageSent: [{
130
+ type: Output
131
+ }], widgetOpened: [{
132
+ type: Output
133
+ }], widgetClosed: [{
134
+ type: Output
135
+ }] } });
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9zcmMvbGliL2NoYXQtd2lkZ2V0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFjLFNBQVMsRUFBNEIsTUFBTSxlQUFlLENBQUM7O0FBMEJ4SCxNQUFNLE9BQU8sbUJBQW1CO0lBQ2MsVUFBVSxDQUEyQjtJQUV4RSxTQUFTLEdBQVcsZUFBZSxDQUFDO0lBQ3BDLFNBQVMsR0FBVyxrQkFBa0IsQ0FBQztJQUN2QyxZQUFZLEdBQVcsU0FBUyxDQUFDO0lBQ2pDLFdBQVcsR0FBVyxTQUFTLENBQUM7SUFDaEMsY0FBYyxHQUFXLHFCQUFxQixDQUFDO0lBQy9DLGVBQWUsR0FBVyxzQkFBc0IsQ0FBQztJQUNqRCxRQUFRLEdBQW1CLGNBQWMsQ0FBQztJQUMxQyxLQUFLLEdBQVcsS0FBSyxDQUFDO0lBQ3RCLE1BQU0sR0FBVyxLQUFLLENBQUM7SUFDdkIsa0JBQWtCLEdBQVksSUFBSSxDQUFDO0lBQ25DLGNBQWMsR0FBWSxJQUFJLENBQUM7SUFDL0IsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBQ2xDLFlBQVksR0FBWSxLQUFLLENBQUM7SUFDOUIsYUFBYSxHQUFZLElBQUksQ0FBQztJQUU3QixXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXdDLENBQUM7SUFDdkUsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDeEMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFMUMsY0FBYyxHQUFzQixFQUFFLENBQUM7SUFFL0MsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBRTdDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBa0IsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxtQkFBb0MsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsb0JBQXFDLENBQUMsQ0FBQztRQUMvRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLG9CQUFxQyxDQUFDLENBQUM7UUFFL0UsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUc7WUFDcEIsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxtQkFBb0MsQ0FBQztZQUNyRixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLG9CQUFxQyxDQUFDO1lBQ3ZGLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsb0JBQXFDLENBQUM7U0FDeEYsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBaEVVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLDJxQkFyQnBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQsNERBR1UsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQXZCL0IsU0FBUzsrQkFDRSxrQkFBa0IsWUFDbEI7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCVDs4QkFJMkMsVUFBVTtzQkFBckQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVqQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2lkZ2V0UG9zaXRpb24gfSBmcm9tICcuL2NoYXQtd2lkZ2V0LnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmVyZC1jaGF0LXdpZGdldCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5lcmQtY2hhdC13aWRnZXRcbiAgICAgICNjaGF0V2lkZ2V0XG4gICAgICBbYXR0ci5hZ2VudC1uYW1lXT1cImFnZW50TmFtZVwiXG4gICAgICBbYXR0ci5hZ2VudC1yb2xlXT1cImFnZW50Um9sZVwiXG4gICAgICBbYXR0ci5wcmltYXJ5LWNvbG9yXT1cInByaW1hcnlDb2xvclwiXG4gICAgICBbYXR0ci5hY2NlbnQtY29sb3JdPVwiYWNjZW50Q29sb3JcIlxuICAgICAgW2F0dHIud2VsY29tZS1tZXNzYWdlXT1cIndlbGNvbWVNZXNzYWdlXCJcbiAgICAgIFthdHRyLnBsYWNlaG9sZGVyLXRleHRdPVwicGxhY2Vob2xkZXJUZXh0XCJcbiAgICAgIFthdHRyLnBvc2l0aW9uXT1cInBvc2l0aW9uXCJcbiAgICAgIFthdHRyLndpZHRoXT1cIndpZHRoXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJoZWlnaHRcIlxuICAgICAgW2F0dHIuc2hvdy1taW5pbWl6ZS1idXR0b25dPVwic2hvd01pbmltaXplQnV0dG9uPy50b1N0cmluZygpXCJcbiAgICAgIFthdHRyLnNob3ctdGltZXN0YW1wc109XCJzaG93VGltZXN0YW1wcz8udG9TdHJpbmcoKVwiXG4gICAgICBbYXR0ci5lbmFibGUtZmlsZS11cGxvYWRdPVwiZW5hYmxlRmlsZVVwbG9hZD8udG9TdHJpbmcoKVwiXG4gICAgICBbYXR0ci5lbmFibGUtc3BlZWNoXT1cImVuYWJsZVNwZWVjaD8udG9TdHJpbmcoKVwiXG4gICAgICBbYXR0ci5zaG93LXBvd2VyZWQtYnldPVwic2hvd1Bvd2VyZWRCeT8udG9TdHJpbmcoKVwiPlxuICAgIDwvbmVyZC1jaGF0LXdpZGdldD5cbiAgYCxcbiAgc3R5bGVzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBDaGF0V2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnY2hhdFdpZGdldCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjaGF0V2lkZ2V0ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgQElucHV0KCkgYWdlbnROYW1lOiBzdHJpbmcgPSAnU3VwcG9ydCBBZ2VudCc7XG4gIEBJbnB1dCgpIGFnZW50Um9sZTogc3RyaW5nID0gJ0N1c3RvbWVyIFN1cHBvcnQnO1xuICBASW5wdXQoKSBwcmltYXJ5Q29sb3I6IHN0cmluZyA9ICcjMmQzZTUwJztcbiAgQElucHV0KCkgYWNjZW50Q29sb3I6IHN0cmluZyA9ICcjNGU4Y2ZmJztcbiAgQElucHV0KCkgd2VsY29tZU1lc3NhZ2U6IHN0cmluZyA9ICdIaSEgSG93IGNhbiBJIGhlbHA/JztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXJUZXh0OiBzdHJpbmcgPSAnVHlwZSB5b3VyIG1lc3NhZ2UuLi4nO1xuICBASW5wdXQoKSBwb3NpdGlvbjogV2lkZ2V0UG9zaXRpb24gPSAnYm90dG9tLXJpZ2h0JztcbiAgQElucHV0KCkgd2lkdGg6IHN0cmluZyA9ICczNTAnO1xuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9ICc1MDAnO1xuICBASW5wdXQoKSBzaG93TWluaW1pemVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93VGltZXN0YW1wczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGVuYWJsZUZpbGVVcGxvYWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlU3BlZWNoOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dQb3dlcmVkQnk6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBtZXNzYWdlU2VudCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBtZXNzYWdlOiBzdHJpbmc7IHRpbWVzdGFtcDogRGF0ZSB9PigpO1xuICBAT3V0cHV0KCkgd2lkZ2V0T3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgd2lkZ2V0Q2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmNoYXRXaWRnZXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpIHtcbiAgICBjb25zdCB3aWRnZXQgPSB0aGlzLmNoYXRXaWRnZXQubmF0aXZlRWxlbWVudDtcblxuICAgIGNvbnN0IG1lc3NhZ2VTZW50TGlzdGVuZXIgPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZW50LmVtaXQoZXZlbnQuZGV0YWlsKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgd2lkZ2V0T3BlbmVkTGlzdGVuZXIgPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLndpZGdldE9wZW5lZC5lbWl0KCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHdpZGdldENsb3NlZExpc3RlbmVyID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4ge1xuICAgICAgdGhpcy53aWRnZXRDbG9zZWQuZW1pdCgpO1xuICAgIH07XG5cbiAgICB3aWRnZXQuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZVNlbnQnLCBtZXNzYWdlU2VudExpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXIpO1xuICAgIHdpZGdldC5hZGRFdmVudExpc3RlbmVyKCd3aWRnZXRPcGVuZWQnLCB3aWRnZXRPcGVuZWRMaXN0ZW5lciBhcyBFdmVudExpc3RlbmVyKTtcbiAgICB3aWRnZXQuYWRkRXZlbnRMaXN0ZW5lcignd2lkZ2V0Q2xvc2VkJywgd2lkZ2V0Q2xvc2VkTGlzdGVuZXIgYXMgRXZlbnRMaXN0ZW5lcik7XG5cbiAgICAvLyBTdG9yZSBjbGVhbnVwIGZ1bmN0aW9uc1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXG4gICAgICAoKSA9PiB3aWRnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZVNlbnQnLCBtZXNzYWdlU2VudExpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXIpLFxuICAgICAgKCkgPT4gd2lkZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dpZGdldE9wZW5lZCcsIHdpZGdldE9wZW5lZExpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXIpLFxuICAgICAgKCkgPT4gd2lkZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dpZGdldENsb3NlZCcsIHdpZGdldENsb3NlZExpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXIpLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUV2ZW50TGlzdGVuZXJzKCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaChjbGVhbnVwID0+IGNsZWFudXAoKSk7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,29 @@
1
+ import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ChatWidgetComponent } from './chat-widget.component';
4
+ // Import and define custom elements
5
+ import { defineCustomElements } from 'nerdagent-chat-widget/loader';
6
+ import * as i0 from "@angular/core";
7
+ // Define custom elements when module is imported
8
+ defineCustomElements();
9
+ export class NerdChatWidgetModule {
10
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NerdChatWidgetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: NerdChatWidgetModule, declarations: [ChatWidgetComponent], imports: [CommonModule], exports: [ChatWidgetComponent] });
12
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NerdChatWidgetModule, imports: [CommonModule] });
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NerdChatWidgetModule, decorators: [{
15
+ type: NgModule,
16
+ args: [{
17
+ declarations: [
18
+ ChatWidgetComponent
19
+ ],
20
+ imports: [
21
+ CommonModule
22
+ ],
23
+ exports: [
24
+ ChatWidgetComponent
25
+ ],
26
+ schemas: [CUSTOM_ELEMENTS_SCHEMA]
27
+ }]
28
+ }] });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC13aWRnZXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci9zcmMvbGliL2NoYXQtd2lkZ2V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxvQ0FBb0M7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBRXBFLGlEQUFpRDtBQUNqRCxvQkFBb0IsRUFBRSxDQUFDO0FBY3ZCLE1BQU0sT0FBTyxvQkFBb0I7d0dBQXBCLG9CQUFvQjt5R0FBcEIsb0JBQW9CLGlCQVY3QixtQkFBbUIsYUFHbkIsWUFBWSxhQUdaLG1CQUFtQjt5R0FJVixvQkFBb0IsWUFQN0IsWUFBWTs7NEZBT0gsb0JBQW9CO2tCQVpoQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixtQkFBbUI7cUJBQ3BCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3FCQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxtQkFBbUI7cUJBQ3BCO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhdFdpZGdldENvbXBvbmVudCB9IGZyb20gJy4vY2hhdC13aWRnZXQuY29tcG9uZW50JztcblxuLy8gSW1wb3J0IGFuZCBkZWZpbmUgY3VzdG9tIGVsZW1lbnRzXG5pbXBvcnQgeyBkZWZpbmVDdXN0b21FbGVtZW50cyB9IGZyb20gJ25lcmRhZ2VudC1jaGF0LXdpZGdldC9sb2FkZXInO1xuXG4vLyBEZWZpbmUgY3VzdG9tIGVsZW1lbnRzIHdoZW4gbW9kdWxlIGlzIGltcG9ydGVkXG5kZWZpbmVDdXN0b21FbGVtZW50cygpO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBDaGF0V2lkZ2V0Q29tcG9uZW50XG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIENoYXRXaWRnZXRDb21wb25lbnRcbiAgXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXG59KVxuZXhwb3J0IGNsYXNzIE5lcmRDaGF0V2lkZ2V0TW9kdWxlIHsgfVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC13aWRnZXQudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3NyYy9saWIvY2hhdC13aWRnZXQudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFdpZGdldFBvc2l0aW9uID0gJ2JvdHRvbS1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAndG9wLWxlZnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRXaWRnZXRDb25maWcge1xuICBhZ2VudE5hbWU/OiBzdHJpbmc7XG4gIGFnZW50Um9sZT86IHN0cmluZztcbiAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICBhY2NlbnRDb2xvcj86IHN0cmluZztcbiAgd2VsY29tZU1lc3NhZ2U/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyVGV4dD86IHN0cmluZztcbiAgcG9zaXRpb24/OiBXaWRnZXRQb3NpdGlvbjtcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIGhlaWdodD86IHN0cmluZztcbiAgc2hvd01pbmltaXplQnV0dG9uPzogYm9vbGVhbjtcbiAgc2hvd1RpbWVzdGFtcHM/OiBib29sZWFuO1xuICBlbmFibGVGaWxlVXBsb2FkPzogYm9vbGVhbjtcbiAgZW5hYmxlU3BlZWNoPzogYm9vbGVhbjtcbiAgc2hvd1Bvd2VyZWRCeT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFdpZGdldEV2ZW50cyB7XG4gIG1lc3NhZ2VTZW50OiBDdXN0b21FdmVudDx7IG1lc3NhZ2U6IHN0cmluZzsgdGltZXN0YW1wOiBEYXRlIH0+O1xuICB3aWRnZXRPcGVuZWQ6IEN1c3RvbUV2ZW50PHZvaWQ+O1xuICB3aWRnZXRDbG9zZWQ6IEN1c3RvbUV2ZW50PHZvaWQ+O1xufVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVyZGFnZW50LWNoYXQtd2lkZ2V0LWFuZ3VsYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3NyYy9uZXJkYWdlbnQtY2hhdC13aWRnZXQtYW5ndWxhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,168 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Output, Input, ViewChild, Component, CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { defineCustomElements } from 'nerdagent-chat-widget/loader';
5
+
6
+ class ChatWidgetComponent {
7
+ chatWidget;
8
+ agentName = 'Support Agent';
9
+ agentRole = 'Customer Support';
10
+ primaryColor = '#2d3e50';
11
+ accentColor = '#4e8cff';
12
+ welcomeMessage = 'Hi! How can I help?';
13
+ placeholderText = 'Type your message...';
14
+ position = 'bottom-right';
15
+ width = '350';
16
+ height = '500';
17
+ showMinimizeButton = true;
18
+ showTimestamps = true;
19
+ enableFileUpload = false;
20
+ enableSpeech = false;
21
+ showPoweredBy = true;
22
+ messageSent = new EventEmitter();
23
+ widgetOpened = new EventEmitter();
24
+ widgetClosed = new EventEmitter();
25
+ eventListeners = [];
26
+ ngAfterViewInit() {
27
+ if (this.chatWidget?.nativeElement) {
28
+ this.setupEventListeners();
29
+ }
30
+ }
31
+ ngOnDestroy() {
32
+ this.removeEventListeners();
33
+ }
34
+ setupEventListeners() {
35
+ const widget = this.chatWidget.nativeElement;
36
+ const messageSentListener = (event) => {
37
+ this.messageSent.emit(event.detail);
38
+ };
39
+ const widgetOpenedListener = (event) => {
40
+ this.widgetOpened.emit();
41
+ };
42
+ const widgetClosedListener = (event) => {
43
+ this.widgetClosed.emit();
44
+ };
45
+ widget.addEventListener('messageSent', messageSentListener);
46
+ widget.addEventListener('widgetOpened', widgetOpenedListener);
47
+ widget.addEventListener('widgetClosed', widgetClosedListener);
48
+ // Store cleanup functions
49
+ this.eventListeners = [
50
+ () => widget.removeEventListener('messageSent', messageSentListener),
51
+ () => widget.removeEventListener('widgetOpened', widgetOpenedListener),
52
+ () => widget.removeEventListener('widgetClosed', widgetClosedListener),
53
+ ];
54
+ }
55
+ removeEventListeners() {
56
+ this.eventListeners.forEach(cleanup => cleanup());
57
+ this.eventListeners = [];
58
+ }
59
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
60
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ChatWidgetComponent, selector: "nerd-chat-widget", inputs: { agentName: "agentName", agentRole: "agentRole", primaryColor: "primaryColor", accentColor: "accentColor", welcomeMessage: "welcomeMessage", placeholderText: "placeholderText", position: "position", width: "width", height: "height", showMinimizeButton: "showMinimizeButton", showTimestamps: "showTimestamps", enableFileUpload: "enableFileUpload", enableSpeech: "enableSpeech", showPoweredBy: "showPoweredBy" }, outputs: { messageSent: "messageSent", widgetOpened: "widgetOpened", widgetClosed: "widgetClosed" }, viewQueries: [{ propertyName: "chatWidget", first: true, predicate: ["chatWidget"], descendants: true }], ngImport: i0, template: `
61
+ <nerd-chat-widget
62
+ #chatWidget
63
+ [attr.agent-name]="agentName"
64
+ [attr.agent-role]="agentRole"
65
+ [attr.primary-color]="primaryColor"
66
+ [attr.accent-color]="accentColor"
67
+ [attr.welcome-message]="welcomeMessage"
68
+ [attr.placeholder-text]="placeholderText"
69
+ [attr.position]="position"
70
+ [attr.width]="width"
71
+ [attr.height]="height"
72
+ [attr.show-minimize-button]="showMinimizeButton?.toString()"
73
+ [attr.show-timestamps]="showTimestamps?.toString()"
74
+ [attr.enable-file-upload]="enableFileUpload?.toString()"
75
+ [attr.enable-speech]="enableSpeech?.toString()"
76
+ [attr.show-powered-by]="showPoweredBy?.toString()">
77
+ </nerd-chat-widget>
78
+ `, isInline: true, dependencies: [{ kind: "component", type: ChatWidgetComponent, selector: "nerd-chat-widget", inputs: ["agentName", "agentRole", "primaryColor", "accentColor", "welcomeMessage", "placeholderText", "position", "width", "height", "showMinimizeButton", "showTimestamps", "enableFileUpload", "enableSpeech", "showPoweredBy"], outputs: ["messageSent", "widgetOpened", "widgetClosed"] }] });
79
+ }
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatWidgetComponent, decorators: [{
81
+ type: Component,
82
+ args: [{ selector: 'nerd-chat-widget', template: `
83
+ <nerd-chat-widget
84
+ #chatWidget
85
+ [attr.agent-name]="agentName"
86
+ [attr.agent-role]="agentRole"
87
+ [attr.primary-color]="primaryColor"
88
+ [attr.accent-color]="accentColor"
89
+ [attr.welcome-message]="welcomeMessage"
90
+ [attr.placeholder-text]="placeholderText"
91
+ [attr.position]="position"
92
+ [attr.width]="width"
93
+ [attr.height]="height"
94
+ [attr.show-minimize-button]="showMinimizeButton?.toString()"
95
+ [attr.show-timestamps]="showTimestamps?.toString()"
96
+ [attr.enable-file-upload]="enableFileUpload?.toString()"
97
+ [attr.enable-speech]="enableSpeech?.toString()"
98
+ [attr.show-powered-by]="showPoweredBy?.toString()">
99
+ </nerd-chat-widget>
100
+ ` }]
101
+ }], propDecorators: { chatWidget: [{
102
+ type: ViewChild,
103
+ args: ['chatWidget', { static: false }]
104
+ }], agentName: [{
105
+ type: Input
106
+ }], agentRole: [{
107
+ type: Input
108
+ }], primaryColor: [{
109
+ type: Input
110
+ }], accentColor: [{
111
+ type: Input
112
+ }], welcomeMessage: [{
113
+ type: Input
114
+ }], placeholderText: [{
115
+ type: Input
116
+ }], position: [{
117
+ type: Input
118
+ }], width: [{
119
+ type: Input
120
+ }], height: [{
121
+ type: Input
122
+ }], showMinimizeButton: [{
123
+ type: Input
124
+ }], showTimestamps: [{
125
+ type: Input
126
+ }], enableFileUpload: [{
127
+ type: Input
128
+ }], enableSpeech: [{
129
+ type: Input
130
+ }], showPoweredBy: [{
131
+ type: Input
132
+ }], messageSent: [{
133
+ type: Output
134
+ }], widgetOpened: [{
135
+ type: Output
136
+ }], widgetClosed: [{
137
+ type: Output
138
+ }] } });
139
+
140
+ // Define custom elements when module is imported
141
+ defineCustomElements();
142
+ class NerdChatWidgetModule {
143
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NerdChatWidgetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
144
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: NerdChatWidgetModule, declarations: [ChatWidgetComponent], imports: [CommonModule], exports: [ChatWidgetComponent] });
145
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NerdChatWidgetModule, imports: [CommonModule] });
146
+ }
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NerdChatWidgetModule, decorators: [{
148
+ type: NgModule,
149
+ args: [{
150
+ declarations: [
151
+ ChatWidgetComponent
152
+ ],
153
+ imports: [
154
+ CommonModule
155
+ ],
156
+ exports: [
157
+ ChatWidgetComponent
158
+ ],
159
+ schemas: [CUSTOM_ELEMENTS_SCHEMA]
160
+ }]
161
+ }] });
162
+
163
+ /**
164
+ * Generated bundle index. Do not edit.
165
+ */
166
+
167
+ export { ChatWidgetComponent, NerdChatWidgetModule };
168
+ //# sourceMappingURL=nerdagent-chat-widget-angular.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nerdagent-chat-widget-angular.mjs","sources":["../../../packages/angular/src/lib/chat-widget.component.ts","../../../packages/angular/src/lib/chat-widget.module.ts","../../../packages/angular/src/nerdagent-chat-widget-angular.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, ElementRef, ViewChild, AfterViewInit, OnDestroy } from '@angular/core';\nimport { WidgetPosition } from './chat-widget.types';\n\n@Component({\n selector: 'nerd-chat-widget',\n template: `\n <nerd-chat-widget\n #chatWidget\n [attr.agent-name]=\"agentName\"\n [attr.agent-role]=\"agentRole\"\n [attr.primary-color]=\"primaryColor\"\n [attr.accent-color]=\"accentColor\"\n [attr.welcome-message]=\"welcomeMessage\"\n [attr.placeholder-text]=\"placeholderText\"\n [attr.position]=\"position\"\n [attr.width]=\"width\"\n [attr.height]=\"height\"\n [attr.show-minimize-button]=\"showMinimizeButton?.toString()\"\n [attr.show-timestamps]=\"showTimestamps?.toString()\"\n [attr.enable-file-upload]=\"enableFileUpload?.toString()\"\n [attr.enable-speech]=\"enableSpeech?.toString()\"\n [attr.show-powered-by]=\"showPoweredBy?.toString()\">\n </nerd-chat-widget>\n `,\n styles: []\n})\nexport class ChatWidgetComponent implements AfterViewInit, OnDestroy {\n @ViewChild('chatWidget', { static: false }) chatWidget!: ElementRef<HTMLElement>;\n\n @Input() agentName: string = 'Support Agent';\n @Input() agentRole: string = 'Customer Support';\n @Input() primaryColor: string = '#2d3e50';\n @Input() accentColor: string = '#4e8cff';\n @Input() welcomeMessage: string = 'Hi! How can I help?';\n @Input() placeholderText: string = 'Type your message...';\n @Input() position: WidgetPosition = 'bottom-right';\n @Input() width: string = '350';\n @Input() height: string = '500';\n @Input() showMinimizeButton: boolean = true;\n @Input() showTimestamps: boolean = true;\n @Input() enableFileUpload: boolean = false;\n @Input() enableSpeech: boolean = false;\n @Input() showPoweredBy: boolean = true;\n\n @Output() messageSent = new EventEmitter<{ message: string; timestamp: Date }>();\n @Output() widgetOpened = new EventEmitter<void>();\n @Output() widgetClosed = new EventEmitter<void>();\n\n private eventListeners: Array<() => void> = [];\n\n ngAfterViewInit() {\n if (this.chatWidget?.nativeElement) {\n this.setupEventListeners();\n }\n }\n\n ngOnDestroy() {\n this.removeEventListeners();\n }\n\n private setupEventListeners() {\n const widget = this.chatWidget.nativeElement;\n\n const messageSentListener = (event: CustomEvent) => {\n this.messageSent.emit(event.detail);\n };\n\n const widgetOpenedListener = (event: CustomEvent) => {\n this.widgetOpened.emit();\n };\n\n const widgetClosedListener = (event: CustomEvent) => {\n this.widgetClosed.emit();\n };\n\n widget.addEventListener('messageSent', messageSentListener as EventListener);\n widget.addEventListener('widgetOpened', widgetOpenedListener as EventListener);\n widget.addEventListener('widgetClosed', widgetClosedListener as EventListener);\n\n // Store cleanup functions\n this.eventListeners = [\n () => widget.removeEventListener('messageSent', messageSentListener as EventListener),\n () => widget.removeEventListener('widgetOpened', widgetOpenedListener as EventListener),\n () => widget.removeEventListener('widgetClosed', widgetClosedListener as EventListener),\n ];\n }\n\n private removeEventListeners() {\n this.eventListeners.forEach(cleanup => cleanup());\n this.eventListeners = [];\n }\n}\n","import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ChatWidgetComponent } from './chat-widget.component';\n\n// Import and define custom elements\nimport { defineCustomElements } from 'nerdagent-chat-widget/loader';\n\n// Define custom elements when module is imported\ndefineCustomElements();\n\n@NgModule({\n declarations: [\n ChatWidgetComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n ChatWidgetComponent\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class NerdChatWidgetModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { EventEmitter, ElementRef, AfterViewInit, OnDestroy } from '@angular/core';
2
2
  import { WidgetPosition } from './chat-widget.types';
3
+ import * as i0 from "@angular/core";
3
4
  export declare class ChatWidgetComponent implements AfterViewInit, OnDestroy {
4
5
  chatWidget: ElementRef<HTMLElement>;
5
6
  agentName: string;
@@ -27,4 +28,6 @@ export declare class ChatWidgetComponent implements AfterViewInit, OnDestroy {
27
28
  ngOnDestroy(): void;
28
29
  private setupEventListeners;
29
30
  private removeEventListeners;
31
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChatWidgetComponent, never>;
32
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChatWidgetComponent, "nerd-chat-widget", never, { "agentName": { "alias": "agentName"; "required": false; }; "agentRole": { "alias": "agentRole"; "required": false; }; "primaryColor": { "alias": "primaryColor"; "required": false; }; "accentColor": { "alias": "accentColor"; "required": false; }; "welcomeMessage": { "alias": "welcomeMessage"; "required": false; }; "placeholderText": { "alias": "placeholderText"; "required": false; }; "position": { "alias": "position"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "showMinimizeButton": { "alias": "showMinimizeButton"; "required": false; }; "showTimestamps": { "alias": "showTimestamps"; "required": false; }; "enableFileUpload": { "alias": "enableFileUpload"; "required": false; }; "enableSpeech": { "alias": "enableSpeech"; "required": false; }; "showPoweredBy": { "alias": "showPoweredBy"; "required": false; }; }, { "messageSent": "messageSent"; "widgetOpened": "widgetOpened"; "widgetClosed": "widgetClosed"; }, never, never, false, never>;
30
33
  }
@@ -1,2 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./chat-widget.component";
3
+ import * as i2 from "@angular/common";
1
4
  export declare class NerdChatWidgetModule {
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<NerdChatWidgetModule, never>;
6
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NerdChatWidgetModule, [typeof i1.ChatWidgetComponent], [typeof i2.CommonModule], [typeof i1.ChatWidgetComponent]>;
7
+ static ɵinj: i0.ɵɵInjectorDeclaration<NerdChatWidgetModule>;
2
8
  }
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "nerdagent-chat-widget-angular",
3
+ "version": "1.0.2",
4
+ "description": "NerdAgent Chat Widget for Angular",
5
+ "main": "dist/index.js",
6
+ "module": "fesm2022/nerdagent-chat-widget-angular.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist/"
10
+ ],
11
+ "keywords": [
12
+ "angular",
13
+ "chat",
14
+ "widget",
15
+ "stencil",
16
+ "web-components"
17
+ ],
18
+ "author": "NerdAgent",
19
+ "license": "MIT",
20
+ "peerDependencies": {
21
+ "@angular/common": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
22
+ "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
23
+ },
24
+ "dependencies": {
25
+ "nerdagent-chat-widget": "^1.0.0",
26
+ "tslib": "^2.3.0"
27
+ },
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/nerdagent/chat-widget.git",
31
+ "directory": "packages/angular"
32
+ },
33
+ "gitHead": "f46abd47a7632d8fc690b202bfc7c202bcb8b18f",
34
+ "typings": "index.d.ts",
35
+ "exports": {
36
+ "./package.json": {
37
+ "default": "./package.json"
38
+ },
39
+ ".": {
40
+ "types": "./index.d.ts",
41
+ "esm2022": "./esm2022/nerdagent-chat-widget-angular.mjs",
42
+ "esm": "./esm2022/nerdagent-chat-widget-angular.mjs",
43
+ "default": "./fesm2022/nerdagent-chat-widget-angular.mjs"
44
+ }
45
+ },
46
+ "sideEffects": false
47
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nerdagent-chat-widget-angular",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "NerdAgent Chat Widget for Angular",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -9,7 +9,7 @@
9
9
  "dist/"
10
10
  ],
11
11
  "scripts": {
12
- "build": "tsc",
12
+ "build": "ng-packagr -p ng-package.json",
13
13
  "prepublishOnly": "npm run build"
14
14
  },
15
15
  "keywords": [
@@ -32,12 +32,13 @@
32
32
  "@angular/common": "^18.0.0",
33
33
  "@angular/core": "^18.0.0",
34
34
  "@types/node": "^20.0.0",
35
- "typescript": "^5.0.0"
35
+ "typescript": "^5.0.0",
36
+ "ng-packagr": "^18.0.0"
36
37
  },
37
38
  "repository": {
38
39
  "type": "git",
39
40
  "url": "https://github.com/nerdagent/chat-widget.git",
40
41
  "directory": "packages/angular"
41
42
  },
42
- "gitHead": "baebff96671fd060b15aa0ca587f2c9a1556c06b"
43
+ "gitHead": "f46abd47a7632d8fc690b202bfc7c202bcb8b18f"
43
44
  }