nerdagent-chat-widget-angular 1.0.5 → 1.0.7

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/README.md CHANGED
@@ -1,121 +1,267 @@
1
- # @nerdagent/chat-widget-angular
1
+ # NerdAgent Chat Widget for Angular
2
2
 
3
- Angular wrapper for the NerdAgent Chat Widget built with Stencil.
3
+ A powerful, customizable chat widget component for Angular applications. Built with Stencil.js for maximum compatibility and performance.
4
+
5
+ ## Features
6
+
7
+ - 🚀 **Framework Agnostic Core** - Built with Stencil.js Web Components
8
+ - 🎨 **Highly Customizable** - Colors, positioning, features, and more
9
+ - 📱 **Responsive Design** - Works on desktop and mobile
10
+ - 🔧 **TypeScript Support** - Full type definitions included
11
+ - ⚡ **Lightweight** - Minimal bundle size impact
12
+ - 🎯 **Easy Integration** - Simple Angular component wrapper
4
13
 
5
14
  ## Installation
6
15
 
7
16
  ```bash
8
- npm install @nerdagent/chat-widget-angular
17
+ npm install nerdagent-chat-widget-angular
9
18
  ```
10
19
 
11
- ## Usage
20
+ ## Quick Start
12
21
 
13
22
  ### 1. Import the Module
14
23
 
15
24
  ```typescript
16
25
  import { NgModule } from '@angular/core';
17
26
  import { BrowserModule } from '@angular/platform-browser';
18
- import { NerdChatWidgetModule } from '@nerdagent/chat-widget-angular';
19
-
20
- import { AppComponent } from './app.component';
27
+ import { NerdChatWidgetModule } from 'nerdagent-chat-widget-angular';
21
28
 
22
29
  @NgModule({
23
- declarations: [
24
- AppComponent
25
- ],
26
30
  imports: [
27
31
  BrowserModule,
28
32
  NerdChatWidgetModule
29
33
  ],
30
- providers: [],
31
- bootstrap: [AppComponent]
34
+ // ... rest of your module
32
35
  })
33
36
  export class AppModule { }
34
37
  ```
35
38
 
36
- ### 2. Use in Component Template
39
+ ### 2. Use the Component
37
40
 
38
41
  ```html
39
42
  <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"
43
+ [agent-name]="'Support Agent'"
44
+ [agent-role]="'Customer Support'"
45
+ [primary-color]="'#2d3e50'"
46
+ [accent-color]="'#4e8cff'"
47
+ [welcome-message]="'Hi! How can I help you today?'"
48
+ [position]="'bottom-right'"
49
+ [width]="'350'"
50
+ [height]="'500'"
51
+ [show-minimize-button]="true"
52
+ [show-timestamps]="true"
53
+ [enable-file-upload]="false"
54
+ [enable-speech]="false"
55
+ [show-powered-by]="true"
53
56
  (messageSent)="onMessageSent($event)"
54
57
  (widgetOpened)="onWidgetOpened()"
55
58
  (widgetClosed)="onWidgetClosed()">
56
59
  </nerd-chat-widget>
57
60
  ```
58
61
 
59
- ### 3. Handle Events in Component
62
+ ### 3. Handle Events
60
63
 
61
64
  ```typescript
62
65
  import { Component } from '@angular/core';
63
66
 
64
67
  @Component({
65
68
  selector: 'app-root',
66
- templateUrl: './app.component.html'
69
+ template: `
70
+ <nerd-chat-widget
71
+ [agent-name]="config.agentName"
72
+ [agent-role]="config.agentRole"
73
+ [primary-color]="config.primaryColor"
74
+ [accent-color]="config.accentColor"
75
+ [welcome-message]="config.welcomeMessage"
76
+ [position]="config.position"
77
+ [width]="config.width"
78
+ [height]="config.height"
79
+ [show-minimize-button]="config.showMinimizeButton"
80
+ [show-timestamps]="config.showTimestamps"
81
+ [enable-file-upload]="config.enableFileUpload"
82
+ [enable-speech]="config.enableSpeech"
83
+ [show-powered-by]="config.showPoweredBy"
84
+ (messageSent)="onMessageSent($event)"
85
+ (widgetOpened)="onWidgetOpened()"
86
+ (widgetClosed)="onWidgetClosed()">
87
+ </nerd-chat-widget>
88
+ `
67
89
  })
68
90
  export class AppComponent {
69
-
91
+ config = {
92
+ agentName: 'Support Agent',
93
+ agentRole: 'Customer Support',
94
+ primaryColor: '#2d3e50',
95
+ accentColor: '#4e8cff',
96
+ welcomeMessage: 'Hi! How can I help you today?',
97
+ placeholderText: 'Type your message...',
98
+ position: 'bottom-right' as 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left',
99
+ width: '350',
100
+ height: '500',
101
+ showMinimizeButton: true,
102
+ showTimestamps: true,
103
+ enableFileUpload: false,
104
+ enableSpeech: false,
105
+ showPoweredBy: true
106
+ };
107
+
70
108
  onMessageSent(event: { message: string; timestamp: Date }) {
71
109
  console.log('Message sent:', event);
110
+ // Handle message sent event
72
111
  }
73
112
 
74
113
  onWidgetOpened() {
75
114
  console.log('Widget opened');
115
+ // Handle widget opened event
76
116
  }
77
117
 
78
118
  onWidgetClosed() {
79
119
  console.log('Widget closed');
120
+ // Handle widget closed event
80
121
  }
81
122
  }
82
123
  ```
83
124
 
84
- ## API
125
+ ## Configuration Options
85
126
 
86
- ### Properties
127
+ ### Input Properties
87
128
 
88
129
  | Property | Type | Default | Description |
89
130
  |----------|------|---------|-------------|
