@salla.sa/ui-ai-kit-core 2.2.0 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ai-agent-error.cjs.entry.js +2 -2
- package/dist/cjs/ai-card.cjs.entry.js +3 -3
- package/dist/cjs/ai-chat-container.cjs.entry.js +29 -3
- package/dist/cjs/ai-chat-header.cjs.entry.js +73 -11
- package/dist/cjs/ai-chat-message.cjs.entry.js +1 -1
- package/dist/cjs/ai-conversation-list.cjs.entry.js +11 -5
- package/dist/cjs/ai-conversation-summary.cjs.entry.js +1 -1
- package/dist/cjs/ai-icon.cjs.entry.js +1 -1
- package/dist/cjs/ai-in-chat-browser.cjs.entry.js +5 -23
- package/dist/cjs/ai-link.cjs.entry.js +2 -2
- package/dist/cjs/ai-loading.cjs.entry.js +2 -2
- package/dist/cjs/ai-message-input.cjs.entry.js +1 -1
- package/dist/cjs/ai-rating.cjs.entry.js +1 -1
- package/dist/cjs/ai-route-decision.cjs.entry.js +2 -2
- package/dist/cjs/ai-suggestion.cjs.entry.js +3 -3
- package/dist/cjs/ai-voice-input.cjs.entry.js +2 -2
- package/dist/cjs/{index-BQ8Az7-D.js → index-Cc05u4ND.js} +15 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/ui-ai-kit.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/ai-agent-error/ai-agent-error.js +1 -1
- package/dist/collection/components/ai-card/ai-card.js +2 -2
- package/dist/collection/components/ai-chat-container/ai-chat-container.js +110 -7
- package/dist/collection/components/ai-chat-header/ai-chat-header.js +204 -33
- package/dist/collection/components/ai-conversation-list/ai-conversation-list.css +20 -0
- package/dist/collection/components/ai-conversation-list/ai-conversation-list.js +29 -3
- package/dist/collection/components/ai-in-chat-browser/ai-in-chat-browser.css +0 -10
- package/dist/collection/components/ai-in-chat-browser/ai-in-chat-browser.js +5 -74
- package/dist/collection/components/ai-link/ai-link.js +1 -1
- package/dist/collection/components/ai-loading/ai-loading.js +1 -1
- package/dist/collection/components/ai-route-decision/ai-route-decision.js +1 -1
- package/dist/collection/components/ai-suggestion/ai-suggestion.js +2 -2
- package/dist/collection/components/ai-voice-input/ai-voice-input.js +1 -1
- package/dist/components/ai-agent-error.js +1 -1
- package/dist/components/ai-card.js +1 -1
- package/dist/components/ai-chat-container.js +1 -1
- package/dist/components/ai-chat-header.js +1 -1
- package/dist/components/ai-chat-message.js +2 -2
- package/dist/components/ai-conversation-list.js +1 -1
- package/dist/components/ai-conversation-summary.js +1 -1
- package/dist/components/ai-icon.js +1 -1
- package/dist/components/ai-in-chat-browser.js +1 -1
- package/dist/components/ai-link.js +1 -1
- package/dist/components/ai-loading.js +1 -1
- package/dist/components/ai-message-input.js +1 -1
- package/dist/components/ai-rating.js +1 -1
- package/dist/components/ai-route-decision.js +1 -1
- package/dist/components/ai-suggestion.js +1 -1
- package/dist/components/ai-voice-input.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/{p-CXJ3iEt8.js → p-BPkf7wZg.js} +1 -1
- package/dist/components/{p-B3gdcdCK.js → p-Ba0urr6Q.js} +1 -1
- package/dist/components/p-CFSr3KcL.js +1 -0
- package/dist/components/{p-C2LB8D3t.js → p-DZuBxUde.js} +1 -1
- package/dist/components/{p-NKAwri_g.js → p-bGFmyIp1.js} +1 -1
- package/dist/esm/ai-agent-error.entry.js +2 -2
- package/dist/esm/ai-card.entry.js +3 -3
- package/dist/esm/ai-chat-container.entry.js +29 -3
- package/dist/esm/ai-chat-header.entry.js +73 -11
- package/dist/esm/ai-chat-message.entry.js +1 -1
- package/dist/esm/ai-conversation-list.entry.js +11 -5
- package/dist/esm/ai-conversation-summary.entry.js +1 -1
- package/dist/esm/ai-icon.entry.js +1 -1
- package/dist/esm/ai-in-chat-browser.entry.js +5 -23
- package/dist/esm/ai-link.entry.js +2 -2
- package/dist/esm/ai-loading.entry.js +2 -2
- package/dist/esm/ai-message-input.entry.js +1 -1
- package/dist/esm/ai-rating.entry.js +1 -1
- package/dist/esm/ai-route-decision.entry.js +2 -2
- package/dist/esm/ai-suggestion.entry.js +3 -3
- package/dist/esm/ai-voice-input.entry.js +2 -2
- package/dist/esm/{index-BSQ0GkzI.js → index-VMEwYfaX.js} +15 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/ui-ai-kit.js +3 -3
- package/dist/types/components/ai-chat-container/ai-chat-container.d.ts +21 -1
- package/dist/types/components/ai-chat-header/ai-chat-header.d.ts +28 -3
- package/dist/types/components/ai-conversation-list/ai-conversation-list.d.ts +2 -0
- package/dist/types/components/ai-in-chat-browser/ai-in-chat-browser.d.ts +1 -10
- package/dist/types/components.d.ts +107 -53
- package/dist/types/index.d.ts +1 -0
- package/dist/ui-ai-kit/{p-1e8e6440.entry.js → p-062cad02.entry.js} +1 -1
- package/dist/ui-ai-kit/p-17e5d542.entry.js +1 -0
- package/dist/ui-ai-kit/{p-b88808a4.entry.js → p-187db371.entry.js} +1 -1
- package/dist/ui-ai-kit/p-1b247096.entry.js +1 -0
- package/dist/ui-ai-kit/p-278895fd.entry.js +1 -0
- package/dist/ui-ai-kit/{p-39a2d4c3.entry.js → p-338d55d3.entry.js} +1 -1
- package/dist/ui-ai-kit/{p-dac67692.entry.js → p-4359a116.entry.js} +1 -1
- package/dist/ui-ai-kit/{p-3a86919b.entry.js → p-5f005ec5.entry.js} +1 -1
- package/dist/ui-ai-kit/{p-849cd7e2.entry.js → p-6a4b66ed.entry.js} +1 -1
- package/dist/ui-ai-kit/{p-47797619.entry.js → p-6b644d32.entry.js} +1 -1
- package/dist/ui-ai-kit/{p-658d8b24.entry.js → p-6bd54e29.entry.js} +1 -1
- package/dist/ui-ai-kit/{p-eb40ffd0.entry.js → p-83f46030.entry.js} +2 -2
- package/dist/ui-ai-kit/{p-c9dca99e.entry.js → p-8fabdbe8.entry.js} +1 -1
- package/dist/ui-ai-kit/{p-BSQ0GkzI.js → p-VMEwYfaX.js} +2 -2
- package/dist/ui-ai-kit/{p-73cbb80b.entry.js → p-cae762e0.entry.js} +1 -1
- package/dist/ui-ai-kit/p-d02f2db5.entry.js +1 -0
- package/dist/ui-ai-kit/{p-78fb4ceb.entry.js → p-e6236df2.entry.js} +1 -1
- package/dist/ui-ai-kit/ui-ai-kit.esm.js +1 -1
- package/package.json +1 -1
- package/dist/components/p-D4mVoP6B.js +0 -1
- package/dist/components/p-DKsh1ZQX.js +0 -1
- package/dist/ui-ai-kit/p-29d84924.entry.js +0 -1
- package/dist/ui-ai-kit/p-77ef8015.entry.js +0 -1
- package/dist/ui-ai-kit/p-8cb807f3.entry.js +0 -1
- package/dist/ui-ai-kit/p-abd68089.entry.js +0 -1
|
@@ -14,7 +14,6 @@ export class AiChatHeader {
|
|
|
14
14
|
agentAvatar = '';
|
|
15
15
|
/** Human mode: show the back button */
|
|
16
16
|
showBack = true;
|
|
17
|
-
isDraggable = false;
|
|
18
17
|
/** Human mode: status indicator variant */
|
|
19
18
|
statusIndicator = 'online';
|
|
20
19
|
/** Browser mode: page title shown in the header */
|
|
@@ -27,18 +26,36 @@ export class AiChatHeader {
|
|
|
27
26
|
conversationActiveId = '';
|
|
28
27
|
/** Conversation list: show skeleton loading state */
|
|
29
28
|
conversationLoading = false;
|
|
29
|
+
/** Conversation list: show error state */
|
|
30
|
+
conversationError = false;
|
|
31
|
+
/** Conversation list: error message text */
|
|
32
|
+
conversationErrorText = 'تعذّر تحميل المحادثات';
|
|
33
|
+
/** Conversation list: retry button label */
|
|
34
|
+
conversationRetryLabel = 'إعادة المحاولة';
|
|
35
|
+
/** Conversation list: empty state label */
|
|
36
|
+
conversationEmptyText = 'لا توجد محادثات';
|
|
37
|
+
/** Conversation list: ID of the conversation currently being deleted — shows a spinner on that item */
|
|
38
|
+
conversationDeletingId = '';
|
|
30
39
|
/** Show a shimmer skeleton in place of the conversation title (e.g. while loading conversation) */
|
|
31
40
|
titleLoading = false;
|
|
32
41
|
avatarError = false;
|
|
33
42
|
dropdownOpen = false;
|
|
43
|
+
/** Internally managed — true when the parent ai-chat-container has position="float" */
|
|
44
|
+
isFloating = false;
|
|
45
|
+
parentPositionObserver = null;
|
|
34
46
|
/** Cancel / close button */
|
|
35
47
|
closeClick;
|
|
36
48
|
/** Pencil-edit button (agent mode) */
|
|
37
|
-
|
|
49
|
+
newChatClick;
|
|
38
50
|
/** Title / chevron click → open conversation list (agent mode) */
|
|
39
51
|
dropdownClick;
|
|
40
|
-
/** More options button */
|
|
52
|
+
/** More options button — also fires a composed event so ai-chat-container can auto-cycle position */
|
|
41
53
|
positionClick;
|
|
54
|
+
/**
|
|
55
|
+
* Composed + bubbling event that ai-chat-container listens to internally
|
|
56
|
+
* to automatically cycle its position. Fires alongside positionClick.
|
|
57
|
+
*/
|
|
58
|
+
headerPositionClick;
|
|
42
59
|
/** Back-arrow button (human mode) */
|
|
43
60
|
backClick;
|
|
44
61
|
/**
|
|
@@ -52,11 +69,50 @@ export class AiChatHeader {
|
|
|
52
69
|
conversationSelect;
|
|
53
70
|
/** Fired when a conversation delete button is clicked */
|
|
54
71
|
conversationDelete;
|
|
72
|
+
/** Fired when the retry button is clicked in the conversation list error state */
|
|
73
|
+
conversationRetry;
|
|
55
74
|
handleDocumentClick(event) {
|
|
56
75
|
if (this.dropdownOpen && !this.el.contains(event.target)) {
|
|
57
76
|
this.dropdownOpen = false;
|
|
58
77
|
}
|
|
59
78
|
}
|
|
79
|
+
connectedCallback() {
|
|
80
|
+
// Initial sync will happen in componentDidLoad
|
|
81
|
+
}
|
|
82
|
+
componentDidLoad() {
|
|
83
|
+
// By this point, the element is fully in the DOM and parent relationships are established
|
|
84
|
+
// Small delay to ensure parent custom elements are fully upgraded
|
|
85
|
+
requestAnimationFrame(() => {
|
|
86
|
+
this.syncFloatingState();
|
|
87
|
+
this.observeParentPosition();
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
disconnectedCallback() {
|
|
91
|
+
this.parentPositionObserver?.disconnect();
|
|
92
|
+
this.parentPositionObserver = null;
|
|
93
|
+
}
|
|
94
|
+
observeParentPosition() {
|
|
95
|
+
if (this.parentPositionObserver)
|
|
96
|
+
return; // Already observing
|
|
97
|
+
const container = this.el.closest('ai-chat-container');
|
|
98
|
+
if (container) {
|
|
99
|
+
this.parentPositionObserver = new MutationObserver(() => this.syncFloatingState());
|
|
100
|
+
this.parentPositionObserver.observe(container, { attributes: true, attributeFilter: ['position'] });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
syncFloatingState() {
|
|
104
|
+
const container = this.el.closest('ai-chat-container');
|
|
105
|
+
if (container) {
|
|
106
|
+
const newState = container.getAttribute('position') === 'float';
|
|
107
|
+
if (this.isFloating !== newState) {
|
|
108
|
+
this.isFloating = newState;
|
|
109
|
+
}
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (this.isFloating !== false) {
|
|
113
|
+
this.isFloating = false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
60
116
|
renderIcon(name, width, height) {
|
|
61
117
|
const icon = iconRegistry[name];
|
|
62
118
|
if (!icon)
|
|
@@ -74,7 +130,7 @@ export class AiChatHeader {
|
|
|
74
130
|
} }));
|
|
75
131
|
}
|
|
76
132
|
renderDragBtn() {
|
|
77
|
-
return (this.
|
|
133
|
+
return (this.isFloating && (h("button", { class: "action-btn drag-btn", "aria-label": "\u0633\u062D\u0628 / Drag", onPointerDown: (e) => {
|
|
78
134
|
e.preventDefault();
|
|
79
135
|
this.headerDragStart.emit({ clientX: e.clientX, clientY: e.clientY });
|
|
80
136
|
} }, this.renderIcon('drag', 11, 15))));
|
|
@@ -88,10 +144,14 @@ export class AiChatHeader {
|
|
|
88
144
|
e.stopPropagation();
|
|
89
145
|
this.conversationDelete.emit(e.detail);
|
|
90
146
|
};
|
|
147
|
+
handleConversationRetry = (e) => {
|
|
148
|
+
e.stopPropagation();
|
|
149
|
+
this.conversationRetry.emit();
|
|
150
|
+
};
|
|
91
151
|
renderConversationDropdown() {
|
|
92
152
|
if (!this.dropdownOpen || this.mode !== 'agent')
|
|
93
153
|
return null;
|
|
94
|
-
return (h("div", { class: "conversation-dropdown" }, h("ai-conversation-list", { items: this.conversationItems, activeId: this.conversationActiveId, loading: this.conversationLoading, onConversationSelect: this.handleConversationSelect, onConversationDelete: this.handleConversationDelete })));
|
|
154
|
+
return (h("div", { class: "conversation-dropdown" }, h("ai-conversation-list", { items: this.conversationItems, activeId: this.conversationActiveId, loading: this.conversationLoading, error: this.conversationError, errorText: this.conversationErrorText, retryLabel: this.conversationRetryLabel, emptyText: this.conversationEmptyText, deletingId: this.conversationDeletingId, onConversationSelect: this.handleConversationSelect, onConversationDelete: this.handleConversationDelete, onRetryClick: this.handleConversationRetry })));
|
|
95
155
|
}
|
|
96
156
|
renderAgentMode() {
|
|
97
157
|
return [
|
|
@@ -102,25 +162,25 @@ export class AiChatHeader {
|
|
|
102
162
|
this.dropdownOpen = !this.dropdownOpen;
|
|
103
163
|
this.dropdownClick.emit();
|
|
104
164
|
}, "aria-haspopup": "listbox", "aria-expanded": this.dropdownOpen, "aria-label": `${this.conversation}, افتح قائمة المحادثات` }, this.titleLoading ? (h("span", { class: "title-skeleton", "aria-busy": "true", "aria-label": "\u062C\u0627\u0631\u064A \u0627\u0644\u062A\u062D\u0645\u064A\u0644" })) : (h("span", { class: "title" }, this.conversation)), !this.titleLoading && (h("span", { class: `dropdown-chevron${this.dropdownOpen ? ' open' : ''}` }, this.renderIcon('chevron-down', 24, 24)))),
|
|
105
|
-
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\
|
|
165
|
+
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u0645\u062D\u0627\u062F\u062B\u0629 \u062C\u062F\u064A\u062F\u0629 / New Chat", onClick: () => this.newChatClick.emit() }, this.renderIcon('pencil-edit', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0627\u0644\u0639\u0631\u0636 / Position", onClick: () => { this.positionClick.emit(); this.headerPositionClick.emit(); } }, this.renderIcon('hand', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
|
|
106
166
|
];
|
|
107
167
|
}
|
|
108
168
|
renderHumanMode() {
|
|
109
169
|
return [
|
|
110
170
|
this.renderDragBtn(),
|
|
111
171
|
h("div", { class: "content human" }, this.showBack && (h("button", { class: "back-btn", "aria-label": "\u0631\u062C\u0648\u0639 / Back", onClick: () => this.backClick.emit() }, this.renderIcon('arrow-right', 24, 24))), h("div", { class: "avatar-wrapper" }, this.renderAvatar(), h("span", { class: `online-dot status-${this.statusIndicator}` }, this.renderIcon('online-dot', 10, 10))), h("div", { class: "text-block" }, h("span", { class: "agent-name" }, this.agentName), this.agentStatus && h("span", { class: "agent-status" }, this.agentStatus))),
|
|
112
|
-
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u0627\u0644\u0639\u0631\u0636 / Position", onClick: () => this.positionClick.emit() }, this.renderIcon('hand', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
|
|
172
|
+
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u0627\u0644\u0639\u0631\u0636 / Position", onClick: () => { this.positionClick.emit(); this.headerPositionClick.emit(); } }, this.renderIcon('hand', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
|
|
113
173
|
];
|
|
114
174
|
}
|
|
115
175
|
renderBrowserMode() {
|
|
116
176
|
return [
|
|
117
177
|
this.renderDragBtn(),
|
|
118
178
|
h("div", { class: "content browser" }, h("button", { class: "back-btn", "aria-label": "\u0631\u062C\u0648\u0639 / Back", onClick: () => this.backClick.emit() }, this.renderIcon('arrow-right', 24, 24)), h("span", { class: "browser-title" }, this.pageTitle), h("button", { class: "browser-link-btn", "aria-label": "\u0641\u062A\u062D \u0641\u064A \u0646\u0627\u0641\u0630\u0629 \u062C\u062F\u064A\u062F\u0629 / Open externally", onClick: () => this.openExternal.emit(this.pageUrl) }, this.renderIcon('link', 14, 14))),
|
|
119
|
-
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u0627\u0644\u0639\u0631\u0636 / Position", onClick: () => this.positionClick.emit() }, this.renderIcon('hand', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
|
|
179
|
+
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u0627\u0644\u0639\u0631\u0636 / Position", onClick: () => { this.positionClick.emit(); this.headerPositionClick.emit(); } }, this.renderIcon('hand', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
|
|
120
180
|
];
|
|
121
181
|
}
|
|
122
182
|
render() {
|
|
123
|
-
return (h(Host, { key: '
|
|
183
|
+
return (h(Host, { key: '874ee1e0eb62a59a4c9713111856594ef03dd435' }, h("div", { key: 'd8887800ad270c7878f41bdc930b2ca6b1280935', class: "header-wrapper" }, h("div", { key: 'a4fc7e86851cc1cdce6c686880b9f4ee33342fb7', class: "header-container" }, this.mode === 'agent' ? this.renderAgentMode() : this.mode === 'human' ? this.renderHumanMode() : this.renderBrowserMode()), this.renderConversationDropdown())));
|
|
124
184
|
}
|
|
125
185
|
static get is() { return "ai-chat-header"; }
|
|
126
186
|
static get encapsulation() { return "shadow"; }
|
|
@@ -256,26 +316,6 @@ export class AiChatHeader {
|
|
|
256
316
|
"attribute": "show-back",
|
|
257
317
|
"defaultValue": "true"
|
|
258
318
|
},
|
|
259
|
-
"isDraggable": {
|
|
260
|
-
"type": "boolean",
|
|
261
|
-
"mutable": false,
|
|
262
|
-
"complexType": {
|
|
263
|
-
"original": "boolean",
|
|
264
|
-
"resolved": "boolean",
|
|
265
|
-
"references": {}
|
|
266
|
-
},
|
|
267
|
-
"required": false,
|
|
268
|
-
"optional": false,
|
|
269
|
-
"docs": {
|
|
270
|
-
"tags": [],
|
|
271
|
-
"text": ""
|
|
272
|
-
},
|
|
273
|
-
"getter": false,
|
|
274
|
-
"setter": false,
|
|
275
|
-
"reflect": false,
|
|
276
|
-
"attribute": "is-draggable",
|
|
277
|
-
"defaultValue": "false"
|
|
278
|
-
},
|
|
279
319
|
"statusIndicator": {
|
|
280
320
|
"type": "string",
|
|
281
321
|
"mutable": false,
|
|
@@ -401,6 +441,106 @@ export class AiChatHeader {
|
|
|
401
441
|
"attribute": "conversation-loading",
|
|
402
442
|
"defaultValue": "false"
|
|
403
443
|
},
|
|
444
|
+
"conversationError": {
|
|
445
|
+
"type": "boolean",
|
|
446
|
+
"mutable": false,
|
|
447
|
+
"complexType": {
|
|
448
|
+
"original": "boolean",
|
|
449
|
+
"resolved": "boolean",
|
|
450
|
+
"references": {}
|
|
451
|
+
},
|
|
452
|
+
"required": false,
|
|
453
|
+
"optional": false,
|
|
454
|
+
"docs": {
|
|
455
|
+
"tags": [],
|
|
456
|
+
"text": "Conversation list: show error state"
|
|
457
|
+
},
|
|
458
|
+
"getter": false,
|
|
459
|
+
"setter": false,
|
|
460
|
+
"reflect": false,
|
|
461
|
+
"attribute": "conversation-error",
|
|
462
|
+
"defaultValue": "false"
|
|
463
|
+
},
|
|
464
|
+
"conversationErrorText": {
|
|
465
|
+
"type": "string",
|
|
466
|
+
"mutable": false,
|
|
467
|
+
"complexType": {
|
|
468
|
+
"original": "string",
|
|
469
|
+
"resolved": "string",
|
|
470
|
+
"references": {}
|
|
471
|
+
},
|
|
472
|
+
"required": false,
|
|
473
|
+
"optional": false,
|
|
474
|
+
"docs": {
|
|
475
|
+
"tags": [],
|
|
476
|
+
"text": "Conversation list: error message text"
|
|
477
|
+
},
|
|
478
|
+
"getter": false,
|
|
479
|
+
"setter": false,
|
|
480
|
+
"reflect": false,
|
|
481
|
+
"attribute": "conversation-error-text",
|
|
482
|
+
"defaultValue": "'\u062A\u0639\u0630\u0651\u0631 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u062D\u0627\u062F\u062B\u0627\u062A'"
|
|
483
|
+
},
|
|
484
|
+
"conversationRetryLabel": {
|
|
485
|
+
"type": "string",
|
|
486
|
+
"mutable": false,
|
|
487
|
+
"complexType": {
|
|
488
|
+
"original": "string",
|
|
489
|
+
"resolved": "string",
|
|
490
|
+
"references": {}
|
|
491
|
+
},
|
|
492
|
+
"required": false,
|
|
493
|
+
"optional": false,
|
|
494
|
+
"docs": {
|
|
495
|
+
"tags": [],
|
|
496
|
+
"text": "Conversation list: retry button label"
|
|
497
|
+
},
|
|
498
|
+
"getter": false,
|
|
499
|
+
"setter": false,
|
|
500
|
+
"reflect": false,
|
|
501
|
+
"attribute": "conversation-retry-label",
|
|
502
|
+
"defaultValue": "'\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629'"
|
|
503
|
+
},
|
|
504
|
+
"conversationEmptyText": {
|
|
505
|
+
"type": "string",
|
|
506
|
+
"mutable": false,
|
|
507
|
+
"complexType": {
|
|
508
|
+
"original": "string",
|
|
509
|
+
"resolved": "string",
|
|
510
|
+
"references": {}
|
|
511
|
+
},
|
|
512
|
+
"required": false,
|
|
513
|
+
"optional": false,
|
|
514
|
+
"docs": {
|
|
515
|
+
"tags": [],
|
|
516
|
+
"text": "Conversation list: empty state label"
|
|
517
|
+
},
|
|
518
|
+
"getter": false,
|
|
519
|
+
"setter": false,
|
|
520
|
+
"reflect": false,
|
|
521
|
+
"attribute": "conversation-empty-text",
|
|
522
|
+
"defaultValue": "'\u0644\u0627 \u062A\u0648\u062C\u062F \u0645\u062D\u0627\u062F\u062B\u0627\u062A'"
|
|
523
|
+
},
|
|
524
|
+
"conversationDeletingId": {
|
|
525
|
+
"type": "string",
|
|
526
|
+
"mutable": false,
|
|
527
|
+
"complexType": {
|
|
528
|
+
"original": "string",
|
|
529
|
+
"resolved": "string",
|
|
530
|
+
"references": {}
|
|
531
|
+
},
|
|
532
|
+
"required": false,
|
|
533
|
+
"optional": false,
|
|
534
|
+
"docs": {
|
|
535
|
+
"tags": [],
|
|
536
|
+
"text": "Conversation list: ID of the conversation currently being deleted \u2014 shows a spinner on that item"
|
|
537
|
+
},
|
|
538
|
+
"getter": false,
|
|
539
|
+
"setter": false,
|
|
540
|
+
"reflect": false,
|
|
541
|
+
"attribute": "conversation-deleting-id",
|
|
542
|
+
"defaultValue": "''"
|
|
543
|
+
},
|
|
404
544
|
"titleLoading": {
|
|
405
545
|
"type": "boolean",
|
|
406
546
|
"mutable": false,
|
|
@@ -426,7 +566,8 @@ export class AiChatHeader {
|
|
|
426
566
|
static get states() {
|
|
427
567
|
return {
|
|
428
568
|
"avatarError": {},
|
|
429
|
-
"dropdownOpen": {}
|
|
569
|
+
"dropdownOpen": {},
|
|
570
|
+
"isFloating": {}
|
|
430
571
|
};
|
|
431
572
|
}
|
|
432
573
|
static get events() {
|
|
@@ -446,8 +587,8 @@ export class AiChatHeader {
|
|
|
446
587
|
"references": {}
|
|
447
588
|
}
|
|
448
589
|
}, {
|
|
449
|
-
"method": "
|
|
450
|
-
"name": "
|
|
590
|
+
"method": "newChatClick",
|
|
591
|
+
"name": "newChatClick",
|
|
451
592
|
"bubbles": true,
|
|
452
593
|
"cancelable": true,
|
|
453
594
|
"composed": true,
|
|
@@ -483,7 +624,22 @@ export class AiChatHeader {
|
|
|
483
624
|
"composed": true,
|
|
484
625
|
"docs": {
|
|
485
626
|
"tags": [],
|
|
486
|
-
"text": "More options button"
|
|
627
|
+
"text": "More options button \u2014 also fires a composed event so ai-chat-container can auto-cycle position"
|
|
628
|
+
},
|
|
629
|
+
"complexType": {
|
|
630
|
+
"original": "void",
|
|
631
|
+
"resolved": "void",
|
|
632
|
+
"references": {}
|
|
633
|
+
}
|
|
634
|
+
}, {
|
|
635
|
+
"method": "headerPositionClick",
|
|
636
|
+
"name": "headerPositionClick",
|
|
637
|
+
"bubbles": true,
|
|
638
|
+
"cancelable": true,
|
|
639
|
+
"composed": true,
|
|
640
|
+
"docs": {
|
|
641
|
+
"tags": [],
|
|
642
|
+
"text": "Composed + bubbling event that ai-chat-container listens to internally\nto automatically cycle its position. Fires alongside positionClick."
|
|
487
643
|
},
|
|
488
644
|
"complexType": {
|
|
489
645
|
"original": "void",
|
|
@@ -565,6 +721,21 @@ export class AiChatHeader {
|
|
|
565
721
|
"resolved": "string",
|
|
566
722
|
"references": {}
|
|
567
723
|
}
|
|
724
|
+
}, {
|
|
725
|
+
"method": "conversationRetry",
|
|
726
|
+
"name": "conversationRetry",
|
|
727
|
+
"bubbles": true,
|
|
728
|
+
"cancelable": true,
|
|
729
|
+
"composed": true,
|
|
730
|
+
"docs": {
|
|
731
|
+
"tags": [],
|
|
732
|
+
"text": "Fired when the retry button is clicked in the conversation list error state"
|
|
733
|
+
},
|
|
734
|
+
"complexType": {
|
|
735
|
+
"original": "void",
|
|
736
|
+
"resolved": "void",
|
|
737
|
+
"references": {}
|
|
738
|
+
}
|
|
568
739
|
}];
|
|
569
740
|
}
|
|
570
741
|
static get elementRef() { return "el"; }
|
|
@@ -161,6 +161,26 @@
|
|
|
161
161
|
line-height: 0;
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
+
.delete-btn--deleting {
|
|
165
|
+
opacity: 1;
|
|
166
|
+
cursor: default;
|
|
167
|
+
pointer-events: none;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.delete-spinner {
|
|
171
|
+
display: block;
|
|
172
|
+
width: 12px;
|
|
173
|
+
height: 12px;
|
|
174
|
+
border: 2px solid var(--ai-border-default);
|
|
175
|
+
border-top-color: var(--ai-text-muted);
|
|
176
|
+
border-radius: 50%;
|
|
177
|
+
animation: delete-spin 0.7s linear infinite;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
@keyframes delete-spin {
|
|
181
|
+
to { transform: rotate(360deg); }
|
|
182
|
+
}
|
|
183
|
+
|
|
164
184
|
/* ── Empty state ───────────────────────────────────────── */
|
|
165
185
|
|
|
166
186
|
.empty-state {
|
|
@@ -15,6 +15,8 @@ export class AiConversationList {
|
|
|
15
15
|
errorText = 'تعذّر تحميل المحادثات';
|
|
16
16
|
/** Retry button label for error state */
|
|
17
17
|
retryLabel = 'إعادة المحاولة';
|
|
18
|
+
/** ID of the conversation currently being deleted — shows a spinner on that item */
|
|
19
|
+
deletingId = '';
|
|
18
20
|
conversationSelect;
|
|
19
21
|
conversationDelete;
|
|
20
22
|
retryClick;
|
|
@@ -65,7 +67,7 @@ export class AiConversationList {
|
|
|
65
67
|
}
|
|
66
68
|
render() {
|
|
67
69
|
const showEmpty = !this.loading && !this.error && this.items.length === 0;
|
|
68
|
-
return (h(Host, { key: '
|
|
70
|
+
return (h(Host, { key: '8cf17cedd5c41f0d6ffd2d06e557dc370041d1aa' }, h("div", { key: '50f5eeb57228f55d72acf517ed5eeb5d79e13a4b', class: "conversation-list" }, h("div", { key: '763f7cb557fb9abea75e08379d0ea9090b00ac1e', class: "list-scroll", role: "list" }, this.loading
|
|
69
71
|
? this.renderSkeleton()
|
|
70
72
|
: this.error
|
|
71
73
|
? this.renderError()
|
|
@@ -73,10 +75,14 @@ export class AiConversationList {
|
|
|
73
75
|
? this.renderEmpty()
|
|
74
76
|
: this.items.map(item => {
|
|
75
77
|
const isActive = item.id === this.activeId;
|
|
76
|
-
return (h("div", { key: item.id, class: { 'conv-item': true, 'conv-item--active': isActive }, role: "listitem", "aria-current": isActive ? 'true' : undefined, onClick: () => this.conversationSelect.emit(item.id) }, h("div", { class: "conv-item__body" }, h("p", { class: "conv-item__title" }, item.title), h("p", { class: "conv-item__preview" }, item.preview), h("div", { class: "conv-item__meta" }, h("span", { class: "conv-item__time" }, this.formatRelativeTime(item.timestamp)), item.rating != null && this.renderRatingDots(item.rating))), h("button", { class:
|
|
78
|
+
return (h("div", { key: item.id, class: { 'conv-item': true, 'conv-item--active': isActive }, role: "listitem", "aria-current": isActive ? 'true' : undefined, onClick: () => this.conversationSelect.emit(item.id) }, h("div", { class: "conv-item__body" }, h("p", { class: "conv-item__title" }, item.title), h("p", { class: "conv-item__preview" }, item.preview), h("div", { class: "conv-item__meta" }, h("span", { class: "conv-item__time" }, this.formatRelativeTime(item.timestamp)), item.rating != null && this.renderRatingDots(item.rating))), h("button", { class: { 'delete-btn': true, 'delete-btn--deleting': this.deletingId === item.id }, "aria-label": "\u062D\u0630\u0641 \u0627\u0644\u0645\u062D\u0627\u062F\u062B\u0629", disabled: this.deletingId === item.id, onClick: e => {
|
|
77
79
|
e.stopPropagation();
|
|
80
|
+
if (this.deletingId === item.id)
|
|
81
|
+
return;
|
|
78
82
|
this.conversationDelete.emit(item.id);
|
|
79
|
-
} }, this.
|
|
83
|
+
} }, this.deletingId === item.id
|
|
84
|
+
? h("span", { class: "delete-spinner", "aria-label": "\u062C\u0627\u0631\u064A \u0627\u0644\u062D\u0630\u0641" })
|
|
85
|
+
: this.renderIcon('cancel', 14, 14))));
|
|
80
86
|
})))));
|
|
81
87
|
}
|
|
82
88
|
static get is() { return "ai-conversation-list"; }
|
|
@@ -236,6 +242,26 @@ export class AiConversationList {
|
|
|
236
242
|
"reflect": false,
|
|
237
243
|
"attribute": "retry-label",
|
|
238
244
|
"defaultValue": "'\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629'"
|
|
245
|
+
},
|
|
246
|
+
"deletingId": {
|
|
247
|
+
"type": "string",
|
|
248
|
+
"mutable": false,
|
|
249
|
+
"complexType": {
|
|
250
|
+
"original": "string",
|
|
251
|
+
"resolved": "string",
|
|
252
|
+
"references": {}
|
|
253
|
+
},
|
|
254
|
+
"required": false,
|
|
255
|
+
"optional": false,
|
|
256
|
+
"docs": {
|
|
257
|
+
"tags": [],
|
|
258
|
+
"text": "ID of the conversation currently being deleted \u2014 shows a spinner on that item"
|
|
259
|
+
},
|
|
260
|
+
"getter": false,
|
|
261
|
+
"setter": false,
|
|
262
|
+
"reflect": false,
|
|
263
|
+
"attribute": "deleting-id",
|
|
264
|
+
"defaultValue": "''"
|
|
239
265
|
}
|
|
240
266
|
};
|
|
241
267
|
}
|
|
@@ -6,16 +6,6 @@
|
|
|
6
6
|
margin: calc(-1 * var(--ai-spacing-2xl, 16px));
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
/* ── Container ──────────────────────────────────────────────────── */
|
|
10
|
-
.browser-container {
|
|
11
|
-
display: flex;
|
|
12
|
-
flex-direction: column;
|
|
13
|
-
width: 100%;
|
|
14
|
-
height: 100%;
|
|
15
|
-
background: var(--ai-bg-card);
|
|
16
|
-
overflow: hidden;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
9
|
/* ── Content Area ───────────────────────────────────────────────── */
|
|
20
10
|
.browser-content {
|
|
21
11
|
flex: 1;
|
|
@@ -2,14 +2,8 @@ import { Host, h } from "@stencil/core";
|
|
|
2
2
|
export class AiInChatBrowser {
|
|
3
3
|
/** The URL to display inside the in-chat browser iframe */
|
|
4
4
|
url = '';
|
|
5
|
-
/** Page title
|
|
5
|
+
/** Page title used as the iframe's accessible title. Defaults to the URL hostname when empty. */
|
|
6
6
|
pageTitle = '';
|
|
7
|
-
/** Show the drag handle in the header (for floating containers) */
|
|
8
|
-
isDraggable = false;
|
|
9
|
-
/** Fired when the user clicks the back / close button to dismiss the browser */
|
|
10
|
-
browserClose;
|
|
11
|
-
/** Fired when the user clicks the external-link button */
|
|
12
|
-
browserOpenExternal;
|
|
13
7
|
isLoading = true;
|
|
14
8
|
hasError = false;
|
|
15
9
|
onUrlChange() {
|
|
@@ -20,8 +14,7 @@ export class AiInChatBrowser {
|
|
|
20
14
|
if (this.pageTitle)
|
|
21
15
|
return this.pageTitle;
|
|
22
16
|
try {
|
|
23
|
-
|
|
24
|
-
return parsed.hostname;
|
|
17
|
+
return new URL(this.url).hostname;
|
|
25
18
|
}
|
|
26
19
|
catch {
|
|
27
20
|
return this.url || '';
|
|
@@ -34,18 +27,9 @@ export class AiInChatBrowser {
|
|
|
34
27
|
this.isLoading = false;
|
|
35
28
|
this.hasError = true;
|
|
36
29
|
};
|
|
37
|
-
handleBack = () => {
|
|
38
|
-
this.browserClose.emit();
|
|
39
|
-
};
|
|
40
|
-
handleOpenExternal = () => {
|
|
41
|
-
if (this.url) {
|
|
42
|
-
window.open(this.url, '_blank', 'noopener,noreferrer');
|
|
43
|
-
}
|
|
44
|
-
this.browserOpenExternal.emit(this.url);
|
|
45
|
-
};
|
|
46
30
|
render() {
|
|
47
31
|
const displayTitle = this.getDisplayTitle();
|
|
48
|
-
return (h(Host, { key: '
|
|
32
|
+
return (h(Host, { key: '2d3bb12516396aaf8ca4df1e63e954cc06b2f01d' }, h("div", { key: '3c6f179eb59c982ab299910b5a1941d9b9d17d09', class: "browser-content" }, this.isLoading && (h("div", { key: '0228954a8cfaafed42f1efb5eb1ca5f160bc29e0', class: "browser-loading" }, h("div", { key: 'ccc49943a0af13afdbf1dcee8be0e3d712ac54d6', class: "loading-bar" }))), this.hasError ? (h("div", { class: "browser-error" }, h("span", { class: "error-text" }, "\u062A\u0639\u0630\u0651\u0631 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0635\u0641\u062D\u0629"), h("span", { class: "error-url" }, this.url))) : (this.url && (h("iframe", { class: "browser-iframe", src: this.url, onLoad: this.handleIframeLoad, onError: this.handleIframeError, sandbox: "allow-scripts allow-same-origin allow-forms allow-popups", referrerPolicy: "no-referrer", title: displayTitle }))))));
|
|
49
33
|
}
|
|
50
34
|
static get is() { return "ai-in-chat-browser"; }
|
|
51
35
|
static get encapsulation() { return "shadow"; }
|
|
@@ -83,7 +67,7 @@ export class AiInChatBrowser {
|
|
|
83
67
|
},
|
|
84
68
|
"pageTitle": {
|
|
85
69
|
"type": "string",
|
|
86
|
-
"mutable":
|
|
70
|
+
"mutable": false,
|
|
87
71
|
"complexType": {
|
|
88
72
|
"original": "string",
|
|
89
73
|
"resolved": "string",
|
|
@@ -93,33 +77,13 @@ export class AiInChatBrowser {
|
|
|
93
77
|
"optional": false,
|
|
94
78
|
"docs": {
|
|
95
79
|
"tags": [],
|
|
96
|
-
"text": "Page title
|
|
80
|
+
"text": "Page title used as the iframe's accessible title. Defaults to the URL hostname when empty."
|
|
97
81
|
},
|
|
98
82
|
"getter": false,
|
|
99
83
|
"setter": false,
|
|
100
84
|
"reflect": false,
|
|
101
85
|
"attribute": "page-title",
|
|
102
86
|
"defaultValue": "''"
|
|
103
|
-
},
|
|
104
|
-
"isDraggable": {
|
|
105
|
-
"type": "boolean",
|
|
106
|
-
"mutable": false,
|
|
107
|
-
"complexType": {
|
|
108
|
-
"original": "boolean",
|
|
109
|
-
"resolved": "boolean",
|
|
110
|
-
"references": {}
|
|
111
|
-
},
|
|
112
|
-
"required": false,
|
|
113
|
-
"optional": false,
|
|
114
|
-
"docs": {
|
|
115
|
-
"tags": [],
|
|
116
|
-
"text": "Show the drag handle in the header (for floating containers)"
|
|
117
|
-
},
|
|
118
|
-
"getter": false,
|
|
119
|
-
"setter": false,
|
|
120
|
-
"reflect": false,
|
|
121
|
-
"attribute": "is-draggable",
|
|
122
|
-
"defaultValue": "false"
|
|
123
87
|
}
|
|
124
88
|
};
|
|
125
89
|
}
|
|
@@ -129,39 +93,6 @@ export class AiInChatBrowser {
|
|
|
129
93
|
"hasError": {}
|
|
130
94
|
};
|
|
131
95
|
}
|
|
132
|
-
static get events() {
|
|
133
|
-
return [{
|
|
134
|
-
"method": "browserClose",
|
|
135
|
-
"name": "browserClose",
|
|
136
|
-
"bubbles": true,
|
|
137
|
-
"cancelable": true,
|
|
138
|
-
"composed": true,
|
|
139
|
-
"docs": {
|
|
140
|
-
"tags": [],
|
|
141
|
-
"text": "Fired when the user clicks the back / close button to dismiss the browser"
|
|
142
|
-
},
|
|
143
|
-
"complexType": {
|
|
144
|
-
"original": "void",
|
|
145
|
-
"resolved": "void",
|
|
146
|
-
"references": {}
|
|
147
|
-
}
|
|
148
|
-
}, {
|
|
149
|
-
"method": "browserOpenExternal",
|
|
150
|
-
"name": "browserOpenExternal",
|
|
151
|
-
"bubbles": true,
|
|
152
|
-
"cancelable": true,
|
|
153
|
-
"composed": true,
|
|
154
|
-
"docs": {
|
|
155
|
-
"tags": [],
|
|
156
|
-
"text": "Fired when the user clicks the external-link button"
|
|
157
|
-
},
|
|
158
|
-
"complexType": {
|
|
159
|
-
"original": "string",
|
|
160
|
-
"resolved": "string",
|
|
161
|
-
"references": {}
|
|
162
|
-
}
|
|
163
|
-
}];
|
|
164
|
-
}
|
|
165
96
|
static get watchers() {
|
|
166
97
|
return [{
|
|
167
98
|
"propName": "url",
|
|
@@ -18,7 +18,7 @@ export class AiLink {
|
|
|
18
18
|
}
|
|
19
19
|
render() {
|
|
20
20
|
const rel = this.rel || (this.target === '_blank' ? 'noopener noreferrer' : undefined);
|
|
21
|
-
return (h(Host, { key: '
|
|
21
|
+
return (h(Host, { key: '98087503b9a0803425b23f7ee00c95025493679d' }, h("span", { key: '41495d6375d1c539b777b3cd38e7b7af8fcbbb9b', class: "link__label" }, this.label, h("slot", { key: 'f416955b31900039f03b0e7ee2e537a22964d553' })), h("a", { key: '4f1d74ff6c600d17fcf80686aeebc5a92a4c7305', class: "link", href: this.href, target: this.target, rel: rel }, this.renderShareIcon())));
|
|
22
22
|
}
|
|
23
23
|
static get is() { return "ai-link"; }
|
|
24
24
|
static get encapsulation() { return "shadow"; }
|
|
@@ -72,7 +72,7 @@ export class AiLoading {
|
|
|
72
72
|
return (h("div", { class: "steps-card" }, h("div", { class: `steps-header ${this.collapsible ? 'collapsible' : ''}`, onClick: () => this.handleToggle() }, this.renderSparkleAvatar(this.currentAgent || undefined), h("div", { class: "steps-header-center" }, h("span", { class: "steps-title" }, this.headerTitle), headerBadge()), this.collapsible && h("button", { class: `collapse-btn ${this._expanded ? 'expanded' : ''}` }, this.renderIcon('chevron-down', 20, 20))), this._expanded && total === 0 && this.renderPlanningShimmer(), this._expanded && total > 0 && (h("div", { class: "steps-body" }, this.steps.map((step, i) => (h("div", { class: `step-row ${step.status}`, onClick: () => this.stepClick.emit(step) }, h("div", { class: "step-badge-col" }, this.renderStepBadge(step, i), i < this.steps.length - 1 && h("div", { class: "step-separator" })), h("div", { class: "step-content" }, h("span", { class: "step-text" }, step.action), step.reason && h("span", { class: "step-description" }, step.reason)))))))));
|
|
73
73
|
}
|
|
74
74
|
render() {
|
|
75
|
-
return h(Host, { key: '
|
|
75
|
+
return h(Host, { key: '2053fe1e8a1fcb1ec7441a5d32952ec1f186a5bb' }, this.mode === 'thinking' ? this.renderThinkingMode() : this.renderStepsMode());
|
|
76
76
|
}
|
|
77
77
|
static get is() { return "ai-loading"; }
|
|
78
78
|
static get encapsulation() { return "shadow"; }
|
|
@@ -31,7 +31,7 @@ export class AiRouteDecision {
|
|
|
31
31
|
this.routeExpand.emit(this._expanded);
|
|
32
32
|
}
|
|
33
33
|
render() {
|
|
34
|
-
return (h(Host, { key: '
|
|
34
|
+
return (h(Host, { key: 'fa9b966cf28225fa458fb00d1114fade995258c5' }, h("div", { key: '5263c969fd1672e1d302f06173dcdbe4450b162e', class: `route-pill ${this._expanded ? 'expanded' : ''}` }, h("button", { key: 'bf7800e828b0b61174f75343fcf9bca3134dfb2a', class: "route-pill-main", onClick: () => this.handleToggle() }, h("span", { key: '8531aeab0872f59417a37294e780d46962b21ead', class: "route-icon" }, this.renderIcon('route', 14, 14)), h("span", { key: '754529860d90a3ceb4f226ff85b1aecb40f4649e', class: "agent-label" }, this.agentIcon && h("span", { key: '39682d3a761d2cd6fae794fcb6036b0044f8f2dc', class: "agent-emoji", "aria-hidden": "true" }, this.agentIcon), this.selectedAgent), this.confidence > 0 && (h("span", { key: '36b3a921ab75c1faa0ece5f286703bf1b0aaca16', class: "confidence-badge" }, this.confidence, "%")), h("span", { key: 'c5199e986bf35d187cad16027f23e62addc45ecb', class: `expand-icon ${this._expanded ? 'expanded' : ''}` }, this.renderIcon('arrow-right', 12, 12))), this._expanded && (h("div", { key: '2a18ae8297ad0d71b14d01d250e15cff452c4b07', class: "route-details" }, this.reason && h("p", { key: '55f5123399929c590fc5c2122fd7220209e5ecac', class: "reason-text" }, this.reason), this.confidence > 0 && (h("div", { key: 'fbc69e8cb7820c87764f46630af8f4a77d2d879b', class: "confidence-bar-wrap" }, h("div", { key: '1db1d454ef64dcf9e4c673d0a26780bd55f563d2', class: "confidence-bar", style: { width: `${this.confidence}%` } }))), this.detectedLanguage && (h("div", { key: '8553d1a20678252b8d4f9a1e9f8b64ce3f509ae5', class: "meta-row" }, this.renderIcon('list', 12, 12), h("span", { key: 'ec104948a04498d06ed73be89778c5b6d84582a2', class: "lang-chip" }, this.detectedLanguage))))))));
|
|
35
35
|
}
|
|
36
36
|
static get is() { return "ai-route-decision"; }
|
|
37
37
|
static get encapsulation() { return "shadow"; }
|
|
@@ -11,10 +11,10 @@ export class AiSuggestion {
|
|
|
11
11
|
this.suggestionClick.emit(this.label);
|
|
12
12
|
}
|
|
13
13
|
render() {
|
|
14
|
-
return (h(Host, { key: '
|
|
14
|
+
return (h(Host, { key: '510e649f8778e2298270d320f0555c4d960fb056' }, h("button", { key: 'a4ee17cbd432596804279d8a852635608125452a', class: {
|
|
15
15
|
chip: true,
|
|
16
16
|
'chip--disabled': this.disabled,
|
|
17
|
-
}, disabled: this.disabled, onClick: () => this.handleClick() }, h("span", { key: '
|
|
17
|
+
}, disabled: this.disabled, onClick: () => this.handleClick() }, h("span", { key: 'cb2d97459b0dd6effe83bbfb81a0af9144759477', class: "chip__label" }, this.label, h("slot", { key: 'ce84f07883f24c216c45da9266af5160baea9cdc' })))));
|
|
18
18
|
}
|
|
19
19
|
static get is() { return "ai-suggestion"; }
|
|
20
20
|
static get encapsulation() { return "shadow"; }
|