@masterteam/faris 0.0.5 → 0.0.6
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/assets/i18n/ar.json
CHANGED
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
"hello": "مرحبًا",
|
|
17
17
|
"welcome-message": "أنا فارس، مساعدك الذكي. كيف يمكنني مساعدتك اليوم؟",
|
|
18
18
|
"unable-to-load-content": "غير قادر على تحميل المحتوى.",
|
|
19
|
-
"no-results-found": "لم يتم العثور على نتائج."
|
|
19
|
+
"no-results-found": "لم يتم العثور على نتائج.",
|
|
20
|
+
"ask-faris": "اسأل فارس",
|
|
21
|
+
"today": "اليوم",
|
|
22
|
+
"yesterday": "أمس",
|
|
23
|
+
"this-week": "هذا الأسبوع",
|
|
24
|
+
"last-week": "الأسبوع الماضي"
|
|
20
25
|
}
|
|
21
26
|
}
|
package/assets/i18n/en.json
CHANGED
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
"hello": "Hello",
|
|
17
17
|
"welcome-message": "I'm Faris, your AI assistant. How can I help you today?",
|
|
18
18
|
"unable-to-load-content": "Unable to load content.",
|
|
19
|
-
"no-results-found": "No results found."
|
|
19
|
+
"no-results-found": "No results found.",
|
|
20
|
+
"ask-faris": "Ask Faris",
|
|
21
|
+
"today": "Today",
|
|
22
|
+
"yesterday": "Yesterday",
|
|
23
|
+
"this-week": "This Week",
|
|
24
|
+
"last-week": "Last Week"
|
|
20
25
|
}
|
|
21
26
|
}
|
|
@@ -1523,6 +1523,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
|
|
|
1523
1523
|
}] } });
|
|
1524
1524
|
|
|
1525
1525
|
class FarisChatHistoryComponent {
|
|
1526
|
+
transloco = inject(TranslocoService);
|
|
1526
1527
|
userConversations = [];
|
|
1527
1528
|
showChatHistory = false;
|
|
1528
1529
|
selectedConversation = null;
|
|
@@ -1549,17 +1550,20 @@ class FarisChatHistoryComponent {
|
|
|
1549
1550
|
const normalized = (conversations || []).map((conversation, index) => this.normalizeConversation(conversation, index));
|
|
1550
1551
|
const sorted = [...normalized].sort((a, b) => this.resolveConversationTimestamp(b) -
|
|
1551
1552
|
this.resolveConversationTimestamp(a));
|
|
1552
|
-
const todayGroup = {
|
|
1553
|
+
const todayGroup = {
|
|
1554
|
+
label: this.transloco.translate('faris.today'),
|
|
1555
|
+
conversations: [],
|
|
1556
|
+
};
|
|
1553
1557
|
const yesterdayGroup = {
|
|
1554
|
-
label: '
|
|
1558
|
+
label: this.transloco.translate('faris.yesterday'),
|
|
1555
1559
|
conversations: [],
|
|
1556
1560
|
};
|
|
1557
1561
|
const thisWeekGroup = {
|
|
1558
|
-
label: '
|
|
1562
|
+
label: this.transloco.translate('faris.this-week'),
|
|
1559
1563
|
conversations: [],
|
|
1560
1564
|
};
|
|
1561
1565
|
const lastWeekGroup = {
|
|
1562
|
-
label: '
|
|
1566
|
+
label: this.transloco.translate('faris.last-week'),
|
|
1563
1567
|
conversations: [],
|
|
1564
1568
|
};
|
|
1565
1569
|
const monthGroups = new Map();
|
|
@@ -1572,12 +1576,12 @@ class FarisChatHistoryComponent {
|
|
|
1572
1576
|
const updatedDate = this.resolveConversationDate(conversation) ?? now;
|
|
1573
1577
|
const updatedStart = this.startOfDay(updatedDate).getTime();
|
|
1574
1578
|
if (updatedStart === todayStart) {
|
|
1575
|
-
conversation.displayDate = '
|
|
1579
|
+
conversation.displayDate = this.transloco.translate('faris.today');
|
|
1576
1580
|
todayGroup.conversations.push(conversation);
|
|
1577
1581
|
continue;
|
|
1578
1582
|
}
|
|
1579
1583
|
if (updatedStart === yesterdayStart) {
|
|
1580
|
-
conversation.displayDate = '
|
|
1584
|
+
conversation.displayDate = this.transloco.translate('faris.yesterday');
|
|
1581
1585
|
yesterdayGroup.conversations.push(conversation);
|
|
1582
1586
|
continue;
|
|
1583
1587
|
}
|
|
@@ -1905,7 +1909,7 @@ class FarisComponent {
|
|
|
1905
1909
|
}
|
|
1906
1910
|
}
|
|
1907
1911
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: FarisComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1908
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: FarisComponent, isStandalone: true, selector: "mt-faris", inputs: { showChatBot: "showChatBot" }, outputs: { showChatBotChange: "showChatBotChange" }, usesOnChanges: true, ngImport: i0, template: "@if (showChatBot) {\r\n <mt-faris-popup\r\n class=\"chat-bot-popup\"\r\n [maximized]=\"maximized && !canvasData.visible\"\r\n (closed)=\"closeChatBot()\"\r\n >\r\n <div panelTitle class=\"faris-title-container\">\r\n <div class=\"gemini-ic has-hover\">\r\n <svg\r\n focusable=\"false\"\r\n viewBox=\"0 -960 960 960\"\r\n height=\"28\"\r\n width=\"28\"\r\n class=\"EiVpKc aoH\"\r\n >\r\n <path\r\n d=\"M480-80q2,0 2-2q0-82 31-154t85-126t126-85t154-31q2,0 2-2t-2-2q-82,0-154-31T598-598T513-724T482-878q0-2-2-2t-2,2q0,82-31,154T362-598T236-513T82-482q-2,0-2,2t2,2q82,0 154,31t126,85t85,126T478-82q0,2 2,2Z\"\r\n ></path>\r\n </svg>\r\n </div>\r\n <div class=\"faris-title-group\">\r\n <div class=\"faris-title\">
|
|
1912
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: FarisComponent, isStandalone: true, selector: "mt-faris", inputs: { showChatBot: "showChatBot" }, outputs: { showChatBotChange: "showChatBotChange" }, usesOnChanges: true, ngImport: i0, template: "@if (showChatBot) {\r\n <mt-faris-popup\r\n class=\"chat-bot-popup\"\r\n [maximized]=\"maximized && !canvasData.visible\"\r\n (closed)=\"closeChatBot()\"\r\n >\r\n <div panelTitle class=\"faris-title-container\">\r\n <div class=\"gemini-ic has-hover\">\r\n <svg\r\n focusable=\"false\"\r\n viewBox=\"0 -960 960 960\"\r\n height=\"28\"\r\n width=\"28\"\r\n class=\"EiVpKc aoH\"\r\n >\r\n <path\r\n d=\"M480-80q2,0 2-2q0-82 31-154t85-126t126-85t154-31q2,0 2-2t-2-2q-82,0-154-31T598-598T513-724T482-878q0-2-2-2t-2,2q0,82-31,154T362-598T236-513T82-482q-2,0-2,2t2,2q82,0 154,31t126,85t85,126T478-82q0,2 2,2Z\"\r\n ></path>\r\n </svg>\r\n </div>\r\n <div class=\"faris-title-group\">\r\n <div class=\"faris-title\">{{ \"faris.ask-faris\" | translate }}</div>\r\n <div\r\n class=\"faris-subtitle\"\r\n [title]=\"(selectedConversation?.title | parseMention) ?? ''\"\r\n >\r\n {{\r\n (selectedConversation?.title | parseMention) ||\r\n (\"faris.new-conversation\" | translate)\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-container panelActions>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.plus\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"openNewChat()\"\r\n ></mt-button>\r\n <mt-button\r\n type=\"button\"\r\n [icon]=\"maximized ? 'layout.minimize-02' : 'layout.maximize-02'\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"maximized = !maximized\"\r\n ></mt-button>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"custom.history-sp\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"toggleChatHistory()\"\r\n ></mt-button>\r\n </ng-container>\r\n\r\n @if (canvasData.visible) {\r\n <mt-faris-canvas\r\n [message]=\"canvasData.message\"\r\n [conversationId]=\"canvasData.conversationId\"\r\n class=\"flex-1\"\r\n panelCanvas\r\n (closed)=\"canvasData.visible = false\"\r\n ></mt-faris-canvas>\r\n }\r\n\r\n <mt-faris-chat-history\r\n panelSidebar\r\n [userConversations]=\"userConversations\"\r\n [showChatHistory]=\"showChatHistory\"\r\n [selectedConversation]=\"selectedConversation\"\r\n (selectConversation)=\"onSelectConversation($event)\"\r\n (deleteConversationHandler)=\"onDeleteConversationHandler($event)\"\r\n (closeHistory)=\"onCloseHistory()\"\r\n >\r\n </mt-faris-chat-history>\r\n\r\n <div panelChat class=\"flex h-full w-full\">\r\n <mt-faris-chat\r\n class=\"w-full\"\r\n (launchCanvas)=\"launchCanvas($event)\"\r\n (selectConversation)=\"onSelectConversation($event)\"\r\n [selectedConversation]=\"selectedConversation\"\r\n >\r\n </mt-faris-chat>\r\n </div>\r\n </mt-faris-popup>\r\n}\r\n", styles: [":host{font-size:15.4545px}::ng-deep :root{--faris-border-radius: 8px;--faris-sm-border-radius: 5px;--faris-lg-border-radius: 10px}::ng-deep .faris-btn{display:flex;align-items:center;justify-content:center;border:1px solid transparent;background-color:transparent;border-radius:var(--faris-sm-border-radius);width:2em;height:2em;cursor:pointer;font-size:1.1em;padding:0;transition:all .2s ease}::ng-deep .faris-btn-muted{color:#99a1af}::ng-deep .faris-btn:hover{background-color:#0000000d}::ng-deep .faris-btn-lg{width:2.5em;height:2.5em;font-size:1.4em}::ng-deep .faris-btn:disabled{cursor:not-allowed;opacity:.7}::ng-deep .gemini-ic{display:inline-block;cursor:pointer;transition:transform .3s ease;transform-origin:center center;position:relative}::ng-deep .gemini-ic svg{fill:#4a90e2;transition:fill .3s ease;filter:drop-shadow(0 0 2px rgba(74,144,226,.5))}::ng-deep .gemini-ic.has-hover:hover{animation:gemini-hover-animation 1.5s infinite alternate ease-in-out;transform-origin:center center}::ng-deep .gemini-ic:hover svg{fill:#4a90e2;filter:drop-shadow(0 0 8px rgba(123,207,255,.9))}::ng-deep .gemini-ic.rotating{display:flex;width:22px;height:22px;animation:rotate 2s linear infinite;transform-origin:center center}@keyframes gemini-hover-animation{0%{transform:scale(1) rotate(0);filter:drop-shadow(0 0 2px rgba(74,144,226,.5))}50%{transform:scale(1.15) rotate(10deg);filter:drop-shadow(0 0 12px rgb(123,207,255))}to{transform:scale(1) rotate(-10deg);filter:drop-shadow(0 0 2px rgba(74,144,226,.5))}}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.faris-title-container{display:flex;align-items:center;font-weight:500;gap:.5em;overflow:hidden}.faris-title-container .faris-title-group{flex:1;overflow:hidden}.faris-title-container .faris-title-group .faris-title{font-size:1em}.faris-title-container .faris-title-group .faris-subtitle{font-size:.9em;opacity:.8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.closed-chat-history-side{min-width:60px!important}.hide-shadow-btn:focus{box-shadow:none!important}.conversation-item{height:40px}.conversation-item.active-conversation{background-color:var(--primary-color);color:var(--white)}.conversation-item.active-conversation mt-icon{color:var(--white)}.conversation-item label{font-size:15px;font-weight:600;line-height:20px}\n"], dependencies: [{ kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: MinimizablePopupComponent, selector: "mt-faris-popup", inputs: ["title", "maximized"], outputs: ["closed"] }, { kind: "component", type: FarisCanvasComponent, selector: "mt-faris-canvas", inputs: ["message", "conversationId"], outputs: ["closed"] }, { kind: "component", type: FarisChatHistoryComponent, selector: "mt-faris-chat-history", inputs: ["userConversations", "showChatHistory", "selectedConversation"], outputs: ["selectConversation", "deleteConversationHandler", "closeHistory"] }, { kind: "component", type: FarisChatComponent, selector: "mt-faris-chat", inputs: ["selectedConversation"], outputs: ["launchCanvas", "selectConversation"] }, { kind: "pipe", type: ParseMentionPipe, name: "parseMention" }, { kind: "pipe", type: FarisTranslatePipe, name: "translate" }] });
|
|
1909
1913
|
}
|
|
1910
1914
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: FarisComponent, decorators: [{
|
|
1911
1915
|
type: Component,
|
|
@@ -1917,7 +1921,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
|
|
|
1917
1921
|
FarisCanvasComponent,
|
|
1918
1922
|
FarisChatHistoryComponent,
|
|
1919
1923
|
FarisChatComponent,
|
|
1920
|
-
], template: "@if (showChatBot) {\r\n <mt-faris-popup\r\n class=\"chat-bot-popup\"\r\n [maximized]=\"maximized && !canvasData.visible\"\r\n (closed)=\"closeChatBot()\"\r\n >\r\n <div panelTitle class=\"faris-title-container\">\r\n <div class=\"gemini-ic has-hover\">\r\n <svg\r\n focusable=\"false\"\r\n viewBox=\"0 -960 960 960\"\r\n height=\"28\"\r\n width=\"28\"\r\n class=\"EiVpKc aoH\"\r\n >\r\n <path\r\n d=\"M480-80q2,0 2-2q0-82 31-154t85-126t126-85t154-31q2,0 2-2t-2-2q-82,0-154-31T598-598T513-724T482-878q0-2-2-2t-2,2q0,82-31,154T362-598T236-513T82-482q-2,0-2,2t2,2q82,0 154,31t126,85t85,126T478-82q0,2 2,2Z\"\r\n ></path>\r\n </svg>\r\n </div>\r\n <div class=\"faris-title-group\">\r\n <div class=\"faris-title\">
|
|
1924
|
+
], template: "@if (showChatBot) {\r\n <mt-faris-popup\r\n class=\"chat-bot-popup\"\r\n [maximized]=\"maximized && !canvasData.visible\"\r\n (closed)=\"closeChatBot()\"\r\n >\r\n <div panelTitle class=\"faris-title-container\">\r\n <div class=\"gemini-ic has-hover\">\r\n <svg\r\n focusable=\"false\"\r\n viewBox=\"0 -960 960 960\"\r\n height=\"28\"\r\n width=\"28\"\r\n class=\"EiVpKc aoH\"\r\n >\r\n <path\r\n d=\"M480-80q2,0 2-2q0-82 31-154t85-126t126-85t154-31q2,0 2-2t-2-2q-82,0-154-31T598-598T513-724T482-878q0-2-2-2t-2,2q0,82-31,154T362-598T236-513T82-482q-2,0-2,2t2,2q82,0 154,31t126,85t85,126T478-82q0,2 2,2Z\"\r\n ></path>\r\n </svg>\r\n </div>\r\n <div class=\"faris-title-group\">\r\n <div class=\"faris-title\">{{ \"faris.ask-faris\" | translate }}</div>\r\n <div\r\n class=\"faris-subtitle\"\r\n [title]=\"(selectedConversation?.title | parseMention) ?? ''\"\r\n >\r\n {{\r\n (selectedConversation?.title | parseMention) ||\r\n (\"faris.new-conversation\" | translate)\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-container panelActions>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.plus\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"openNewChat()\"\r\n ></mt-button>\r\n <mt-button\r\n type=\"button\"\r\n [icon]=\"maximized ? 'layout.minimize-02' : 'layout.maximize-02'\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"maximized = !maximized\"\r\n ></mt-button>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"custom.history-sp\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"toggleChatHistory()\"\r\n ></mt-button>\r\n </ng-container>\r\n\r\n @if (canvasData.visible) {\r\n <mt-faris-canvas\r\n [message]=\"canvasData.message\"\r\n [conversationId]=\"canvasData.conversationId\"\r\n class=\"flex-1\"\r\n panelCanvas\r\n (closed)=\"canvasData.visible = false\"\r\n ></mt-faris-canvas>\r\n }\r\n\r\n <mt-faris-chat-history\r\n panelSidebar\r\n [userConversations]=\"userConversations\"\r\n [showChatHistory]=\"showChatHistory\"\r\n [selectedConversation]=\"selectedConversation\"\r\n (selectConversation)=\"onSelectConversation($event)\"\r\n (deleteConversationHandler)=\"onDeleteConversationHandler($event)\"\r\n (closeHistory)=\"onCloseHistory()\"\r\n >\r\n </mt-faris-chat-history>\r\n\r\n <div panelChat class=\"flex h-full w-full\">\r\n <mt-faris-chat\r\n class=\"w-full\"\r\n (launchCanvas)=\"launchCanvas($event)\"\r\n (selectConversation)=\"onSelectConversation($event)\"\r\n [selectedConversation]=\"selectedConversation\"\r\n >\r\n </mt-faris-chat>\r\n </div>\r\n </mt-faris-popup>\r\n}\r\n", styles: [":host{font-size:15.4545px}::ng-deep :root{--faris-border-radius: 8px;--faris-sm-border-radius: 5px;--faris-lg-border-radius: 10px}::ng-deep .faris-btn{display:flex;align-items:center;justify-content:center;border:1px solid transparent;background-color:transparent;border-radius:var(--faris-sm-border-radius);width:2em;height:2em;cursor:pointer;font-size:1.1em;padding:0;transition:all .2s ease}::ng-deep .faris-btn-muted{color:#99a1af}::ng-deep .faris-btn:hover{background-color:#0000000d}::ng-deep .faris-btn-lg{width:2.5em;height:2.5em;font-size:1.4em}::ng-deep .faris-btn:disabled{cursor:not-allowed;opacity:.7}::ng-deep .gemini-ic{display:inline-block;cursor:pointer;transition:transform .3s ease;transform-origin:center center;position:relative}::ng-deep .gemini-ic svg{fill:#4a90e2;transition:fill .3s ease;filter:drop-shadow(0 0 2px rgba(74,144,226,.5))}::ng-deep .gemini-ic.has-hover:hover{animation:gemini-hover-animation 1.5s infinite alternate ease-in-out;transform-origin:center center}::ng-deep .gemini-ic:hover svg{fill:#4a90e2;filter:drop-shadow(0 0 8px rgba(123,207,255,.9))}::ng-deep .gemini-ic.rotating{display:flex;width:22px;height:22px;animation:rotate 2s linear infinite;transform-origin:center center}@keyframes gemini-hover-animation{0%{transform:scale(1) rotate(0);filter:drop-shadow(0 0 2px rgba(74,144,226,.5))}50%{transform:scale(1.15) rotate(10deg);filter:drop-shadow(0 0 12px rgb(123,207,255))}to{transform:scale(1) rotate(-10deg);filter:drop-shadow(0 0 2px rgba(74,144,226,.5))}}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.faris-title-container{display:flex;align-items:center;font-weight:500;gap:.5em;overflow:hidden}.faris-title-container .faris-title-group{flex:1;overflow:hidden}.faris-title-container .faris-title-group .faris-title{font-size:1em}.faris-title-container .faris-title-group .faris-subtitle{font-size:.9em;opacity:.8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.closed-chat-history-side{min-width:60px!important}.hide-shadow-btn:focus{box-shadow:none!important}.conversation-item{height:40px}.conversation-item.active-conversation{background-color:var(--primary-color);color:var(--white)}.conversation-item.active-conversation mt-icon{color:var(--white)}.conversation-item label{font-size:15px;font-weight:600;line-height:20px}\n"] }]
|
|
1921
1925
|
}], propDecorators: { showChatBot: [{
|
|
1922
1926
|
type: Input
|
|
1923
1927
|
}], showChatBotChange: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-faris.mjs","sources":["../../../../packages/masterteam/faris/src/lib/faris/faris-translate.pipe.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-auth.token.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-url.util.ts","../../../../packages/masterteam/faris/src/lib/faris/faris.service.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-canvas/faris-canvas.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-canvas/faris-canvas.component.html","../../../../packages/masterteam/faris/src/lib/faris/agent-card/agent-card.component.ts","../../../../packages/masterteam/faris/src/lib/faris/agent-card/agent-card.component.html","../../../../packages/masterteam/faris/src/lib/faris/faris-markdown.pipe.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-message-actions/faris-message-actions.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-message-actions/faris-message-actions.component.html","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention.pipe.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-message/faris-message.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-message/faris-message.component.html","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention-api.service.ts","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention-list/mention-list.component.ts","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention-list/mention-list.component.html","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention-input/mention-input.component.ts","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention-input/mention-input.component.html","../../../../packages/masterteam/faris/src/lib/faris/faris-chat/faris-chat.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-chat/faris-chat.component.html","../../../../packages/masterteam/faris/src/lib/faris/faris-chat-history/faris-chat-history.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-chat-history/faris-chat-history.component.html","../../../../packages/masterteam/faris/src/lib/faris/minimizable-popup/minimizable-popup.component.ts","../../../../packages/masterteam/faris/src/lib/faris/minimizable-popup/minimizable-popup.component.html","../../../../packages/masterteam/faris/src/lib/faris/faris.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris.component.html","../../../../packages/masterteam/faris/src/masterteam-faris.ts"],"sourcesContent":["import { Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\n@Pipe({\r\n name: 'translate',\r\n standalone: true,\r\n pure: false,\r\n})\r\nexport class FarisTranslatePipe implements PipeTransform {\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n transform(\r\n key: string | null | undefined,\r\n params?: Record<string, unknown>,\r\n ): string {\r\n if (!key) {\r\n return '';\r\n }\r\n\r\n return this.transloco.translate(key, params);\r\n }\r\n}\r\n","export interface FarisAuthState {\r\n user: any;\r\n token: string;\r\n}\r\n\r\nfunction normalizeAuthUser(rawUser: any): any {\r\n if (!rawUser || typeof rawUser !== 'object') {\r\n return null;\r\n }\r\n\r\n const details = rawUser?.user ?? rawUser?.data?.user ?? rawUser;\r\n const resolvedId =\r\n details?.id ??\r\n details?.userId ??\r\n details?.user_id ??\r\n rawUser?.id ??\r\n rawUser?.userId ??\r\n rawUser?.user_id ??\r\n '';\r\n const resolvedDisplayName =\r\n details?.displayName ??\r\n details?.name ??\r\n details?.userName ??\r\n details?.username ??\r\n '';\r\n const resolvedPhoto = details?.photo ?? details?.image ?? null;\r\n\r\n return {\r\n ...rawUser,\r\n user: {\r\n ...details,\r\n id: resolvedId ? String(resolvedId) : '',\r\n displayName: resolvedDisplayName,\r\n photo: resolvedPhoto,\r\n },\r\n };\r\n}\r\n\r\nexport function resolveFarisAuthFromLocalStorage(): FarisAuthState {\r\n try {\r\n const raw = localStorage.getItem('auth');\r\n if (!raw) {\r\n return { user: null, token: '' };\r\n }\r\n\r\n const parsed = JSON.parse(raw);\r\n const user = normalizeAuthUser(parsed?.user ?? parsed ?? null);\r\n const token =\r\n (typeof parsed?.token === 'string' && parsed.token) ||\r\n (typeof parsed?.accessToken === 'string' && parsed.accessToken) ||\r\n (typeof user?.token === 'string' && user.token) ||\r\n (typeof user?.accessToken === 'string' && user.accessToken) ||\r\n (typeof user?.data?.token === 'string' && user.data.token) ||\r\n '';\r\n\r\n return { user, token };\r\n } catch {\r\n return { user: null, token: '' };\r\n }\r\n}\r\n","const DEFAULT_FARIS_URL = 'http://34.166.126.184:8004/';\r\n\r\nexport function resolveFarisUrlFromLocalStorage(\r\n fallbackUrl: string = DEFAULT_FARIS_URL,\r\n): string {\r\n const directValue = localStorage.getItem('farisUrl');\r\n if (directValue?.trim()) {\r\n return directValue;\r\n }\r\n\r\n const configValue = localStorage.getItem('config');\r\n if (!configValue) {\r\n return fallbackUrl;\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(configValue);\r\n const farisApiUrl =\r\n parsed?.config?.farisApiUrl ||\r\n parsed?.config?.basicConfig?.farisApiUrl ||\r\n parsed?.farisApiUrl ||\r\n parsed?.basicConfig?.farisApiUrl;\r\n\r\n if (typeof farisApiUrl === 'string' && farisApiUrl.trim()) {\r\n return farisApiUrl;\r\n }\r\n } catch {\r\n // ignore parse errors and use fallback\r\n }\r\n\r\n return fallbackUrl;\r\n}\r\n","import { HttpClient, HttpContext } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { REQUEST_CONTEXT } from '@masterteam/components';\r\nimport { ToastService } from '@masterteam/components/toast';\r\nimport { BehaviorSubject, EMPTY, Observable, of } from 'rxjs';\r\nimport { filter, map, tap } from 'rxjs/operators';\r\nimport { resolveFarisAuthFromLocalStorage } from './faris-auth.token';\r\nimport { FarisMessage } from './faris.model';\r\nimport { resolveFarisUrlFromLocalStorage } from './faris-url.util';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FarisService {\r\n private sessionId: string | null = null;\r\n private baseUrl = '';\r\n private requestContext = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: false,\r\n });\r\n\r\n activeLevelMenuItem = '';\r\n activeModuleId: string | null = null;\r\n mySpaceActiveTab = '';\r\n kpiTemplateId = '';\r\n kpiSchemaId = '';\r\n initiativesTemplateId = '';\r\n initiativesSchemaId = '';\r\n strategyTemplateId = '';\r\n\r\n readonly conversations = new BehaviorSubject<any[]>([]);\r\n\r\n private readonly http = inject(HttpClient);\r\n private readonly toast = inject(ToastService);\r\n private readonly router = inject(Router, { optional: true });\r\n\r\n constructor() {\r\n const farisUrl = resolveFarisUrlFromLocalStorage();\r\n this.baseUrl = this.normalizeBaseUrl(farisUrl);\r\n\r\n if (this.router) {\r\n this.subscribeToRouterChanges();\r\n this.fillValuesFromRoute(this.router.routerState.snapshot.url);\r\n }\r\n }\r\n\r\n get currentUser(): any {\r\n return resolveFarisAuthFromLocalStorage().user;\r\n }\r\n\r\n private get currentToken(): string {\r\n const localStorageToken = resolveFarisAuthFromLocalStorage().token;\r\n if (localStorageToken) {\r\n return localStorageToken;\r\n }\r\n\r\n return this.currentUser?.token ?? '';\r\n }\r\n\r\n private get currentUserId(): string {\r\n const details = this.resolveCurrentUserDetails();\r\n const resolvedId =\r\n details?.id ??\r\n details?.userId ??\r\n details?.user_id ??\r\n this.currentUser?.id ??\r\n this.currentUser?.userId ??\r\n this.currentUser?.user_id;\r\n\r\n return resolvedId == null ? '' : String(resolvedId);\r\n }\r\n\r\n private get currentUserName(): string {\r\n const details = this.resolveCurrentUserDetails();\r\n return (\r\n details?.displayName ??\r\n details?.name ??\r\n details?.userName ??\r\n details?.username ??\r\n ''\r\n );\r\n }\r\n\r\n private normalizeBaseUrl(url: string): string {\r\n return url.endsWith('/') ? url.slice(0, -1) : url;\r\n }\r\n\r\n private subscribeToRouterChanges(): void {\r\n if (!this.router) {\r\n return;\r\n }\r\n\r\n this.router.events\r\n .pipe(\r\n filter(\r\n (event): event is NavigationEnd => event instanceof NavigationEnd,\r\n ),\r\n )\r\n .subscribe((event: NavigationEnd) => {\r\n this.fillValuesFromRoute(event.urlAfterRedirects);\r\n });\r\n }\r\n\r\n private fillValuesFromRoute(currentUrl: string): void {\r\n this.mySpaceActiveTab = '';\r\n this.kpiTemplateId = '';\r\n this.kpiSchemaId = '';\r\n this.initiativesTemplateId = '';\r\n this.initiativesSchemaId = '';\r\n this.strategyTemplateId = '';\r\n\r\n if (currentUrl.includes('/tasks-center')) {\r\n this.getMySpaceValuesFromUrl(currentUrl);\r\n }\r\n if (currentUrl.includes('/kpis')) {\r\n this.getKpisValuesFromUrl(currentUrl);\r\n }\r\n if (currentUrl.includes('/initiatives')) {\r\n this.getInitiativesValuesFromUrl(currentUrl);\r\n }\r\n if (currentUrl.includes('/strategy')) {\r\n this.getStrategyValuesFromUrl(currentUrl);\r\n }\r\n }\r\n\r\n getLevelValuesFromUrl(currentUrl: string): void {\r\n const splitUrl = currentUrl.split('/');\r\n const thirdSegment = splitUrl[3];\r\n const fourthSegment = splitUrl[4];\r\n\r\n this.activeLevelMenuItem = thirdSegment?.includes('?')\r\n ? thirdSegment.split('?')[0]\r\n : thirdSegment;\r\n\r\n this.activeModuleId = Number.isNaN(Number(fourthSegment))\r\n ? null\r\n : fourthSegment;\r\n\r\n if (splitUrl.includes('log')) {\r\n const index = splitUrl.findIndex((item) => item === 'log');\r\n this.activeLevelMenuItem = '';\r\n for (let i = index; i < splitUrl.length; i += 1) {\r\n this.activeLevelMenuItem += `${splitUrl[i]}${i === splitUrl.length - 1 ? '' : '/'}`;\r\n }\r\n }\r\n }\r\n\r\n getMySpaceValuesFromUrl(currentUrl: string): void {\r\n const splitUrl = currentUrl.split('/');\r\n if (splitUrl[2]) {\r\n this.mySpaceActiveTab = splitUrl[2].includes('?')\r\n ? splitUrl[2].split('?')[0]\r\n : splitUrl[2];\r\n }\r\n }\r\n\r\n getKpisValuesFromUrl(currentUrl: string): void {\r\n const splitUrl = currentUrl.split('/');\r\n if (splitUrl[3]) {\r\n this.kpiTemplateId = splitUrl[2].includes('?')\r\n ? splitUrl[2].split('?')[0]\r\n : splitUrl[2];\r\n this.kpiSchemaId = splitUrl[3].includes('?')\r\n ? splitUrl[3].split('?')[0]\r\n : splitUrl[3];\r\n }\r\n }\r\n\r\n getInitiativesValuesFromUrl(currentUrl: string): void {\r\n const splitUrl = currentUrl.split('/');\r\n if (splitUrl[3]) {\r\n this.initiativesTemplateId = splitUrl[2].includes('?')\r\n ? splitUrl[2].split('?')[0]\r\n : splitUrl[2];\r\n this.initiativesSchemaId = splitUrl[3].includes('?')\r\n ? splitUrl[3].split('?')[0]\r\n : splitUrl[3];\r\n }\r\n }\r\n\r\n getStrategyValuesFromUrl(currentUrl: string): void {\r\n const splitUrl = currentUrl.split('/');\r\n if (splitUrl[3]) {\r\n this.strategyTemplateId = splitUrl[2].includes('?')\r\n ? splitUrl[2].split('?')[0]\r\n : splitUrl[2];\r\n }\r\n }\r\n\r\n extractCanvasJson(markdown: string | undefined): object | null {\r\n if (!markdown) {\r\n return null;\r\n }\r\n\r\n const regex = /```canvas\\s*([\\s\\S]*?)\\s*```/;\r\n const match = markdown.match(regex);\r\n\r\n if (!match?.[1]) {\r\n return null;\r\n }\r\n\r\n try {\r\n return JSON.parse(match[1].trim());\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n generateIframUrl(\r\n message: FarisMessage | null,\r\n conversationId: string | null,\r\n ): string {\r\n const canvasJson: any = this.extractCanvasJson(message?.content);\r\n if (!canvasJson) {\r\n return '';\r\n }\r\n\r\n switch (canvasJson.agent) {\r\n case 'kpi-data-agent':\r\n return `${this.baseUrl}/agents/quality-guard?id=${canvasJson?.payload?.id}&name=${canvasJson?.payload?.name}&description=${canvasJson?.payload?.description}&session_id=${conversationId}&auth_token=${this.currentToken}&router_message_id=${message?.message_id}`;\r\n case 'kpi-benchmark-agent':\r\n return `${this.baseUrl}/agents/benchmarking-agent?id=${canvasJson?.payload?.id}&name=${canvasJson?.payload?.name}&session_id=${conversationId}&auth_token=${this.currentToken}&router_message_id=${message?.message_id}`;\r\n case 'kpi-summary-agent':\r\n return `${this.baseUrl}/agents/executive-summary?id=${canvasJson?.payload?.id}&name=${canvasJson?.payload?.name}&session_id=${conversationId}&auth_token=${this.currentToken}&router_message_id=${message?.message_id}`;\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n sendMessage(message: string): Observable<any> {\r\n const url = `${this.baseUrl}/chat`;\r\n const body: any = {\r\n user_message: message,\r\n session_id: this.sessionId,\r\n user_name: this.currentUserName,\r\n user_id: this.currentUserId,\r\n current_view: this.buildCurrentView(),\r\n };\r\n\r\n return this.http.post(url, body, { context: this.requestContext }).pipe(\r\n map((res: any) => {\r\n if (res?.data && typeof res.data === 'object') {\r\n return {\r\n ...res,\r\n ...res.data,\r\n };\r\n }\r\n\r\n return res;\r\n }),\r\n tap((res: any) => {\r\n if (res?.session_id) {\r\n this.sessionId = res.session_id;\r\n setTimeout(() => {\r\n this.getUserDetails().subscribe();\r\n }, 150);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n clearSession(): void {\r\n this.sessionId = null;\r\n }\r\n\r\n getUserDetails(): Observable<any> {\r\n if (!this.currentUserId) {\r\n this.conversations.next([]);\r\n return of({ conversations: [] });\r\n }\r\n\r\n const url = `${this.baseUrl}/users/${this.currentUserId}`;\r\n return this.http.get<any>(url, { context: this.requestContext }).pipe(\r\n map((res) => {\r\n const conversations = this.resolveConversationsPayload(res).map(\r\n (conversation) => this.normalizeConversation(conversation),\r\n );\r\n return { conversations };\r\n }),\r\n tap((res) => {\r\n this.conversations.next(res.conversations);\r\n }),\r\n );\r\n }\r\n\r\n getConversationDetails(sessionId: string): Observable<any> {\r\n this.sessionId = sessionId;\r\n const url = `${this.baseUrl}/conversations/${sessionId}`;\r\n return this.http\r\n .get<any>(url, { context: this.requestContext })\r\n .pipe(\r\n map((res) =>\r\n this.resolveConversationMessagesPayload(res).map((item) =>\r\n this.normalizeConversationMessage(item),\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n deleteConversation(sessionId: string): Observable<any> {\r\n const url = `${this.baseUrl}/conversations/${sessionId}`;\r\n return this.http.delete(url, { context: this.requestContext });\r\n }\r\n\r\n copyToClipboard(content: string): void {\r\n if (!content || typeof content !== 'string') {\r\n this.toast.error('Failed to copy content');\r\n return;\r\n }\r\n\r\n navigator.clipboard\r\n .writeText(content)\r\n .then(() => {\r\n this.toast.success('Content copied to clipboard');\r\n })\r\n .catch(() => {\r\n this.toast.error('Failed to copy content');\r\n });\r\n }\r\n\r\n downloadDocument(item: FarisMessage): Observable<Blob> {\r\n const url = `${this.baseUrl}/download-docx/${item.message_id}`;\r\n return this.http\r\n .get(url, { responseType: 'blob', context: this.requestContext })\r\n .pipe(\r\n tap((res) => {\r\n const blobUrl = window.URL.createObjectURL(res);\r\n const link = document.createElement('a');\r\n link.href = blobUrl;\r\n link.download = `faris-response-${item.message_id}.docx`;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(blobUrl);\r\n }),\r\n );\r\n }\r\n\r\n sendFeedback(\r\n messageId: string,\r\n score: number,\r\n traceId?: string,\r\n feedback?: string,\r\n ): Observable<any> {\r\n if (!this.sessionId) {\r\n return EMPTY;\r\n }\r\n\r\n const url = `${this.baseUrl}/feedback`;\r\n const body: any = {\r\n session_id: this.sessionId,\r\n message_id: messageId,\r\n score,\r\n trace_id: traceId,\r\n feedback,\r\n };\r\n\r\n return this.http.post(url, body, { context: this.requestContext }).pipe(\r\n tap(() => {\r\n this.getUserDetails().subscribe();\r\n }),\r\n );\r\n }\r\n\r\n generate(): string {\r\n return this.generator();\r\n }\r\n\r\n private buildCurrentView(): Record<string, unknown> {\r\n let currentView: Record<string, unknown> = { page: 'Home' };\r\n\r\n if (this.mySpaceActiveTab) {\r\n currentView = {\r\n page: 'tasks-center',\r\n Module:\r\n this.mySpaceActiveTab === 'Support'\r\n ? 'escalation'\r\n : this.mySpaceActiveTab.toLowerCase(),\r\n };\r\n }\r\n\r\n if (this.kpiSchemaId && this.kpiTemplateId) {\r\n currentView = {\r\n page: 'kpis',\r\n schemaId: this.kpiSchemaId,\r\n templateId: this.kpiTemplateId,\r\n };\r\n }\r\n\r\n if (this.initiativesTemplateId && this.initiativesSchemaId) {\r\n currentView = {\r\n page: 'initiatives',\r\n schemaId: this.initiativesSchemaId,\r\n templateId: this.initiativesTemplateId,\r\n };\r\n }\r\n\r\n if (this.strategyTemplateId) {\r\n currentView = {\r\n page: 'strategy',\r\n templateId: this.strategyTemplateId,\r\n };\r\n }\r\n\r\n if (this.activeModuleId) {\r\n currentView['ModuleId'] = this.activeModuleId;\r\n }\r\n\r\n return currentView;\r\n }\r\n\r\n private resolveCurrentUserDetails(): any {\r\n const user = this.currentUser;\r\n return user?.user ?? user?.data?.user ?? user ?? null;\r\n }\r\n\r\n private resolveConversationsPayload(res: any): any[] {\r\n const candidates = [\r\n res,\r\n res?.conversations,\r\n res?.data?.conversations,\r\n res?.data?.items,\r\n res?.data,\r\n res?.result?.conversations,\r\n res?.result,\r\n res?.payload?.conversations,\r\n res?.payload,\r\n ];\r\n\r\n for (const candidate of candidates) {\r\n if (Array.isArray(candidate)) {\r\n return candidate;\r\n }\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private normalizeConversation(conversation: any): any {\r\n const resolvedId =\r\n conversation?.id ??\r\n conversation?.session_id ??\r\n conversation?.sessionId ??\r\n conversation?.conversation_id ??\r\n conversation?.conversationId;\r\n const resolvedUpdatedAt =\r\n conversation?.updated_at ??\r\n conversation?.updatedAt ??\r\n conversation?.last_updated_at ??\r\n conversation?.lastUpdatedAt ??\r\n conversation?.created_at ??\r\n conversation?.createdAt ??\r\n conversation?.timestamp ??\r\n conversation?.date ??\r\n null;\r\n const resolvedTitle =\r\n conversation?.title ??\r\n conversation?.conversation_title ??\r\n conversation?.conversationTitle ??\r\n conversation?.name ??\r\n conversation?.subject ??\r\n '';\r\n\r\n return {\r\n ...conversation,\r\n id: resolvedId == null ? '' : String(resolvedId),\r\n updated_at: resolvedUpdatedAt,\r\n title: resolvedTitle,\r\n };\r\n }\r\n\r\n private resolveConversationMessagesPayload(res: any): any[] {\r\n const candidates = [\r\n res,\r\n res?.messages,\r\n res?.conversation,\r\n res?.data?.messages,\r\n res?.data?.conversation,\r\n res?.data,\r\n res?.result?.messages,\r\n res?.result,\r\n res?.payload?.messages,\r\n res?.payload,\r\n ];\r\n\r\n for (const candidate of candidates) {\r\n if (Array.isArray(candidate)) {\r\n return candidate;\r\n }\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private normalizeConversationMessage(item: any): any {\r\n const normalizedRole = this.resolveMessageRole(item);\r\n return {\r\n ...item,\r\n role: normalizedRole,\r\n content: item?.content ?? item?.message ?? item?.text ?? '',\r\n message_id:\r\n item?.message_id ??\r\n item?.messageId ??\r\n item?.id ??\r\n item?.router_message_id,\r\n trace_id: item?.trace_id ?? item?.traceId,\r\n score: item?.score ?? null,\r\n feedback: item?.feedback ?? null,\r\n };\r\n }\r\n\r\n private resolveMessageRole(item: any): 'user' | 'assistant' {\r\n const role =\r\n item?.role ?? item?.sender ?? item?.messageRole ?? item?.message_role;\r\n\r\n if (role === 'user' || role === 'assistant') {\r\n return role;\r\n }\r\n\r\n if (typeof role === 'string') {\r\n const normalized = role.toLowerCase();\r\n if (\r\n normalized.includes('assistant') ||\r\n normalized.includes('bot') ||\r\n normalized.includes('ai') ||\r\n normalized.includes('system')\r\n ) {\r\n return 'assistant';\r\n }\r\n }\r\n\r\n if (item?.is_user === true || item?.fromUser === true) {\r\n return 'user';\r\n }\r\n\r\n return 'assistant';\r\n }\r\n\r\n private generator(): string {\r\n return `${this.s4()}${this.s4()}-${this.s4()}-${this.s4()}-${this.s4()}-${this.s4()}${this.s4()}${this.s4()}`;\r\n }\r\n\r\n private s4(): string {\r\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n inject,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { FarisTranslatePipe } from '../faris-translate.pipe';\r\nimport { FarisMessage } from '../faris.model';\r\nimport { FarisService } from '../faris.service';\r\n\r\n@Component({\r\n selector: 'mt-faris-canvas',\r\n standalone: true,\r\n imports: [FarisTranslatePipe, Button],\r\n templateUrl: './faris-canvas.component.html',\r\n styleUrl: './faris-canvas.component.scss',\r\n})\r\nexport class FarisCanvasComponent implements OnInit, OnChanges {\r\n @Input() message: FarisMessage | null = null;\r\n @Input() conversationId: string | null = null;\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n loading = true;\r\n iframeUrl: SafeResourceUrl | null = null;\r\n\r\n private readonly farisService = inject(FarisService);\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n ngOnInit(): void {\r\n this.setIframeUrl();\r\n this.loading = true;\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.setIframeUrl();\r\n this.loading = true;\r\n }\r\n\r\n onIframeLoad(): void {\r\n this.loading = false;\r\n }\r\n\r\n closeCanvas(): void {\r\n this.closed.emit();\r\n }\r\n\r\n private setIframeUrl(): void {\r\n const url = this.farisService.generateIframUrl(\r\n this.message,\r\n this.conversationId,\r\n );\r\n this.iframeUrl = url\r\n ? this.sanitizer.bypassSecurityTrustResourceUrl(url)\r\n : null;\r\n }\r\n}\r\n","@if (iframeUrl) {\r\n <div class=\"faris-canvas-frame\">\r\n <div class=\"faris-canvas-frame-header\">\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.x-close\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n aria-label=\"Close Canvas\"\r\n (click)=\"closeCanvas()\"\r\n ></mt-button>\r\n </div>\r\n\r\n <div class=\"faris-canvas-iframe-container\">\r\n @if (loading) {\r\n <div class=\"iframe-loading\">\r\n <div\r\n class=\"h-6 w-6 animate-spin rounded-full border-2 border-slate-300 border-t-[var(--primary-color)]\"\r\n ></div>\r\n </div>\r\n }\r\n\r\n <iframe\r\n [src]=\"iframeUrl\"\r\n width=\"100%\"\r\n height=\"100vh\"\r\n frameborder=\"0\"\r\n allowfullscreen\r\n (load)=\"onIframeLoad()\"\r\n ></iframe>\r\n </div>\r\n </div>\r\n} @else {\r\n <div class=\"faris-canvas-empty p-4 text-sm text-slate-600\">\r\n {{ \"faris.unable-to-load-content\" | translate }}\r\n </div>\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'mt-faris-agent-card',\r\n standalone: true,\r\n templateUrl: './agent-card.component.html',\r\n styleUrl: './agent-card.component.scss',\r\n})\r\nexport class AgentCardComponent {\r\n @Input() agent: any;\r\n}\r\n","<div\r\n class=\"flex cursor-pointer items-center gap-3 rounded-md border border-slate-200 bg-slate-50 px-2 py-2 transition hover:bg-slate-100\"\r\n [style.border-color]=\"agent?.color || null\"\r\n>\r\n <img\r\n class=\"h-10 w-10 rounded object-contain p-1\"\r\n [src]=\"agent?.icon\"\r\n alt=\"\"\r\n />\r\n <div class=\"text-sm leading-5\">\r\n <strong class=\"block text-slate-900\">{{ agent?.title }}</strong>\r\n <p class=\"m-0 text-slate-600\">{{ agent?.desc }}</p>\r\n </div>\r\n</div>\r\n","import { Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'farisMarkdown',\r\n standalone: true,\r\n})\r\nexport class FarisMarkdownPipe implements PipeTransform {\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n transform(value: unknown): SafeHtml {\r\n const source = this.toStringValue(value);\r\n if (!source) {\r\n return '';\r\n }\r\n\r\n const escaped = this.escapeHtml(source).replace(/\\r\\n/g, '\\n');\r\n const html = this.toHtml(escaped);\r\n\r\n return this.sanitizer.bypassSecurityTrustHtml(html);\r\n }\r\n\r\n private toHtml(content: string): string {\r\n let html = content;\r\n\r\n html = html.replace(/```canvas\\s*[\\s\\S]*?```/gi, '');\r\n\r\n html = html.replace(\r\n /```chart\\s*([\\s\\S]*?)```/gi,\r\n (_match, code: string) => {\r\n const payload = encodeURIComponent(code.trim());\r\n return `<div class=\"chart-placeholder\" data-options=\"${payload}\"></div>`;\r\n },\r\n );\r\n\r\n html = html.replace(\r\n /```([a-zA-Z0-9_-]+)?\\s*([\\s\\S]*?)```/g,\r\n (_match, lang: string | undefined, code: string) =>\r\n `<pre class=\"faris-code\"><code class=\"language-${lang ?? 'plain'}\">${code.trim()}</code></pre>`,\r\n );\r\n\r\n html = html.replace(/^###\\s+(.+)$/gm, '<h3>$1</h3>');\r\n html = html.replace(/^##\\s+(.+)$/gm, '<h2>$1</h2>');\r\n html = html.replace(/^#\\s+(.+)$/gm, '<h1>$1</h1>');\r\n\r\n html = html.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>');\r\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\r\n html = html.replace(\r\n /\\[(.+?)\\]\\((https?:\\/\\/[^\\s)]+)\\)/g,\r\n '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>',\r\n );\r\n\r\n return html.replace(/\\n/g, '<br>');\r\n }\r\n\r\n private toStringValue(value: unknown): string {\r\n if (typeof value === 'string') {\r\n return value;\r\n }\r\n\r\n if (value == null) {\r\n return '';\r\n }\r\n\r\n try {\r\n return JSON.stringify(value, null, 2);\r\n } catch {\r\n return String(value);\r\n }\r\n }\r\n\r\n private escapeHtml(content: string): string {\r\n return content\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''');\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { FarisTranslatePipe } from '../faris-translate.pipe';\r\n\r\nexport type FarisMessageAction =\r\n | 'like'\r\n | 'dislike'\r\n | 'copy'\r\n | 'task'\r\n | 'download'\r\n | 'retry';\r\n\r\n@Component({\r\n selector: 'mt-faris-message-actions',\r\n standalone: true,\r\n imports: [FarisTranslatePipe, Button],\r\n templateUrl: './faris-message-actions.component.html',\r\n styleUrl: './faris-message-actions.component.css',\r\n})\r\nexport class FarisMessageActionsComponent {\r\n @Input() currentVote: 'like' | 'dislike' | null = null;\r\n @Input() canvasMessage = false;\r\n @Input() downloading = false;\r\n @Output() action = new EventEmitter<FarisMessageAction>();\r\n\r\n emitAction(action: FarisMessageAction): void {\r\n this.action.emit(action);\r\n }\r\n}\r\n","<div class=\"feedback-controls mt-3 flex items-center gap-1\">\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.copy-01\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn faris-btn-muted\"\r\n [tooltip]=\"'faris.copy-response' | translate\"\r\n (click)=\"emitAction('copy')\"\r\n ></mt-button>\r\n\r\n @if (!canvasMessage) {\r\n <mt-button\r\n type=\"button\"\r\n icon=\"file.file-plus-01\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn faris-btn-muted\"\r\n [loading]=\"downloading\"\r\n [tooltip]=\"'faris.create-document' | translate\"\r\n (click)=\"emitAction('download')\"\r\n ></mt-button>\r\n }\r\n\r\n <mt-button\r\n type=\"button\"\r\n icon=\"arrow.refresh-cw-01\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn faris-btn-muted\"\r\n [tooltip]=\"'faris.retry-response' | translate\"\r\n (click)=\"emitAction('retry')\"\r\n ></mt-button>\r\n\r\n <div class=\"feedback-separator mx-1 h-6 w-px bg-black/10\"></div>\r\n\r\n <mt-button\r\n type=\"button\"\r\n icon=\"alert.thumbs-up\"\r\n variant=\"text\"\r\n [styleClass]=\"\r\n 'faris-btn faris-btn-muted like' +\r\n (currentVote === 'like' ? ' text-green-600' : '')\r\n \"\r\n [tooltip]=\"'faris.helpful' | translate\"\r\n (click)=\"emitAction('like')\"\r\n ></mt-button>\r\n\r\n <mt-button\r\n type=\"button\"\r\n icon=\"alert.thumbs-down\"\r\n variant=\"text\"\r\n [styleClass]=\"\r\n 'faris-btn faris-btn-muted dislike' +\r\n (currentVote === 'dislike' ? ' text-red-600' : '')\r\n \"\r\n [tooltip]=\"'faris.not-helpful' | translate\"\r\n (click)=\"emitAction('dislike')\"\r\n ></mt-button>\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'parseMention',\r\n standalone: true,\r\n})\r\nexport class ParseMentionPipe implements PipeTransform {\r\n transform(value: string | null | undefined): string {\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n const regex = /@{{({.*?})}}/g;\r\n\r\n return value.replace(regex, (match, jsonString: string) => {\r\n try {\r\n const jsonObject = JSON.parse(jsonString);\r\n return `@${jsonObject.title}`;\r\n } catch {\r\n return match;\r\n }\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n inject,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { FarisMarkdownPipe } from '../faris-markdown.pipe';\r\nimport { FarisTranslatePipe } from '../faris-translate.pipe';\r\nimport { FarisMessage } from '../faris.model';\r\nimport { FarisService } from '../faris.service';\r\nimport {\r\n FarisMessageAction,\r\n FarisMessageActionsComponent,\r\n} from '../faris-message-actions/faris-message-actions.component';\r\nimport { ParseMentionPipe } from '../mentions/mention.pipe';\r\n\r\n@Component({\r\n selector: 'mt-faris-message',\r\n standalone: true,\r\n imports: [\r\n Button,\r\n ParseMentionPipe,\r\n FarisTranslatePipe,\r\n FarisMarkdownPipe,\r\n FarisMessageActionsComponent,\r\n ],\r\n templateUrl: './faris-message.component.html',\r\n styleUrl: './faris-message.component.scss',\r\n})\r\nexport class FarisMessageComponent implements OnInit {\r\n @Input() item!: FarisMessage;\r\n @Input() currentUserPhoto = '';\r\n @Input() loading = false;\r\n @Input() thinkingText = '';\r\n readonly fallbackUserPhoto =\r\n 'data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\"><circle cx=\\\"20\\\" cy=\\\"20\\\" r=\\\"20\\\" fill=\\\"%23e2e8f0\\\"/><circle cx=\\\"20\\\" cy=\\\"15\\\" r=\\\"7\\\" fill=\\\"%2394a3b8\\\"/><path d=\\\"M8 34c2.5-6 7.5-9 12-9s9.5 3 12 9\\\" fill=\\\"%2394a3b8\\\"/></svg>';\r\n\r\n @Output() action = new EventEmitter<{\r\n action: FarisMessageAction;\r\n item: FarisMessage;\r\n }>();\r\n @Output() canvas = new EventEmitter<FarisMessage>();\r\n\r\n canvasMessage = false;\r\n downloading = false;\r\n\r\n private readonly farisService = inject(FarisService);\r\n\r\n ngOnInit(): void {\r\n this.canvasMessage = this.resolveContent(this.item?.content).includes(\r\n '```canvas',\r\n );\r\n }\r\n\r\n takeAction(action: FarisMessageAction, item: FarisMessage): void {\r\n if (action === 'download') {\r\n this.downloadDocument(item);\r\n }\r\n\r\n this.action.emit({ action, item });\r\n }\r\n\r\n launchCanvas(): void {\r\n this.canvas.emit(this.item);\r\n }\r\n\r\n setFallbackUserPhoto(): void {\r\n this.currentUserPhoto = this.fallbackUserPhoto;\r\n }\r\n\r\n private downloadDocument(item: FarisMessage): void {\r\n this.downloading = true;\r\n\r\n this.farisService\r\n .downloadDocument(item)\r\n .pipe(finalize(() => (this.downloading = false)))\r\n .subscribe();\r\n }\r\n\r\n private resolveContent(content: unknown): string {\r\n if (typeof content === 'string') {\r\n return content;\r\n }\r\n\r\n if (content == null) {\r\n return '';\r\n }\r\n\r\n try {\r\n return JSON.stringify(content);\r\n } catch {\r\n return String(content);\r\n }\r\n }\r\n}\r\n","@if (item.role === \"user\") {\r\n <div class=\"faris-message\">\r\n <img\r\n [src]=\"currentUserPhoto || fallbackUserPhoto\"\r\n (error)=\"setFallbackUserPhoto()\"\r\n class=\"rounded-full user-img-md\"\r\n alt=\"\"\r\n />\r\n <div\r\n class=\"result-markdown result-width user\"\r\n [innerHTML]=\"item.content | parseMention | farisMarkdown\"\r\n ></div>\r\n </div>\r\n}\r\n\r\n@if (item.role === \"assistant\") {\r\n <div class=\"faris-message\">\r\n <div class=\"gemini-ic\" [class.thinking]=\"loading && !item.loaded\">\r\n <svg\r\n focusable=\"false\"\r\n viewBox=\"0 -960 960 960\"\r\n height=\"28\"\r\n width=\"28\"\r\n class=\"EiVpKc aoH\"\r\n >\r\n <path\r\n d=\"M480-80q2,0 2-2q0-82 31-154t85-126t126-85t154-31q2,0 2-2t-2-2q-82,0-154-31T598-598T513-724T482-878q0-2-2-2t-2,2q0,82-31,154T362-598T236-513T82-482q-2,0-2,2t2,2q82,0 154,31t126,85t85,126T478-82q0,2 2,2Z\"\r\n ></path>\r\n </svg>\r\n </div>\r\n\r\n <div class=\"flex w-[85%] max-w-[98%] flex-col\">\r\n @if (!loading || item.loaded) {\r\n <div class=\"w-full\">\r\n <div\r\n class=\"result-markdown faris\"\r\n [innerHTML]=\"item.content | farisMarkdown\"\r\n ></div>\r\n\r\n @if (canvasMessage) {\r\n <mt-button\r\n type=\"button\"\r\n [label]=\"'faris.launch-canvas' | translate\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n styleClass=\"mt-2\"\r\n (click)=\"launchCanvas()\"\r\n ></mt-button>\r\n }\r\n\r\n <mt-faris-message-actions\r\n [downloading]=\"downloading\"\r\n [canvasMessage]=\"canvasMessage\"\r\n [currentVote]=\"\r\n item.feedback === '1'\r\n ? 'like'\r\n : item.feedback === '-1'\r\n ? 'dislike'\r\n : null\r\n \"\r\n (action)=\"takeAction($event, item)\"\r\n >\r\n </mt-faris-message-actions>\r\n </div>\r\n }\r\n\r\n @if (loading && !item.loaded) {\r\n <div class=\"thinking-text\">{{ thinkingText }}</div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { resolveFarisUrlFromLocalStorage } from '../faris-url.util';\r\nimport { MentionListItem } from './mention-list/mention-list.component';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class MentionApiService {\r\n private baseUrl = '';\r\n\r\n private readonly http = inject(HttpClient);\r\n\r\n constructor() {\r\n let url = resolveFarisUrlFromLocalStorage();\r\n if (url.endsWith('/')) {\r\n url = url.slice(0, -1);\r\n }\r\n this.baseUrl = url;\r\n }\r\n\r\n search(term: string): Observable<MentionListItem[]> {\r\n return this.http.get<MentionListItem[]>(`${this.baseUrl}/search`, {\r\n params: { query: term },\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n} from '@angular/core';\r\nimport { FarisTranslatePipe } from '../../faris-translate.pipe';\r\n\r\nexport interface MentionListItem {\r\n id: string | number;\r\n title: string;\r\n rank?: number;\r\n levelType: string;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-faris-mention-list',\r\n standalone: true,\r\n imports: [FarisTranslatePipe],\r\n templateUrl: './mention-list.component.html',\r\n styleUrl: './mention-list.component.css',\r\n})\r\nexport class MentionListComponent implements OnChanges {\r\n @Input() items: MentionListItem[] = [];\r\n @Input() loading = false;\r\n @Output() itemSelected = new EventEmitter<MentionListItem>();\r\n\r\n activeIndex = 0;\r\n\r\n ngOnChanges(): void {\r\n this.activeIndex = 0;\r\n setTimeout(() => this.scrollActiveItemIntoView(), 0);\r\n }\r\n\r\n onItemClick(event: MouseEvent, item: MentionListItem): void {\r\n event.preventDefault();\r\n this.itemSelected.emit(item);\r\n }\r\n\r\n moveActiveUp(): void {\r\n if (!this.items.length) {\r\n return;\r\n }\r\n\r\n this.activeIndex =\r\n (this.activeIndex - 1 + this.items.length) % this.items.length;\r\n this.scrollActiveItemIntoView();\r\n }\r\n\r\n moveActiveDown(): void {\r\n if (!this.items.length) {\r\n return;\r\n }\r\n\r\n this.activeIndex = (this.activeIndex + 1) % this.items.length;\r\n this.scrollActiveItemIntoView();\r\n }\r\n\r\n selectActiveItem(): void {\r\n if (!this.items.length) {\r\n return;\r\n }\r\n\r\n this.itemSelected.emit(this.items[this.activeIndex]);\r\n }\r\n\r\n private scrollActiveItemIntoView(): void {\r\n const list = document.querySelector('.mention-list');\r\n if (!list) {\r\n return;\r\n }\r\n\r\n const items = list.querySelectorAll('.mention-item');\r\n if (!items.length) {\r\n return;\r\n }\r\n\r\n const activeItem = items[this.activeIndex] as HTMLElement;\r\n activeItem?.scrollIntoView({ block: 'nearest' });\r\n }\r\n}\r\n","<ul class=\"mention-list\">\r\n @if (loading) {\r\n <li title=\"loading...\">\r\n <div class=\"mention-item skeleton\"> </div>\r\n <div class=\"mention-item skeleton\"> </div>\r\n <div class=\"mention-item skeleton\"> </div>\r\n </li>\r\n }\r\n\r\n @if (!loading && items.length === 0) {\r\n <li class=\"mention-item-empty\">\r\n {{ \"faris.no-results-found\" | translate }}\r\n </li>\r\n }\r\n\r\n @for (item of items; track item.id; let i = $index) {\r\n <li\r\n (mousedown)=\"onItemClick($event, item)\"\r\n class=\"mention-item\"\r\n [class.active]=\"i === activeIndex\"\r\n [hidden]=\"loading\"\r\n >\r\n {{ item.title }}\r\n @if (item.levelType) {\r\n <span class=\"mention-item-type\">({{ item.levelType }})</span>\r\n }\r\n </li>\r\n }\r\n</ul>\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n ViewContainerRef,\r\n forwardRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subject, of } from 'rxjs';\r\nimport { catchError, debounceTime, switchMap, takeUntil } from 'rxjs/operators';\r\nimport { MentionApiService } from '../mention-api.service';\r\nimport {\r\n MentionListComponent,\r\n MentionListItem,\r\n} from '../mention-list/mention-list.component';\r\n\r\n@Component({\r\n selector: 'mt-faris-mention-input',\r\n standalone: true,\r\n templateUrl: './mention-input.component.html',\r\n styleUrl: './mention-input.component.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => MentionInputComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class MentionInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n @ViewChild('mentionInput', { static: true })\r\n private inputRef!: ElementRef<HTMLDivElement>;\r\n\r\n loading = false;\r\n\r\n private resizeObserver?: ResizeObserver;\r\n private overlayRef: OverlayRef | null = null;\r\n private readonly destroy$ = new Subject<void>();\r\n private readonly search$ = new Subject<string>();\r\n\r\n private onChange: (value: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n private mentionListInstance: MentionListComponent | null = null;\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly mentionApiService = inject(MentionApiService);\r\n\r\n ngOnInit(): void {\r\n this.search$\r\n .pipe(\r\n debounceTime(300),\r\n switchMap((searchTerm) => {\r\n this.loading = true;\r\n\r\n if (this.overlayRef) {\r\n this.showSuggestions([]);\r\n }\r\n\r\n return this.mentionApiService.search(searchTerm).pipe(\r\n catchError((_err) => {\r\n this.loading = false;\r\n return of([]);\r\n }),\r\n );\r\n }),\r\n takeUntil(this.destroy$),\r\n )\r\n .subscribe((items) => {\r\n this.loading = false;\r\n\r\n if (this.overlayRef) {\r\n this.showSuggestions(items);\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.resizeObserver = new ResizeObserver((entries) => {\r\n for (const entry of entries) {\r\n const { offsetWidth } = entry.target as HTMLElement;\r\n\r\n if (this.overlayRef) {\r\n this.overlayRef.updatePosition();\r\n this.overlayRef.updateSize({\r\n width: 'fit-content',\r\n minWidth: '250px',\r\n maxWidth: `${offsetWidth}px`,\r\n });\r\n }\r\n }\r\n });\r\n\r\n this.resizeObserver.observe(this.inputRef.nativeElement);\r\n }\r\n\r\n onInput(): void {\r\n const { word, trigger } = this.getCurrentWord();\r\n\r\n if (trigger === '@' && word.length) {\r\n this.openOverlay();\r\n this.search$.next(word);\r\n } else {\r\n this.closeOverlay();\r\n }\r\n\r\n this.emitValueChange();\r\n }\r\n\r\n onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n onArrowUpDown(event: Event): void {\r\n const keyboardEvent = event as KeyboardEvent;\r\n\r\n if (!this.overlayRef || !this.mentionListInstance) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n if (keyboardEvent.key === 'ArrowUp') {\r\n this.mentionListInstance.moveActiveUp();\r\n } else if (keyboardEvent.key === 'ArrowDown') {\r\n this.mentionListInstance.moveActiveDown();\r\n }\r\n }\r\n\r\n onEnter(event: Event): void {\r\n const keyboardEvent = event as KeyboardEvent;\r\n\r\n if (this.overlayRef && this.mentionListInstance) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.mentionListInstance.selectActiveItem();\r\n return;\r\n }\r\n\r\n this.insertParagraphAtCaret(keyboardEvent);\r\n }\r\n\r\n onTab(event: Event): void {\r\n if (!this.overlayRef || !this.mentionListInstance) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.mentionListInstance.selectActiveItem();\r\n }\r\n\r\n writeValue(value: string): void {\r\n if (!this.inputRef?.nativeElement) {\r\n return;\r\n }\r\n\r\n this.inputRef.nativeElement.innerHTML = value || '<p><br></p>';\r\n\r\n if (!value && this.overlayRef) {\r\n this.closeOverlay();\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (!this.inputRef?.nativeElement) {\r\n return;\r\n }\r\n\r\n this.inputRef.nativeElement.contentEditable = isDisabled ? 'false' : 'true';\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.resizeObserver?.disconnect();\r\n this.closeOverlay();\r\n }\r\n\r\n private insertParagraphAtCaret(event: KeyboardEvent): void {\r\n if (event.key !== 'Enter') {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) {\r\n return;\r\n }\r\n\r\n const range = selection.getRangeAt(0);\r\n let currentParagraph = range.startContainer as HTMLElement;\r\n\r\n while (\r\n currentParagraph &&\r\n currentParagraph.nodeType === Node.ELEMENT_NODE &&\r\n currentParagraph.tagName !== 'P'\r\n ) {\r\n currentParagraph = currentParagraph.parentElement as HTMLElement;\r\n }\r\n\r\n if (!currentParagraph || currentParagraph.tagName !== 'P') {\r\n const paragraph = document.createElement('p');\r\n paragraph.innerHTML = '<br>';\r\n this.inputRef.nativeElement.appendChild(paragraph);\r\n this.moveCaretToEndOf(paragraph);\r\n return;\r\n }\r\n\r\n const afterRange = range.cloneRange();\r\n afterRange.setEndAfter(currentParagraph);\r\n\r\n const fragment = afterRange.extractContents();\r\n const newParagraph = document.createElement('p');\r\n\r\n if (fragment.textContent?.trim().length) {\r\n newParagraph.appendChild(fragment);\r\n } else {\r\n newParagraph.innerHTML = '<br>';\r\n }\r\n\r\n if (currentParagraph.nextSibling) {\r\n currentParagraph.parentNode?.insertBefore(\r\n newParagraph,\r\n currentParagraph.nextSibling,\r\n );\r\n } else {\r\n currentParagraph.parentNode?.appendChild(newParagraph);\r\n }\r\n\r\n this.moveCaretToEndOf(newParagraph);\r\n }\r\n\r\n private getCurrentWord(): { word: string; trigger: string | null } {\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) {\r\n return { word: '', trigger: null };\r\n }\r\n\r\n const blockNode = this.getCaretBlockNode(this.inputRef.nativeElement);\r\n if (!blockNode) {\r\n return { word: '', trigger: null };\r\n }\r\n\r\n const range = selection.getRangeAt(0).cloneRange();\r\n range.selectNodeContents(blockNode);\r\n range.setEnd(selection.anchorNode!, selection.anchorOffset);\r\n\r\n const textBeforeCaret = range.toString();\r\n const match = textBeforeCaret.match(/@(\\w*)$/);\r\n\r\n if (match) {\r\n return { word: match[1], trigger: '@' };\r\n }\r\n\r\n return { word: '', trigger: null };\r\n }\r\n\r\n private openOverlay(): void {\r\n if (this.overlayRef) {\r\n return;\r\n }\r\n\r\n const positionStrategy = this.overlay\r\n .position()\r\n .flexibleConnectedTo(this.inputRef)\r\n .withPush(true)\r\n .withPositions([\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n offsetY: -8,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: 8,\r\n },\r\n ]);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n panelClass: 'mention-overlay-panel',\r\n width: 'fit-content',\r\n minWidth: '250px',\r\n maxWidth: `${this.inputRef.nativeElement.offsetWidth}px`,\r\n });\r\n }\r\n\r\n private showSuggestions(items: MentionListItem[] = []): void {\r\n if (!this.overlayRef) {\r\n return;\r\n }\r\n\r\n if (this.overlayRef.hasAttached()) {\r\n this.overlayRef.detach();\r\n }\r\n\r\n const strippedItems: MentionListItem[] = items.map((item) => ({\r\n ...item,\r\n rank: undefined,\r\n }));\r\n\r\n const portal = new ComponentPortal(\r\n MentionListComponent,\r\n this.viewContainerRef,\r\n );\r\n const componentRef = this.overlayRef.attach(portal);\r\n\r\n componentRef.instance.items = strippedItems;\r\n componentRef.instance.loading = this.loading;\r\n this.mentionListInstance = componentRef.instance;\r\n\r\n if (items.length > 0) {\r\n this.mentionListInstance.activeIndex = 0;\r\n }\r\n\r\n componentRef.instance.itemSelected\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((item) => {\r\n this.insertMention(item);\r\n this.closeOverlay();\r\n });\r\n }\r\n\r\n private insertMention(item: MentionListItem): void {\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) {\r\n return;\r\n }\r\n\r\n const blockNode = this.getCaretBlockNode(this.inputRef.nativeElement);\r\n if (!blockNode) {\r\n return;\r\n }\r\n\r\n const range = selection.getRangeAt(0);\r\n const preCaretRange = range.cloneRange();\r\n preCaretRange.selectNodeContents(blockNode);\r\n preCaretRange.setEnd(selection.anchorNode!, selection.anchorOffset);\r\n\r\n const textBeforeCaret = preCaretRange.toString();\r\n const lastAt = textBeforeCaret.lastIndexOf('@');\r\n\r\n if (lastAt === -1) {\r\n return;\r\n }\r\n\r\n let charCount = textBeforeCaret.length - lastAt;\r\n const treeWalker = document.createTreeWalker(\r\n blockNode,\r\n NodeFilter.SHOW_TEXT,\r\n null,\r\n );\r\n let currentNode = treeWalker.lastChild();\r\n let offset = 0;\r\n\r\n while (currentNode && charCount > 0) {\r\n if (currentNode.textContent) {\r\n if (charCount <= currentNode.textContent.length) {\r\n offset = currentNode.textContent.length - charCount;\r\n break;\r\n }\r\n\r\n charCount -= currentNode.textContent.length;\r\n }\r\n\r\n currentNode = treeWalker.previousNode();\r\n }\r\n\r\n if (!currentNode) {\r\n return;\r\n }\r\n\r\n const newRange = document.createRange();\r\n newRange.setStart(currentNode, offset);\r\n newRange.setEnd(range.endContainer, range.endOffset);\r\n newRange.deleteContents();\r\n\r\n const mentionNode = document.createElement('span');\r\n mentionNode.className = 'mention-highlight';\r\n mentionNode.contentEditable = 'false';\r\n mentionNode.textContent = `@${item.title}`;\r\n mentionNode.setAttribute('data-mention', JSON.stringify(item));\r\n newRange.insertNode(mentionNode);\r\n\r\n const space = document.createTextNode('\\u00A0');\r\n mentionNode.after(space);\r\n\r\n const afterRange = document.createRange();\r\n afterRange.setStartAfter(space);\r\n afterRange.collapse(true);\r\n\r\n selection.removeAllRanges();\r\n selection.addRange(afterRange);\r\n this.inputRef.nativeElement.focus();\r\n\r\n this.emitValueChange();\r\n }\r\n\r\n private emitValueChange(): void {\r\n if (!this.inputRef?.nativeElement) {\r\n return;\r\n }\r\n\r\n this.onChange(this.getEncodedValue());\r\n }\r\n\r\n private closeOverlay(): void {\r\n if (!this.overlayRef) {\r\n return;\r\n }\r\n\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n this.mentionListInstance = null;\r\n }\r\n\r\n private getEncodedValue(): string {\r\n const traverse = (node: Node): string => {\r\n let result = '';\r\n\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const element = node as HTMLElement;\r\n\r\n if (\r\n element.classList.contains('mention-highlight') &&\r\n element.hasAttribute('data-mention')\r\n ) {\r\n result += `@{{${element.getAttribute('data-mention')}}}`;\r\n } else {\r\n node.childNodes.forEach((child) => {\r\n result += traverse(child);\r\n });\r\n }\r\n } else if (node.nodeType === Node.TEXT_NODE) {\r\n result += node.textContent ?? '';\r\n }\r\n\r\n return result;\r\n };\r\n\r\n return traverse(this.inputRef.nativeElement);\r\n }\r\n\r\n private getCaretBlockNode(container: HTMLElement): Node | null {\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) {\r\n return null;\r\n }\r\n\r\n let node: Node | null = selection.anchorNode;\r\n\r\n while (node && node !== container) {\r\n if (\r\n node.nodeType === Node.ELEMENT_NODE &&\r\n (node as HTMLElement).tagName.match(/^(DIV|P|LI)$/)\r\n ) {\r\n return node;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return container;\r\n }\r\n\r\n private moveCaretToEndOf(element: HTMLElement): void {\r\n const range = document.createRange();\r\n const selection = window.getSelection();\r\n range.selectNodeContents(element);\r\n range.collapse(false);\r\n selection?.removeAllRanges();\r\n selection?.addRange(range);\r\n element.focus();\r\n }\r\n}\r\n","<div\r\n #mentionInput\r\n class=\"mention-input\"\r\n contenteditable=\"true\"\r\n (input)=\"onInput()\"\r\n (blur)=\"onBlur()\"\r\n (keydown.arrowUp)=\"onArrowUpDown($event)\"\r\n (keydown.arrowDown)=\"onArrowUpDown($event)\"\r\n (keydown.enter)=\"onEnter($event)\"\r\n (keydown.tab)=\"onTab($event)\"\r\n></div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n inject,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { AgentCardComponent } from '../agent-card/agent-card.component';\r\nimport { FarisMessageAction } from '../faris-message-actions/faris-message-actions.component';\r\nimport { FarisMessageComponent } from '../faris-message/faris-message.component';\r\nimport { FarisTranslatePipe } from '../faris-translate.pipe';\r\nimport { FarisMessage } from '../faris.model';\r\nimport { FarisService } from '../faris.service';\r\nimport { MentionInputComponent } from '../mentions/mention-input/mention-input.component';\r\n\r\n@Component({\r\n selector: 'mt-faris-chat',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n Button,\r\n AgentCardComponent,\r\n FarisTranslatePipe,\r\n FarisMessageComponent,\r\n MentionInputComponent,\r\n ],\r\n templateUrl: './faris-chat.component.html',\r\n styleUrl: './faris-chat.component.scss',\r\n})\r\nexport class FarisChatComponent implements OnInit, OnDestroy {\r\n private _selectedConversation: any = null;\r\n private _selectedConversationId: string | null = null;\r\n\r\n @Input() set selectedConversation(conversation: any) {\r\n const nextConversationId = this.resolveConversationId(conversation);\r\n if (\r\n nextConversationId &&\r\n nextConversationId === this._selectedConversationId\r\n ) {\r\n return;\r\n }\r\n\r\n this._selectedConversation = conversation;\r\n this._selectedConversationId = nextConversationId;\r\n\r\n if (!nextConversationId) {\r\n this._selectedConversation = null;\r\n this._selectedConversationId = null;\r\n this.chatHistory = [];\r\n this.showResult = false;\r\n this.farisService.clearSession();\r\n } else {\r\n this.getConversationDetails(nextConversationId);\r\n }\r\n\r\n this.userInput = '';\r\n }\r\n\r\n @Output() launchCanvas = new EventEmitter<FarisMessage>();\r\n @Output() selectConversation = new EventEmitter<any>();\r\n\r\n userInput = '';\r\n showResult = false;\r\n loading = false;\r\n markdownContent = '';\r\n currentUserPhoto = '';\r\n chatHistory: FarisMessage[] = [];\r\n\r\n dots = '';\r\n intervalId: ReturnType<typeof setInterval> | null = null;\r\n thinkingText = '';\r\n deepThinkingTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n readonly deepThinkingDelay = 10000;\r\n readonly deepThinkingText =\r\n 'Deep thinking is needed and the response might take more than usual...';\r\n\r\n readonly thinkingTexts = [\r\n 'Thinking',\r\n 'Hmm, analyzing the data',\r\n 'Let me think for a moment',\r\n 'Just a second, processing your request',\r\n 'Considering all possibilities',\r\n \"Let's see what I can come up with\",\r\n 'Running some calculations',\r\n 'Thinking hard about this one',\r\n 'Let me get back to you',\r\n ];\r\n\r\n readonly agents: any[] = [];\r\n\r\n private readonly subscriptions = new Subscription();\r\n private readonly farisService = inject(FarisService);\r\n\r\n get selectedChatId(): string {\r\n return this._selectedConversationId ?? '';\r\n }\r\n\r\n get currentUserDisplayName(): string {\r\n const currentUser = this.farisService.currentUser;\r\n return (\r\n currentUser?.user?.displayName ??\r\n currentUser?.displayName ??\r\n currentUser?.user?.name ??\r\n currentUser?.name ??\r\n ''\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loading = true;\r\n this.currentUserPhoto = this.resolveUserPhoto();\r\n this.startThinking(false);\r\n\r\n setTimeout(() => {\r\n this.loading = false;\r\n }, 600);\r\n }\r\n\r\n sendQuery(query?: string): void {\r\n const value = (query || this.userInput || '').trim();\r\n if (!value || this.loading) {\r\n return;\r\n }\r\n\r\n this.userInput = value;\r\n this.showResult = true;\r\n this.loading = true;\r\n this.startThinking();\r\n\r\n this.chatHistory = [\r\n ...this.chatHistory,\r\n { role: 'user', content: value, loaded: true },\r\n { role: 'assistant', content: this.markdownContent, loaded: false },\r\n ];\r\n\r\n this.subscriptions.add(\r\n this.farisService\r\n .sendMessage(value)\r\n .pipe(\r\n finalize(() => {\r\n this.loading = false;\r\n this.stopThinking();\r\n }),\r\n )\r\n .subscribe((res: any) => {\r\n const index = this.chatHistory.length - 1;\r\n this.chatHistory[index].content = res?.content;\r\n this.chatHistory[index].loaded = true;\r\n this.chatHistory[index].message_id = res?.message_id;\r\n this.chatHistory[index].trace_id = res?.trace_id;\r\n this.chatHistory[index].feedback = res?.feedback;\r\n this.chatHistory[index].score = res?.score;\r\n\r\n this.scrollToBottom();\r\n\r\n const canvas = this.resolveContent(res?.content).includes(\r\n '\\n```canvas',\r\n );\r\n if (!this.selectedChatId) {\r\n const sessionId =\r\n res?.session_id ?? res?.sessionId ?? res?.id ?? undefined;\r\n this.selectConversation.emit({\r\n id: sessionId,\r\n title: res?.conversation_title ?? res?.conversationTitle ?? value,\r\n });\r\n }\r\n\r\n if (canvas) {\r\n this.launchCanvas.emit(this.chatHistory[index]);\r\n }\r\n }),\r\n );\r\n\r\n setTimeout(() => {\r\n this.userInput = '';\r\n }, 10);\r\n }\r\n\r\n takeAction(action: FarisMessageAction, item: FarisMessage): void {\r\n if (!this.selectedChatId || !item?.message_id) {\r\n return;\r\n }\r\n\r\n switch (action) {\r\n case 'like':\r\n case 'dislike':\r\n this.likeDislikeFeedback(action, item);\r\n break;\r\n case 'copy':\r\n this.farisService.copyToClipboard(this.resolveContent(item.content));\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.chatHistory = [];\r\n this.showResult = false;\r\n this.farisService.clearSession();\r\n\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n this.intervalId = null;\r\n }\r\n\r\n if (this.deepThinkingTimeoutId) {\r\n clearTimeout(this.deepThinkingTimeoutId);\r\n this.deepThinkingTimeoutId = null;\r\n }\r\n\r\n if (!this.subscriptions.closed) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n\r\n private resolveUserPhoto(): string {\r\n const currentUser = this.farisService.currentUser;\r\n const photo =\r\n currentUser?.user?.photo ??\r\n currentUser?.photo ??\r\n currentUser?.user?.image ??\r\n currentUser?.image;\r\n\r\n if (typeof photo === 'string') {\r\n return photo;\r\n }\r\n\r\n return photo?.fileName ?? '';\r\n }\r\n\r\n private startThinking(shouldGenerateNew = true): void {\r\n this.thinkingText = this.getRandomThinkingText(shouldGenerateNew);\r\n this.scrollToBottom();\r\n\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n }\r\n\r\n let count = 0;\r\n this.intervalId = setInterval(() => {\r\n count = (count + 1) % 4;\r\n this.dots = '.'.repeat(count);\r\n }, 500);\r\n\r\n if (this.deepThinkingTimeoutId) {\r\n clearTimeout(this.deepThinkingTimeoutId);\r\n }\r\n\r\n this.deepThinkingTimeoutId = setTimeout(() => {\r\n if (this.loading) {\r\n this.thinkingText = this.deepThinkingText;\r\n }\r\n }, this.deepThinkingDelay);\r\n }\r\n\r\n private stopThinking(): void {\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n this.intervalId = null;\r\n }\r\n\r\n this.dots = '';\r\n\r\n if (this.deepThinkingTimeoutId) {\r\n clearTimeout(this.deepThinkingTimeoutId);\r\n this.deepThinkingTimeoutId = null;\r\n }\r\n }\r\n\r\n private scrollToBottom(): void {\r\n const container = document.getElementById('results-container');\r\n if (!container) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n container.scrollTo({\r\n top: container.scrollHeight + 100,\r\n behavior: 'smooth',\r\n });\r\n }, 150);\r\n }\r\n\r\n private getRandomThinkingText(generateNew = true): string {\r\n if (!generateNew) {\r\n return this.thinkingTexts[0];\r\n }\r\n\r\n const randomIndex = Math.floor(Math.random() * this.thinkingTexts.length);\r\n return this.thinkingTexts[randomIndex];\r\n }\r\n\r\n private getConversationDetails(id: string): void {\r\n this.subscriptions.add(\r\n this.farisService.getConversationDetails(id).subscribe((res: any[]) => {\r\n this.showResult = true;\r\n this.chatHistory = (res || []).map((item: any) => ({\r\n role: item.role,\r\n content: item.content,\r\n loaded: true,\r\n message_id: item.message_id,\r\n trace_id: item.trace_id,\r\n score: item.score,\r\n feedback: item.feedback,\r\n }));\r\n\r\n this.scrollToBottom();\r\n }),\r\n );\r\n }\r\n\r\n private resolveConversationId(conversation: any): string | null {\r\n const id =\r\n conversation?.id ??\r\n conversation?.session_id ??\r\n conversation?.sessionId ??\r\n conversation?.conversation_id ??\r\n conversation?.conversationId;\r\n\r\n return id == null ? null : String(id);\r\n }\r\n\r\n private likeDislikeFeedback(\r\n vote: 'like' | 'dislike',\r\n item: FarisMessage,\r\n ): void {\r\n if (!this.selectedChatId || !item?.message_id) {\r\n return;\r\n }\r\n\r\n let score = vote === 'like' ? 1 : -1;\r\n if (\r\n (item.feedback === 1 && score === 1) ||\r\n (item.feedback === -1 && score === -1)\r\n ) {\r\n score = 0;\r\n }\r\n\r\n this.subscriptions.add(\r\n this.farisService\r\n .sendFeedback(item.message_id, score, item.trace_id)\r\n .subscribe(),\r\n );\r\n }\r\n\r\n private resolveContent(content: unknown): string {\r\n if (typeof content === 'string') {\r\n return content;\r\n }\r\n\r\n if (content == null) {\r\n return '';\r\n }\r\n\r\n try {\r\n return JSON.stringify(content);\r\n } catch {\r\n return String(content);\r\n }\r\n }\r\n}\r\n","<div class=\"relative flex h-full w-full flex-col justify-between\" #container>\r\n @if (!showResult) {\r\n <div class=\"welcome-user\">\r\n <span class=\"hello-gradient\"\r\n >{{ \"faris.hello\" | translate }}, {{ currentUserDisplayName }}</span\r\n >\r\n <span class=\"welcome-text\">{{\r\n \"faris.welcome-message\" | translate\r\n }}</span>\r\n </div>\r\n }\r\n\r\n <div class=\"results-container\" id=\"results-container\">\r\n <div class=\"pre-defined-questions flex w-full flex-col\">\r\n @if (!showResult) {\r\n @for (agent of agents; track agent?.title) {\r\n <mt-faris-agent-card\r\n class=\"real-content\"\r\n [agent]=\"agent\"\r\n (click)=\"sendQuery(agent.title)\"\r\n ></mt-faris-agent-card>\r\n }\r\n }\r\n\r\n @if (showResult) {\r\n @for (\r\n item of chatHistory;\r\n track item.trace_id || item.message_id || $index\r\n ) {\r\n <mt-faris-message\r\n [item]=\"item\"\r\n [currentUserPhoto]=\"currentUserPhoto\"\r\n [loading]=\"loading\"\r\n [thinkingText]=\"thinkingText\"\r\n (action)=\"takeAction($event.action, $event.item)\"\r\n (canvas)=\"launchCanvas.emit($event)\"\r\n >\r\n </mt-faris-message>\r\n }\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"search-box\">\r\n <form class=\"w-full\" #chatForm=\"ngForm\" (ngSubmit)=\"sendQuery(userInput)\">\r\n <div class=\"input-box\">\r\n <mt-faris-mention-input\r\n [(ngModel)]=\"userInput\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (keydown.enter)=\"sendQuery(userInput)\"\r\n ></mt-faris-mention-input>\r\n\r\n <mt-button\r\n type=\"submit\"\r\n icon=\"communication.send-01\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn faris-btn-lg\"\r\n [disabled]=\"!userInput || !userInput.trim() || loading\"\r\n ></mt-button>\r\n </div>\r\n </form>\r\n\r\n <small>{{ \"faris.input-message\" | translate }}</small>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { FarisTranslatePipe } from '../faris-translate.pipe';\r\nimport { ParseMentionPipe } from '../mentions/mention.pipe';\r\n\r\nexport interface ConversationGroup {\r\n label: string;\r\n conversations: any[];\r\n sortValue?: number;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-faris-chat-history',\r\n standalone: true,\r\n imports: [FarisTranslatePipe, ParseMentionPipe, Button, Icon],\r\n templateUrl: './faris-chat-history.component.html',\r\n styleUrl: './faris-chat-history.component.scss',\r\n})\r\nexport class FarisChatHistoryComponent implements OnChanges {\r\n @Input() userConversations: any[] = [];\r\n @Input() showChatHistory = false;\r\n @Input() selectedConversation: any = null;\r\n\r\n @Output() selectConversation = new EventEmitter<any>();\r\n @Output() deleteConversationHandler = new EventEmitter<{\r\n event: Event;\r\n id: number | string;\r\n }>();\r\n @Output() closeHistory = new EventEmitter<boolean>();\r\n\r\n groupedConversations: ConversationGroup[] = [];\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['userConversations']) {\r\n this.groupedConversations = this.groupConversations(\r\n this.userConversations || [],\r\n );\r\n }\r\n }\r\n\r\n onCloseHistory(): void {\r\n this.closeHistory.emit(true);\r\n }\r\n\r\n onSelectConversation(conversation: any): void {\r\n this.selectConversation.emit(conversation);\r\n }\r\n\r\n onDeleteConversation(event: Event, id: number | string): void {\r\n event.stopPropagation();\r\n this.deleteConversationHandler.emit({ event, id });\r\n }\r\n\r\n private groupConversations(conversations: any[]): ConversationGroup[] {\r\n const normalized = (conversations || []).map((conversation, index) =>\r\n this.normalizeConversation(conversation, index),\r\n );\r\n const sorted = [...normalized].sort(\r\n (a, b) =>\r\n this.resolveConversationTimestamp(b) -\r\n this.resolveConversationTimestamp(a),\r\n );\r\n\r\n const todayGroup: ConversationGroup = { label: 'Today', conversations: [] };\r\n const yesterdayGroup: ConversationGroup = {\r\n label: 'Yesterday',\r\n conversations: [],\r\n };\r\n const thisWeekGroup: ConversationGroup = {\r\n label: 'This Week',\r\n conversations: [],\r\n };\r\n const lastWeekGroup: ConversationGroup = {\r\n label: 'Last Week',\r\n conversations: [],\r\n };\r\n const monthGroups = new Map<string, ConversationGroup>();\r\n\r\n const now = new Date();\r\n const todayStart = this.startOfDay(now).getTime();\r\n const yesterdayStart = this.startOfDay(this.addDays(now, -1)).getTime();\r\n const thisWeekStart = this.startOfWeek(now).getTime();\r\n const lastWeekStart = this.startOfWeek(this.addDays(now, -7)).getTime();\r\n\r\n for (const conversation of sorted) {\r\n const updatedDate = this.resolveConversationDate(conversation) ?? now;\r\n\r\n const updatedStart = this.startOfDay(updatedDate).getTime();\r\n\r\n if (updatedStart === todayStart) {\r\n conversation.displayDate = 'Today';\r\n todayGroup.conversations.push(conversation);\r\n continue;\r\n }\r\n\r\n if (updatedStart === yesterdayStart) {\r\n conversation.displayDate = 'Yesterday';\r\n yesterdayGroup.conversations.push(conversation);\r\n continue;\r\n }\r\n\r\n if (updatedStart >= thisWeekStart) {\r\n conversation.displayDate = this.formatDayMonth(updatedDate);\r\n thisWeekGroup.conversations.push(conversation);\r\n continue;\r\n }\r\n\r\n if (updatedStart >= lastWeekStart) {\r\n conversation.displayDate = this.formatDayMonth(updatedDate);\r\n lastWeekGroup.conversations.push(conversation);\r\n continue;\r\n }\r\n\r\n const monthLabel = this.formatMonthYear(updatedDate);\r\n conversation.displayDate = this.formatDayMonth(updatedDate);\r\n\r\n if (!monthGroups.has(monthLabel)) {\r\n monthGroups.set(monthLabel, {\r\n label: monthLabel,\r\n conversations: [],\r\n sortValue: this.startOfMonth(updatedDate).getTime(),\r\n });\r\n }\r\n\r\n monthGroups.get(monthLabel)?.conversations.push(conversation);\r\n }\r\n\r\n const fixedOrder = [\r\n todayGroup,\r\n yesterdayGroup,\r\n thisWeekGroup,\r\n lastWeekGroup,\r\n ].filter((group) => group.conversations.length > 0);\r\n\r\n const orderedMonthGroups = Array.from(monthGroups.values()).sort(\r\n (a, b) => (b.sortValue ?? 0) - (a.sortValue ?? 0),\r\n );\r\n\r\n return [...fixedOrder, ...orderedMonthGroups];\r\n }\r\n\r\n private formatDayMonth(date: Date): string {\r\n return new Intl.DateTimeFormat('en', {\r\n day: 'numeric',\r\n month: 'short',\r\n }).format(date);\r\n }\r\n\r\n private formatMonthYear(date: Date): string {\r\n return new Intl.DateTimeFormat('en', {\r\n month: 'long',\r\n year: 'numeric',\r\n }).format(date);\r\n }\r\n\r\n private startOfDay(date: Date): Date {\r\n const result = new Date(date);\r\n result.setHours(0, 0, 0, 0);\r\n return result;\r\n }\r\n\r\n private startOfWeek(date: Date): Date {\r\n const result = this.startOfDay(date);\r\n const day = result.getDay();\r\n result.setDate(result.getDate() - day);\r\n return result;\r\n }\r\n\r\n private startOfMonth(date: Date): Date {\r\n const result = this.startOfDay(date);\r\n result.setDate(1);\r\n return result;\r\n }\r\n\r\n private addDays(date: Date, days: number): Date {\r\n const result = new Date(date);\r\n result.setDate(result.getDate() + days);\r\n return result;\r\n }\r\n\r\n private normalizeConversation(conversation: any, index: number): any {\r\n const id =\r\n conversation?.id ??\r\n conversation?.session_id ??\r\n conversation?.sessionId ??\r\n conversation?.conversation_id ??\r\n conversation?.conversationId ??\r\n `conversation-${index}`;\r\n const updatedAt =\r\n conversation?.updated_at ??\r\n conversation?.updatedAt ??\r\n conversation?.last_updated_at ??\r\n conversation?.lastUpdatedAt ??\r\n conversation?.created_at ??\r\n conversation?.createdAt ??\r\n conversation?.timestamp ??\r\n conversation?.date ??\r\n null;\r\n const title =\r\n conversation?.title ??\r\n conversation?.conversation_title ??\r\n conversation?.conversationTitle ??\r\n conversation?.name ??\r\n conversation?.subject ??\r\n '';\r\n\r\n return {\r\n ...conversation,\r\n id: String(id),\r\n updated_at: updatedAt,\r\n title,\r\n };\r\n }\r\n\r\n private resolveConversationDate(conversation: any): Date | null {\r\n const candidate = conversation?.updated_at;\r\n if (!candidate) {\r\n return null;\r\n }\r\n\r\n const date = new Date(candidate);\r\n return Number.isNaN(date.getTime()) ? null : date;\r\n }\r\n\r\n private resolveConversationTimestamp(conversation: any): number {\r\n return this.resolveConversationDate(conversation)?.getTime() ?? 0;\r\n }\r\n}\r\n","<div\r\n class=\"conversations-history\"\r\n [class.closed-chat-history-side]=\"!showChatHistory\"\r\n>\r\n <div class=\"conversations-header\">\r\n <span class=\"conversations-title\">{{\r\n \"faris.chat-history\" | translate\r\n }}</span>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.x-close\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"onCloseHistory()\"\r\n ></mt-button>\r\n </div>\r\n\r\n <div class=\"conversations-list\">\r\n @for (group of groupedConversations; track group.label) {\r\n <div class=\"conversation-group-header\">{{ group.label }}</div>\r\n\r\n @for (conversation of group.conversations; track conversation.id) {\r\n <div\r\n class=\"conversation-item flex w-full cursor-pointer items-center justify-between gap-2 rounded-md p-2\"\r\n (click)=\"onSelectConversation(conversation)\"\r\n [class.active-conversation]=\"\r\n selectedConversation?.id === conversation.id\r\n \"\r\n >\r\n <mt-icon icon=\"communication.message-chat-circle\"></mt-icon>\r\n\r\n <div class=\"conversation-title-group\">\r\n <div class=\"conversation-title\">\r\n {{ (conversation?.title | parseMention) || \" \" }}\r\n </div>\r\n <div class=\"conversation-subtitle\">\r\n {{ conversation.displayDate }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"conversation-actions\">\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.trash-01\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn faris-btn-muted text-red-600\"\r\n [tooltip]=\"'faris.delete' | translate\"\r\n (click)=\"onDeleteConversation($event, conversation?.id)\"\r\n ></mt-button>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n inject,\r\n} from '@angular/core';\r\nimport { animate, style, transition, trigger } from '@angular/animations';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-faris-popup',\r\n standalone: true,\r\n imports: [Button],\r\n templateUrl: './minimizable-popup.component.html',\r\n styleUrl: './minimizable-popup.component.scss',\r\n animations: [\r\n trigger('slideInOut', [\r\n transition(\r\n ':enter',\r\n [\r\n style({ transform: '{{enterTransform}}' }),\r\n animate(\r\n '300ms cubic-bezier(0.4,0,0.2,1)',\r\n style({ transform: 'translateX(0)' }),\r\n ),\r\n ],\r\n { params: { enterTransform: 'translateX(100%)' } },\r\n ),\r\n transition(\r\n ':leave',\r\n [\r\n animate(\r\n '300ms cubic-bezier(0.4,0,0.2,1)',\r\n style({ transform: '{{leaveTransform}}' }),\r\n ),\r\n ],\r\n { params: { leaveTransform: 'translateX(100%)' } },\r\n ),\r\n ]),\r\n ],\r\n})\r\nexport class MinimizablePopupComponent implements OnInit, OnDestroy {\r\n @Input() title = '';\r\n @Input() maximized = false;\r\n @Output() closed = new EventEmitter<boolean>();\r\n\r\n direction: 'ltr' | 'rtl' = 'ltr';\r\n isClosing = false;\r\n\r\n private readonly document = inject(DOCUMENT);\r\n\r\n ngOnInit(): void {\r\n this.document.body.style.overflow = 'hidden';\r\n this.direction =\r\n this.document.documentElement.dir === 'rtl' ? 'rtl' : 'ltr';\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.document.body.style.overflow = 'auto';\r\n }\r\n\r\n get enterTransform(): string {\r\n return this.direction === 'rtl' ? 'translateX(-100%)' : 'translateX(100%)';\r\n }\r\n\r\n get leaveTransform(): string {\r\n return this.direction === 'rtl' ? 'translateX(-100%)' : 'translateX(100%)';\r\n }\r\n\r\n close(): void {\r\n this.isClosing = true;\r\n }\r\n\r\n onAnimationDone(event: any): void {\r\n if (event.toState === 'void' && this.isClosing) {\r\n this.closed.emit(true);\r\n }\r\n }\r\n}\r\n","<div class=\"custom-window-backdrop\"></div>\r\n@if (!isClosing) {\r\n <div\r\n class=\"custom-window-modal\"\r\n [@slideInOut]=\"{\r\n value: '',\r\n params: {\r\n enterTransform: enterTransform,\r\n leaveTransform: leaveTransform,\r\n },\r\n }\"\r\n (@slideInOut.done)=\"onAnimationDone($event)\"\r\n >\r\n <ng-content select=\"[panelCanvas]\"></ng-content>\r\n <div class=\"custom-window-container\" [class.maximized]=\"maximized\">\r\n <ng-content select=\"[panelSidebar]\"></ng-content>\r\n <div class=\"resizable-panel\">\r\n <div class=\"panel-content\">\r\n <div\r\n class=\"modal-header flex items-center justify-between p-4 border-bottom-1 border-b border-surface-300\"\r\n >\r\n <h5 class=\"modal-title custom-window-title\">\r\n <ng-content select=\"[panelTitle]\"></ng-content>\r\n </h5>\r\n <div class=\"modal-controls flex items-center\">\r\n <ng-content select=\"[panelActions]\"></ng-content>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.x-close\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"close()\"\r\n ></mt-button>\r\n </div>\r\n </div>\r\n <div class=\"modal-body w-full\">\r\n <ng-content select=\"[panelChat]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n inject,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { Subscription } from 'rxjs';\r\nimport { FarisCanvasComponent } from './faris-canvas/faris-canvas.component';\r\nimport { FarisChatComponent } from './faris-chat/faris-chat.component';\r\nimport { FarisChatHistoryComponent } from './faris-chat-history/faris-chat-history.component';\r\nimport { FarisMessage } from './faris.model';\r\nimport { FarisService } from './faris.service';\r\nimport { FarisTranslatePipe } from './faris-translate.pipe';\r\nimport { ParseMentionPipe } from './mentions/mention.pipe';\r\nimport { MinimizablePopupComponent } from './minimizable-popup/minimizable-popup.component';\r\n\r\nexport interface CanvasData {\r\n visible: boolean;\r\n message: FarisMessage | null;\r\n conversationId: string | null;\r\n}\r\n\r\nconst initialCanvasData: CanvasData = {\r\n visible: false,\r\n message: null,\r\n conversationId: null,\r\n};\r\n\r\n@Component({\r\n selector: 'mt-faris',\r\n standalone: true,\r\n imports: [\r\n Button,\r\n MinimizablePopupComponent,\r\n ParseMentionPipe,\r\n FarisTranslatePipe,\r\n FarisCanvasComponent,\r\n FarisChatHistoryComponent,\r\n FarisChatComponent,\r\n ],\r\n templateUrl: './faris.component.html',\r\n styleUrl: './faris.component.scss',\r\n})\r\nexport class FarisComponent implements OnDestroy, OnChanges {\r\n @Input() showChatBot = false;\r\n @Output() showChatBotChange = new EventEmitter<boolean>();\r\n\r\n showChatHistory = false;\r\n userConversations: any[] = [];\r\n selectedConversation: any = null;\r\n canvasData: CanvasData = initialCanvasData;\r\n maximized = false;\r\n\r\n private subscription?: Subscription;\r\n private readonly subscriptions = new Subscription();\r\n private readonly farisService = inject(FarisService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n\r\n private getUserDetails(): void {\r\n this.subscriptions.add(this.farisService.getUserDetails().subscribe());\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!changes['showChatBot']) {\r\n return;\r\n }\r\n\r\n if (changes['showChatBot'].currentValue) {\r\n this.onChatOpened();\r\n return;\r\n }\r\n\r\n this.onChatClosed();\r\n }\r\n\r\n launchCanvas(item: FarisMessage): void {\r\n this.canvasData = {\r\n visible: true,\r\n message: item,\r\n conversationId: this.selectedConversation?.id ?? null,\r\n };\r\n }\r\n\r\n onDeleteConversationHandler({\r\n event,\r\n id,\r\n }: {\r\n event: Event;\r\n id: string | number;\r\n }): void {\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleteConversation(id);\r\n },\r\n reject: () => {},\r\n });\r\n }\r\n\r\n private deleteConversation(id: string | number): void {\r\n this.subscriptions.add(\r\n this.farisService.deleteConversation(String(id)).subscribe(() => {\r\n if (id === this.selectedConversation?.id) {\r\n this.openNewChat();\r\n }\r\n\r\n setTimeout(() => {\r\n this.getUserDetails();\r\n }, 250);\r\n }),\r\n );\r\n }\r\n\r\n selectConversation(conversation: any | null): void {\r\n if (this.selectedConversation !== conversation) {\r\n this.selectedConversation = conversation;\r\n this.canvasData = initialCanvasData;\r\n }\r\n }\r\n\r\n onSelectConversation(conversation: any): void {\r\n this.selectConversation(conversation);\r\n }\r\n\r\n onCloseHistory(): void {\r\n this.showChatHistory = false;\r\n }\r\n\r\n toggleChatHistory(): void {\r\n this.showChatHistory = !this.showChatHistory;\r\n if (this.showChatHistory) {\r\n this.getUserDetails();\r\n }\r\n }\r\n\r\n openFarisChat(): void {\r\n this.showChatBot = !this.showChatBot;\r\n this.showChatBotChange.emit(this.showChatBot);\r\n\r\n if (this.showChatBot) {\r\n this.onChatOpened();\r\n return;\r\n }\r\n\r\n this.onChatClosed();\r\n }\r\n\r\n getUniqueArrayByProperty<T>(array: T[]): T[] {\r\n const uniqueMap = new Map<string, T>();\r\n array.forEach((item: any, index) => {\r\n const key =\r\n item?.id ??\r\n item?.session_id ??\r\n item?.sessionId ??\r\n item?.conversation_id ??\r\n item?.conversationId ??\r\n `conversation-${index}`;\r\n uniqueMap.set(String(key), item as T);\r\n });\r\n\r\n return Array.from(uniqueMap.values());\r\n }\r\n\r\n closeChatBot(): void {\r\n this.showChatBot = false;\r\n this.showChatBotChange.emit(false);\r\n this.onChatClosed();\r\n this.selectedConversation = null;\r\n this.maximized = false;\r\n this.canvasData = initialCanvasData;\r\n }\r\n\r\n openNewChat(): void {\r\n this.selectConversation(null);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription && !this.subscription.closed) {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n if (!this.subscriptions.closed) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n\r\n private onChatOpened(): void {\r\n this.getUserDetails();\r\n\r\n if (this.subscription && !this.subscription.closed) {\r\n return;\r\n }\r\n\r\n this.subscriptions.add(\r\n (this.subscription = this.farisService.conversations.subscribe(\r\n (value) => {\r\n if (!value.length) {\r\n this.selectConversation(null);\r\n }\r\n\r\n this.userConversations = this.getUniqueArrayByProperty(value);\r\n },\r\n )),\r\n );\r\n }\r\n\r\n private onChatClosed(): void {\r\n this.farisService.conversations.next([]);\r\n this.showChatHistory = false;\r\n this.userConversations = [];\r\n this.farisService.clearSession();\r\n\r\n if (this.subscription && !this.subscription.closed) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","@if (showChatBot) {\r\n <mt-faris-popup\r\n class=\"chat-bot-popup\"\r\n [maximized]=\"maximized && !canvasData.visible\"\r\n (closed)=\"closeChatBot()\"\r\n >\r\n <div panelTitle class=\"faris-title-container\">\r\n <div class=\"gemini-ic has-hover\">\r\n <svg\r\n focusable=\"false\"\r\n viewBox=\"0 -960 960 960\"\r\n height=\"28\"\r\n width=\"28\"\r\n class=\"EiVpKc aoH\"\r\n >\r\n <path\r\n d=\"M480-80q2,0 2-2q0-82 31-154t85-126t126-85t154-31q2,0 2-2t-2-2q-82,0-154-31T598-598T513-724T482-878q0-2-2-2t-2,2q0,82-31,154T362-598T236-513T82-482q-2,0-2,2t2,2q82,0 154,31t126,85t85,126T478-82q0,2 2,2Z\"\r\n ></path>\r\n </svg>\r\n </div>\r\n <div class=\"faris-title-group\">\r\n <div class=\"faris-title\">Ask Faris</div>\r\n <div\r\n class=\"faris-subtitle\"\r\n [title]=\"(selectedConversation?.title | parseMention) ?? ''\"\r\n >\r\n {{\r\n (selectedConversation?.title | parseMention) ||\r\n (\"faris.new-conversation\" | translate)\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-container panelActions>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.plus\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"openNewChat()\"\r\n ></mt-button>\r\n <mt-button\r\n type=\"button\"\r\n [icon]=\"maximized ? 'layout.minimize-02' : 'layout.maximize-02'\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"maximized = !maximized\"\r\n ></mt-button>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"custom.history-sp\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"toggleChatHistory()\"\r\n ></mt-button>\r\n </ng-container>\r\n\r\n @if (canvasData.visible) {\r\n <mt-faris-canvas\r\n [message]=\"canvasData.message\"\r\n [conversationId]=\"canvasData.conversationId\"\r\n class=\"flex-1\"\r\n panelCanvas\r\n (closed)=\"canvasData.visible = false\"\r\n ></mt-faris-canvas>\r\n }\r\n\r\n <mt-faris-chat-history\r\n panelSidebar\r\n [userConversations]=\"userConversations\"\r\n [showChatHistory]=\"showChatHistory\"\r\n [selectedConversation]=\"selectedConversation\"\r\n (selectConversation)=\"onSelectConversation($event)\"\r\n (deleteConversationHandler)=\"onDeleteConversationHandler($event)\"\r\n (closeHistory)=\"onCloseHistory()\"\r\n >\r\n </mt-faris-chat-history>\r\n\r\n <div panelChat class=\"flex h-full w-full\">\r\n <mt-faris-chat\r\n class=\"w-full\"\r\n (launchCanvas)=\"launchCanvas($event)\"\r\n (selectConversation)=\"onSelectConversation($event)\"\r\n [selectedConversation]=\"selectedConversation\"\r\n >\r\n </mt-faris-chat>\r\n </div>\r\n </mt-faris-popup>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"masterteam-faris.mjs","sources":["../../../../packages/masterteam/faris/src/lib/faris/faris-translate.pipe.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-auth.token.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-url.util.ts","../../../../packages/masterteam/faris/src/lib/faris/faris.service.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-canvas/faris-canvas.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-canvas/faris-canvas.component.html","../../../../packages/masterteam/faris/src/lib/faris/agent-card/agent-card.component.ts","../../../../packages/masterteam/faris/src/lib/faris/agent-card/agent-card.component.html","../../../../packages/masterteam/faris/src/lib/faris/faris-markdown.pipe.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-message-actions/faris-message-actions.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-message-actions/faris-message-actions.component.html","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention.pipe.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-message/faris-message.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-message/faris-message.component.html","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention-api.service.ts","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention-list/mention-list.component.ts","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention-list/mention-list.component.html","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention-input/mention-input.component.ts","../../../../packages/masterteam/faris/src/lib/faris/mentions/mention-input/mention-input.component.html","../../../../packages/masterteam/faris/src/lib/faris/faris-chat/faris-chat.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-chat/faris-chat.component.html","../../../../packages/masterteam/faris/src/lib/faris/faris-chat-history/faris-chat-history.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris-chat-history/faris-chat-history.component.html","../../../../packages/masterteam/faris/src/lib/faris/minimizable-popup/minimizable-popup.component.ts","../../../../packages/masterteam/faris/src/lib/faris/minimizable-popup/minimizable-popup.component.html","../../../../packages/masterteam/faris/src/lib/faris/faris.component.ts","../../../../packages/masterteam/faris/src/lib/faris/faris.component.html","../../../../packages/masterteam/faris/src/masterteam-faris.ts"],"sourcesContent":["import { Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\n@Pipe({\r\n name: 'translate',\r\n standalone: true,\r\n pure: false,\r\n})\r\nexport class FarisTranslatePipe implements PipeTransform {\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n transform(\r\n key: string | null | undefined,\r\n params?: Record<string, unknown>,\r\n ): string {\r\n if (!key) {\r\n return '';\r\n }\r\n\r\n return this.transloco.translate(key, params);\r\n }\r\n}\r\n","export interface FarisAuthState {\r\n user: any;\r\n token: string;\r\n}\r\n\r\nfunction normalizeAuthUser(rawUser: any): any {\r\n if (!rawUser || typeof rawUser !== 'object') {\r\n return null;\r\n }\r\n\r\n const details = rawUser?.user ?? rawUser?.data?.user ?? rawUser;\r\n const resolvedId =\r\n details?.id ??\r\n details?.userId ??\r\n details?.user_id ??\r\n rawUser?.id ??\r\n rawUser?.userId ??\r\n rawUser?.user_id ??\r\n '';\r\n const resolvedDisplayName =\r\n details?.displayName ??\r\n details?.name ??\r\n details?.userName ??\r\n details?.username ??\r\n '';\r\n const resolvedPhoto = details?.photo ?? details?.image ?? null;\r\n\r\n return {\r\n ...rawUser,\r\n user: {\r\n ...details,\r\n id: resolvedId ? String(resolvedId) : '',\r\n displayName: resolvedDisplayName,\r\n photo: resolvedPhoto,\r\n },\r\n };\r\n}\r\n\r\nexport function resolveFarisAuthFromLocalStorage(): FarisAuthState {\r\n try {\r\n const raw = localStorage.getItem('auth');\r\n if (!raw) {\r\n return { user: null, token: '' };\r\n }\r\n\r\n const parsed = JSON.parse(raw);\r\n const user = normalizeAuthUser(parsed?.user ?? parsed ?? null);\r\n const token =\r\n (typeof parsed?.token === 'string' && parsed.token) ||\r\n (typeof parsed?.accessToken === 'string' && parsed.accessToken) ||\r\n (typeof user?.token === 'string' && user.token) ||\r\n (typeof user?.accessToken === 'string' && user.accessToken) ||\r\n (typeof user?.data?.token === 'string' && user.data.token) ||\r\n '';\r\n\r\n return { user, token };\r\n } catch {\r\n return { user: null, token: '' };\r\n }\r\n}\r\n","const DEFAULT_FARIS_URL = 'http://34.166.126.184:8004/';\r\n\r\nexport function resolveFarisUrlFromLocalStorage(\r\n fallbackUrl: string = DEFAULT_FARIS_URL,\r\n): string {\r\n const directValue = localStorage.getItem('farisUrl');\r\n if (directValue?.trim()) {\r\n return directValue;\r\n }\r\n\r\n const configValue = localStorage.getItem('config');\r\n if (!configValue) {\r\n return fallbackUrl;\r\n }\r\n\r\n try {\r\n const parsed = JSON.parse(configValue);\r\n const farisApiUrl =\r\n parsed?.config?.farisApiUrl ||\r\n parsed?.config?.basicConfig?.farisApiUrl ||\r\n parsed?.farisApiUrl ||\r\n parsed?.basicConfig?.farisApiUrl;\r\n\r\n if (typeof farisApiUrl === 'string' && farisApiUrl.trim()) {\r\n return farisApiUrl;\r\n }\r\n } catch {\r\n // ignore parse errors and use fallback\r\n }\r\n\r\n return fallbackUrl;\r\n}\r\n","import { HttpClient, HttpContext } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { REQUEST_CONTEXT } from '@masterteam/components';\r\nimport { ToastService } from '@masterteam/components/toast';\r\nimport { BehaviorSubject, EMPTY, Observable, of } from 'rxjs';\r\nimport { filter, map, tap } from 'rxjs/operators';\r\nimport { resolveFarisAuthFromLocalStorage } from './faris-auth.token';\r\nimport { FarisMessage } from './faris.model';\r\nimport { resolveFarisUrlFromLocalStorage } from './faris-url.util';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class FarisService {\r\n private sessionId: string | null = null;\r\n private baseUrl = '';\r\n private requestContext = new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: false,\r\n });\r\n\r\n activeLevelMenuItem = '';\r\n activeModuleId: string | null = null;\r\n mySpaceActiveTab = '';\r\n kpiTemplateId = '';\r\n kpiSchemaId = '';\r\n initiativesTemplateId = '';\r\n initiativesSchemaId = '';\r\n strategyTemplateId = '';\r\n\r\n readonly conversations = new BehaviorSubject<any[]>([]);\r\n\r\n private readonly http = inject(HttpClient);\r\n private readonly toast = inject(ToastService);\r\n private readonly router = inject(Router, { optional: true });\r\n\r\n constructor() {\r\n const farisUrl = resolveFarisUrlFromLocalStorage();\r\n this.baseUrl = this.normalizeBaseUrl(farisUrl);\r\n\r\n if (this.router) {\r\n this.subscribeToRouterChanges();\r\n this.fillValuesFromRoute(this.router.routerState.snapshot.url);\r\n }\r\n }\r\n\r\n get currentUser(): any {\r\n return resolveFarisAuthFromLocalStorage().user;\r\n }\r\n\r\n private get currentToken(): string {\r\n const localStorageToken = resolveFarisAuthFromLocalStorage().token;\r\n if (localStorageToken) {\r\n return localStorageToken;\r\n }\r\n\r\n return this.currentUser?.token ?? '';\r\n }\r\n\r\n private get currentUserId(): string {\r\n const details = this.resolveCurrentUserDetails();\r\n const resolvedId =\r\n details?.id ??\r\n details?.userId ??\r\n details?.user_id ??\r\n this.currentUser?.id ??\r\n this.currentUser?.userId ??\r\n this.currentUser?.user_id;\r\n\r\n return resolvedId == null ? '' : String(resolvedId);\r\n }\r\n\r\n private get currentUserName(): string {\r\n const details = this.resolveCurrentUserDetails();\r\n return (\r\n details?.displayName ??\r\n details?.name ??\r\n details?.userName ??\r\n details?.username ??\r\n ''\r\n );\r\n }\r\n\r\n private normalizeBaseUrl(url: string): string {\r\n return url.endsWith('/') ? url.slice(0, -1) : url;\r\n }\r\n\r\n private subscribeToRouterChanges(): void {\r\n if (!this.router) {\r\n return;\r\n }\r\n\r\n this.router.events\r\n .pipe(\r\n filter(\r\n (event): event is NavigationEnd => event instanceof NavigationEnd,\r\n ),\r\n )\r\n .subscribe((event: NavigationEnd) => {\r\n this.fillValuesFromRoute(event.urlAfterRedirects);\r\n });\r\n }\r\n\r\n private fillValuesFromRoute(currentUrl: string): void {\r\n this.mySpaceActiveTab = '';\r\n this.kpiTemplateId = '';\r\n this.kpiSchemaId = '';\r\n this.initiativesTemplateId = '';\r\n this.initiativesSchemaId = '';\r\n this.strategyTemplateId = '';\r\n\r\n if (currentUrl.includes('/tasks-center')) {\r\n this.getMySpaceValuesFromUrl(currentUrl);\r\n }\r\n if (currentUrl.includes('/kpis')) {\r\n this.getKpisValuesFromUrl(currentUrl);\r\n }\r\n if (currentUrl.includes('/initiatives')) {\r\n this.getInitiativesValuesFromUrl(currentUrl);\r\n }\r\n if (currentUrl.includes('/strategy')) {\r\n this.getStrategyValuesFromUrl(currentUrl);\r\n }\r\n }\r\n\r\n getLevelValuesFromUrl(currentUrl: string): void {\r\n const splitUrl = currentUrl.split('/');\r\n const thirdSegment = splitUrl[3];\r\n const fourthSegment = splitUrl[4];\r\n\r\n this.activeLevelMenuItem = thirdSegment?.includes('?')\r\n ? thirdSegment.split('?')[0]\r\n : thirdSegment;\r\n\r\n this.activeModuleId = Number.isNaN(Number(fourthSegment))\r\n ? null\r\n : fourthSegment;\r\n\r\n if (splitUrl.includes('log')) {\r\n const index = splitUrl.findIndex((item) => item === 'log');\r\n this.activeLevelMenuItem = '';\r\n for (let i = index; i < splitUrl.length; i += 1) {\r\n this.activeLevelMenuItem += `${splitUrl[i]}${i === splitUrl.length - 1 ? '' : '/'}`;\r\n }\r\n }\r\n }\r\n\r\n getMySpaceValuesFromUrl(currentUrl: string): void {\r\n const splitUrl = currentUrl.split('/');\r\n if (splitUrl[2]) {\r\n this.mySpaceActiveTab = splitUrl[2].includes('?')\r\n ? splitUrl[2].split('?')[0]\r\n : splitUrl[2];\r\n }\r\n }\r\n\r\n getKpisValuesFromUrl(currentUrl: string): void {\r\n const splitUrl = currentUrl.split('/');\r\n if (splitUrl[3]) {\r\n this.kpiTemplateId = splitUrl[2].includes('?')\r\n ? splitUrl[2].split('?')[0]\r\n : splitUrl[2];\r\n this.kpiSchemaId = splitUrl[3].includes('?')\r\n ? splitUrl[3].split('?')[0]\r\n : splitUrl[3];\r\n }\r\n }\r\n\r\n getInitiativesValuesFromUrl(currentUrl: string): void {\r\n const splitUrl = currentUrl.split('/');\r\n if (splitUrl[3]) {\r\n this.initiativesTemplateId = splitUrl[2].includes('?')\r\n ? splitUrl[2].split('?')[0]\r\n : splitUrl[2];\r\n this.initiativesSchemaId = splitUrl[3].includes('?')\r\n ? splitUrl[3].split('?')[0]\r\n : splitUrl[3];\r\n }\r\n }\r\n\r\n getStrategyValuesFromUrl(currentUrl: string): void {\r\n const splitUrl = currentUrl.split('/');\r\n if (splitUrl[3]) {\r\n this.strategyTemplateId = splitUrl[2].includes('?')\r\n ? splitUrl[2].split('?')[0]\r\n : splitUrl[2];\r\n }\r\n }\r\n\r\n extractCanvasJson(markdown: string | undefined): object | null {\r\n if (!markdown) {\r\n return null;\r\n }\r\n\r\n const regex = /```canvas\\s*([\\s\\S]*?)\\s*```/;\r\n const match = markdown.match(regex);\r\n\r\n if (!match?.[1]) {\r\n return null;\r\n }\r\n\r\n try {\r\n return JSON.parse(match[1].trim());\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n generateIframUrl(\r\n message: FarisMessage | null,\r\n conversationId: string | null,\r\n ): string {\r\n const canvasJson: any = this.extractCanvasJson(message?.content);\r\n if (!canvasJson) {\r\n return '';\r\n }\r\n\r\n switch (canvasJson.agent) {\r\n case 'kpi-data-agent':\r\n return `${this.baseUrl}/agents/quality-guard?id=${canvasJson?.payload?.id}&name=${canvasJson?.payload?.name}&description=${canvasJson?.payload?.description}&session_id=${conversationId}&auth_token=${this.currentToken}&router_message_id=${message?.message_id}`;\r\n case 'kpi-benchmark-agent':\r\n return `${this.baseUrl}/agents/benchmarking-agent?id=${canvasJson?.payload?.id}&name=${canvasJson?.payload?.name}&session_id=${conversationId}&auth_token=${this.currentToken}&router_message_id=${message?.message_id}`;\r\n case 'kpi-summary-agent':\r\n return `${this.baseUrl}/agents/executive-summary?id=${canvasJson?.payload?.id}&name=${canvasJson?.payload?.name}&session_id=${conversationId}&auth_token=${this.currentToken}&router_message_id=${message?.message_id}`;\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n sendMessage(message: string): Observable<any> {\r\n const url = `${this.baseUrl}/chat`;\r\n const body: any = {\r\n user_message: message,\r\n session_id: this.sessionId,\r\n user_name: this.currentUserName,\r\n user_id: this.currentUserId,\r\n current_view: this.buildCurrentView(),\r\n };\r\n\r\n return this.http.post(url, body, { context: this.requestContext }).pipe(\r\n map((res: any) => {\r\n if (res?.data && typeof res.data === 'object') {\r\n return {\r\n ...res,\r\n ...res.data,\r\n };\r\n }\r\n\r\n return res;\r\n }),\r\n tap((res: any) => {\r\n if (res?.session_id) {\r\n this.sessionId = res.session_id;\r\n setTimeout(() => {\r\n this.getUserDetails().subscribe();\r\n }, 150);\r\n }\r\n }),\r\n );\r\n }\r\n\r\n clearSession(): void {\r\n this.sessionId = null;\r\n }\r\n\r\n getUserDetails(): Observable<any> {\r\n if (!this.currentUserId) {\r\n this.conversations.next([]);\r\n return of({ conversations: [] });\r\n }\r\n\r\n const url = `${this.baseUrl}/users/${this.currentUserId}`;\r\n return this.http.get<any>(url, { context: this.requestContext }).pipe(\r\n map((res) => {\r\n const conversations = this.resolveConversationsPayload(res).map(\r\n (conversation) => this.normalizeConversation(conversation),\r\n );\r\n return { conversations };\r\n }),\r\n tap((res) => {\r\n this.conversations.next(res.conversations);\r\n }),\r\n );\r\n }\r\n\r\n getConversationDetails(sessionId: string): Observable<any> {\r\n this.sessionId = sessionId;\r\n const url = `${this.baseUrl}/conversations/${sessionId}`;\r\n return this.http\r\n .get<any>(url, { context: this.requestContext })\r\n .pipe(\r\n map((res) =>\r\n this.resolveConversationMessagesPayload(res).map((item) =>\r\n this.normalizeConversationMessage(item),\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n deleteConversation(sessionId: string): Observable<any> {\r\n const url = `${this.baseUrl}/conversations/${sessionId}`;\r\n return this.http.delete(url, { context: this.requestContext });\r\n }\r\n\r\n copyToClipboard(content: string): void {\r\n if (!content || typeof content !== 'string') {\r\n this.toast.error('Failed to copy content');\r\n return;\r\n }\r\n\r\n navigator.clipboard\r\n .writeText(content)\r\n .then(() => {\r\n this.toast.success('Content copied to clipboard');\r\n })\r\n .catch(() => {\r\n this.toast.error('Failed to copy content');\r\n });\r\n }\r\n\r\n downloadDocument(item: FarisMessage): Observable<Blob> {\r\n const url = `${this.baseUrl}/download-docx/${item.message_id}`;\r\n return this.http\r\n .get(url, { responseType: 'blob', context: this.requestContext })\r\n .pipe(\r\n tap((res) => {\r\n const blobUrl = window.URL.createObjectURL(res);\r\n const link = document.createElement('a');\r\n link.href = blobUrl;\r\n link.download = `faris-response-${item.message_id}.docx`;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(blobUrl);\r\n }),\r\n );\r\n }\r\n\r\n sendFeedback(\r\n messageId: string,\r\n score: number,\r\n traceId?: string,\r\n feedback?: string,\r\n ): Observable<any> {\r\n if (!this.sessionId) {\r\n return EMPTY;\r\n }\r\n\r\n const url = `${this.baseUrl}/feedback`;\r\n const body: any = {\r\n session_id: this.sessionId,\r\n message_id: messageId,\r\n score,\r\n trace_id: traceId,\r\n feedback,\r\n };\r\n\r\n return this.http.post(url, body, { context: this.requestContext }).pipe(\r\n tap(() => {\r\n this.getUserDetails().subscribe();\r\n }),\r\n );\r\n }\r\n\r\n generate(): string {\r\n return this.generator();\r\n }\r\n\r\n private buildCurrentView(): Record<string, unknown> {\r\n let currentView: Record<string, unknown> = { page: 'Home' };\r\n\r\n if (this.mySpaceActiveTab) {\r\n currentView = {\r\n page: 'tasks-center',\r\n Module:\r\n this.mySpaceActiveTab === 'Support'\r\n ? 'escalation'\r\n : this.mySpaceActiveTab.toLowerCase(),\r\n };\r\n }\r\n\r\n if (this.kpiSchemaId && this.kpiTemplateId) {\r\n currentView = {\r\n page: 'kpis',\r\n schemaId: this.kpiSchemaId,\r\n templateId: this.kpiTemplateId,\r\n };\r\n }\r\n\r\n if (this.initiativesTemplateId && this.initiativesSchemaId) {\r\n currentView = {\r\n page: 'initiatives',\r\n schemaId: this.initiativesSchemaId,\r\n templateId: this.initiativesTemplateId,\r\n };\r\n }\r\n\r\n if (this.strategyTemplateId) {\r\n currentView = {\r\n page: 'strategy',\r\n templateId: this.strategyTemplateId,\r\n };\r\n }\r\n\r\n if (this.activeModuleId) {\r\n currentView['ModuleId'] = this.activeModuleId;\r\n }\r\n\r\n return currentView;\r\n }\r\n\r\n private resolveCurrentUserDetails(): any {\r\n const user = this.currentUser;\r\n return user?.user ?? user?.data?.user ?? user ?? null;\r\n }\r\n\r\n private resolveConversationsPayload(res: any): any[] {\r\n const candidates = [\r\n res,\r\n res?.conversations,\r\n res?.data?.conversations,\r\n res?.data?.items,\r\n res?.data,\r\n res?.result?.conversations,\r\n res?.result,\r\n res?.payload?.conversations,\r\n res?.payload,\r\n ];\r\n\r\n for (const candidate of candidates) {\r\n if (Array.isArray(candidate)) {\r\n return candidate;\r\n }\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private normalizeConversation(conversation: any): any {\r\n const resolvedId =\r\n conversation?.id ??\r\n conversation?.session_id ??\r\n conversation?.sessionId ??\r\n conversation?.conversation_id ??\r\n conversation?.conversationId;\r\n const resolvedUpdatedAt =\r\n conversation?.updated_at ??\r\n conversation?.updatedAt ??\r\n conversation?.last_updated_at ??\r\n conversation?.lastUpdatedAt ??\r\n conversation?.created_at ??\r\n conversation?.createdAt ??\r\n conversation?.timestamp ??\r\n conversation?.date ??\r\n null;\r\n const resolvedTitle =\r\n conversation?.title ??\r\n conversation?.conversation_title ??\r\n conversation?.conversationTitle ??\r\n conversation?.name ??\r\n conversation?.subject ??\r\n '';\r\n\r\n return {\r\n ...conversation,\r\n id: resolvedId == null ? '' : String(resolvedId),\r\n updated_at: resolvedUpdatedAt,\r\n title: resolvedTitle,\r\n };\r\n }\r\n\r\n private resolveConversationMessagesPayload(res: any): any[] {\r\n const candidates = [\r\n res,\r\n res?.messages,\r\n res?.conversation,\r\n res?.data?.messages,\r\n res?.data?.conversation,\r\n res?.data,\r\n res?.result?.messages,\r\n res?.result,\r\n res?.payload?.messages,\r\n res?.payload,\r\n ];\r\n\r\n for (const candidate of candidates) {\r\n if (Array.isArray(candidate)) {\r\n return candidate;\r\n }\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private normalizeConversationMessage(item: any): any {\r\n const normalizedRole = this.resolveMessageRole(item);\r\n return {\r\n ...item,\r\n role: normalizedRole,\r\n content: item?.content ?? item?.message ?? item?.text ?? '',\r\n message_id:\r\n item?.message_id ??\r\n item?.messageId ??\r\n item?.id ??\r\n item?.router_message_id,\r\n trace_id: item?.trace_id ?? item?.traceId,\r\n score: item?.score ?? null,\r\n feedback: item?.feedback ?? null,\r\n };\r\n }\r\n\r\n private resolveMessageRole(item: any): 'user' | 'assistant' {\r\n const role =\r\n item?.role ?? item?.sender ?? item?.messageRole ?? item?.message_role;\r\n\r\n if (role === 'user' || role === 'assistant') {\r\n return role;\r\n }\r\n\r\n if (typeof role === 'string') {\r\n const normalized = role.toLowerCase();\r\n if (\r\n normalized.includes('assistant') ||\r\n normalized.includes('bot') ||\r\n normalized.includes('ai') ||\r\n normalized.includes('system')\r\n ) {\r\n return 'assistant';\r\n }\r\n }\r\n\r\n if (item?.is_user === true || item?.fromUser === true) {\r\n return 'user';\r\n }\r\n\r\n return 'assistant';\r\n }\r\n\r\n private generator(): string {\r\n return `${this.s4()}${this.s4()}-${this.s4()}-${this.s4()}-${this.s4()}-${this.s4()}${this.s4()}${this.s4()}`;\r\n }\r\n\r\n private s4(): string {\r\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n inject,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { FarisTranslatePipe } from '../faris-translate.pipe';\r\nimport { FarisMessage } from '../faris.model';\r\nimport { FarisService } from '../faris.service';\r\n\r\n@Component({\r\n selector: 'mt-faris-canvas',\r\n standalone: true,\r\n imports: [FarisTranslatePipe, Button],\r\n templateUrl: './faris-canvas.component.html',\r\n styleUrl: './faris-canvas.component.scss',\r\n})\r\nexport class FarisCanvasComponent implements OnInit, OnChanges {\r\n @Input() message: FarisMessage | null = null;\r\n @Input() conversationId: string | null = null;\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n loading = true;\r\n iframeUrl: SafeResourceUrl | null = null;\r\n\r\n private readonly farisService = inject(FarisService);\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n ngOnInit(): void {\r\n this.setIframeUrl();\r\n this.loading = true;\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.setIframeUrl();\r\n this.loading = true;\r\n }\r\n\r\n onIframeLoad(): void {\r\n this.loading = false;\r\n }\r\n\r\n closeCanvas(): void {\r\n this.closed.emit();\r\n }\r\n\r\n private setIframeUrl(): void {\r\n const url = this.farisService.generateIframUrl(\r\n this.message,\r\n this.conversationId,\r\n );\r\n this.iframeUrl = url\r\n ? this.sanitizer.bypassSecurityTrustResourceUrl(url)\r\n : null;\r\n }\r\n}\r\n","@if (iframeUrl) {\r\n <div class=\"faris-canvas-frame\">\r\n <div class=\"faris-canvas-frame-header\">\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.x-close\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n aria-label=\"Close Canvas\"\r\n (click)=\"closeCanvas()\"\r\n ></mt-button>\r\n </div>\r\n\r\n <div class=\"faris-canvas-iframe-container\">\r\n @if (loading) {\r\n <div class=\"iframe-loading\">\r\n <div\r\n class=\"h-6 w-6 animate-spin rounded-full border-2 border-slate-300 border-t-[var(--primary-color)]\"\r\n ></div>\r\n </div>\r\n }\r\n\r\n <iframe\r\n [src]=\"iframeUrl\"\r\n width=\"100%\"\r\n height=\"100vh\"\r\n frameborder=\"0\"\r\n allowfullscreen\r\n (load)=\"onIframeLoad()\"\r\n ></iframe>\r\n </div>\r\n </div>\r\n} @else {\r\n <div class=\"faris-canvas-empty p-4 text-sm text-slate-600\">\r\n {{ \"faris.unable-to-load-content\" | translate }}\r\n </div>\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'mt-faris-agent-card',\r\n standalone: true,\r\n templateUrl: './agent-card.component.html',\r\n styleUrl: './agent-card.component.scss',\r\n})\r\nexport class AgentCardComponent {\r\n @Input() agent: any;\r\n}\r\n","<div\r\n class=\"flex cursor-pointer items-center gap-3 rounded-md border border-slate-200 bg-slate-50 px-2 py-2 transition hover:bg-slate-100\"\r\n [style.border-color]=\"agent?.color || null\"\r\n>\r\n <img\r\n class=\"h-10 w-10 rounded object-contain p-1\"\r\n [src]=\"agent?.icon\"\r\n alt=\"\"\r\n />\r\n <div class=\"text-sm leading-5\">\r\n <strong class=\"block text-slate-900\">{{ agent?.title }}</strong>\r\n <p class=\"m-0 text-slate-600\">{{ agent?.desc }}</p>\r\n </div>\r\n</div>\r\n","import { Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'farisMarkdown',\r\n standalone: true,\r\n})\r\nexport class FarisMarkdownPipe implements PipeTransform {\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n transform(value: unknown): SafeHtml {\r\n const source = this.toStringValue(value);\r\n if (!source) {\r\n return '';\r\n }\r\n\r\n const escaped = this.escapeHtml(source).replace(/\\r\\n/g, '\\n');\r\n const html = this.toHtml(escaped);\r\n\r\n return this.sanitizer.bypassSecurityTrustHtml(html);\r\n }\r\n\r\n private toHtml(content: string): string {\r\n let html = content;\r\n\r\n html = html.replace(/```canvas\\s*[\\s\\S]*?```/gi, '');\r\n\r\n html = html.replace(\r\n /```chart\\s*([\\s\\S]*?)```/gi,\r\n (_match, code: string) => {\r\n const payload = encodeURIComponent(code.trim());\r\n return `<div class=\"chart-placeholder\" data-options=\"${payload}\"></div>`;\r\n },\r\n );\r\n\r\n html = html.replace(\r\n /```([a-zA-Z0-9_-]+)?\\s*([\\s\\S]*?)```/g,\r\n (_match, lang: string | undefined, code: string) =>\r\n `<pre class=\"faris-code\"><code class=\"language-${lang ?? 'plain'}\">${code.trim()}</code></pre>`,\r\n );\r\n\r\n html = html.replace(/^###\\s+(.+)$/gm, '<h3>$1</h3>');\r\n html = html.replace(/^##\\s+(.+)$/gm, '<h2>$1</h2>');\r\n html = html.replace(/^#\\s+(.+)$/gm, '<h1>$1</h1>');\r\n\r\n html = html.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>');\r\n html = html.replace(/`([^`]+)`/g, '<code>$1</code>');\r\n html = html.replace(\r\n /\\[(.+?)\\]\\((https?:\\/\\/[^\\s)]+)\\)/g,\r\n '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>',\r\n );\r\n\r\n return html.replace(/\\n/g, '<br>');\r\n }\r\n\r\n private toStringValue(value: unknown): string {\r\n if (typeof value === 'string') {\r\n return value;\r\n }\r\n\r\n if (value == null) {\r\n return '';\r\n }\r\n\r\n try {\r\n return JSON.stringify(value, null, 2);\r\n } catch {\r\n return String(value);\r\n }\r\n }\r\n\r\n private escapeHtml(content: string): string {\r\n return content\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''');\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { FarisTranslatePipe } from '../faris-translate.pipe';\r\n\r\nexport type FarisMessageAction =\r\n | 'like'\r\n | 'dislike'\r\n | 'copy'\r\n | 'task'\r\n | 'download'\r\n | 'retry';\r\n\r\n@Component({\r\n selector: 'mt-faris-message-actions',\r\n standalone: true,\r\n imports: [FarisTranslatePipe, Button],\r\n templateUrl: './faris-message-actions.component.html',\r\n styleUrl: './faris-message-actions.component.css',\r\n})\r\nexport class FarisMessageActionsComponent {\r\n @Input() currentVote: 'like' | 'dislike' | null = null;\r\n @Input() canvasMessage = false;\r\n @Input() downloading = false;\r\n @Output() action = new EventEmitter<FarisMessageAction>();\r\n\r\n emitAction(action: FarisMessageAction): void {\r\n this.action.emit(action);\r\n }\r\n}\r\n","<div class=\"feedback-controls mt-3 flex items-center gap-1\">\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.copy-01\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn faris-btn-muted\"\r\n [tooltip]=\"'faris.copy-response' | translate\"\r\n (click)=\"emitAction('copy')\"\r\n ></mt-button>\r\n\r\n @if (!canvasMessage) {\r\n <mt-button\r\n type=\"button\"\r\n icon=\"file.file-plus-01\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn faris-btn-muted\"\r\n [loading]=\"downloading\"\r\n [tooltip]=\"'faris.create-document' | translate\"\r\n (click)=\"emitAction('download')\"\r\n ></mt-button>\r\n }\r\n\r\n <mt-button\r\n type=\"button\"\r\n icon=\"arrow.refresh-cw-01\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn faris-btn-muted\"\r\n [tooltip]=\"'faris.retry-response' | translate\"\r\n (click)=\"emitAction('retry')\"\r\n ></mt-button>\r\n\r\n <div class=\"feedback-separator mx-1 h-6 w-px bg-black/10\"></div>\r\n\r\n <mt-button\r\n type=\"button\"\r\n icon=\"alert.thumbs-up\"\r\n variant=\"text\"\r\n [styleClass]=\"\r\n 'faris-btn faris-btn-muted like' +\r\n (currentVote === 'like' ? ' text-green-600' : '')\r\n \"\r\n [tooltip]=\"'faris.helpful' | translate\"\r\n (click)=\"emitAction('like')\"\r\n ></mt-button>\r\n\r\n <mt-button\r\n type=\"button\"\r\n icon=\"alert.thumbs-down\"\r\n variant=\"text\"\r\n [styleClass]=\"\r\n 'faris-btn faris-btn-muted dislike' +\r\n (currentVote === 'dislike' ? ' text-red-600' : '')\r\n \"\r\n [tooltip]=\"'faris.not-helpful' | translate\"\r\n (click)=\"emitAction('dislike')\"\r\n ></mt-button>\r\n</div>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'parseMention',\r\n standalone: true,\r\n})\r\nexport class ParseMentionPipe implements PipeTransform {\r\n transform(value: string | null | undefined): string {\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n const regex = /@{{({.*?})}}/g;\r\n\r\n return value.replace(regex, (match, jsonString: string) => {\r\n try {\r\n const jsonObject = JSON.parse(jsonString);\r\n return `@${jsonObject.title}`;\r\n } catch {\r\n return match;\r\n }\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n inject,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { FarisMarkdownPipe } from '../faris-markdown.pipe';\r\nimport { FarisTranslatePipe } from '../faris-translate.pipe';\r\nimport { FarisMessage } from '../faris.model';\r\nimport { FarisService } from '../faris.service';\r\nimport {\r\n FarisMessageAction,\r\n FarisMessageActionsComponent,\r\n} from '../faris-message-actions/faris-message-actions.component';\r\nimport { ParseMentionPipe } from '../mentions/mention.pipe';\r\n\r\n@Component({\r\n selector: 'mt-faris-message',\r\n standalone: true,\r\n imports: [\r\n Button,\r\n ParseMentionPipe,\r\n FarisTranslatePipe,\r\n FarisMarkdownPipe,\r\n FarisMessageActionsComponent,\r\n ],\r\n templateUrl: './faris-message.component.html',\r\n styleUrl: './faris-message.component.scss',\r\n})\r\nexport class FarisMessageComponent implements OnInit {\r\n @Input() item!: FarisMessage;\r\n @Input() currentUserPhoto = '';\r\n @Input() loading = false;\r\n @Input() thinkingText = '';\r\n readonly fallbackUserPhoto =\r\n 'data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\"><circle cx=\\\"20\\\" cy=\\\"20\\\" r=\\\"20\\\" fill=\\\"%23e2e8f0\\\"/><circle cx=\\\"20\\\" cy=\\\"15\\\" r=\\\"7\\\" fill=\\\"%2394a3b8\\\"/><path d=\\\"M8 34c2.5-6 7.5-9 12-9s9.5 3 12 9\\\" fill=\\\"%2394a3b8\\\"/></svg>';\r\n\r\n @Output() action = new EventEmitter<{\r\n action: FarisMessageAction;\r\n item: FarisMessage;\r\n }>();\r\n @Output() canvas = new EventEmitter<FarisMessage>();\r\n\r\n canvasMessage = false;\r\n downloading = false;\r\n\r\n private readonly farisService = inject(FarisService);\r\n\r\n ngOnInit(): void {\r\n this.canvasMessage = this.resolveContent(this.item?.content).includes(\r\n '```canvas',\r\n );\r\n }\r\n\r\n takeAction(action: FarisMessageAction, item: FarisMessage): void {\r\n if (action === 'download') {\r\n this.downloadDocument(item);\r\n }\r\n\r\n this.action.emit({ action, item });\r\n }\r\n\r\n launchCanvas(): void {\r\n this.canvas.emit(this.item);\r\n }\r\n\r\n setFallbackUserPhoto(): void {\r\n this.currentUserPhoto = this.fallbackUserPhoto;\r\n }\r\n\r\n private downloadDocument(item: FarisMessage): void {\r\n this.downloading = true;\r\n\r\n this.farisService\r\n .downloadDocument(item)\r\n .pipe(finalize(() => (this.downloading = false)))\r\n .subscribe();\r\n }\r\n\r\n private resolveContent(content: unknown): string {\r\n if (typeof content === 'string') {\r\n return content;\r\n }\r\n\r\n if (content == null) {\r\n return '';\r\n }\r\n\r\n try {\r\n return JSON.stringify(content);\r\n } catch {\r\n return String(content);\r\n }\r\n }\r\n}\r\n","@if (item.role === \"user\") {\r\n <div class=\"faris-message\">\r\n <img\r\n [src]=\"currentUserPhoto || fallbackUserPhoto\"\r\n (error)=\"setFallbackUserPhoto()\"\r\n class=\"rounded-full user-img-md\"\r\n alt=\"\"\r\n />\r\n <div\r\n class=\"result-markdown result-width user\"\r\n [innerHTML]=\"item.content | parseMention | farisMarkdown\"\r\n ></div>\r\n </div>\r\n}\r\n\r\n@if (item.role === \"assistant\") {\r\n <div class=\"faris-message\">\r\n <div class=\"gemini-ic\" [class.thinking]=\"loading && !item.loaded\">\r\n <svg\r\n focusable=\"false\"\r\n viewBox=\"0 -960 960 960\"\r\n height=\"28\"\r\n width=\"28\"\r\n class=\"EiVpKc aoH\"\r\n >\r\n <path\r\n d=\"M480-80q2,0 2-2q0-82 31-154t85-126t126-85t154-31q2,0 2-2t-2-2q-82,0-154-31T598-598T513-724T482-878q0-2-2-2t-2,2q0,82-31,154T362-598T236-513T82-482q-2,0-2,2t2,2q82,0 154,31t126,85t85,126T478-82q0,2 2,2Z\"\r\n ></path>\r\n </svg>\r\n </div>\r\n\r\n <div class=\"flex w-[85%] max-w-[98%] flex-col\">\r\n @if (!loading || item.loaded) {\r\n <div class=\"w-full\">\r\n <div\r\n class=\"result-markdown faris\"\r\n [innerHTML]=\"item.content | farisMarkdown\"\r\n ></div>\r\n\r\n @if (canvasMessage) {\r\n <mt-button\r\n type=\"button\"\r\n [label]=\"'faris.launch-canvas' | translate\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n styleClass=\"mt-2\"\r\n (click)=\"launchCanvas()\"\r\n ></mt-button>\r\n }\r\n\r\n <mt-faris-message-actions\r\n [downloading]=\"downloading\"\r\n [canvasMessage]=\"canvasMessage\"\r\n [currentVote]=\"\r\n item.feedback === '1'\r\n ? 'like'\r\n : item.feedback === '-1'\r\n ? 'dislike'\r\n : null\r\n \"\r\n (action)=\"takeAction($event, item)\"\r\n >\r\n </mt-faris-message-actions>\r\n </div>\r\n }\r\n\r\n @if (loading && !item.loaded) {\r\n <div class=\"thinking-text\">{{ thinkingText }}</div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { resolveFarisUrlFromLocalStorage } from '../faris-url.util';\r\nimport { MentionListItem } from './mention-list/mention-list.component';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class MentionApiService {\r\n private baseUrl = '';\r\n\r\n private readonly http = inject(HttpClient);\r\n\r\n constructor() {\r\n let url = resolveFarisUrlFromLocalStorage();\r\n if (url.endsWith('/')) {\r\n url = url.slice(0, -1);\r\n }\r\n this.baseUrl = url;\r\n }\r\n\r\n search(term: string): Observable<MentionListItem[]> {\r\n return this.http.get<MentionListItem[]>(`${this.baseUrl}/search`, {\r\n params: { query: term },\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n} from '@angular/core';\r\nimport { FarisTranslatePipe } from '../../faris-translate.pipe';\r\n\r\nexport interface MentionListItem {\r\n id: string | number;\r\n title: string;\r\n rank?: number;\r\n levelType: string;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-faris-mention-list',\r\n standalone: true,\r\n imports: [FarisTranslatePipe],\r\n templateUrl: './mention-list.component.html',\r\n styleUrl: './mention-list.component.css',\r\n})\r\nexport class MentionListComponent implements OnChanges {\r\n @Input() items: MentionListItem[] = [];\r\n @Input() loading = false;\r\n @Output() itemSelected = new EventEmitter<MentionListItem>();\r\n\r\n activeIndex = 0;\r\n\r\n ngOnChanges(): void {\r\n this.activeIndex = 0;\r\n setTimeout(() => this.scrollActiveItemIntoView(), 0);\r\n }\r\n\r\n onItemClick(event: MouseEvent, item: MentionListItem): void {\r\n event.preventDefault();\r\n this.itemSelected.emit(item);\r\n }\r\n\r\n moveActiveUp(): void {\r\n if (!this.items.length) {\r\n return;\r\n }\r\n\r\n this.activeIndex =\r\n (this.activeIndex - 1 + this.items.length) % this.items.length;\r\n this.scrollActiveItemIntoView();\r\n }\r\n\r\n moveActiveDown(): void {\r\n if (!this.items.length) {\r\n return;\r\n }\r\n\r\n this.activeIndex = (this.activeIndex + 1) % this.items.length;\r\n this.scrollActiveItemIntoView();\r\n }\r\n\r\n selectActiveItem(): void {\r\n if (!this.items.length) {\r\n return;\r\n }\r\n\r\n this.itemSelected.emit(this.items[this.activeIndex]);\r\n }\r\n\r\n private scrollActiveItemIntoView(): void {\r\n const list = document.querySelector('.mention-list');\r\n if (!list) {\r\n return;\r\n }\r\n\r\n const items = list.querySelectorAll('.mention-item');\r\n if (!items.length) {\r\n return;\r\n }\r\n\r\n const activeItem = items[this.activeIndex] as HTMLElement;\r\n activeItem?.scrollIntoView({ block: 'nearest' });\r\n }\r\n}\r\n","<ul class=\"mention-list\">\r\n @if (loading) {\r\n <li title=\"loading...\">\r\n <div class=\"mention-item skeleton\"> </div>\r\n <div class=\"mention-item skeleton\"> </div>\r\n <div class=\"mention-item skeleton\"> </div>\r\n </li>\r\n }\r\n\r\n @if (!loading && items.length === 0) {\r\n <li class=\"mention-item-empty\">\r\n {{ \"faris.no-results-found\" | translate }}\r\n </li>\r\n }\r\n\r\n @for (item of items; track item.id; let i = $index) {\r\n <li\r\n (mousedown)=\"onItemClick($event, item)\"\r\n class=\"mention-item\"\r\n [class.active]=\"i === activeIndex\"\r\n [hidden]=\"loading\"\r\n >\r\n {{ item.title }}\r\n @if (item.levelType) {\r\n <span class=\"mention-item-type\">({{ item.levelType }})</span>\r\n }\r\n </li>\r\n }\r\n</ul>\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild,\r\n ViewContainerRef,\r\n forwardRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subject, of } from 'rxjs';\r\nimport { catchError, debounceTime, switchMap, takeUntil } from 'rxjs/operators';\r\nimport { MentionApiService } from '../mention-api.service';\r\nimport {\r\n MentionListComponent,\r\n MentionListItem,\r\n} from '../mention-list/mention-list.component';\r\n\r\n@Component({\r\n selector: 'mt-faris-mention-input',\r\n standalone: true,\r\n templateUrl: './mention-input.component.html',\r\n styleUrl: './mention-input.component.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => MentionInputComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class MentionInputComponent\r\n implements ControlValueAccessor, OnInit, AfterViewInit, OnDestroy\r\n{\r\n @ViewChild('mentionInput', { static: true })\r\n private inputRef!: ElementRef<HTMLDivElement>;\r\n\r\n loading = false;\r\n\r\n private resizeObserver?: ResizeObserver;\r\n private overlayRef: OverlayRef | null = null;\r\n private readonly destroy$ = new Subject<void>();\r\n private readonly search$ = new Subject<string>();\r\n\r\n private onChange: (value: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n private mentionListInstance: MentionListComponent | null = null;\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly mentionApiService = inject(MentionApiService);\r\n\r\n ngOnInit(): void {\r\n this.search$\r\n .pipe(\r\n debounceTime(300),\r\n switchMap((searchTerm) => {\r\n this.loading = true;\r\n\r\n if (this.overlayRef) {\r\n this.showSuggestions([]);\r\n }\r\n\r\n return this.mentionApiService.search(searchTerm).pipe(\r\n catchError((_err) => {\r\n this.loading = false;\r\n return of([]);\r\n }),\r\n );\r\n }),\r\n takeUntil(this.destroy$),\r\n )\r\n .subscribe((items) => {\r\n this.loading = false;\r\n\r\n if (this.overlayRef) {\r\n this.showSuggestions(items);\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.resizeObserver = new ResizeObserver((entries) => {\r\n for (const entry of entries) {\r\n const { offsetWidth } = entry.target as HTMLElement;\r\n\r\n if (this.overlayRef) {\r\n this.overlayRef.updatePosition();\r\n this.overlayRef.updateSize({\r\n width: 'fit-content',\r\n minWidth: '250px',\r\n maxWidth: `${offsetWidth}px`,\r\n });\r\n }\r\n }\r\n });\r\n\r\n this.resizeObserver.observe(this.inputRef.nativeElement);\r\n }\r\n\r\n onInput(): void {\r\n const { word, trigger } = this.getCurrentWord();\r\n\r\n if (trigger === '@' && word.length) {\r\n this.openOverlay();\r\n this.search$.next(word);\r\n } else {\r\n this.closeOverlay();\r\n }\r\n\r\n this.emitValueChange();\r\n }\r\n\r\n onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n onArrowUpDown(event: Event): void {\r\n const keyboardEvent = event as KeyboardEvent;\r\n\r\n if (!this.overlayRef || !this.mentionListInstance) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n if (keyboardEvent.key === 'ArrowUp') {\r\n this.mentionListInstance.moveActiveUp();\r\n } else if (keyboardEvent.key === 'ArrowDown') {\r\n this.mentionListInstance.moveActiveDown();\r\n }\r\n }\r\n\r\n onEnter(event: Event): void {\r\n const keyboardEvent = event as KeyboardEvent;\r\n\r\n if (this.overlayRef && this.mentionListInstance) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.mentionListInstance.selectActiveItem();\r\n return;\r\n }\r\n\r\n this.insertParagraphAtCaret(keyboardEvent);\r\n }\r\n\r\n onTab(event: Event): void {\r\n if (!this.overlayRef || !this.mentionListInstance) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.mentionListInstance.selectActiveItem();\r\n }\r\n\r\n writeValue(value: string): void {\r\n if (!this.inputRef?.nativeElement) {\r\n return;\r\n }\r\n\r\n this.inputRef.nativeElement.innerHTML = value || '<p><br></p>';\r\n\r\n if (!value && this.overlayRef) {\r\n this.closeOverlay();\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n if (!this.inputRef?.nativeElement) {\r\n return;\r\n }\r\n\r\n this.inputRef.nativeElement.contentEditable = isDisabled ? 'false' : 'true';\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.resizeObserver?.disconnect();\r\n this.closeOverlay();\r\n }\r\n\r\n private insertParagraphAtCaret(event: KeyboardEvent): void {\r\n if (event.key !== 'Enter') {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) {\r\n return;\r\n }\r\n\r\n const range = selection.getRangeAt(0);\r\n let currentParagraph = range.startContainer as HTMLElement;\r\n\r\n while (\r\n currentParagraph &&\r\n currentParagraph.nodeType === Node.ELEMENT_NODE &&\r\n currentParagraph.tagName !== 'P'\r\n ) {\r\n currentParagraph = currentParagraph.parentElement as HTMLElement;\r\n }\r\n\r\n if (!currentParagraph || currentParagraph.tagName !== 'P') {\r\n const paragraph = document.createElement('p');\r\n paragraph.innerHTML = '<br>';\r\n this.inputRef.nativeElement.appendChild(paragraph);\r\n this.moveCaretToEndOf(paragraph);\r\n return;\r\n }\r\n\r\n const afterRange = range.cloneRange();\r\n afterRange.setEndAfter(currentParagraph);\r\n\r\n const fragment = afterRange.extractContents();\r\n const newParagraph = document.createElement('p');\r\n\r\n if (fragment.textContent?.trim().length) {\r\n newParagraph.appendChild(fragment);\r\n } else {\r\n newParagraph.innerHTML = '<br>';\r\n }\r\n\r\n if (currentParagraph.nextSibling) {\r\n currentParagraph.parentNode?.insertBefore(\r\n newParagraph,\r\n currentParagraph.nextSibling,\r\n );\r\n } else {\r\n currentParagraph.parentNode?.appendChild(newParagraph);\r\n }\r\n\r\n this.moveCaretToEndOf(newParagraph);\r\n }\r\n\r\n private getCurrentWord(): { word: string; trigger: string | null } {\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) {\r\n return { word: '', trigger: null };\r\n }\r\n\r\n const blockNode = this.getCaretBlockNode(this.inputRef.nativeElement);\r\n if (!blockNode) {\r\n return { word: '', trigger: null };\r\n }\r\n\r\n const range = selection.getRangeAt(0).cloneRange();\r\n range.selectNodeContents(blockNode);\r\n range.setEnd(selection.anchorNode!, selection.anchorOffset);\r\n\r\n const textBeforeCaret = range.toString();\r\n const match = textBeforeCaret.match(/@(\\w*)$/);\r\n\r\n if (match) {\r\n return { word: match[1], trigger: '@' };\r\n }\r\n\r\n return { word: '', trigger: null };\r\n }\r\n\r\n private openOverlay(): void {\r\n if (this.overlayRef) {\r\n return;\r\n }\r\n\r\n const positionStrategy = this.overlay\r\n .position()\r\n .flexibleConnectedTo(this.inputRef)\r\n .withPush(true)\r\n .withPositions([\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n offsetY: -8,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: 8,\r\n },\r\n ]);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n panelClass: 'mention-overlay-panel',\r\n width: 'fit-content',\r\n minWidth: '250px',\r\n maxWidth: `${this.inputRef.nativeElement.offsetWidth}px`,\r\n });\r\n }\r\n\r\n private showSuggestions(items: MentionListItem[] = []): void {\r\n if (!this.overlayRef) {\r\n return;\r\n }\r\n\r\n if (this.overlayRef.hasAttached()) {\r\n this.overlayRef.detach();\r\n }\r\n\r\n const strippedItems: MentionListItem[] = items.map((item) => ({\r\n ...item,\r\n rank: undefined,\r\n }));\r\n\r\n const portal = new ComponentPortal(\r\n MentionListComponent,\r\n this.viewContainerRef,\r\n );\r\n const componentRef = this.overlayRef.attach(portal);\r\n\r\n componentRef.instance.items = strippedItems;\r\n componentRef.instance.loading = this.loading;\r\n this.mentionListInstance = componentRef.instance;\r\n\r\n if (items.length > 0) {\r\n this.mentionListInstance.activeIndex = 0;\r\n }\r\n\r\n componentRef.instance.itemSelected\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((item) => {\r\n this.insertMention(item);\r\n this.closeOverlay();\r\n });\r\n }\r\n\r\n private insertMention(item: MentionListItem): void {\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) {\r\n return;\r\n }\r\n\r\n const blockNode = this.getCaretBlockNode(this.inputRef.nativeElement);\r\n if (!blockNode) {\r\n return;\r\n }\r\n\r\n const range = selection.getRangeAt(0);\r\n const preCaretRange = range.cloneRange();\r\n preCaretRange.selectNodeContents(blockNode);\r\n preCaretRange.setEnd(selection.anchorNode!, selection.anchorOffset);\r\n\r\n const textBeforeCaret = preCaretRange.toString();\r\n const lastAt = textBeforeCaret.lastIndexOf('@');\r\n\r\n if (lastAt === -1) {\r\n return;\r\n }\r\n\r\n let charCount = textBeforeCaret.length - lastAt;\r\n const treeWalker = document.createTreeWalker(\r\n blockNode,\r\n NodeFilter.SHOW_TEXT,\r\n null,\r\n );\r\n let currentNode = treeWalker.lastChild();\r\n let offset = 0;\r\n\r\n while (currentNode && charCount > 0) {\r\n if (currentNode.textContent) {\r\n if (charCount <= currentNode.textContent.length) {\r\n offset = currentNode.textContent.length - charCount;\r\n break;\r\n }\r\n\r\n charCount -= currentNode.textContent.length;\r\n }\r\n\r\n currentNode = treeWalker.previousNode();\r\n }\r\n\r\n if (!currentNode) {\r\n return;\r\n }\r\n\r\n const newRange = document.createRange();\r\n newRange.setStart(currentNode, offset);\r\n newRange.setEnd(range.endContainer, range.endOffset);\r\n newRange.deleteContents();\r\n\r\n const mentionNode = document.createElement('span');\r\n mentionNode.className = 'mention-highlight';\r\n mentionNode.contentEditable = 'false';\r\n mentionNode.textContent = `@${item.title}`;\r\n mentionNode.setAttribute('data-mention', JSON.stringify(item));\r\n newRange.insertNode(mentionNode);\r\n\r\n const space = document.createTextNode('\\u00A0');\r\n mentionNode.after(space);\r\n\r\n const afterRange = document.createRange();\r\n afterRange.setStartAfter(space);\r\n afterRange.collapse(true);\r\n\r\n selection.removeAllRanges();\r\n selection.addRange(afterRange);\r\n this.inputRef.nativeElement.focus();\r\n\r\n this.emitValueChange();\r\n }\r\n\r\n private emitValueChange(): void {\r\n if (!this.inputRef?.nativeElement) {\r\n return;\r\n }\r\n\r\n this.onChange(this.getEncodedValue());\r\n }\r\n\r\n private closeOverlay(): void {\r\n if (!this.overlayRef) {\r\n return;\r\n }\r\n\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n this.mentionListInstance = null;\r\n }\r\n\r\n private getEncodedValue(): string {\r\n const traverse = (node: Node): string => {\r\n let result = '';\r\n\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const element = node as HTMLElement;\r\n\r\n if (\r\n element.classList.contains('mention-highlight') &&\r\n element.hasAttribute('data-mention')\r\n ) {\r\n result += `@{{${element.getAttribute('data-mention')}}}`;\r\n } else {\r\n node.childNodes.forEach((child) => {\r\n result += traverse(child);\r\n });\r\n }\r\n } else if (node.nodeType === Node.TEXT_NODE) {\r\n result += node.textContent ?? '';\r\n }\r\n\r\n return result;\r\n };\r\n\r\n return traverse(this.inputRef.nativeElement);\r\n }\r\n\r\n private getCaretBlockNode(container: HTMLElement): Node | null {\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) {\r\n return null;\r\n }\r\n\r\n let node: Node | null = selection.anchorNode;\r\n\r\n while (node && node !== container) {\r\n if (\r\n node.nodeType === Node.ELEMENT_NODE &&\r\n (node as HTMLElement).tagName.match(/^(DIV|P|LI)$/)\r\n ) {\r\n return node;\r\n }\r\n\r\n node = node.parentNode;\r\n }\r\n\r\n return container;\r\n }\r\n\r\n private moveCaretToEndOf(element: HTMLElement): void {\r\n const range = document.createRange();\r\n const selection = window.getSelection();\r\n range.selectNodeContents(element);\r\n range.collapse(false);\r\n selection?.removeAllRanges();\r\n selection?.addRange(range);\r\n element.focus();\r\n }\r\n}\r\n","<div\r\n #mentionInput\r\n class=\"mention-input\"\r\n contenteditable=\"true\"\r\n (input)=\"onInput()\"\r\n (blur)=\"onBlur()\"\r\n (keydown.arrowUp)=\"onArrowUpDown($event)\"\r\n (keydown.arrowDown)=\"onArrowUpDown($event)\"\r\n (keydown.enter)=\"onEnter($event)\"\r\n (keydown.tab)=\"onTab($event)\"\r\n></div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n inject,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { AgentCardComponent } from '../agent-card/agent-card.component';\r\nimport { FarisMessageAction } from '../faris-message-actions/faris-message-actions.component';\r\nimport { FarisMessageComponent } from '../faris-message/faris-message.component';\r\nimport { FarisTranslatePipe } from '../faris-translate.pipe';\r\nimport { FarisMessage } from '../faris.model';\r\nimport { FarisService } from '../faris.service';\r\nimport { MentionInputComponent } from '../mentions/mention-input/mention-input.component';\r\n\r\n@Component({\r\n selector: 'mt-faris-chat',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n Button,\r\n AgentCardComponent,\r\n FarisTranslatePipe,\r\n FarisMessageComponent,\r\n MentionInputComponent,\r\n ],\r\n templateUrl: './faris-chat.component.html',\r\n styleUrl: './faris-chat.component.scss',\r\n})\r\nexport class FarisChatComponent implements OnInit, OnDestroy {\r\n private _selectedConversation: any = null;\r\n private _selectedConversationId: string | null = null;\r\n\r\n @Input() set selectedConversation(conversation: any) {\r\n const nextConversationId = this.resolveConversationId(conversation);\r\n if (\r\n nextConversationId &&\r\n nextConversationId === this._selectedConversationId\r\n ) {\r\n return;\r\n }\r\n\r\n this._selectedConversation = conversation;\r\n this._selectedConversationId = nextConversationId;\r\n\r\n if (!nextConversationId) {\r\n this._selectedConversation = null;\r\n this._selectedConversationId = null;\r\n this.chatHistory = [];\r\n this.showResult = false;\r\n this.farisService.clearSession();\r\n } else {\r\n this.getConversationDetails(nextConversationId);\r\n }\r\n\r\n this.userInput = '';\r\n }\r\n\r\n @Output() launchCanvas = new EventEmitter<FarisMessage>();\r\n @Output() selectConversation = new EventEmitter<any>();\r\n\r\n userInput = '';\r\n showResult = false;\r\n loading = false;\r\n markdownContent = '';\r\n currentUserPhoto = '';\r\n chatHistory: FarisMessage[] = [];\r\n\r\n dots = '';\r\n intervalId: ReturnType<typeof setInterval> | null = null;\r\n thinkingText = '';\r\n deepThinkingTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n readonly deepThinkingDelay = 10000;\r\n readonly deepThinkingText =\r\n 'Deep thinking is needed and the response might take more than usual...';\r\n\r\n readonly thinkingTexts = [\r\n 'Thinking',\r\n 'Hmm, analyzing the data',\r\n 'Let me think for a moment',\r\n 'Just a second, processing your request',\r\n 'Considering all possibilities',\r\n \"Let's see what I can come up with\",\r\n 'Running some calculations',\r\n 'Thinking hard about this one',\r\n 'Let me get back to you',\r\n ];\r\n\r\n readonly agents: any[] = [];\r\n\r\n private readonly subscriptions = new Subscription();\r\n private readonly farisService = inject(FarisService);\r\n\r\n get selectedChatId(): string {\r\n return this._selectedConversationId ?? '';\r\n }\r\n\r\n get currentUserDisplayName(): string {\r\n const currentUser = this.farisService.currentUser;\r\n return (\r\n currentUser?.user?.displayName ??\r\n currentUser?.displayName ??\r\n currentUser?.user?.name ??\r\n currentUser?.name ??\r\n ''\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loading = true;\r\n this.currentUserPhoto = this.resolveUserPhoto();\r\n this.startThinking(false);\r\n\r\n setTimeout(() => {\r\n this.loading = false;\r\n }, 600);\r\n }\r\n\r\n sendQuery(query?: string): void {\r\n const value = (query || this.userInput || '').trim();\r\n if (!value || this.loading) {\r\n return;\r\n }\r\n\r\n this.userInput = value;\r\n this.showResult = true;\r\n this.loading = true;\r\n this.startThinking();\r\n\r\n this.chatHistory = [\r\n ...this.chatHistory,\r\n { role: 'user', content: value, loaded: true },\r\n { role: 'assistant', content: this.markdownContent, loaded: false },\r\n ];\r\n\r\n this.subscriptions.add(\r\n this.farisService\r\n .sendMessage(value)\r\n .pipe(\r\n finalize(() => {\r\n this.loading = false;\r\n this.stopThinking();\r\n }),\r\n )\r\n .subscribe((res: any) => {\r\n const index = this.chatHistory.length - 1;\r\n this.chatHistory[index].content = res?.content;\r\n this.chatHistory[index].loaded = true;\r\n this.chatHistory[index].message_id = res?.message_id;\r\n this.chatHistory[index].trace_id = res?.trace_id;\r\n this.chatHistory[index].feedback = res?.feedback;\r\n this.chatHistory[index].score = res?.score;\r\n\r\n this.scrollToBottom();\r\n\r\n const canvas = this.resolveContent(res?.content).includes(\r\n '\\n```canvas',\r\n );\r\n if (!this.selectedChatId) {\r\n const sessionId =\r\n res?.session_id ?? res?.sessionId ?? res?.id ?? undefined;\r\n this.selectConversation.emit({\r\n id: sessionId,\r\n title: res?.conversation_title ?? res?.conversationTitle ?? value,\r\n });\r\n }\r\n\r\n if (canvas) {\r\n this.launchCanvas.emit(this.chatHistory[index]);\r\n }\r\n }),\r\n );\r\n\r\n setTimeout(() => {\r\n this.userInput = '';\r\n }, 10);\r\n }\r\n\r\n takeAction(action: FarisMessageAction, item: FarisMessage): void {\r\n if (!this.selectedChatId || !item?.message_id) {\r\n return;\r\n }\r\n\r\n switch (action) {\r\n case 'like':\r\n case 'dislike':\r\n this.likeDislikeFeedback(action, item);\r\n break;\r\n case 'copy':\r\n this.farisService.copyToClipboard(this.resolveContent(item.content));\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.chatHistory = [];\r\n this.showResult = false;\r\n this.farisService.clearSession();\r\n\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n this.intervalId = null;\r\n }\r\n\r\n if (this.deepThinkingTimeoutId) {\r\n clearTimeout(this.deepThinkingTimeoutId);\r\n this.deepThinkingTimeoutId = null;\r\n }\r\n\r\n if (!this.subscriptions.closed) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n\r\n private resolveUserPhoto(): string {\r\n const currentUser = this.farisService.currentUser;\r\n const photo =\r\n currentUser?.user?.photo ??\r\n currentUser?.photo ??\r\n currentUser?.user?.image ??\r\n currentUser?.image;\r\n\r\n if (typeof photo === 'string') {\r\n return photo;\r\n }\r\n\r\n return photo?.fileName ?? '';\r\n }\r\n\r\n private startThinking(shouldGenerateNew = true): void {\r\n this.thinkingText = this.getRandomThinkingText(shouldGenerateNew);\r\n this.scrollToBottom();\r\n\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n }\r\n\r\n let count = 0;\r\n this.intervalId = setInterval(() => {\r\n count = (count + 1) % 4;\r\n this.dots = '.'.repeat(count);\r\n }, 500);\r\n\r\n if (this.deepThinkingTimeoutId) {\r\n clearTimeout(this.deepThinkingTimeoutId);\r\n }\r\n\r\n this.deepThinkingTimeoutId = setTimeout(() => {\r\n if (this.loading) {\r\n this.thinkingText = this.deepThinkingText;\r\n }\r\n }, this.deepThinkingDelay);\r\n }\r\n\r\n private stopThinking(): void {\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n this.intervalId = null;\r\n }\r\n\r\n this.dots = '';\r\n\r\n if (this.deepThinkingTimeoutId) {\r\n clearTimeout(this.deepThinkingTimeoutId);\r\n this.deepThinkingTimeoutId = null;\r\n }\r\n }\r\n\r\n private scrollToBottom(): void {\r\n const container = document.getElementById('results-container');\r\n if (!container) {\r\n return;\r\n }\r\n\r\n setTimeout(() => {\r\n container.scrollTo({\r\n top: container.scrollHeight + 100,\r\n behavior: 'smooth',\r\n });\r\n }, 150);\r\n }\r\n\r\n private getRandomThinkingText(generateNew = true): string {\r\n if (!generateNew) {\r\n return this.thinkingTexts[0];\r\n }\r\n\r\n const randomIndex = Math.floor(Math.random() * this.thinkingTexts.length);\r\n return this.thinkingTexts[randomIndex];\r\n }\r\n\r\n private getConversationDetails(id: string): void {\r\n this.subscriptions.add(\r\n this.farisService.getConversationDetails(id).subscribe((res: any[]) => {\r\n this.showResult = true;\r\n this.chatHistory = (res || []).map((item: any) => ({\r\n role: item.role,\r\n content: item.content,\r\n loaded: true,\r\n message_id: item.message_id,\r\n trace_id: item.trace_id,\r\n score: item.score,\r\n feedback: item.feedback,\r\n }));\r\n\r\n this.scrollToBottom();\r\n }),\r\n );\r\n }\r\n\r\n private resolveConversationId(conversation: any): string | null {\r\n const id =\r\n conversation?.id ??\r\n conversation?.session_id ??\r\n conversation?.sessionId ??\r\n conversation?.conversation_id ??\r\n conversation?.conversationId;\r\n\r\n return id == null ? null : String(id);\r\n }\r\n\r\n private likeDislikeFeedback(\r\n vote: 'like' | 'dislike',\r\n item: FarisMessage,\r\n ): void {\r\n if (!this.selectedChatId || !item?.message_id) {\r\n return;\r\n }\r\n\r\n let score = vote === 'like' ? 1 : -1;\r\n if (\r\n (item.feedback === 1 && score === 1) ||\r\n (item.feedback === -1 && score === -1)\r\n ) {\r\n score = 0;\r\n }\r\n\r\n this.subscriptions.add(\r\n this.farisService\r\n .sendFeedback(item.message_id, score, item.trace_id)\r\n .subscribe(),\r\n );\r\n }\r\n\r\n private resolveContent(content: unknown): string {\r\n if (typeof content === 'string') {\r\n return content;\r\n }\r\n\r\n if (content == null) {\r\n return '';\r\n }\r\n\r\n try {\r\n return JSON.stringify(content);\r\n } catch {\r\n return String(content);\r\n }\r\n }\r\n}\r\n","<div class=\"relative flex h-full w-full flex-col justify-between\" #container>\r\n @if (!showResult) {\r\n <div class=\"welcome-user\">\r\n <span class=\"hello-gradient\"\r\n >{{ \"faris.hello\" | translate }}, {{ currentUserDisplayName }}</span\r\n >\r\n <span class=\"welcome-text\">{{\r\n \"faris.welcome-message\" | translate\r\n }}</span>\r\n </div>\r\n }\r\n\r\n <div class=\"results-container\" id=\"results-container\">\r\n <div class=\"pre-defined-questions flex w-full flex-col\">\r\n @if (!showResult) {\r\n @for (agent of agents; track agent?.title) {\r\n <mt-faris-agent-card\r\n class=\"real-content\"\r\n [agent]=\"agent\"\r\n (click)=\"sendQuery(agent.title)\"\r\n ></mt-faris-agent-card>\r\n }\r\n }\r\n\r\n @if (showResult) {\r\n @for (\r\n item of chatHistory;\r\n track item.trace_id || item.message_id || $index\r\n ) {\r\n <mt-faris-message\r\n [item]=\"item\"\r\n [currentUserPhoto]=\"currentUserPhoto\"\r\n [loading]=\"loading\"\r\n [thinkingText]=\"thinkingText\"\r\n (action)=\"takeAction($event.action, $event.item)\"\r\n (canvas)=\"launchCanvas.emit($event)\"\r\n >\r\n </mt-faris-message>\r\n }\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"search-box\">\r\n <form class=\"w-full\" #chatForm=\"ngForm\" (ngSubmit)=\"sendQuery(userInput)\">\r\n <div class=\"input-box\">\r\n <mt-faris-mention-input\r\n [(ngModel)]=\"userInput\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (keydown.enter)=\"sendQuery(userInput)\"\r\n ></mt-faris-mention-input>\r\n\r\n <mt-button\r\n type=\"submit\"\r\n icon=\"communication.send-01\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn faris-btn-lg\"\r\n [disabled]=\"!userInput || !userInput.trim() || loading\"\r\n ></mt-button>\r\n </div>\r\n </form>\r\n\r\n <small>{{ \"faris.input-message\" | translate }}</small>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n SimpleChanges,\r\n inject,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { FarisTranslatePipe } from '../faris-translate.pipe';\r\nimport { ParseMentionPipe } from '../mentions/mention.pipe';\r\n\r\nexport interface ConversationGroup {\r\n label: string;\r\n conversations: any[];\r\n sortValue?: number;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-faris-chat-history',\r\n standalone: true,\r\n imports: [FarisTranslatePipe, ParseMentionPipe, Button, Icon],\r\n templateUrl: './faris-chat-history.component.html',\r\n styleUrl: './faris-chat-history.component.scss',\r\n})\r\nexport class FarisChatHistoryComponent implements OnChanges {\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n @Input() userConversations: any[] = [];\r\n @Input() showChatHistory = false;\r\n @Input() selectedConversation: any = null;\r\n\r\n @Output() selectConversation = new EventEmitter<any>();\r\n @Output() deleteConversationHandler = new EventEmitter<{\r\n event: Event;\r\n id: number | string;\r\n }>();\r\n @Output() closeHistory = new EventEmitter<boolean>();\r\n\r\n groupedConversations: ConversationGroup[] = [];\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['userConversations']) {\r\n this.groupedConversations = this.groupConversations(\r\n this.userConversations || [],\r\n );\r\n }\r\n }\r\n\r\n onCloseHistory(): void {\r\n this.closeHistory.emit(true);\r\n }\r\n\r\n onSelectConversation(conversation: any): void {\r\n this.selectConversation.emit(conversation);\r\n }\r\n\r\n onDeleteConversation(event: Event, id: number | string): void {\r\n event.stopPropagation();\r\n this.deleteConversationHandler.emit({ event, id });\r\n }\r\n\r\n private groupConversations(conversations: any[]): ConversationGroup[] {\r\n const normalized = (conversations || []).map((conversation, index) =>\r\n this.normalizeConversation(conversation, index),\r\n );\r\n const sorted = [...normalized].sort(\r\n (a, b) =>\r\n this.resolveConversationTimestamp(b) -\r\n this.resolveConversationTimestamp(a),\r\n );\r\n\r\n const todayGroup: ConversationGroup = {\r\n label: this.transloco.translate('faris.today'),\r\n conversations: [],\r\n };\r\n const yesterdayGroup: ConversationGroup = {\r\n label: this.transloco.translate('faris.yesterday'),\r\n conversations: [],\r\n };\r\n const thisWeekGroup: ConversationGroup = {\r\n label: this.transloco.translate('faris.this-week'),\r\n conversations: [],\r\n };\r\n const lastWeekGroup: ConversationGroup = {\r\n label: this.transloco.translate('faris.last-week'),\r\n conversations: [],\r\n };\r\n const monthGroups = new Map<string, ConversationGroup>();\r\n\r\n const now = new Date();\r\n const todayStart = this.startOfDay(now).getTime();\r\n const yesterdayStart = this.startOfDay(this.addDays(now, -1)).getTime();\r\n const thisWeekStart = this.startOfWeek(now).getTime();\r\n const lastWeekStart = this.startOfWeek(this.addDays(now, -7)).getTime();\r\n\r\n for (const conversation of sorted) {\r\n const updatedDate = this.resolveConversationDate(conversation) ?? now;\r\n\r\n const updatedStart = this.startOfDay(updatedDate).getTime();\r\n\r\n if (updatedStart === todayStart) {\r\n conversation.displayDate = this.transloco.translate('faris.today');\r\n todayGroup.conversations.push(conversation);\r\n continue;\r\n }\r\n\r\n if (updatedStart === yesterdayStart) {\r\n conversation.displayDate = this.transloco.translate('faris.yesterday');\r\n yesterdayGroup.conversations.push(conversation);\r\n continue;\r\n }\r\n\r\n if (updatedStart >= thisWeekStart) {\r\n conversation.displayDate = this.formatDayMonth(updatedDate);\r\n thisWeekGroup.conversations.push(conversation);\r\n continue;\r\n }\r\n\r\n if (updatedStart >= lastWeekStart) {\r\n conversation.displayDate = this.formatDayMonth(updatedDate);\r\n lastWeekGroup.conversations.push(conversation);\r\n continue;\r\n }\r\n\r\n const monthLabel = this.formatMonthYear(updatedDate);\r\n conversation.displayDate = this.formatDayMonth(updatedDate);\r\n\r\n if (!monthGroups.has(monthLabel)) {\r\n monthGroups.set(monthLabel, {\r\n label: monthLabel,\r\n conversations: [],\r\n sortValue: this.startOfMonth(updatedDate).getTime(),\r\n });\r\n }\r\n\r\n monthGroups.get(monthLabel)?.conversations.push(conversation);\r\n }\r\n\r\n const fixedOrder = [\r\n todayGroup,\r\n yesterdayGroup,\r\n thisWeekGroup,\r\n lastWeekGroup,\r\n ].filter((group) => group.conversations.length > 0);\r\n\r\n const orderedMonthGroups = Array.from(monthGroups.values()).sort(\r\n (a, b) => (b.sortValue ?? 0) - (a.sortValue ?? 0),\r\n );\r\n\r\n return [...fixedOrder, ...orderedMonthGroups];\r\n }\r\n\r\n private formatDayMonth(date: Date): string {\r\n return new Intl.DateTimeFormat('en', {\r\n day: 'numeric',\r\n month: 'short',\r\n }).format(date);\r\n }\r\n\r\n private formatMonthYear(date: Date): string {\r\n return new Intl.DateTimeFormat('en', {\r\n month: 'long',\r\n year: 'numeric',\r\n }).format(date);\r\n }\r\n\r\n private startOfDay(date: Date): Date {\r\n const result = new Date(date);\r\n result.setHours(0, 0, 0, 0);\r\n return result;\r\n }\r\n\r\n private startOfWeek(date: Date): Date {\r\n const result = this.startOfDay(date);\r\n const day = result.getDay();\r\n result.setDate(result.getDate() - day);\r\n return result;\r\n }\r\n\r\n private startOfMonth(date: Date): Date {\r\n const result = this.startOfDay(date);\r\n result.setDate(1);\r\n return result;\r\n }\r\n\r\n private addDays(date: Date, days: number): Date {\r\n const result = new Date(date);\r\n result.setDate(result.getDate() + days);\r\n return result;\r\n }\r\n\r\n private normalizeConversation(conversation: any, index: number): any {\r\n const id =\r\n conversation?.id ??\r\n conversation?.session_id ??\r\n conversation?.sessionId ??\r\n conversation?.conversation_id ??\r\n conversation?.conversationId ??\r\n `conversation-${index}`;\r\n const updatedAt =\r\n conversation?.updated_at ??\r\n conversation?.updatedAt ??\r\n conversation?.last_updated_at ??\r\n conversation?.lastUpdatedAt ??\r\n conversation?.created_at ??\r\n conversation?.createdAt ??\r\n conversation?.timestamp ??\r\n conversation?.date ??\r\n null;\r\n const title =\r\n conversation?.title ??\r\n conversation?.conversation_title ??\r\n conversation?.conversationTitle ??\r\n conversation?.name ??\r\n conversation?.subject ??\r\n '';\r\n\r\n return {\r\n ...conversation,\r\n id: String(id),\r\n updated_at: updatedAt,\r\n title,\r\n };\r\n }\r\n\r\n private resolveConversationDate(conversation: any): Date | null {\r\n const candidate = conversation?.updated_at;\r\n if (!candidate) {\r\n return null;\r\n }\r\n\r\n const date = new Date(candidate);\r\n return Number.isNaN(date.getTime()) ? null : date;\r\n }\r\n\r\n private resolveConversationTimestamp(conversation: any): number {\r\n return this.resolveConversationDate(conversation)?.getTime() ?? 0;\r\n }\r\n}\r\n","<div\r\n class=\"conversations-history\"\r\n [class.closed-chat-history-side]=\"!showChatHistory\"\r\n>\r\n <div class=\"conversations-header\">\r\n <span class=\"conversations-title\">{{\r\n \"faris.chat-history\" | translate\r\n }}</span>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.x-close\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"onCloseHistory()\"\r\n ></mt-button>\r\n </div>\r\n\r\n <div class=\"conversations-list\">\r\n @for (group of groupedConversations; track group.label) {\r\n <div class=\"conversation-group-header\">{{ group.label }}</div>\r\n\r\n @for (conversation of group.conversations; track conversation.id) {\r\n <div\r\n class=\"conversation-item flex w-full cursor-pointer items-center justify-between gap-2 rounded-md p-2\"\r\n (click)=\"onSelectConversation(conversation)\"\r\n [class.active-conversation]=\"\r\n selectedConversation?.id === conversation.id\r\n \"\r\n >\r\n <mt-icon icon=\"communication.message-chat-circle\"></mt-icon>\r\n\r\n <div class=\"conversation-title-group\">\r\n <div class=\"conversation-title\">\r\n {{ (conversation?.title | parseMention) || \" \" }}\r\n </div>\r\n <div class=\"conversation-subtitle\">\r\n {{ conversation.displayDate }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"conversation-actions\">\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.trash-01\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn faris-btn-muted text-red-600\"\r\n [tooltip]=\"'faris.delete' | translate\"\r\n (click)=\"onDeleteConversation($event, conversation?.id)\"\r\n ></mt-button>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n inject,\r\n} from '@angular/core';\r\nimport { animate, style, transition, trigger } from '@angular/animations';\r\nimport { Button } from '@masterteam/components/button';\r\n\r\n@Component({\r\n selector: 'mt-faris-popup',\r\n standalone: true,\r\n imports: [Button],\r\n templateUrl: './minimizable-popup.component.html',\r\n styleUrl: './minimizable-popup.component.scss',\r\n animations: [\r\n trigger('slideInOut', [\r\n transition(\r\n ':enter',\r\n [\r\n style({ transform: '{{enterTransform}}' }),\r\n animate(\r\n '300ms cubic-bezier(0.4,0,0.2,1)',\r\n style({ transform: 'translateX(0)' }),\r\n ),\r\n ],\r\n { params: { enterTransform: 'translateX(100%)' } },\r\n ),\r\n transition(\r\n ':leave',\r\n [\r\n animate(\r\n '300ms cubic-bezier(0.4,0,0.2,1)',\r\n style({ transform: '{{leaveTransform}}' }),\r\n ),\r\n ],\r\n { params: { leaveTransform: 'translateX(100%)' } },\r\n ),\r\n ]),\r\n ],\r\n})\r\nexport class MinimizablePopupComponent implements OnInit, OnDestroy {\r\n @Input() title = '';\r\n @Input() maximized = false;\r\n @Output() closed = new EventEmitter<boolean>();\r\n\r\n direction: 'ltr' | 'rtl' = 'ltr';\r\n isClosing = false;\r\n\r\n private readonly document = inject(DOCUMENT);\r\n\r\n ngOnInit(): void {\r\n this.document.body.style.overflow = 'hidden';\r\n this.direction =\r\n this.document.documentElement.dir === 'rtl' ? 'rtl' : 'ltr';\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.document.body.style.overflow = 'auto';\r\n }\r\n\r\n get enterTransform(): string {\r\n return this.direction === 'rtl' ? 'translateX(-100%)' : 'translateX(100%)';\r\n }\r\n\r\n get leaveTransform(): string {\r\n return this.direction === 'rtl' ? 'translateX(-100%)' : 'translateX(100%)';\r\n }\r\n\r\n close(): void {\r\n this.isClosing = true;\r\n }\r\n\r\n onAnimationDone(event: any): void {\r\n if (event.toState === 'void' && this.isClosing) {\r\n this.closed.emit(true);\r\n }\r\n }\r\n}\r\n","<div class=\"custom-window-backdrop\"></div>\r\n@if (!isClosing) {\r\n <div\r\n class=\"custom-window-modal\"\r\n [@slideInOut]=\"{\r\n value: '',\r\n params: {\r\n enterTransform: enterTransform,\r\n leaveTransform: leaveTransform,\r\n },\r\n }\"\r\n (@slideInOut.done)=\"onAnimationDone($event)\"\r\n >\r\n <ng-content select=\"[panelCanvas]\"></ng-content>\r\n <div class=\"custom-window-container\" [class.maximized]=\"maximized\">\r\n <ng-content select=\"[panelSidebar]\"></ng-content>\r\n <div class=\"resizable-panel\">\r\n <div class=\"panel-content\">\r\n <div\r\n class=\"modal-header flex items-center justify-between p-4 border-bottom-1 border-b border-surface-300\"\r\n >\r\n <h5 class=\"modal-title custom-window-title\">\r\n <ng-content select=\"[panelTitle]\"></ng-content>\r\n </h5>\r\n <div class=\"modal-controls flex items-center\">\r\n <ng-content select=\"[panelActions]\"></ng-content>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.x-close\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"close()\"\r\n ></mt-button>\r\n </div>\r\n </div>\r\n <div class=\"modal-body w-full\">\r\n <ng-content select=\"[panelChat]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n inject,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { Subscription } from 'rxjs';\r\nimport { FarisCanvasComponent } from './faris-canvas/faris-canvas.component';\r\nimport { FarisChatComponent } from './faris-chat/faris-chat.component';\r\nimport { FarisChatHistoryComponent } from './faris-chat-history/faris-chat-history.component';\r\nimport { FarisMessage } from './faris.model';\r\nimport { FarisService } from './faris.service';\r\nimport { FarisTranslatePipe } from './faris-translate.pipe';\r\nimport { ParseMentionPipe } from './mentions/mention.pipe';\r\nimport { MinimizablePopupComponent } from './minimizable-popup/minimizable-popup.component';\r\n\r\nexport interface CanvasData {\r\n visible: boolean;\r\n message: FarisMessage | null;\r\n conversationId: string | null;\r\n}\r\n\r\nconst initialCanvasData: CanvasData = {\r\n visible: false,\r\n message: null,\r\n conversationId: null,\r\n};\r\n\r\n@Component({\r\n selector: 'mt-faris',\r\n standalone: true,\r\n imports: [\r\n Button,\r\n MinimizablePopupComponent,\r\n ParseMentionPipe,\r\n FarisTranslatePipe,\r\n FarisCanvasComponent,\r\n FarisChatHistoryComponent,\r\n FarisChatComponent,\r\n ],\r\n templateUrl: './faris.component.html',\r\n styleUrl: './faris.component.scss',\r\n})\r\nexport class FarisComponent implements OnDestroy, OnChanges {\r\n @Input() showChatBot = false;\r\n @Output() showChatBotChange = new EventEmitter<boolean>();\r\n\r\n showChatHistory = false;\r\n userConversations: any[] = [];\r\n selectedConversation: any = null;\r\n canvasData: CanvasData = initialCanvasData;\r\n maximized = false;\r\n\r\n private subscription?: Subscription;\r\n private readonly subscriptions = new Subscription();\r\n private readonly farisService = inject(FarisService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n\r\n private getUserDetails(): void {\r\n this.subscriptions.add(this.farisService.getUserDetails().subscribe());\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!changes['showChatBot']) {\r\n return;\r\n }\r\n\r\n if (changes['showChatBot'].currentValue) {\r\n this.onChatOpened();\r\n return;\r\n }\r\n\r\n this.onChatClosed();\r\n }\r\n\r\n launchCanvas(item: FarisMessage): void {\r\n this.canvasData = {\r\n visible: true,\r\n message: item,\r\n conversationId: this.selectedConversation?.id ?? null,\r\n };\r\n }\r\n\r\n onDeleteConversationHandler({\r\n event,\r\n id,\r\n }: {\r\n event: Event;\r\n id: string | number;\r\n }): void {\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleteConversation(id);\r\n },\r\n reject: () => {},\r\n });\r\n }\r\n\r\n private deleteConversation(id: string | number): void {\r\n this.subscriptions.add(\r\n this.farisService.deleteConversation(String(id)).subscribe(() => {\r\n if (id === this.selectedConversation?.id) {\r\n this.openNewChat();\r\n }\r\n\r\n setTimeout(() => {\r\n this.getUserDetails();\r\n }, 250);\r\n }),\r\n );\r\n }\r\n\r\n selectConversation(conversation: any | null): void {\r\n if (this.selectedConversation !== conversation) {\r\n this.selectedConversation = conversation;\r\n this.canvasData = initialCanvasData;\r\n }\r\n }\r\n\r\n onSelectConversation(conversation: any): void {\r\n this.selectConversation(conversation);\r\n }\r\n\r\n onCloseHistory(): void {\r\n this.showChatHistory = false;\r\n }\r\n\r\n toggleChatHistory(): void {\r\n this.showChatHistory = !this.showChatHistory;\r\n if (this.showChatHistory) {\r\n this.getUserDetails();\r\n }\r\n }\r\n\r\n openFarisChat(): void {\r\n this.showChatBot = !this.showChatBot;\r\n this.showChatBotChange.emit(this.showChatBot);\r\n\r\n if (this.showChatBot) {\r\n this.onChatOpened();\r\n return;\r\n }\r\n\r\n this.onChatClosed();\r\n }\r\n\r\n getUniqueArrayByProperty<T>(array: T[]): T[] {\r\n const uniqueMap = new Map<string, T>();\r\n array.forEach((item: any, index) => {\r\n const key =\r\n item?.id ??\r\n item?.session_id ??\r\n item?.sessionId ??\r\n item?.conversation_id ??\r\n item?.conversationId ??\r\n `conversation-${index}`;\r\n uniqueMap.set(String(key), item as T);\r\n });\r\n\r\n return Array.from(uniqueMap.values());\r\n }\r\n\r\n closeChatBot(): void {\r\n this.showChatBot = false;\r\n this.showChatBotChange.emit(false);\r\n this.onChatClosed();\r\n this.selectedConversation = null;\r\n this.maximized = false;\r\n this.canvasData = initialCanvasData;\r\n }\r\n\r\n openNewChat(): void {\r\n this.selectConversation(null);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription && !this.subscription.closed) {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n if (!this.subscriptions.closed) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n\r\n private onChatOpened(): void {\r\n this.getUserDetails();\r\n\r\n if (this.subscription && !this.subscription.closed) {\r\n return;\r\n }\r\n\r\n this.subscriptions.add(\r\n (this.subscription = this.farisService.conversations.subscribe(\r\n (value) => {\r\n if (!value.length) {\r\n this.selectConversation(null);\r\n }\r\n\r\n this.userConversations = this.getUniqueArrayByProperty(value);\r\n },\r\n )),\r\n );\r\n }\r\n\r\n private onChatClosed(): void {\r\n this.farisService.conversations.next([]);\r\n this.showChatHistory = false;\r\n this.userConversations = [];\r\n this.farisService.clearSession();\r\n\r\n if (this.subscription && !this.subscription.closed) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","@if (showChatBot) {\r\n <mt-faris-popup\r\n class=\"chat-bot-popup\"\r\n [maximized]=\"maximized && !canvasData.visible\"\r\n (closed)=\"closeChatBot()\"\r\n >\r\n <div panelTitle class=\"faris-title-container\">\r\n <div class=\"gemini-ic has-hover\">\r\n <svg\r\n focusable=\"false\"\r\n viewBox=\"0 -960 960 960\"\r\n height=\"28\"\r\n width=\"28\"\r\n class=\"EiVpKc aoH\"\r\n >\r\n <path\r\n d=\"M480-80q2,0 2-2q0-82 31-154t85-126t126-85t154-31q2,0 2-2t-2-2q-82,0-154-31T598-598T513-724T482-878q0-2-2-2t-2,2q0,82-31,154T362-598T236-513T82-482q-2,0-2,2t2,2q82,0 154,31t126,85t85,126T478-82q0,2 2,2Z\"\r\n ></path>\r\n </svg>\r\n </div>\r\n <div class=\"faris-title-group\">\r\n <div class=\"faris-title\">{{ \"faris.ask-faris\" | translate }}</div>\r\n <div\r\n class=\"faris-subtitle\"\r\n [title]=\"(selectedConversation?.title | parseMention) ?? ''\"\r\n >\r\n {{\r\n (selectedConversation?.title | parseMention) ||\r\n (\"faris.new-conversation\" | translate)\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-container panelActions>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"general.plus\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"openNewChat()\"\r\n ></mt-button>\r\n <mt-button\r\n type=\"button\"\r\n [icon]=\"maximized ? 'layout.minimize-02' : 'layout.maximize-02'\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"maximized = !maximized\"\r\n ></mt-button>\r\n <mt-button\r\n type=\"button\"\r\n icon=\"custom.history-sp\"\r\n variant=\"text\"\r\n styleClass=\"faris-btn\"\r\n (click)=\"toggleChatHistory()\"\r\n ></mt-button>\r\n </ng-container>\r\n\r\n @if (canvasData.visible) {\r\n <mt-faris-canvas\r\n [message]=\"canvasData.message\"\r\n [conversationId]=\"canvasData.conversationId\"\r\n class=\"flex-1\"\r\n panelCanvas\r\n (closed)=\"canvasData.visible = false\"\r\n ></mt-faris-canvas>\r\n }\r\n\r\n <mt-faris-chat-history\r\n panelSidebar\r\n [userConversations]=\"userConversations\"\r\n [showChatHistory]=\"showChatHistory\"\r\n [selectedConversation]=\"selectedConversation\"\r\n (selectConversation)=\"onSelectConversation($event)\"\r\n (deleteConversationHandler)=\"onDeleteConversationHandler($event)\"\r\n (closeHistory)=\"onCloseHistory()\"\r\n >\r\n </mt-faris-chat-history>\r\n\r\n <div panelChat class=\"flex h-full w-full\">\r\n <mt-faris-chat\r\n class=\"w-full\"\r\n (launchCanvas)=\"launchCanvas($event)\"\r\n (selectConversation)=\"onSelectConversation($event)\"\r\n [selectedConversation]=\"selectedConversation\"\r\n >\r\n </mt-faris-chat>\r\n </div>\r\n </mt-faris-popup>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masterteam/faris",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"directory": "../../../dist/masterteam/faris",
|
|
6
6
|
"linkDirectory": false,
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"rxjs": "^7.8.2",
|
|
22
22
|
"tailwindcss": "^4.1.17",
|
|
23
23
|
"tailwindcss-primeui": "^0.6.1",
|
|
24
|
-
"@masterteam/
|
|
25
|
-
"@masterteam/
|
|
24
|
+
"@masterteam/icons": "^0.0.14",
|
|
25
|
+
"@masterteam/components": "^0.0.124"
|
|
26
26
|
},
|
|
27
27
|
"sideEffects": false,
|
|
28
28
|
"exports": {
|