90
- | `agentName` | `string` | `'Support Agent'` | Name of the chat agent |
131
+ | `agentName` | `string` | `'Support Agent'` | Name of the support agent |
91
132
  | `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 |
133
+ | `primaryColor` | `string` | `'#2d3e50'` | Primary color theme |
134
+ | `accentColor` | `string` | `'#4e8cff'` | Accent color theme |
135
+ | `welcomeMessage` | `string` | `'Hi! How can I help?'` | Initial welcome message |
95
136
  | `placeholderText` | `string` | `'Type your message...'` | Input placeholder text |
96
- | `position` | `WidgetPosition` | `'bottom-right'` | Widget position |
137
+ | `position` | `WidgetPosition` | `'bottom-right'` | Widget position on screen |
97
138
  | `width` | `string` | `'350'` | Widget width in pixels |
98
139
  | `height` | `string` | `'500'` | Widget height in pixels |
99
- | `showMinimizeButton` | `boolean` | `true` | Show/hide minimize button |
100
- | `showTimestamps` | `boolean` | `true` | Show/hide message timestamps |
140
+ | `showMinimizeButton` | `boolean` | `true` | Show minimize/maximize button |
141
+ | `showTimestamps` | `boolean` | `true` | Show message timestamps |
101
142
  | `enableFileUpload` | `boolean` | `false` | Enable file upload feature |
102
- | `enableSpeech` | `boolean` | `false` | Enable speech input |
103
- | `showPoweredBy` | `boolean` | `true` | Show/hide "Powered by" footer |
143
+ | `enableSpeech` | `boolean` | `false` | Enable speech recognition |
144
+ | `showPoweredBy` | `boolean` | `true` | Show "Powered by" branding |
104
145
 
105
- ### Events
146
+ ### WidgetPosition Type
147
+
148
+ ```typescript
149
+ type WidgetPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
150
+ ```
151
+
152
+ ### Output Events
106
153
 
107
154
  | Event | Type | Description |
108
155
  |-------|------|-------------|
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 |
156
+ | `messageSent` | `{ message: string; timestamp: Date }` | Fired when user sends a message |
157
+ | `widgetOpened` | `void` | Fired when widget is opened |
158
+ | `widgetClosed` | `void` | Fired when widget is closed |
159
+
160
+ ## Advanced Usage
112
161
 
113
- ### Types
162
+ ### Dynamic Configuration
114
163
 
115
164
  ```typescript
116
- type WidgetPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
165
+ export class AppComponent {
166
+ config = {
167
+ agentName: 'AI Assistant',
168
+ agentRole: 'Virtual Support',
169
+ primaryColor: '#007bff',
170
+ accentColor: '#28a745',
171
+ welcomeMessage: 'Hello! I\'m here to help.',
172
+ position: 'bottom-left' as WidgetPosition,
173
+ width: '400',
174
+ height: '600',
175
+ showMinimizeButton: true,
176
+ showTimestamps: true,
177
+ enableFileUpload: true,
178
+ enableSpeech: true,
179
+ showPoweredBy: false
180
+ };
181
+
182
+ updateConfig() {
183
+ // Update configuration dynamically
184
+ this.config.primaryColor = '#ff6b6b';
185
+ this.config.position = 'top-right';
186
+ }
187
+ }
188
+ ```
189
+
190
+ ### Custom Styling
191
+
192
+ The widget uses CSS custom properties for theming. You can override these in your global styles:
193
+
194
+ ```css
195
+ :root {
196
+ --primary-color: #your-color;
197
+ --accent-color: #your-accent;
198
+ --widget-width: 400px;
199
+ --widget-height: 600px;
200
+ --font-family: 'Your Font', sans-serif;
201
+ }
202
+ ```
203
+
204
+ ## Browser Support
205
+
206
+ - Chrome 60+
207
+ - Firefox 55+
208
+ - Safari 10+
209
+ - Edge 79+
210
+
211
+ ## TypeScript Support
212
+
213
+ Full TypeScript definitions are included. Import types as needed:
214
+
215
+ ```typescript
216
+ import { WidgetPosition } from 'nerdagent-chat-widget-angular';
217
+ ```
218
+
219
+ ## Troubleshooting
220
+
221
+ ### Common Issues
222
+
223
+ 1. **Widget not appearing**: Ensure the module is imported in your app module
224
+ 2. **Styling issues**: Check that FontAwesome is loaded for icons
225
+ 3. **Events not firing**: Verify event handlers are properly bound
226
+
227
+ ### Debug Mode
228
+
229
+ Enable debug logging by setting the browser's localStorage:
230
+
231
+ ```javascript
232
+ localStorage.setItem('nerdagent-chat-widget-debug', 'true');
117
233
  ```
118
234
 
235
+ ## Contributing
236
+
237
+ We welcome contributions! Please see our [Contributing Guide](../../CONTRIBUTING.md) for details.
238
+
119
239
  ## License
120
240
 
121
- MIT
241
+ MIT License - see [LICENSE](../../LICENSE) for details.
242
+
243
+ ## Support
244
+
245
+ - 📧 Email: support@nerdagent.ai
246
+ - 📖 Documentation: [docs.nerdagent.ai](https://docs.nerdagent.ai)
247
+ - 🐛 Issues: [GitHub Issues](https://github.com/nerdagent/chat-widget/issues)
248
+
249
+ ## Changelog
250
+
251
+ ### v1.0.6
252
+ - Fixed infinite recursion issue in component template
253
+ - Improved AOT compilation support
254
+ - Enhanced TypeScript definitions
255
+
256
+ ### v1.0.5
257
+ - Fixed package entry points for proper module resolution
258
+ - Improved build configuration
259
+
260
+ ### v1.0.4
261
+ - Added proper AOT compilation support
262
+ - Fixed Angular Ivy compatibility
263
+
264
+ ### v1.0.3
265
+ - Initial release with Angular wrapper
266
+ - Full TypeScript support
267
+ - Event handling integration
package/dist/README.md CHANGED
@@ -1,121 +1,267 @@
1
- # @nerdagent/chat-widget-angular
1
+ # NerdAgent Chat Widget for Angular
2
2
 
3
- Angular wrapper for the NerdAgent Chat Widget built with Stencil.
3
+ A powerful, customizable chat widget component for Angular applications. Built with Stencil.js for maximum compatibility and performance.
4
+
5
+ ## Features
6
+
7
+ - 🚀 **Framework Agnostic Core** - Built with Stencil.js Web Components
8
+ - 🎨 **Highly Customizable** - Colors, positioning, features, and more
9
+ - 📱 **Responsive Design** - Works on desktop and mobile
10
+ - 🔧 **TypeScript Support** - Full type definitions included
11
+ - ⚡ **Lightweight** - Minimal bundle size impact
12
+ - 🎯 **Easy Integration** - Simple Angular component wrapper
4
13
 
5
14
  ## Installation
6
15
 
7
16
  ```bash
