@dorydaniel/ai-banking-assistant-lib 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,24 +1,72 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Component, inject, Input } from '@angular/core';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export class AiBankingAssistantLibComponent {
|
|
4
5
|
username = '';
|
|
6
|
+
transactionsUrl = '';
|
|
7
|
+
transactionRequest = {};
|
|
8
|
+
http = inject(HttpClient);
|
|
5
9
|
conversation = [
|
|
6
10
|
{
|
|
7
11
|
from: 'bot',
|
|
8
12
|
text: 'Hello! How can I assist you with your banking needs today?',
|
|
9
13
|
},
|
|
10
|
-
{
|
|
11
|
-
from: 'user',
|
|
12
|
-
text: 'Hello! Please help?',
|
|
13
|
-
},
|
|
14
14
|
];
|
|
15
|
+
textareaKeydown(event) {
|
|
16
|
+
if (event.key === 'Enter') {
|
|
17
|
+
// Check if the Shift key was also held down
|
|
18
|
+
if (event.shiftKey) {
|
|
19
|
+
// Shift+Enter: Allow the default behavior (new line)
|
|
20
|
+
// No need to preventDefault();
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// Enter only: Prevent the default behavior (new line)
|
|
24
|
+
event.preventDefault();
|
|
25
|
+
// Submit the form
|
|
26
|
+
this.conversation.push({
|
|
27
|
+
from: 'user',
|
|
28
|
+
text: event.target.value,
|
|
29
|
+
});
|
|
30
|
+
// // Clear the textarea after submission
|
|
31
|
+
// (event.target as HTMLTextAreaElement).value = '';
|
|
32
|
+
// (event.target as HTMLTextAreaElement).scrollTo(
|
|
33
|
+
// 0,
|
|
34
|
+
// (event.target as HTMLTextAreaElement).scrollHeight,
|
|
35
|
+
// );
|
|
36
|
+
if (event.target.value.toLowerCase() ===
|
|
37
|
+
'transactions') {
|
|
38
|
+
this.conversation.push({
|
|
39
|
+
from: 'bot',
|
|
40
|
+
text: 'Here are your recent transactions:',
|
|
41
|
+
});
|
|
42
|
+
this.http
|
|
43
|
+
.post(this.transactionsUrl, this.transactionRequest)
|
|
44
|
+
.subscribe((data) => {
|
|
45
|
+
data.forEach((tx) => {
|
|
46
|
+
this.conversation.push({
|
|
47
|
+
from: 'bot',
|
|
48
|
+
text: `- ${tx.description}: $${tx.amount.toFixed(2)}`,
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// Clear the textarea after submission
|
|
54
|
+
event.target.value = '';
|
|
55
|
+
event.target.scrollTo(0, event.target.scrollHeight);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
15
59
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AiBankingAssistantLibComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AiBankingAssistantLibComponent, isStandalone: true, selector: "lib-ai-banking-assistant-lib", inputs: { username: "username" }, ngImport: i0, template: "<div\n class=\"main-container text-white d-flex flex-column justify-content-between p-4\"\n>\n <h1 class=\"m-0\">Welcome {{ username }}!</h1>\n\n <div>\n <div class=\"conversation-view
|
|
60
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AiBankingAssistantLibComponent, isStandalone: true, selector: "lib-ai-banking-assistant-lib", inputs: { username: "username", transactionsUrl: "transactionsUrl", transactionRequest: "transactionRequest" }, ngImport: i0, template: "<div\n class=\"main-container text-white d-flex flex-column justify-content-between p-4\"\n>\n <h1 class=\"m-0\">Welcome {{ username }}!</h1>\n\n <div class=\"px-5 pt-5\">\n <div class=\"conversation-view p-3 mb-3\">\n @for (message of conversation; track $index) {\n <div\n class=\"p-2 {{\n message.from === 'user'\n ? 'float-end text-end user-message'\n : 'float-start text-start'\n }}\"\n >\n {{ message.text }}\n </div>\n }\n </div>\n <textarea\n class=\"rounded-4 w-100 p-3\"\n placeholder=\"Tell me what you need...\"\n (keydown)=\"textareaKeydown($event)\"\n ></textarea>\n </div>\n</div>\n", styles: [".main-container{min-height:400px;height:100%;background:linear-gradient(180deg,#6a2bd6,#2e0458)}.main-container .conversation-view{max-height:300px;overflow-y:auto}.main-container .conversation-view .user-message{width:75%}.main-container textarea{background-color:#290050;color:#fff;border:none;field-sizing:content;min-height:3lh;max-height:6lh;resize:none}.main-container textarea::placeholder{color:#d3d3d3}.main-container textarea:focus-visible{outline:none}\n"] });
|
|
17
61
|
}
|
|
18
62
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AiBankingAssistantLibComponent, decorators: [{
|
|
19
63
|
type: Component,
|
|
20
|
-
args: [{ selector: 'lib-ai-banking-assistant-lib', standalone: true, imports: [], template: "<div\n class=\"main-container text-white d-flex flex-column justify-content-between p-4\"\n>\n <h1 class=\"m-0\">Welcome {{ username }}!</h1>\n\n <div>\n <div class=\"conversation-view
|
|
64
|
+
args: [{ selector: 'lib-ai-banking-assistant-lib', standalone: true, imports: [], template: "<div\n class=\"main-container text-white d-flex flex-column justify-content-between p-4\"\n>\n <h1 class=\"m-0\">Welcome {{ username }}!</h1>\n\n <div class=\"px-5 pt-5\">\n <div class=\"conversation-view p-3 mb-3\">\n @for (message of conversation; track $index) {\n <div\n class=\"p-2 {{\n message.from === 'user'\n ? 'float-end text-end user-message'\n : 'float-start text-start'\n }}\"\n >\n {{ message.text }}\n </div>\n }\n </div>\n <textarea\n class=\"rounded-4 w-100 p-3\"\n placeholder=\"Tell me what you need...\"\n (keydown)=\"textareaKeydown($event)\"\n ></textarea>\n </div>\n</div>\n", styles: [".main-container{min-height:400px;height:100%;background:linear-gradient(180deg,#6a2bd6,#2e0458)}.main-container .conversation-view{max-height:300px;overflow-y:auto}.main-container .conversation-view .user-message{width:75%}.main-container textarea{background-color:#290050;color:#fff;border:none;field-sizing:content;min-height:3lh;max-height:6lh;resize:none}.main-container textarea::placeholder{color:#d3d3d3}.main-container textarea:focus-visible{outline:none}\n"] }]
|
|
21
65
|
}], propDecorators: { username: [{
|
|
22
66
|
type: Input
|
|
67
|
+
}], transactionsUrl: [{
|
|
68
|
+
type: Input
|
|
69
|
+
}], transactionRequest: [{
|
|
70
|
+
type: Input
|
|
23
71
|
}] } });
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYmFua2luZy1hc3Npc3RhbnQtbGliLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FpLWJhbmtpbmctYXNzaXN0YW50LWxpYi9zcmMvbGliL2FpLWJhbmtpbmctYXNzaXN0YW50LWxpYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9haS1iYW5raW5nLWFzc2lzdGFudC1saWIvc3JjL2xpYi9haS1iYW5raW5nLWFzc2lzdGFudC1saWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTekQsTUFBTSxPQUFPLDhCQUE4QjtJQUNoQyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLGVBQWUsR0FBVyxFQUFFLENBQUM7SUFDN0Isa0JBQWtCLEdBQVEsRUFBRSxDQUFDO0lBRTlCLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFbEMsWUFBWSxHQUFHO1FBQ2I7WUFDRSxJQUFJLEVBQUUsS0FBSztZQUNYLElBQUksRUFBRSw0REFBNEQ7U0FDbkU7S0FDRixDQUFDO0lBRUYsZUFBZSxDQUFDLEtBQW9CO1FBQ2xDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMxQiw0Q0FBNEM7WUFDNUMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25CLHFEQUFxRDtnQkFDckQsK0JBQStCO1lBQ2pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixzREFBc0Q7Z0JBQ3RELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsa0JBQWtCO2dCQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDckIsSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFHLEtBQUssQ0FBQyxNQUE4QixDQUFDLEtBQUs7aUJBQ2xELENBQUMsQ0FBQztnQkFDSCx5Q0FBeUM7Z0JBQ3pDLG9EQUFvRDtnQkFDcEQsa0RBQWtEO2dCQUNsRCxPQUFPO2dCQUNQLHdEQUF3RDtnQkFDeEQsS0FBSztnQkFFTCxJQUNHLEtBQUssQ0FBQyxNQUE4QixDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUU7b0JBQ3pELGNBQWMsRUFDZCxDQUFDO29CQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO3dCQUNyQixJQUFJLEVBQUUsS0FBSzt3QkFDWCxJQUFJLEVBQUUsb0NBQW9DO3FCQUMzQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLElBQUk7eUJBQ04sSUFBSSxDQUVILElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDO3lCQUMvQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFOzRCQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQ0FDckIsSUFBSSxFQUFFLEtBQUs7Z0NBQ1gsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLFdBQVcsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTs2QkFDdEQsQ0FBQyxDQUFDO3dCQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBRUQsc0NBQXNDO2dCQUNyQyxLQUFLLENBQUMsTUFBOEIsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNoRCxLQUFLLENBQUMsTUFBOEIsQ0FBQyxRQUFRLENBQzVDLENBQUMsRUFDQSxLQUFLLENBQUMsTUFBOEIsQ0FBQyxZQUFZLENBQ25ELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7d0dBakVVLDhCQUE4Qjs0RkFBOUIsOEJBQThCLHdNQ1YzQyxxdEJBMEJBOzs0RkRoQmEsOEJBQThCO2tCQVAxQyxTQUFTOytCQUNFLDhCQUE4QixjQUM1QixJQUFJLFdBQ1AsRUFBRTs4QkFLRixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYWktYmFua2luZy1hc3Npc3RhbnQtbGliJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlVXJsOiAnLi9haS1iYW5raW5nLWFzc2lzdGFudC1saWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi4vc3R5bGVzLnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWlCYW5raW5nQXNzaXN0YW50TGliQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdXNlcm5hbWU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSB0cmFuc2FjdGlvbnNVcmw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSB0cmFuc2FjdGlvblJlcXVlc3Q6IGFueSA9IHt9O1xuXG4gIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcblxuICBjb252ZXJzYXRpb24gPSBbXG4gICAge1xuICAgICAgZnJvbTogJ2JvdCcsXG4gICAgICB0ZXh0OiAnSGVsbG8hIEhvdyBjYW4gSSBhc3Npc3QgeW91IHdpdGggeW91ciBiYW5raW5nIG5lZWRzIHRvZGF5PycsXG4gICAgfSxcbiAgXTtcblxuICB0ZXh0YXJlYUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgU2hpZnQga2V5IHdhcyBhbHNvIGhlbGQgZG93blxuICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIC8vIFNoaWZ0K0VudGVyOiBBbGxvdyB0aGUgZGVmYXVsdCBiZWhhdmlvciAobmV3IGxpbmUpXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gcHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEVudGVyIG9ubHk6IFByZXZlbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgKG5ldyBsaW5lKVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyBTdWJtaXQgdGhlIGZvcm1cbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb24ucHVzaCh7XG4gICAgICAgICAgZnJvbTogJ3VzZXInLFxuICAgICAgICAgIHRleHQ6IChldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudCkudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyAvLyBDbGVhciB0aGUgdGV4dGFyZWEgYWZ0ZXIgc3VibWlzc2lvblxuICAgICAgICAvLyAoZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQpLnZhbHVlID0gJyc7XG4gICAgICAgIC8vIChldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudCkuc2Nyb2xsVG8oXG4gICAgICAgIC8vICAgMCxcbiAgICAgICAgLy8gICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQpLnNjcm9sbEhlaWdodCxcbiAgICAgICAgLy8gKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50KS52YWx1ZS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICd0cmFuc2FjdGlvbnMnXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY29udmVyc2F0aW9uLnB1c2goe1xuICAgICAgICAgICAgZnJvbTogJ2JvdCcsXG4gICAgICAgICAgICB0ZXh0OiAnSGVyZSBhcmUgeW91ciByZWNlbnQgdHJhbnNhY3Rpb25zOicsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdDxcbiAgICAgICAgICAgICAgeyBhbW91bnQ6IG51bWJlcjsgZGVzY3JpcHRpb246IHN0cmluZyB9W11cbiAgICAgICAgICAgID4odGhpcy50cmFuc2FjdGlvbnNVcmwsIHRoaXMudHJhbnNhY3Rpb25SZXF1ZXN0KVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICBkYXRhLmZvckVhY2goKHR4KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJzYXRpb24ucHVzaCh7XG4gICAgICAgICAgICAgICAgICBmcm9tOiAnYm90JyxcbiAgICAgICAgICAgICAgICAgIHRleHQ6IGAtICR7dHguZGVzY3JpcHRpb259OiAkJHt0eC5hbW91bnQudG9GaXhlZCgyKX1gLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYXIgdGhlIHRleHRhcmVhIGFmdGVyIHN1Ym1pc3Npb25cbiAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50KS52YWx1ZSA9ICcnO1xuICAgICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQpLnNjcm9sbFRvKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50KS5zY3JvbGxIZWlnaHQsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibWFpbi1jb250YWluZXIgdGV4dC13aGl0ZSBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWJldHdlZW4gcC00XCJcbj5cbiAgPGgxIGNsYXNzPVwibS0wXCI+V2VsY29tZSB7eyB1c2VybmFtZSB9fSE8L2gxPlxuXG4gIDxkaXYgY2xhc3M9XCJweC01IHB0LTVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udmVyc2F0aW9uLXZpZXcgcC0zIG1iLTNcIj5cbiAgICAgIEBmb3IgKG1lc3NhZ2Ugb2YgY29udmVyc2F0aW9uOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicC0yIHt7XG4gICAgICAgICAgICBtZXNzYWdlLmZyb20gPT09ICd1c2VyJ1xuICAgICAgICAgICAgICA/ICdmbG9hdC1lbmQgdGV4dC1lbmQgdXNlci1tZXNzYWdlJ1xuICAgICAgICAgICAgICA6ICdmbG9hdC1zdGFydCB0ZXh0LXN0YXJ0J1xuICAgICAgICAgIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IG1lc3NhZ2UudGV4dCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8dGV4dGFyZWFcbiAgICAgIGNsYXNzPVwicm91bmRlZC00IHctMTAwIHAtM1wiXG4gICAgICBwbGFjZWhvbGRlcj1cIlRlbGwgbWUgd2hhdCB5b3UgbmVlZC4uLlwiXG4gICAgICAoa2V5ZG93bik9XCJ0ZXh0YXJlYUtleWRvd24oJGV2ZW50KVwiXG4gICAgPjwvdGV4dGFyZWE+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, Component, Input } from '@angular/core';
|
|
2
|
+
import { Injectable, inject, Component, Input } from '@angular/core';
|
|
3
|
+
import { HttpClient } from '@angular/common/http';
|
|
3
4
|
|
|
4
5
|
class AiBankingAssistantLibService {
|
|
5
6
|
constructor() { }
|
|
@@ -15,24 +16,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
15
16
|
|
|
16
17
|
class AiBankingAssistantLibComponent {
|
|
17
18
|
username = '';
|
|
19
|
+
transactionsUrl = '';
|
|
20
|
+
transactionRequest = {};
|
|
21
|
+
http = inject(HttpClient);
|
|
18
22
|
conversation = [
|
|
19
23
|
{
|
|
20
24
|
from: 'bot',
|
|
21
25
|
text: 'Hello! How can I assist you with your banking needs today?',
|
|
22
26
|
},
|
|
23
|
-
{
|
|
24
|
-
from: 'user',
|
|
25
|
-
text: 'Hello! Please help?',
|
|
26
|
-
},
|
|
27
27
|
];
|
|
28
|
+
textareaKeydown(event) {
|
|
29
|
+
if (event.key === 'Enter') {
|
|
30
|
+
// Check if the Shift key was also held down
|
|
31
|
+
if (event.shiftKey) {
|
|
32
|
+
// Shift+Enter: Allow the default behavior (new line)
|
|
33
|
+
// No need to preventDefault();
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// Enter only: Prevent the default behavior (new line)
|
|
37
|
+
event.preventDefault();
|
|
38
|
+
// Submit the form
|
|
39
|
+
this.conversation.push({
|
|
40
|
+
from: 'user',
|
|
41
|
+
text: event.target.value,
|
|
42
|
+
});
|
|
43
|
+
// // Clear the textarea after submission
|
|
44
|
+
// (event.target as HTMLTextAreaElement).value = '';
|
|
45
|
+
// (event.target as HTMLTextAreaElement).scrollTo(
|
|
46
|
+
// 0,
|
|
47
|
+
// (event.target as HTMLTextAreaElement).scrollHeight,
|
|
48
|
+
// );
|
|
49
|
+
if (event.target.value.toLowerCase() ===
|
|
50
|
+
'transactions') {
|
|
51
|
+
this.conversation.push({
|
|
52
|
+
from: 'bot',
|
|
53
|
+
text: 'Here are your recent transactions:',
|
|
54
|
+
});
|
|
55
|
+
this.http
|
|
56
|
+
.post(this.transactionsUrl, this.transactionRequest)
|
|
57
|
+
.subscribe((data) => {
|
|
58
|
+
data.forEach((tx) => {
|
|
59
|
+
this.conversation.push({
|
|
60
|
+
from: 'bot',
|
|
61
|
+
text: `- ${tx.description}: $${tx.amount.toFixed(2)}`,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// Clear the textarea after submission
|
|
67
|
+
event.target.value = '';
|
|
68
|
+
event.target.scrollTo(0, event.target.scrollHeight);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
28
72
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AiBankingAssistantLibComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
29
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AiBankingAssistantLibComponent, isStandalone: true, selector: "lib-ai-banking-assistant-lib", inputs: { username: "username" }, ngImport: i0, template: "<div\n class=\"main-container text-white d-flex flex-column justify-content-between p-4\"\n>\n <h1 class=\"m-0\">Welcome {{ username }}!</h1>\n\n <div>\n <div class=\"conversation-view
|
|
73
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AiBankingAssistantLibComponent, isStandalone: true, selector: "lib-ai-banking-assistant-lib", inputs: { username: "username", transactionsUrl: "transactionsUrl", transactionRequest: "transactionRequest" }, ngImport: i0, template: "<div\n class=\"main-container text-white d-flex flex-column justify-content-between p-4\"\n>\n <h1 class=\"m-0\">Welcome {{ username }}!</h1>\n\n <div class=\"px-5 pt-5\">\n <div class=\"conversation-view p-3 mb-3\">\n @for (message of conversation; track $index) {\n <div\n class=\"p-2 {{\n message.from === 'user'\n ? 'float-end text-end user-message'\n : 'float-start text-start'\n }}\"\n >\n {{ message.text }}\n </div>\n }\n </div>\n <textarea\n class=\"rounded-4 w-100 p-3\"\n placeholder=\"Tell me what you need...\"\n (keydown)=\"textareaKeydown($event)\"\n ></textarea>\n </div>\n</div>\n", styles: [".main-container{min-height:400px;height:100%;background:linear-gradient(180deg,#6a2bd6,#2e0458)}.main-container .conversation-view{max-height:300px;overflow-y:auto}.main-container .conversation-view .user-message{width:75%}.main-container textarea{background-color:#290050;color:#fff;border:none;field-sizing:content;min-height:3lh;max-height:6lh;resize:none}.main-container textarea::placeholder{color:#d3d3d3}.main-container textarea:focus-visible{outline:none}\n"] });
|
|
30
74
|
}
|
|
31
75
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AiBankingAssistantLibComponent, decorators: [{
|
|
32
76
|
type: Component,
|
|
33
|
-
args: [{ selector: 'lib-ai-banking-assistant-lib', standalone: true, imports: [], template: "<div\n class=\"main-container text-white d-flex flex-column justify-content-between p-4\"\n>\n <h1 class=\"m-0\">Welcome {{ username }}!</h1>\n\n <div>\n <div class=\"conversation-view
|
|
77
|
+
args: [{ selector: 'lib-ai-banking-assistant-lib', standalone: true, imports: [], template: "<div\n class=\"main-container text-white d-flex flex-column justify-content-between p-4\"\n>\n <h1 class=\"m-0\">Welcome {{ username }}!</h1>\n\n <div class=\"px-5 pt-5\">\n <div class=\"conversation-view p-3 mb-3\">\n @for (message of conversation; track $index) {\n <div\n class=\"p-2 {{\n message.from === 'user'\n ? 'float-end text-end user-message'\n : 'float-start text-start'\n }}\"\n >\n {{ message.text }}\n </div>\n }\n </div>\n <textarea\n class=\"rounded-4 w-100 p-3\"\n placeholder=\"Tell me what you need...\"\n (keydown)=\"textareaKeydown($event)\"\n ></textarea>\n </div>\n</div>\n", styles: [".main-container{min-height:400px;height:100%;background:linear-gradient(180deg,#6a2bd6,#2e0458)}.main-container .conversation-view{max-height:300px;overflow-y:auto}.main-container .conversation-view .user-message{width:75%}.main-container textarea{background-color:#290050;color:#fff;border:none;field-sizing:content;min-height:3lh;max-height:6lh;resize:none}.main-container textarea::placeholder{color:#d3d3d3}.main-container textarea:focus-visible{outline:none}\n"] }]
|
|
34
78
|
}], propDecorators: { username: [{
|
|
35
79
|
type: Input
|
|
80
|
+
}], transactionsUrl: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], transactionRequest: [{
|
|
83
|
+
type: Input
|
|
36
84
|
}] } });
|
|
37
85
|
|
|
38
86
|
/*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dorydaniel-ai-banking-assistant-lib.mjs","sources":["../../../projects/ai-banking-assistant-lib/src/lib/ai-banking-assistant-lib.service.ts","../../../projects/ai-banking-assistant-lib/src/lib/ai-banking-assistant-lib.component.ts","../../../projects/ai-banking-assistant-lib/src/lib/ai-banking-assistant-lib.component.html","../../../projects/ai-banking-assistant-lib/src/public-api.ts","../../../projects/ai-banking-assistant-lib/src/dorydaniel-ai-banking-assistant-lib.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AiBankingAssistantLibService {\n\n constructor() { }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-ai-banking-assistant-lib',\n standalone: true,\n imports: [],\n templateUrl: './ai-banking-assistant-lib.component.html',\n styleUrls: ['../styles.scss'],\n})\nexport class AiBankingAssistantLibComponent {\n @Input() username: string = '';\n conversation = [\n {\n from: 'bot',\n text: 'Hello! How can I assist you with your banking needs today?',\n },\n {\n from: 'user',\n
|
|
1
|
+
{"version":3,"file":"dorydaniel-ai-banking-assistant-lib.mjs","sources":["../../../projects/ai-banking-assistant-lib/src/lib/ai-banking-assistant-lib.service.ts","../../../projects/ai-banking-assistant-lib/src/lib/ai-banking-assistant-lib.component.ts","../../../projects/ai-banking-assistant-lib/src/lib/ai-banking-assistant-lib.component.html","../../../projects/ai-banking-assistant-lib/src/public-api.ts","../../../projects/ai-banking-assistant-lib/src/dorydaniel-ai-banking-assistant-lib.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AiBankingAssistantLibService {\n\n constructor() { }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Component, inject, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-ai-banking-assistant-lib',\n standalone: true,\n imports: [],\n templateUrl: './ai-banking-assistant-lib.component.html',\n styleUrls: ['../styles.scss'],\n})\nexport class AiBankingAssistantLibComponent {\n @Input() username: string = '';\n @Input() transactionsUrl: string = '';\n @Input() transactionRequest: any = {};\n\n private http = inject(HttpClient);\n\n conversation = [\n {\n from: 'bot',\n text: 'Hello! How can I assist you with your banking needs today?',\n },\n ];\n\n textareaKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n // Check if the Shift key was also held down\n if (event.shiftKey) {\n // Shift+Enter: Allow the default behavior (new line)\n // No need to preventDefault();\n } else {\n // Enter only: Prevent the default behavior (new line)\n event.preventDefault();\n // Submit the form\n this.conversation.push({\n from: 'user',\n text: (event.target as HTMLTextAreaElement).value,\n });\n // // Clear the textarea after submission\n // (event.target as HTMLTextAreaElement).value = '';\n // (event.target as HTMLTextAreaElement).scrollTo(\n // 0,\n // (event.target as HTMLTextAreaElement).scrollHeight,\n // );\n\n if (\n (event.target as HTMLTextAreaElement).value.toLowerCase() ===\n 'transactions'\n ) {\n this.conversation.push({\n from: 'bot',\n text: 'Here are your recent transactions:',\n });\n this.http\n .post<\n { amount: number; description: string }[]\n >(this.transactionsUrl, this.transactionRequest)\n .subscribe((data) => {\n data.forEach((tx) => {\n this.conversation.push({\n from: 'bot',\n text: `- ${tx.description}: $${tx.amount.toFixed(2)}`,\n });\n });\n });\n }\n\n // Clear the textarea after submission\n (event.target as HTMLTextAreaElement).value = '';\n (event.target as HTMLTextAreaElement).scrollTo(\n 0,\n (event.target as HTMLTextAreaElement).scrollHeight,\n );\n }\n }\n }\n}\n","<div\n class=\"main-container text-white d-flex flex-column justify-content-between p-4\"\n>\n <h1 class=\"m-0\">Welcome {{ username }}!</h1>\n\n <div class=\"px-5 pt-5\">\n <div class=\"conversation-view p-3 mb-3\">\n @for (message of conversation; track $index) {\n <div\n class=\"p-2 {{\n message.from === 'user'\n ? 'float-end text-end user-message'\n : 'float-start text-start'\n }}\"\n >\n {{ message.text }}\n </div>\n }\n </div>\n <textarea\n class=\"rounded-4 w-100 p-3\"\n placeholder=\"Tell me what you need...\"\n (keydown)=\"textareaKeydown($event)\"\n ></textarea>\n </div>\n</div>\n","/*\n * Public API Surface of ai-banking-assistant-lib\n */\n\nexport * from './lib/ai-banking-assistant-lib.service';\nexport * from './lib/ai-banking-assistant-lib.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
export declare class AiBankingAssistantLibComponent {
|
|
3
3
|
username: string;
|
|
4
|
+
transactionsUrl: string;
|
|
5
|
+
transactionRequest: any;
|
|
6
|
+
private http;
|
|
4
7
|
conversation: {
|
|
5
8
|
from: string;
|
|
6
9
|
text: string;
|
|
7
10
|
}[];
|
|
11
|
+
textareaKeydown(event: KeyboardEvent): void;
|
|
8
12
|
static ɵfac: i0.ɵɵFactoryDeclaration<AiBankingAssistantLibComponent, never>;
|
|
9
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AiBankingAssistantLibComponent, "lib-ai-banking-assistant-lib", never, { "username": { "alias": "username"; "required": false; }; }, {}, never, never, true, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AiBankingAssistantLibComponent, "lib-ai-banking-assistant-lib", never, { "username": { "alias": "username"; "required": false; }; "transactionsUrl": { "alias": "transactionsUrl"; "required": false; }; "transactionRequest": { "alias": "transactionRequest"; "required": false; }; }, {}, never, never, true, never>;
|
|
10
14
|
}
|