8
- npm install @nerdagent/chat-widget-angular
17
+ npm install nerdagent-chat-widget-angular
9
18
  ```
10
19
 
11
- ## Usage
20
+ ## Quick Start
12
21
 
13
22
  ### 1. Import the Module
14
23
 
15
24
  ```typescript
16
25
  import { NgModule } from '@angular/core';
17
26
  import { BrowserModule } from '@angular/platform-browser';
18
- import { NerdChatWidgetModule } from '@nerdagent/chat-widget-angular';
19
-
20
- import { AppComponent } from './app.component';
27
+ import { NerdChatWidgetModule } from 'nerdagent-chat-widget-angular';
21
28
 
22
29
  @NgModule({
23
- declarations: [
24
- AppComponent
25
- ],
26
30
  imports: [
27
31
  BrowserModule,
28
32
  NerdChatWidgetModule
29
33
  ],
30
- providers: [],
31
- bootstrap: [AppComponent]
34
+ // ... rest of your module
32
35
  })
33
36
  export class AppModule { }
34
37
  ```
35
38
 
36
- ### 2. Use in Component Template
39
+ ### 2. Use the Component
37
40
 
38
41
  ```html
39
42
  <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"
43
+ [agent-name]="'Support Agent'"
44
+ [agent-role]="'Customer Support'"
45
+ [primary-color]="'#2d3e50'"
46
+ [accent-color]="'#4e8cff'"
47
+ [welcome-message]="'Hi! How can I help you today?'"
48
+ [position]="'bottom-right'"
49
+ [width]="'350'"
50
+ [height]="'500'"
51
+ [show-minimize-button]="true"
52
+ [show-timestamps]="true"
53
+ [enable-file-upload]="false"
54
+ [enable-speech]="false"
55
+ [show-powered-by]="true"
53
56
  (messageSent)="onMessageSent($event)"
54
57
  (widgetOpened)="onWidgetOpened()"
55
58
  (widgetClosed)="onWidgetClosed()">
56
59
  </nerd-chat-widget>
57
60
  ```
58
61
 
59
- ### 3. Handle Events in Component
62
+ ### 3. Handle Events
60
63
 
61
64
  ```typescript
62
65
  import { Component } from '@angular/core';
63
66
 
64
67
  @Component({
65
68
  selector: 'app-root',
66
- templateUrl: './app.component.html'
69
+ template: `
70
+ <nerd-chat-widget
71
+ [agent-name]="config.agentName"
72
+ [agent-role]="config.agentRole"
73
+ [primary-color]="config.primaryColor"
74
+ [accent-color]="config.accentColor"
75
+ [welcome-message]="config.welcomeMessage"
76
+ [position]="config.position"
77
+ [width]="config.width"
78
+ [height]="config.height"
79
+ [show-minimize-button]="config.showMinimizeButton"
80
+ [show-timestamps]="config.showTimestamps"
81
+ [enable-file-upload]="config.enableFileUpload"
82
+ [enable-speech]="config.enableSpeech"
83
+ [show-powered-by]="config.showPoweredBy"
84
+ (messageSent)="onMessageSent($event)"
85
+ (widgetOpened)="onWidgetOpened()"
86
+ (widgetClosed)="onWidgetClosed()">
87
+ </nerd-chat-widget>
88
+ `
67
89
  })
68
90
  export class AppComponent {
69
-
91
+ config = {
92
+ agentName: 'Support Agent',
93
+ agentRole: 'Customer Support',
94
+ primaryColor: '#2d3e50',
95
+ accentColor: '#4e8cff',
96
+ welcomeMessage: 'Hi! How can I help you today?',
97
+ placeholderText: 'Type your message...',
98
+ position: 'bottom-right' as 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left',
99
+ width: '350',
100
+ height: '500',
101
+ showMinimizeButton: true,
102
+ showTimestamps: true,
103
+ enableFileUpload: false,
104
+ enableSpeech: false,
105
+ showPoweredBy: true
106
+ };
107
+
70
108
  onMessageSent(event: { message: string; timestamp: Date }) {
71
109
  console.log('Message sent:', event);
110
+ // Handle message sent event
72
111
  }
73
112
 
74
113
  onWidgetOpened() {
75
114
  console.log('Widget opened');
115
+ // Handle widget opened event
76
116
  }
77
117
 
78
118
  onWidgetClosed() {
79
119
  console.log('Widget closed');
120
+ // Handle widget closed event
80
121
  }
81
122
  }
82
123
  ```
83
124
 
84
- ## API
125
+ ## Configuration Options
85
126
 
86
- ### Properties
127
+ ### Input Properties
87
128
 
88
129
  | Property | Type | Default | Description |
89
130
  |----------|------|---------|-------------|
90
- | `agentName` | `string` | `'Support Agent'` | Name of the chat agent |
131
+ | `agentName` | `string` | `'Support Agent'` | Name of the support agent |
91
132
  | `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 |
133
+ | `primaryColor` | `string` | `'#2d3e50'` | Primary color theme |
134
+ | `accentColor` | `string` | `'#4e8cff'` | Accent color theme |
135
+ | `welcomeMessage` | `string` | `'Hi! How can I help?'` | Initial welcome message |
95
136
  | `placeholderText` | `string` | `'Type your message...'` | Input placeholder text |
96
- | `position` | `WidgetPosition` | `'bottom-right'` | Widget position |
137
+ | `position` | `WidgetPosition` | `'bottom-right'` | Widget position on screen |
97
138
  | `width` | `string` | `'350'` | Widget width in pixels |
98
139
  | `height` | `string` | `'500'` | Widget height in pixels |
99
- | `showMinimizeButton` | `boolean` | `true` | Show/hide minimize button |
100
- | `showTimestamps` | `boolean` | `true` | Show/hide message timestamps |
140
+ | `showMinimizeButton` | `boolean` | `true` | Show minimize/maximize button |
141
+ | `showTimestamps` | `boolean` | `true` | Show message timestamps |
101
142
  | `enableFileUpload` | `boolean` | `false` | Enable file upload feature |
102
- | `enableSpeech` | `boolean` | `false` | Enable speech input |
103
- | `showPoweredBy` | `boolean` | `true` | Show/hide "Powered by" footer |
143
+ | `enableSpeech` | `boolean` | `false` | Enable speech recognition |
144
+ | `showPoweredBy` | `boolean` | `true` | Show "Powered by" branding |
104
145
 
105
- ### Events
146
+ ### WidgetPosition Type
147
+
148
+ ```typescript
149
+ type WidgetPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
150
+ ```
151
+
152
+ ### Output Events
106
153
 
107
154
  | Event | Type | Description |
108
155
  |-------|------|-------------|
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 |
156
+ | `messageSent` | `{ message: string; timestamp: Date }` | Fired when user sends a message |
157
+ | `widgetOpened` | `void` | Fired when widget is opened |
158
+ | `widgetClosed` | `void` | Fired when widget is closed |
159
+
160
+ ## Advanced Usage
112
161
 
113
- ### Types
162
+ ### Dynamic Configuration
114
163
 
115
164
  ```typescript
116
- type WidgetPosition = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
165
+ export class AppComponent {
166
+ config = {
167
+ agentName: 'AI Assistant',
168
+ agentRole: 'Virtual Support',
169
+ primaryColor: '#007bff',
170
+ accentColor: '#28a745',
171
+ welcomeMessage: 'Hello! I\'m here to help.',
172
+ position: 'bottom-left' as WidgetPosition,
173
+ width: '400',
174
+ height: '600',
175
+ showMinimizeButton: true,
176
+ showTimestamps: true,
177
+ enableFileUpload: true,
178
+ enableSpeech: true,
179
+ showPoweredBy: false
180
+ };
181
+
182
+ updateConfig() {
183
+ // Update configuration dynamically
184
+ this.config.primaryColor = '#ff6b6b';
185
+ this.config.position = 'top-right';
186
+ }
187
+ }
188
+ ```
189
+
190
+ ### Custom Styling
191
+
192
+ The widget uses CSS custom properties for theming. You can override these in your global styles:
193
+
194
+ ```css
195
+ :root {
196
+ --primary-color: #your-color;
197
+ --accent-color: #your-accent;
198
+ --widget-width: 400px;
199
+ --widget-height: 600px;
200
+ --font-family: 'Your Font', sans-serif;
201
+ }
202
+ ```
203
+
204
+ ## Browser Support
205
+
206
+ - Chrome 60+
207
+ - Firefox 55+
208
+ - Safari 10+
209
+ - Edge 79+
210
+
211
+ ## TypeScript Support
212
+
213
+ Full TypeScript definitions are included. Import types as needed:
214
+
215
+ ```typescript
216
+ import { WidgetPosition } from 'nerdagent-chat-widget-angular';
217
+ ```
218
+
219
+ ## Troubleshooting
220
+
221
+ ### Common Issues
222
+
223
+ 1. **Widget not appearing**: Ensure the module is imported in your app module
224
+ 2. **Styling issues**: Check that FontAwesome is loaded for icons
225
+ 3. **Events not firing**: Verify event handlers are properly bound
226
+
227
+ ### Debug Mode
228
+
229
+ Enable debug logging by setting the browser's localStorage:
230
+
231
+ ```javascript
232
+ localStorage.setItem('nerdagent-chat-widget-debug', 'true');
117
233
  ```
118
234
 
235
+ ## Contributing
236
+
237
+ We welcome contributions! Please see our [Contributing Guide](../../CONTRIBUTING.md) for details.
238
+
119
239
  ## License
120
240
 
121
- MIT
241
+ MIT License - see [LICENSE](../../LICENSE) for details.
242
+
243
+ ## Support
244
+
245
+ - 📧 Email: support@nerdagent.ai
246
+ - 📖 Documentation: [docs.nerdagent.ai](https://docs.nerdagent.ai)
247
+ - 🐛 Issues: [GitHub Issues](https://github.com/nerdagent/chat-widget/issues)
248
+
249
+ ## Changelog
250
+
251
+ ### v1.0.6
252
+ - Fixed infinite recursion issue in component template
253
+ - Improved AOT compilation support
254
+ - Enhanced TypeScript definitions
255
+
256
+ ### v1.0.5
257
+ - Fixed package entry points for proper module resolution
258
+ - Improved build configuration
259
+
260
+ ### v1.0.4
261
+ - Added proper AOT compilation support
262
+ - Fixed Angular Ivy compatibility
263
+
264
+ ### v1.0.3
265
+ - Initial release with Angular wrapper
266
+ - Full TypeScript support
267
+ - Event handling integration
@@ -55,8 +55,9 @@ export class ChatWidgetComponent {
55
55
  }
56
56
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
57
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
58
+ <div
59
59
  #chatWidget
60
+ nerd-chat-widget
60
61
  [attr.agent-name]="agentName"
61
62
  [attr.agent-role]="agentRole"
62
63
  [attr.primary-color]="primaryColor"
@@ -71,14 +72,15 @@ export class ChatWidgetComponent {
71
72
  [attr.enable-file-upload]="enableFileUpload?.toString()"
72
73
  [attr.enable-speech]="enableSpeech?.toString()"
73
74
  [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"] }] });
75
+ </div>
76
+ `, isInline: true });
76
77
  }
77
78
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatWidgetComponent, decorators: [{
78
79
  type: Component,
79
80
  args: [{ selector: 'nerd-chat-widget', template: `
80
- <nerd-chat-widget
81
+ <div
81
82
  #chatWidget
83
+ nerd-chat-widget
82
84
  [attr.agent-name]="agentName"
83
85
  [attr.agent-role]="agentRole"
84
86
  [attr.primary-color]="primaryColor"
@@ -93,7 +95,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
93
95
  [attr.enable-file-upload]="enableFileUpload?.toString()"
94
96
  [attr.enable-speech]="enableSpeech?.toString()"
95
97
  [attr.show-powered-by]="showPoweredBy?.toString()">
96
- </nerd-chat-widget>
98
+ </div>
97
99
  ` }]
98
100
  }], propDecorators: { chatWidget: [{
99
101
  type: ViewChild,
@@ -133,4 +135,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
133
135
  }], widgetClosed: [{
134
136
  type: Output
135
137
  }] } });
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jaGF0LXdpZGdldC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxTQUFTLEVBQTRCLE1BQU0sZUFBZSxDQUFDOztBQTBCeEgsTUFBTSxPQUFPLG1CQUFtQjtJQUNjLFVBQVUsQ0FBMkI7SUFFeEUsU0FBUyxHQUFXLGVBQWUsQ0FBQztJQUNwQyxTQUFTLEdBQVcsa0JBQWtCLENBQUM7SUFDdkMsWUFBWSxHQUFXLFNBQVMsQ0FBQztJQUNqQyxXQUFXLEdBQVcsU0FBUyxDQUFDO0lBQ2hDLGNBQWMsR0FBVyxxQkFBcUIsQ0FBQztJQUMvQyxlQUFlLEdBQVcsc0JBQXNCLENBQUM7SUFDakQsUUFBUSxHQUFtQixjQUFjLENBQUM7SUFDMUMsS0FBSyxHQUFXLEtBQUssQ0FBQztJQUN0QixNQUFNLEdBQVcsS0FBSyxDQUFDO0lBQ3ZCLGtCQUFrQixHQUFZLElBQUksQ0FBQztJQUNuQyxjQUFjLEdBQVksSUFBSSxDQUFDO0lBQy9CLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxZQUFZLEdBQVksS0FBSyxDQUFDO0lBQzlCLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFFN0IsV0FBVyxHQUFHLElBQUksWUFBWSxFQUF3QyxDQUFDO0lBQ3ZFLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ3hDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRTFDLGNBQWMsR0FBc0IsRUFBRSxDQUFDO0lBRS9DLGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUU3QyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBa0IsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBa0IsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDO1FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQWtCLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsbUJBQW9DLENBQUMsQ0FBQztRQUM3RSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLG9CQUFxQyxDQUFDLENBQUM7UUFDL0UsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxvQkFBcUMsQ0FBQyxDQUFDO1FBRS9FLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ3BCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsbUJBQW9DLENBQUM7WUFDckYsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxvQkFBcUMsQ0FBQztZQUN2RixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLG9CQUFxQyxDQUFDO1NBQ3hGLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQWhFVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiwycUJBckJwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JULDREQUdVLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkF2Qi9CLFNBQVM7K0JBQ0Usa0JBQWtCLFlBQ2xCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQ7OEJBSTJDLFVBQVU7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFakMsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdpZGdldFBvc2l0aW9uIH0gZnJvbSAnLi9jaGF0LXdpZGdldC50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25lcmQtY2hhdC13aWRnZXQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZXJkLWNoYXQtd2lkZ2V0XG4gICAgICAjY2hhdFdpZGdldFxuICAgICAgW2F0dHIuYWdlbnQtbmFtZV09XCJhZ2VudE5hbWVcIlxuICAgICAgW2F0dHIuYWdlbnQtcm9sZV09XCJhZ2VudFJvbGVcIlxuICAgICAgW2F0dHIucHJpbWFyeS1jb2xvcl09XCJwcmltYXJ5Q29sb3JcIlxuICAgICAgW2F0dHIuYWNjZW50LWNvbG9yXT1cImFjY2VudENvbG9yXCJcbiAgICAgIFthdHRyLndlbGNvbWUtbWVzc2FnZV09XCJ3ZWxjb21lTWVzc2FnZVwiXG4gICAgICBbYXR0ci5wbGFjZWhvbGRlci10ZXh0XT1cInBsYWNlaG9sZGVyVGV4dFwiXG4gICAgICBbYXR0ci5wb3NpdGlvbl09XCJwb3NpdGlvblwiXG4gICAgICBbYXR0ci53aWR0aF09XCJ3aWR0aFwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiaGVpZ2h0XCJcbiAgICAgIFthdHRyLnNob3ctbWluaW1pemUtYnV0dG9uXT1cInNob3dNaW5pbWl6ZUJ1dHRvbj8udG9TdHJpbmcoKVwiXG4gICAgICBbYXR0ci5zaG93LXRpbWVzdGFtcHNdPVwic2hvd1RpbWVzdGFtcHM/LnRvU3RyaW5nKClcIlxuICAgICAgW2F0dHIuZW5hYmxlLWZpbGUtdXBsb2FkXT1cImVuYWJsZUZpbGVVcGxvYWQ/LnRvU3RyaW5nKClcIlxuICAgICAgW2F0dHIuZW5hYmxlLXNwZWVjaF09XCJlbmFibGVTcGVlY2g/LnRvU3RyaW5nKClcIlxuICAgICAgW2F0dHIuc2hvdy1wb3dlcmVkLWJ5XT1cInNob3dQb3dlcmVkQnk/LnRvU3RyaW5nKClcIj5cbiAgICA8L25lcmQtY2hhdC13aWRnZXQ+XG4gIGAsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgQ2hhdFdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2NoYXRXaWRnZXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2hhdFdpZGdldCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIEBJbnB1dCgpIGFnZW50TmFtZTogc3RyaW5nID0gJ1N1cHBvcnQgQWdlbnQnO1xuICBASW5wdXQoKSBhZ2VudFJvbGU6IHN0cmluZyA9ICdDdXN0b21lciBTdXBwb3J0JztcbiAgQElucHV0KCkgcHJpbWFyeUNvbG9yOiBzdHJpbmcgPSAnIzJkM2U1MCc7XG4gIEBJbnB1dCgpIGFjY2VudENvbG9yOiBzdHJpbmcgPSAnIzRlOGNmZic7XG4gIEBJbnB1dCgpIHdlbGNvbWVNZXNzYWdlOiBzdHJpbmcgPSAnSGkhIEhvdyBjYW4gSSBoZWxwPyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyVGV4dDogc3RyaW5nID0gJ1R5cGUgeW91ciBtZXNzYWdlLi4uJztcbiAgQElucHV0KCkgcG9zaXRpb246IFdpZGdldFBvc2l0aW9uID0gJ2JvdHRvbS1yaWdodCc7XG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSAnMzUwJztcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSAnNTAwJztcbiAgQElucHV0KCkgc2hvd01pbmltaXplQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1RpbWVzdGFtcHM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBlbmFibGVGaWxlVXBsb2FkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZVNwZWVjaDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93UG93ZXJlZEJ5OiBib29sZWFuID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgbWVzc2FnZVNlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbWVzc2FnZTogc3RyaW5nOyB0aW1lc3RhbXA6IERhdGUgfT4oKTtcbiAgQE91dHB1dCgpIHdpZGdldE9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHdpZGdldENsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5jaGF0V2lkZ2V0Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3Qgd2lkZ2V0ID0gdGhpcy5jaGF0V2lkZ2V0Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjb25zdCBtZXNzYWdlU2VudExpc3RlbmVyID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4ge1xuICAgICAgdGhpcy5tZXNzYWdlU2VudC5lbWl0KGV2ZW50LmRldGFpbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHdpZGdldE9wZW5lZExpc3RlbmVyID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4ge1xuICAgICAgdGhpcy53aWRnZXRPcGVuZWQuZW1pdCgpO1xuICAgIH07XG5cbiAgICBjb25zdCB3aWRnZXRDbG9zZWRMaXN0ZW5lciA9IChldmVudDogQ3VzdG9tRXZlbnQpID0+IHtcbiAgICAgIHRoaXMud2lkZ2V0Q2xvc2VkLmVtaXQoKTtcbiAgICB9O1xuXG4gICAgd2lkZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2VTZW50JywgbWVzc2FnZVNlbnRMaXN0ZW5lciBhcyBFdmVudExpc3RlbmVyKTtcbiAgICB3aWRnZXQuYWRkRXZlbnRMaXN0ZW5lcignd2lkZ2V0T3BlbmVkJywgd2lkZ2V0T3BlbmVkTGlzdGVuZXIgYXMgRXZlbnRMaXN0ZW5lcik7XG4gICAgd2lkZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3dpZGdldENsb3NlZCcsIHdpZGdldENsb3NlZExpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXIpO1xuXG4gICAgLy8gU3RvcmUgY2xlYW51cCBmdW5jdGlvbnNcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzID0gW1xuICAgICAgKCkgPT4gd2lkZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2VTZW50JywgbWVzc2FnZVNlbnRMaXN0ZW5lciBhcyBFdmVudExpc3RlbmVyKSxcbiAgICAgICgpID0+IHdpZGdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aWRnZXRPcGVuZWQnLCB3aWRnZXRPcGVuZWRMaXN0ZW5lciBhcyBFdmVudExpc3RlbmVyKSxcbiAgICAgICgpID0+IHdpZGdldC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aWRnZXRDbG9zZWQnLCB3aWRnZXRDbG9zZWRMaXN0ZW5lciBhcyBFdmVudExpc3RlbmVyKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goY2xlYW51cCA9PiBjbGVhbnVwKCkpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgfVxufVxuIl19
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jaGF0LXdpZGdldC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxTQUFTLEVBQTRCLE1BQU0sZUFBZSxDQUFDOztBQTJCeEgsTUFBTSxPQUFPLG1CQUFtQjtJQUNjLFVBQVUsQ0FBMkI7SUFFeEUsU0FBUyxHQUFXLGVBQWUsQ0FBQztJQUNwQyxTQUFTLEdBQVcsa0JBQWtCLENBQUM7SUFDdkMsWUFBWSxHQUFXLFNBQVMsQ0FBQztJQUNqQyxXQUFXLEdBQVcsU0FBUyxDQUFDO0lBQ2hDLGNBQWMsR0FBVyxxQkFBcUIsQ0FBQztJQUMvQyxlQUFlLEdBQVcsc0JBQXNCLENBQUM7SUFDakQsUUFBUSxHQUFtQixjQUFjLENBQUM7SUFDMUMsS0FBSyxHQUFXLEtBQUssQ0FBQztJQUN0QixNQUFNLEdBQVcsS0FBSyxDQUFDO0lBQ3ZCLGtCQUFrQixHQUFZLElBQUksQ0FBQztJQUNuQyxjQUFjLEdBQVksSUFBSSxDQUFDO0lBQy9CLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxZQUFZLEdBQVksS0FBSyxDQUFDO0lBQzlCLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFFN0IsV0FBVyxHQUFHLElBQUksWUFBWSxFQUF3QyxDQUFDO0lBQ3ZFLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ3hDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRTFDLGNBQWMsR0FBc0IsRUFBRSxDQUFDO0lBRS9DLGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUU3QyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBa0IsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUM7UUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBa0IsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDO1FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQWtCLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsbUJBQW9DLENBQUMsQ0FBQztRQUM3RSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLG9CQUFxQyxDQUFDLENBQUM7UUFDL0UsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxvQkFBcUMsQ0FBQyxDQUFDO1FBRS9FLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ3BCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsbUJBQW9DLENBQUM7WUFDckYsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxvQkFBcUMsQ0FBQztZQUN2RixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLG9CQUFxQyxDQUFDO1NBQ3hGLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQWhFVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiwycUJBdEJwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CVDs7NEZBR1UsbUJBQW1CO2tCQXhCL0IsU0FBUzsrQkFDRSxrQkFBa0IsWUFDbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQlQ7OEJBSTJDLFVBQVU7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFakMsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdpZGdldFBvc2l0aW9uIH0gZnJvbSAnLi9jaGF0LXdpZGdldC50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25lcmQtY2hhdC13aWRnZXQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgICNjaGF0V2lkZ2V0XG4gICAgICBuZXJkLWNoYXQtd2lkZ2V0XG4gICAgICBbYXR0ci5hZ2VudC1uYW1lXT1cImFnZW50TmFtZVwiXG4gICAgICBbYXR0ci5hZ2VudC1yb2xlXT1cImFnZW50Um9sZVwiXG4gICAgICBbYXR0ci5wcmltYXJ5LWNvbG9yXT1cInByaW1hcnlDb2xvclwiXG4gICAgICBbYXR0ci5hY2NlbnQtY29sb3JdPVwiYWNjZW50Q29sb3JcIlxuICAgICAgW2F0dHIud2VsY29tZS1tZXNzYWdlXT1cIndlbGNvbWVNZXNzYWdlXCJcbiAgICAgIFthdHRyLnBsYWNlaG9sZGVyLXRleHRdPVwicGxhY2Vob2xkZXJUZXh0XCJcbiAgICAgIFthdHRyLnBvc2l0aW9uXT1cInBvc2l0aW9uXCJcbiAgICAgIFthdHRyLndpZHRoXT1cIndpZHRoXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJoZWlnaHRcIlxuICAgICAgW2F0dHIuc2hvdy1taW5pbWl6ZS1idXR0b25dPVwic2hvd01pbmltaXplQnV0dG9uPy50b1N0cmluZygpXCJcbiAgICAgIFthdHRyLnNob3ctdGltZXN0YW1wc109XCJzaG93VGltZXN0YW1wcz8udG9TdHJpbmcoKVwiXG4gICAgICBbYXR0ci5lbmFibGUtZmlsZS11cGxvYWRdPVwiZW5hYmxlRmlsZVVwbG9hZD8udG9TdHJpbmcoKVwiXG4gICAgICBbYXR0ci5lbmFibGUtc3BlZWNoXT1cImVuYWJsZVNwZWVjaD8udG9TdHJpbmcoKVwiXG4gICAgICBbYXR0ci5zaG93LXBvd2VyZWQtYnldPVwic2hvd1Bvd2VyZWRCeT8udG9TdHJpbmcoKVwiPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIENoYXRXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdjaGF0V2lkZ2V0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGNoYXRXaWRnZXQhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBASW5wdXQoKSBhZ2VudE5hbWU6IHN0cmluZyA9ICdTdXBwb3J0IEFnZW50JztcbiAgQElucHV0KCkgYWdlbnRSb2xlOiBzdHJpbmcgPSAnQ3VzdG9tZXIgU3VwcG9ydCc7XG4gIEBJbnB1dCgpIHByaW1hcnlDb2xvcjogc3RyaW5nID0gJyMyZDNlNTAnO1xuICBASW5wdXQoKSBhY2NlbnRDb2xvcjogc3RyaW5nID0gJyM0ZThjZmYnO1xuICBASW5wdXQoKSB3ZWxjb21lTWVzc2FnZTogc3RyaW5nID0gJ0hpISBIb3cgY2FuIEkgaGVscD8nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlclRleHQ6IHN0cmluZyA9ICdUeXBlIHlvdXIgbWVzc2FnZS4uLic7XG4gIEBJbnB1dCgpIHBvc2l0aW9uOiBXaWRnZXRQb3NpdGlvbiA9ICdib3R0b20tcmlnaHQnO1xuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nID0gJzM1MCc7XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gJzUwMCc7XG4gIEBJbnB1dCgpIHNob3dNaW5pbWl6ZUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dUaW1lc3RhbXBzOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZW5hYmxlRmlsZVVwbG9hZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVTcGVlY2g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1Bvd2VyZWRCeTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQE91dHB1dCgpIG1lc3NhZ2VTZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1lc3NhZ2U6IHN0cmluZzsgdGltZXN0YW1wOiBEYXRlIH0+KCk7XG4gIEBPdXRwdXQoKSB3aWRnZXRPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB3aWRnZXRDbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBldmVudExpc3RlbmVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuY2hhdFdpZGdldD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHdpZGdldCA9IHRoaXMuY2hhdFdpZGdldC5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3QgbWVzc2FnZVNlbnRMaXN0ZW5lciA9IChldmVudDogQ3VzdG9tRXZlbnQpID0+IHtcbiAgICAgIHRoaXMubWVzc2FnZVNlbnQuZW1pdChldmVudC5kZXRhaWwpO1xuICAgIH07XG5cbiAgICBjb25zdCB3aWRnZXRPcGVuZWRMaXN0ZW5lciA9IChldmVudDogQ3VzdG9tRXZlbnQpID0+IHtcbiAgICAgIHRoaXMud2lkZ2V0T3BlbmVkLmVtaXQoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgd2lkZ2V0Q2xvc2VkTGlzdGVuZXIgPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLndpZGdldENsb3NlZC5lbWl0KCk7XG4gICAgfTtcblxuICAgIHdpZGdldC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlU2VudCcsIG1lc3NhZ2VTZW50TGlzdGVuZXIgYXMgRXZlbnRMaXN0ZW5lcik7XG4gICAgd2lkZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3dpZGdldE9wZW5lZCcsIHdpZGdldE9wZW5lZExpc3RlbmVyIGFzIEV2ZW50TGlzdGVuZXIpO1xuICAgIHdpZGdldC5hZGRFdmVudExpc3RlbmVyKCd3aWRnZXRDbG9zZWQnLCB3aWRnZXRDbG9zZWRMaXN0ZW5lciBhcyBFdmVudExpc3RlbmVyKTtcblxuICAgIC8vIFN0b3JlIGNsZWFudXAgZnVuY3Rpb25zXG4gICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtcbiAgICAgICgpID0+IHdpZGdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlU2VudCcsIG1lc3NhZ2VTZW50TGlzdGVuZXIgYXMgRXZlbnRMaXN0ZW5lciksXG4gICAgICAoKSA9PiB3aWRnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2lkZ2V0T3BlbmVkJywgd2lkZ2V0T3BlbmVkTGlzdGVuZXIgYXMgRXZlbnRMaXN0ZW5lciksXG4gICAgICAoKSA9PiB3aWRnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2lkZ2V0Q2xvc2VkJywgd2lkZ2V0Q2xvc2VkTGlzdGVuZXIgYXMgRXZlbnRMaXN0ZW5lciksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5mb3JFYWNoKGNsZWFudXAgPT4gY2xlYW51cCgpKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzID0gW107XG4gIH1cbn1cbiJdfQ==
@@ -58,8 +58,9 @@ class ChatWidgetComponent {
58
58
  }
59
59
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
60
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
61
+ <div
62
62
  #chatWidget
63
+ nerd-chat-widget
63
64
  [attr.agent-name]="agentName"
64
65
  [attr.agent-role]="agentRole"
65
66
  [attr.primary-color]="primaryColor"
@@ -74,14 +75,15 @@ class ChatWidgetComponent {
74
75
  [attr.enable-file-upload]="enableFileUpload?.toString()"
75
76
  [attr.enable-speech]="enableSpeech?.toString()"
76
77
  [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"] }] });
78
+ </div>
79
+ `, isInline: true });
79
80
  }
80
81
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChatWidgetComponent, decorators: [{
81
82
  type: Component,
82
83
  args: [{ selector: 'nerd-chat-widget', template: `
83
- <nerd-chat-widget
84
+ <div
84
85
  #chatWidget
86
+ nerd-chat-widget
85
87
  [attr.agent-name]="agentName"
86
88
  [attr.agent-role]="agentRole"
87
89
  [attr.primary-color]="primaryColor"
@@ -96,7 +98,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
96
98
  [attr.enable-file-upload]="enableFileUpload?.toString()"
97
99
  [attr.enable-speech]="enableSpeech?.toString()"
98
100
  [attr.show-powered-by]="showPoweredBy?.toString()">
99
- </nerd-chat-widget>
101
+ </div>
100
102
  ` }]
101
103
  }], propDecorators: { chatWidget: [{
102
104
  type: ViewChild,
@@ -1 +1 @@
1
- {"version":3,"file":"nerdagent-chat-widget-angular.mjs","sources":["../../src/lib/chat-widget.component.ts","../../src/lib/chat-widget.module.ts","../../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
+ {"version":3,"file":"nerdagent-chat-widget-angular.mjs","sources":["../../src/lib/chat-widget.component.ts","../../src/lib/chat-widget.module.ts","../../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 <div\n #chatWidget\n nerd-chat-widget\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 </div>\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nerdagent-chat-widget-angular",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "NerdAgent Chat Widget for Angular",
5
5
  "main": "dist/fesm2022/nerdagent-chat-widget-angular.mjs",
6
6
  "module": "dist/fesm2022/nerdagent-chat-widget-angular.mjs",
@@ -32,13 +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",
36
- "ng-packagr": "^18.0.0"
35
+ "ng-packagr": "^18.0.0",
36
+ "typescript": "^5.0.0"
37
37
  },
38
38
  "repository": {
39
39
  "type": "git",
40
40
  "url": "https://github.com/nerdagent/chat-widget.git",
41
41
  "directory": "packages/angular"
42
42
  },
43
- "gitHead": "f46abd47a7632d8fc690b202bfc7c202bcb8b18f"
43
+ "gitHead": "c8f93bc623e36bcb74a3641f07ae6ee1cccd4941"
44
44
  }