@salla.sa/ui-ai-kit-core 2.2.1 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ai-card.cjs.entry.js +2 -2
- package/dist/cjs/ai-chat-header.cjs.entry.js +19 -2
- package/dist/cjs/ai-chat-message.cjs.entry.js +1 -1
- package/dist/cjs/ai-conversation-list.cjs.entry.js +10 -4
- package/dist/cjs/ai-conversation-summary.cjs.entry.js +1 -1
- package/dist/cjs/ai-in-chat-browser.cjs.entry.js +1 -1
- package/dist/cjs/ai-link.cjs.entry.js +1 -1
- package/dist/cjs/ai-route-decision.cjs.entry.js +1 -1
- package/dist/cjs/ai-suggestion.cjs.entry.js +2 -2
- package/dist/cjs/ai-voice-input.cjs.entry.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/ui-ai-kit.cjs.js +1 -1
- package/dist/collection/components/ai-card/ai-card.css +22 -0
- package/dist/collection/components/ai-card/ai-card.js +1 -1
- package/dist/collection/components/ai-chat-header/ai-chat-header.js +133 -2
- package/dist/collection/components/ai-chat-message/ai-chat-message.js +1 -1
- 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-conversation-summary/ai-conversation-summary.js +1 -1
- package/dist/collection/components/ai-in-chat-browser/ai-in-chat-browser.js +1 -1
- package/dist/collection/components/ai-link/ai-link.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-card.js +1 -1
- package/dist/components/ai-chat-header.js +1 -1
- package/dist/components/ai-chat-message.js +1 -1
- package/dist/components/ai-conversation-list.js +1 -1
- package/dist/components/ai-conversation-summary.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-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/{p-bGFmyIp1.js → p-BlCeQ9Hu.js} +1 -1
- package/dist/components/p-CFSr3KcL.js +1 -0
- package/dist/components/p-DCJWSYj-.js +1 -0
- package/dist/esm/ai-card.entry.js +2 -2
- package/dist/esm/ai-chat-header.entry.js +19 -2
- package/dist/esm/ai-chat-message.entry.js +1 -1
- package/dist/esm/ai-conversation-list.entry.js +10 -4
- package/dist/esm/ai-conversation-summary.entry.js +1 -1
- package/dist/esm/ai-in-chat-browser.entry.js +1 -1
- package/dist/esm/ai-link.entry.js +1 -1
- package/dist/esm/ai-route-decision.entry.js +1 -1
- package/dist/esm/ai-suggestion.entry.js +2 -2
- package/dist/esm/ai-voice-input.entry.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/ui-ai-kit.js +1 -1
- package/dist/types/components/ai-chat-header/ai-chat-header.d.ts +13 -0
- package/dist/types/components/ai-conversation-list/ai-conversation-list.d.ts +2 -0
- package/dist/types/components.d.ts +71 -0
- package/dist/ui-ai-kit/{p-5f005ec5.entry.js → p-11c960d8.entry.js} +1 -1
- package/dist/ui-ai-kit/p-17e5d542.entry.js +1 -0
- package/dist/ui-ai-kit/p-2fd7529e.entry.js +1 -0
- package/dist/ui-ai-kit/{p-d02f2db5.entry.js → p-79309690.entry.js} +1 -1
- package/dist/ui-ai-kit/{p-6bd54e29.entry.js → p-9a8614d0.entry.js} +1 -1
- package/dist/ui-ai-kit/{p-062cad02.entry.js → p-9af03dbd.entry.js} +1 -1
- package/dist/ui-ai-kit/{p-83f46030.entry.js → p-a1ee6005.entry.js} +1 -1
- package/dist/ui-ai-kit/{p-187db371.entry.js → p-a5f53c8c.entry.js} +1 -1
- package/dist/ui-ai-kit/p-cde479ea.entry.js +1 -0
- package/dist/ui-ai-kit/{p-e6236df2.entry.js → p-e1a2a622.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-Ba0urr6Q.js +0 -1
- package/dist/components/p-CJzVwMlS.js +0 -1
- package/dist/ui-ai-kit/p-8ac8febb.entry.js +0 -1
- package/dist/ui-ai-kit/p-8fabdbe8.entry.js +0 -1
- package/dist/ui-ai-kit/p-953d4348.entry.js +0 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var index = require('./index-Cc05u4ND.js');
|
|
4
4
|
|
|
5
|
-
const aiCardCss = () => `:host{--ai-card-border:1px solid var(--ai-border-default);--ai-card-radius:16px;--ai-card-padding:16px;--ai-card-gap:12px;--ai-card-shadow:var(--ai-shadow-sm);display:block}.card{background:var(--ai-bg-card);border:var(--ai-card-border);border-radius:var(--ai-card-radius);padding:var(--ai-card-padding);box-shadow:var(--ai-card-shadow);box-sizing:border-box;overflow:hidden;color:var(--ai-text-primary);width:100%;display:flex;flex-direction:column;gap:var(--ai-card-gap);text-align:start;font-size:14px;line-height:20px}.card--no-padding{padding:0}.card--no-shadow{box-shadow:none}`;
|
|
5
|
+
const aiCardCss = () => `:host{--ai-card-border:1px solid var(--ai-border-default);--ai-card-radius:16px;--ai-card-padding:16px;--ai-card-gap:12px;--ai-card-shadow:var(--ai-shadow-sm);--ai-card-header-padding:16px;--ai-card-footer-padding:16px;display:block}.card{background:var(--ai-bg-card);border:var(--ai-card-border);border-radius:var(--ai-card-radius);padding:var(--ai-card-padding);box-shadow:var(--ai-card-shadow);box-sizing:border-box;overflow:hidden;color:var(--ai-text-primary);width:100%;display:flex;flex-direction:column;gap:var(--ai-card-gap);text-align:start;font-size:14px;line-height:20px}.card--no-padding{padding:0}.card--no-shadow{box-shadow:none}::slotted([slot="header"]){padding:var(--ai-card-header-padding);margin:calc(var(--ai-card-padding) * -1) calc(var(--ai-card-padding) * -1) 0}::slotted([slot="footer"]){padding:var(--ai-card-footer-padding);margin:0 calc(var(--ai-card-padding) * -1) calc(var(--ai-card-padding) * -1)}.card--no-padding ::slotted([slot="header"]){margin:0}.card--no-padding ::slotted([slot="footer"]){margin:0}`;
|
|
6
6
|
|
|
7
7
|
const AiCard = class {
|
|
8
8
|
constructor(hostRef) {
|
|
@@ -17,7 +17,7 @@ const AiCard = class {
|
|
|
17
17
|
card: true,
|
|
18
18
|
'card--no-padding': this.noPadding,
|
|
19
19
|
'card--no-shadow': this.noShadow,
|
|
20
|
-
} }, index.h("slot", { key: '
|
|
20
|
+
} }, index.h("slot", { key: '149e85041e3318ea8e5dfa7ddf67e6236e49e6e8', name: "header" }), index.h("slot", { key: '774d0408e091a0603e5feac3bc5927cf698b5c8c' }), index.h("slot", { key: 'be0157314b280caa5c9b4f038ca6ca4aec2f8c8f', name: "footer" }))));
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
23
|
AiCard.style = aiCardCss();
|
|
@@ -18,6 +18,7 @@ const AiChatHeader = class {
|
|
|
18
18
|
this.openExternal = index.createEvent(this, "openExternal");
|
|
19
19
|
this.conversationSelect = index.createEvent(this, "conversationSelect");
|
|
20
20
|
this.conversationDelete = index.createEvent(this, "conversationDelete");
|
|
21
|
+
this.conversationRetry = index.createEvent(this, "conversationRetry");
|
|
21
22
|
}
|
|
22
23
|
get el() { return index.getElement(this); }
|
|
23
24
|
/** Layout variant */
|
|
@@ -44,6 +45,16 @@ const AiChatHeader = class {
|
|
|
44
45
|
conversationActiveId = '';
|
|
45
46
|
/** Conversation list: show skeleton loading state */
|
|
46
47
|
conversationLoading = false;
|
|
48
|
+
/** Conversation list: show error state */
|
|
49
|
+
conversationError = false;
|
|
50
|
+
/** Conversation list: error message text */
|
|
51
|
+
conversationErrorText = 'تعذّر تحميل المحادثات';
|
|
52
|
+
/** Conversation list: retry button label */
|
|
53
|
+
conversationRetryLabel = 'إعادة المحاولة';
|
|
54
|
+
/** Conversation list: empty state label */
|
|
55
|
+
conversationEmptyText = 'لا توجد محادثات';
|
|
56
|
+
/** Conversation list: ID of the conversation currently being deleted — shows a spinner on that item */
|
|
57
|
+
conversationDeletingId = '';
|
|
47
58
|
/** Show a shimmer skeleton in place of the conversation title (e.g. while loading conversation) */
|
|
48
59
|
titleLoading = false;
|
|
49
60
|
avatarError = false;
|
|
@@ -77,6 +88,8 @@ const AiChatHeader = class {
|
|
|
77
88
|
conversationSelect;
|
|
78
89
|
/** Fired when a conversation delete button is clicked */
|
|
79
90
|
conversationDelete;
|
|
91
|
+
/** Fired when the retry button is clicked in the conversation list error state */
|
|
92
|
+
conversationRetry;
|
|
80
93
|
handleDocumentClick(event) {
|
|
81
94
|
if (this.dropdownOpen && !this.el.contains(event.target)) {
|
|
82
95
|
this.dropdownOpen = false;
|
|
@@ -150,10 +163,14 @@ const AiChatHeader = class {
|
|
|
150
163
|
e.stopPropagation();
|
|
151
164
|
this.conversationDelete.emit(e.detail);
|
|
152
165
|
};
|
|
166
|
+
handleConversationRetry = (e) => {
|
|
167
|
+
e.stopPropagation();
|
|
168
|
+
this.conversationRetry.emit();
|
|
169
|
+
};
|
|
153
170
|
renderConversationDropdown() {
|
|
154
171
|
if (!this.dropdownOpen || this.mode !== 'agent')
|
|
155
172
|
return null;
|
|
156
|
-
return (index.h("div", { class: "conversation-dropdown" }, index.h("ai-conversation-list", { items: this.conversationItems, activeId: this.conversationActiveId, loading: this.conversationLoading, onConversationSelect: this.handleConversationSelect, onConversationDelete: this.handleConversationDelete })));
|
|
173
|
+
return (index.h("div", { class: "conversation-dropdown" }, index.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 })));
|
|
157
174
|
}
|
|
158
175
|
renderAgentMode() {
|
|
159
176
|
return [
|
|
@@ -182,7 +199,7 @@ const AiChatHeader = class {
|
|
|
182
199
|
];
|
|
183
200
|
}
|
|
184
201
|
render() {
|
|
185
|
-
return (index.h(index.Host, { key: '
|
|
202
|
+
return (index.h(index.Host, { key: '80236bfcbfac98d3efa3955f03aab4ef68c9cfea' }, index.h("div", { key: 'dcc4142bba1d5f07782dbc7b0a3ec287e0154223', class: "header-wrapper" }, index.h("div", { key: 'ca0ff9a2946cead0b86cb82390624894ed414378', class: "header-container" }, this.mode === 'agent' ? this.renderAgentMode() : this.mode === 'human' ? this.renderHumanMode() : this.renderBrowserMode()), this.renderConversationDropdown())));
|
|
186
203
|
}
|
|
187
204
|
};
|
|
188
205
|
AiChatHeader.style = aiChatHeaderCss();
|
|
@@ -1597,7 +1597,7 @@ const AiChatMessage = class {
|
|
|
1597
1597
|
} })), index.h("slot", null), showActions && this.renderActionsBar()), (this.agentName || this.timestamp) && (index.h("div", { class: "agent-info" }, this.agentName && index.h("span", { class: "agent-info-name" }, this.agentName), this.agentName && this.timestamp && this.renderIcon('eclipse', 10), this.timestamp && index.h("span", { class: "agent-info-time" }, this.getRelativeTime()))))));
|
|
1598
1598
|
}
|
|
1599
1599
|
render() {
|
|
1600
|
-
return index.h(index.Host, { key: '
|
|
1600
|
+
return index.h(index.Host, { key: 'f8a49971896742ae952d84efb1527ed0db440876' }, this.role === 'user' ? this.renderUserMessage() : this.renderAgentMessage());
|
|
1601
1601
|
}
|
|
1602
1602
|
};
|
|
1603
1603
|
AiChatMessage.style = aiChatMessageCss();
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var index = require('./index-Cc05u4ND.js');
|
|
4
4
|
var iconRegistry = require('./icon-registry-D-m8GW4D.js');
|
|
5
5
|
|
|
6
|
-
const aiConversationListCss = () => `:host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.conversation-list{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0;background:var(--ai-bg-surface)}.list-scroll{flex:1;min-height:0;overflow-y:auto;padding:0 8px 12px;scrollbar-width:thin;scrollbar-color:var(--ai-scrollbar-thumb) transparent}.list-scroll::-webkit-scrollbar{width:3px}.list-scroll::-webkit-scrollbar-track{background:transparent}.list-scroll::-webkit-scrollbar-thumb{background:var(--ai-scrollbar-thumb);border-radius:99px}.list-scroll::-webkit-scrollbar-thumb:hover{background:var(--ai-scrollbar-thumb-hover)}.conv-item{display:flex;align-items:flex-start;gap:6px;margin-top:6px;padding:10px 10px 10px 6px;border-radius:10px;cursor:pointer;transition:background 0.15s;position:relative}.conv-item:hover{background:var(--ai-bg-card)}.conv-item--active{background:var(--ai-bg-card);box-shadow:var(--ai-shadow-sm)}.conv-item__body{flex:1;min-width:0}.conv-item__title{margin:0 0 3px;font-size:13px;font-weight:600;color:var(--ai-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.conv-item__preview{margin:0 0 5px;font-size:12px;color:var(--ai-text-muted);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.conv-item__meta{display:flex;align-items:center;gap:8px}.conv-item__time{font-size:11px;color:var(--ai-text-muted);flex-shrink:0}.rating-dots{display:flex;align-items:center;gap:3px}.rating-dot{width:6px;height:6px;border-radius:50%;background:var(--ai-border-default);transition:background 0.15s}.rating-dot--filled{background:var(--ai-accent-warning, #ffaf44)}.delete-btn{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:transparent;border:none;border-radius:6px;cursor:pointer;color:var(--ai-text-muted);opacity:0;transition:opacity 0.15s, background 0.15s, color 0.15s;margin-block-start:2px}.conv-item:hover .delete-btn,.conv-item--active .delete-btn{opacity:1}.delete-btn:hover{background:var(--ai-status-danger-bg, rgba(239, 68, 68, 0.1));color:var(--ai-status-danger, #ef4444)}.delete-btn .icon-wrap{display:inline-flex;align-items:center;line-height:0}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 16px;text-align:center}.empty-state__icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;background:var(--ai-bg-card);color:var(--ai-text-muted);line-height:0}.empty-state__icon .icon-wrap{display:inline-flex;align-items:center;line-height:0}.empty-state__text{margin:0;font-size:13px;color:var(--ai-text-muted);line-height:1.4}.error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 16px;text-align:center}.error-state__icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;background:var(--ai-status-danger-bg, rgba(239, 68, 68, 0.1));color:var(--ai-status-danger, #ef4444);line-height:0}.error-state__icon .icon-wrap{display:inline-flex;align-items:center;line-height:0}.error-state__text{margin:0;font-size:13px;color:var(--ai-text-muted);line-height:1.4}.error-state__retry{display:inline-flex;align-items:center;gap:4px;margin-top:4px;padding:6px 14px;font-size:12px;font-weight:600;color:var(--ai-text-primary);background:var(--ai-bg-card);border:1px solid var(--ai-border-default);border-radius:8px;cursor:pointer;transition:background 0.15s, box-shadow 0.15s}.error-state__retry:hover{box-shadow:var(--ai-shadow-sm)}.error-state__retry .icon-wrap{display:inline-flex;align-items:center;line-height:0}.skeleton-list{display:flex;flex-direction:column;gap:4px}.skeleton-item{padding:10px;border-radius:10px;display:flex;flex-direction:column;gap:6px}.skeleton-line{border-radius:6px;background:var(--ai-shimmer-gradient, linear-gradient(90deg, rgba(0, 0, 0, 0.06) 25%, rgba(0, 0, 0, 0.1) 50%, rgba(0, 0, 0, 0.06) 75%));background-size:200% 100%;animation:shimmer 2s linear infinite;height:12px}.skeleton-line--title{width:65%;height:13px}.skeleton-line--preview{width:100%}.skeleton-line--meta{width:35%;height:10px}@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}`;
|
|
6
|
+
const aiConversationListCss = () => `:host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.conversation-list{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0;background:var(--ai-bg-surface)}.list-scroll{flex:1;min-height:0;overflow-y:auto;padding:0 8px 12px;scrollbar-width:thin;scrollbar-color:var(--ai-scrollbar-thumb) transparent}.list-scroll::-webkit-scrollbar{width:3px}.list-scroll::-webkit-scrollbar-track{background:transparent}.list-scroll::-webkit-scrollbar-thumb{background:var(--ai-scrollbar-thumb);border-radius:99px}.list-scroll::-webkit-scrollbar-thumb:hover{background:var(--ai-scrollbar-thumb-hover)}.conv-item{display:flex;align-items:flex-start;gap:6px;margin-top:6px;padding:10px 10px 10px 6px;border-radius:10px;cursor:pointer;transition:background 0.15s;position:relative}.conv-item:hover{background:var(--ai-bg-card)}.conv-item--active{background:var(--ai-bg-card);box-shadow:var(--ai-shadow-sm)}.conv-item__body{flex:1;min-width:0}.conv-item__title{margin:0 0 3px;font-size:13px;font-weight:600;color:var(--ai-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.conv-item__preview{margin:0 0 5px;font-size:12px;color:var(--ai-text-muted);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.conv-item__meta{display:flex;align-items:center;gap:8px}.conv-item__time{font-size:11px;color:var(--ai-text-muted);flex-shrink:0}.rating-dots{display:flex;align-items:center;gap:3px}.rating-dot{width:6px;height:6px;border-radius:50%;background:var(--ai-border-default);transition:background 0.15s}.rating-dot--filled{background:var(--ai-accent-warning, #ffaf44)}.delete-btn{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:transparent;border:none;border-radius:6px;cursor:pointer;color:var(--ai-text-muted);opacity:0;transition:opacity 0.15s, background 0.15s, color 0.15s;margin-block-start:2px}.conv-item:hover .delete-btn,.conv-item--active .delete-btn{opacity:1}.delete-btn:hover{background:var(--ai-status-danger-bg, rgba(239, 68, 68, 0.1));color:var(--ai-status-danger, #ef4444)}.delete-btn .icon-wrap{display:inline-flex;align-items:center;line-height:0}.delete-btn--deleting{opacity:1;cursor:default;pointer-events:none}.delete-spinner{display:block;width:12px;height:12px;border:2px solid var(--ai-border-default);border-top-color:var(--ai-text-muted);border-radius:50%;animation:delete-spin 0.7s linear infinite}@keyframes delete-spin{to{transform:rotate(360deg)}}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 16px;text-align:center}.empty-state__icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;background:var(--ai-bg-card);color:var(--ai-text-muted);line-height:0}.empty-state__icon .icon-wrap{display:inline-flex;align-items:center;line-height:0}.empty-state__text{margin:0;font-size:13px;color:var(--ai-text-muted);line-height:1.4}.error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 16px;text-align:center}.error-state__icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;background:var(--ai-status-danger-bg, rgba(239, 68, 68, 0.1));color:var(--ai-status-danger, #ef4444);line-height:0}.error-state__icon .icon-wrap{display:inline-flex;align-items:center;line-height:0}.error-state__text{margin:0;font-size:13px;color:var(--ai-text-muted);line-height:1.4}.error-state__retry{display:inline-flex;align-items:center;gap:4px;margin-top:4px;padding:6px 14px;font-size:12px;font-weight:600;color:var(--ai-text-primary);background:var(--ai-bg-card);border:1px solid var(--ai-border-default);border-radius:8px;cursor:pointer;transition:background 0.15s, box-shadow 0.15s}.error-state__retry:hover{box-shadow:var(--ai-shadow-sm)}.error-state__retry .icon-wrap{display:inline-flex;align-items:center;line-height:0}.skeleton-list{display:flex;flex-direction:column;gap:4px}.skeleton-item{padding:10px;border-radius:10px;display:flex;flex-direction:column;gap:6px}.skeleton-line{border-radius:6px;background:var(--ai-shimmer-gradient, linear-gradient(90deg, rgba(0, 0, 0, 0.06) 25%, rgba(0, 0, 0, 0.1) 50%, rgba(0, 0, 0, 0.06) 75%));background-size:200% 100%;animation:shimmer 2s linear infinite;height:12px}.skeleton-line--title{width:65%;height:13px}.skeleton-line--preview{width:100%}.skeleton-line--meta{width:35%;height:10px}@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}`;
|
|
7
7
|
|
|
8
8
|
const AiConversationList = class {
|
|
9
9
|
constructor(hostRef) {
|
|
@@ -26,6 +26,8 @@ const AiConversationList = class {
|
|
|
26
26
|
errorText = 'تعذّر تحميل المحادثات';
|
|
27
27
|
/** Retry button label for error state */
|
|
28
28
|
retryLabel = 'إعادة المحاولة';
|
|
29
|
+
/** ID of the conversation currently being deleted — shows a spinner on that item */
|
|
30
|
+
deletingId = '';
|
|
29
31
|
conversationSelect;
|
|
30
32
|
conversationDelete;
|
|
31
33
|
retryClick;
|
|
@@ -76,7 +78,7 @@ const AiConversationList = class {
|
|
|
76
78
|
}
|
|
77
79
|
render() {
|
|
78
80
|
const showEmpty = !this.loading && !this.error && this.items.length === 0;
|
|
79
|
-
return (index.h(index.Host, { key: '
|
|
81
|
+
return (index.h(index.Host, { key: '8cf17cedd5c41f0d6ffd2d06e557dc370041d1aa' }, index.h("div", { key: '50f5eeb57228f55d72acf517ed5eeb5d79e13a4b', class: "conversation-list" }, index.h("div", { key: '763f7cb557fb9abea75e08379d0ea9090b00ac1e', class: "list-scroll", role: "list" }, this.loading
|
|
80
82
|
? this.renderSkeleton()
|
|
81
83
|
: this.error
|
|
82
84
|
? this.renderError()
|
|
@@ -84,10 +86,14 @@ const AiConversationList = class {
|
|
|
84
86
|
? this.renderEmpty()
|
|
85
87
|
: this.items.map(item => {
|
|
86
88
|
const isActive = item.id === this.activeId;
|
|
87
|
-
return (index.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) }, index.h("div", { class: "conv-item__body" }, index.h("p", { class: "conv-item__title" }, item.title), index.h("p", { class: "conv-item__preview" }, item.preview), index.h("div", { class: "conv-item__meta" }, index.h("span", { class: "conv-item__time" }, this.formatRelativeTime(item.timestamp)), item.rating != null && this.renderRatingDots(item.rating))), index.h("button", { class:
|
|
89
|
+
return (index.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) }, index.h("div", { class: "conv-item__body" }, index.h("p", { class: "conv-item__title" }, item.title), index.h("p", { class: "conv-item__preview" }, item.preview), index.h("div", { class: "conv-item__meta" }, index.h("span", { class: "conv-item__time" }, this.formatRelativeTime(item.timestamp)), item.rating != null && this.renderRatingDots(item.rating))), index.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 => {
|
|
88
90
|
e.stopPropagation();
|
|
91
|
+
if (this.deletingId === item.id)
|
|
92
|
+
return;
|
|
89
93
|
this.conversationDelete.emit(item.id);
|
|
90
|
-
} }, this.
|
|
94
|
+
} }, this.deletingId === item.id
|
|
95
|
+
? index.h("span", { class: "delete-spinner", "aria-label": "\u062C\u0627\u0631\u064A \u0627\u0644\u062D\u0630\u0641" })
|
|
96
|
+
: this.renderIcon('cancel', 14, 14))));
|
|
91
97
|
})))));
|
|
92
98
|
}
|
|
93
99
|
};
|
|
@@ -25,7 +25,7 @@ const AiConversationSummary = class {
|
|
|
25
25
|
return index.h("span", { class: "icon-wrap", innerHTML: svg });
|
|
26
26
|
}
|
|
27
27
|
render() {
|
|
28
|
-
return (index.h(index.Host, { key: '
|
|
28
|
+
return (index.h(index.Host, { key: 'f69a767b9111f035799fbad9e26f6cd278d2cd5e' }, index.h("div", { key: '2b598f0ebcf118c75d58a92173d31250b7b71aaa', class: "summary-card" }, index.h("div", { key: 'fba36d83ef95feaaff7a88847c2ad8eed7b2a009', class: "summary-header" }, index.h("div", { key: 'f2840d65175456326a9f2c2d389b788f4dfc6622', class: "sparkle-avatar" }, this.renderIcon('sparkle', 14, 14)), index.h("span", { key: 'e90eca9ddf0b1b610a05d3a68fba69853c3c87e5', class: "summary-title" }, this.conversation), index.h("div", { key: 'ab9dd453aab0b04b00493dac0a7b5ad74b194190', class: "summary-badges" }, this.messageCount > 0 && (index.h("span", { key: 'e5664fb004a19d72334f157121125a01ff09f56a', class: "badge" }, this.renderIcon('list', 12, 12), this.messageCount)), this.language && (index.h("span", { key: 'af0784ee45ed3169514d198dc1236e781fe48ac6', class: "badge lang-badge" }, this.language)))), this.summary && (index.h("p", { key: 'c0c2be2118abbe62a31adc65e6fa8907f155bb49', class: "summary-body", ref: el => el && (el.textContent = this.summary) })), index.h("div", { key: '61c139e33e9e247508e830e319fc9cc014451526', class: "summary-slot" }, index.h("slot", { key: '5ebbbdb3319c6a8ca9f8e98a58c6336e7a25c159' })))));
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
31
|
AiConversationSummary.style = aiConversationSummaryCss();
|
|
@@ -37,7 +37,7 @@ const AiInChatBrowser = class {
|
|
|
37
37
|
};
|
|
38
38
|
render() {
|
|
39
39
|
const displayTitle = this.getDisplayTitle();
|
|
40
|
-
return (index.h(index.Host, { key: '
|
|
40
|
+
return (index.h(index.Host, { key: 'd79ede7857bc7edc13a4c8cdbbf5b4f7312d9766' }, index.h("div", { key: '57ccda6f9670e9ae2ca76b768f31ecf62b9ec8e9', class: "browser-content" }, this.isLoading && (index.h("div", { key: 'f868050d91fc24f9a13a760d34805b6a443ff865', class: "browser-loading" }, index.h("div", { key: 'b90a07a822a1978875fd5590783d9e9a6ac319b9', class: "loading-bar" }))), this.hasError ? (index.h("div", { class: "browser-error" }, index.h("span", { class: "error-text" }, "\u062A\u0639\u0630\u0651\u0631 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0635\u0641\u062D\u0629"), index.h("span", { class: "error-url" }, this.url))) : (this.url && (index.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 }))))));
|
|
41
41
|
}
|
|
42
42
|
static get watchers() { return {
|
|
43
43
|
"url": [{
|
|
@@ -26,7 +26,7 @@ const AiLink = class {
|
|
|
26
26
|
}
|
|
27
27
|
render() {
|
|
28
28
|
const rel = this.rel || (this.target === '_blank' ? 'noopener noreferrer' : undefined);
|
|
29
|
-
return (index.h(index.Host, { key: '
|
|
29
|
+
return (index.h(index.Host, { key: 'e0e34a4c2a3534a3b449bac613c6f7cb512420d3' }, index.h("span", { key: '5776ddc64676ecaabb4f36a0e9833026dc730c23', class: "link__label" }, this.label, index.h("slot", { key: '436a334a51bea342b839d5fad9743aaf6b66a94d' })), index.h("a", { key: '3880c1429a8a24a9dee700c9f0592ac673ce68f0', class: "link", href: this.href, target: this.target, rel: rel }, this.renderShareIcon())));
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
32
|
AiLink.style = aiLinkCss();
|
|
@@ -40,7 +40,7 @@ const AiRouteDecision = class {
|
|
|
40
40
|
this.routeExpand.emit(this._expanded);
|
|
41
41
|
}
|
|
42
42
|
render() {
|
|
43
|
-
return (index.h(index.Host, { key: '
|
|
43
|
+
return (index.h(index.Host, { key: 'f12718d142cff27d62c0a0299b029be2e2d88b86' }, index.h("div", { key: '4fcef90f887300c4884cd981737bf8ce8b796eca', class: `route-pill ${this._expanded ? 'expanded' : ''}` }, index.h("button", { key: '09eadc07b41b96fb56b4bcd937165de92507ac84', class: "route-pill-main", onClick: () => this.handleToggle() }, index.h("span", { key: 'd13744692a45c74976f89b582142ae09339015f5', class: "route-icon" }, this.renderIcon('route', 14, 14)), index.h("span", { key: '4f995cc09a72ba74310df17cf78735c27a910314', class: "agent-label" }, this.agentIcon && index.h("span", { key: '272dd78f38bbbb4ef845b7a41530d205368faf7e', class: "agent-emoji", "aria-hidden": "true" }, this.agentIcon), this.selectedAgent), this.confidence > 0 && (index.h("span", { key: 'a061317c9d5b8dad243dce0bb80e927eae04eb3d', class: "confidence-badge" }, this.confidence, "%")), index.h("span", { key: '4342bdf38aa85a5c5d6bd054504c91bccc7901e9', class: `expand-icon ${this._expanded ? 'expanded' : ''}` }, this.renderIcon('arrow-right', 12, 12))), this._expanded && (index.h("div", { key: 'ab5340148e832baafdd38e17a748a52b83b25c96', class: "route-details" }, this.reason && index.h("p", { key: '7854838ea405c5fdb5ebe11fb3df36a9898be445', class: "reason-text" }, this.reason), this.confidence > 0 && (index.h("div", { key: 'baf946426ad7cda94d2acfbb9f8945b5b40a823c', class: "confidence-bar-wrap" }, index.h("div", { key: 'a6e08f412706ce18e16030dd4d475d57befdd9e7', class: "confidence-bar", style: { width: `${this.confidence}%` } }))), this.detectedLanguage && (index.h("div", { key: '58af2dbca56082dcf2910cc44ac553d6f2af015a', class: "meta-row" }, this.renderIcon('list', 12, 12), index.h("span", { key: '63517ed8802764542de330897372c6a01348d0a6', class: "lang-chip" }, this.detectedLanguage))))))));
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
46
|
AiRouteDecision.style = aiRouteDecisionCss();
|
|
@@ -20,10 +20,10 @@ const AiSuggestion = class {
|
|
|
20
20
|
this.suggestionClick.emit(this.label);
|
|
21
21
|
}
|
|
22
22
|
render() {
|
|
23
|
-
return (index.h(index.Host, { key: '
|
|
23
|
+
return (index.h(index.Host, { key: 'c2eb388d152586755e9cc10ac57b519e8ff84b4d' }, index.h("button", { key: '0b9f6ec6d8c57365e2c29bfe1bfc33993d3cb498', class: {
|
|
24
24
|
chip: true,
|
|
25
25
|
'chip--disabled': this.disabled,
|
|
26
|
-
}, disabled: this.disabled, onClick: () => this.handleClick() }, index.h("span", { key: '
|
|
26
|
+
}, disabled: this.disabled, onClick: () => this.handleClick() }, index.h("span", { key: 'd4fabc4c8176cd6837e609bad369e8edfc779855', class: "chip__label" }, this.label, index.h("slot", { key: 'a1074453e53982f10fd2115c2b15d7a7b20eda07' })))));
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
AiSuggestion.style = aiSuggestionCss();
|
|
@@ -279,7 +279,7 @@ const VoiceInput = class {
|
|
|
279
279
|
};
|
|
280
280
|
render() {
|
|
281
281
|
const remaining = MAX_RECORDING_TIME - this.recordingDuration;
|
|
282
|
-
return (index.h(index.Host, { key: '
|
|
282
|
+
return (index.h(index.Host, { key: 'ca20fe9dda634af0da1ef6da59880279f0775a9f' }, index.h("div", { key: 'dc3328cc1ef74e9683bc6c34e1d3279b2ca2ffa2', class: "wrapper" }, index.h("div", { key: 'b4a4d2799b8c541dc03679686107cc486373e76b', class: `glow${this.state === 'recording' ? ' visible' : ''}`, "aria-hidden": "true" }), index.h("div", { key: 'f4fa8c638e68528dffd96db627bd80d4c7103143', class: "input-container" }, this.state === 'idle' ? (index.h("div", { class: "recording-row" }, index.h("button", { type: "button", class: "submit-button", onClick: this.startRecording, disabled: this.disabled, "aria-label": "Start recording" }, index.h("ai-icon", { name: "mic", size: 16 })), this.error && (index.h("div", { class: "error-message", role: "alert" }, this.error)))) : (index.h("div", { class: "recording-row" }, index.h("button", { type: "button", class: "cancel-button", onClick: this.cancelRecording, "aria-label": "Cancel" }, index.h("ai-icon", { name: "cancel", size: 14 })), index.h("div", { class: `timer${remaining <= 5 ? ' warning' : ''}` }, this.formatDuration(this.recordingDuration)), this.showWaveform && index.h("canvas", { ref: el => (this.canvasRef = el), class: "waveform", height: "32" }), index.h("button", { type: "button", class: `submit-button${this.submitPulse ? ' pulse' : ''}`, onClick: this.stopRecording, "aria-label": "Send" }, index.h("ai-icon", { name: "arrow-up", size: 14 }))))))));
|
|
283
283
|
}
|
|
284
284
|
};
|
|
285
285
|
VoiceInput.style = aiVoiceInputCss();
|
package/dist/cjs/loader.cjs.js
CHANGED
|
@@ -5,7 +5,7 @@ var index = require('./index-Cc05u4ND.js');
|
|
|
5
5
|
const defineCustomElements = async (win, options) => {
|
|
6
6
|
if (typeof window === 'undefined') return undefined;
|
|
7
7
|
await index.globalScripts();
|
|
8
|
-
return index.bootstrapLazy([["ai-message-input.cjs",[[513,"ai-message-input",{"placeholder":[1],"disabled":[4],"showVoiceButton":[4,"show-voice-button"],"maxLength":[2,"max-length"],"isRecording":[4,"is-recording"],"inputValue":[32],"showVoiceRecorder":[32],"isMultiline":[32],"setInputValue":[64]},null,{"isRecording":[{"onIsRecordingChange":0}]}]]],["ai-rating.cjs",[[513,"ai-rating",{"question":[1],"subtitle":[1],"successMessage":[1,"success-message"],"value":[1026],"disabled":[4],"hovered":[32],"submitted":[32]}]]],["ai-chat-header.cjs",[[513,"ai-chat-header",{"mode":[1],"conversation":[1],"agentName":[1,"agent-name"],"agentStatus":[1,"agent-status"],"agentAvatar":[1,"agent-avatar"],"showBack":[4,"show-back"],"statusIndicator":[1,"status-indicator"],"pageTitle":[1,"page-title"],"pageUrl":[1,"page-url"],"conversationItems":[16],"conversationActiveId":[1,"conversation-active-id"],"conversationLoading":[4,"conversation-loading"],"titleLoading":[4,"title-loading"],"avatarError":[32],"dropdownOpen":[32],"isFloating":[32]},[[4,"click","handleDocumentClick"]]]]],["ai-agent-error.cjs",[[513,"ai-agent-error",{"headline":[1],"message":[1],"errorCode":[1,"error-code"],"retryable":[4],"retryLabel":[1,"retry-label"],"dismissible":[4]}]]],["ai-chat-container.cjs",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1537],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"loading":[4],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"],"direction":[513],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64],"cyclePosition":[64]},[[0,"headerPositionClick","handleHeaderPositionClick"]],{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-chat-message.cjs",[[769,"ai-chat-message",{"role":[1],"content":[1],"format":[1],"agentName":[1,"agent-name"],"timestamp":[1],"showActions":[4,"show-actions"],"enableRegenerate":[4,"enable-regenerate"],"feedbackValue":[1025,"feedback-value"],"copySuccess":[32]}]]],["ai-conversation-summary.cjs",[[769,"ai-conversation-summary",{"conversation":[1],"summary":[1],"messageCount":[2,"message-count"],"language":[1]}]]],["ai-in-chat-browser.cjs",[[513,"ai-in-chat-browser",{"url":[1],"pageTitle":[1,"page-title"],"isLoading":[32],"hasError":[32]},null,{"url":[{"onUrlChange":0}]}]]],["ai-link.cjs",[[769,"ai-link",{"label":[1],"href":[1],"target":[1],"rel":[1]}]]],["ai-loading.cjs",[[513,"ai-loading",{"mode":[1],"statusText":[1,"status-text"],"thinkingSubtext":[1,"thinking-subtext"],"steps":[16],"headerTitle":[1,"header-title"],"currentAgent":[1,"current-agent"],"showAgentBadges":[4,"show-agent-badges"],"expanded":[1028],"collapsible":[4],"_expanded":[32]}]]],["ai-route-decision.cjs",[[513,"ai-route-decision",{"selectedAgent":[1,"selected-agent"],"agentIcon":[1,"agent-icon"],"reason":[1],"confidence":[2],"detectedLanguage":[1,"detected-language"],"expanded":[1028],"_expanded":[32]}]]],["ai-suggestion.cjs",[[769,"ai-suggestion",{"label":[1],"disabled":[4]}]]],["ai-voice-input.cjs",[[513,"ai-voice-input",{"disabled":[4],"showWaveform":[4,"show-waveform"],"autoStart":[4,"auto-start"],"errorText":[1,"error-text"],"waveformColor":[1,"waveform-color"],"state":[32],"error":[32],"recordingDuration":[32],"submitPulse":[32]}]]],["ai-card.cjs",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["ai-conversation-list.cjs",[[513,"ai-conversation-list",{"items":[16],"activeId":[1,"active-id"],"loading":[4],"emptyText":[1,"empty-text"],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"]}]]],["ai-icon.cjs",[[513,"ai-icon",{"name":[1],"size":[2]}]]]], options);
|
|
8
|
+
return index.bootstrapLazy([["ai-message-input.cjs",[[513,"ai-message-input",{"placeholder":[1],"disabled":[4],"showVoiceButton":[4,"show-voice-button"],"maxLength":[2,"max-length"],"isRecording":[4,"is-recording"],"inputValue":[32],"showVoiceRecorder":[32],"isMultiline":[32],"setInputValue":[64]},null,{"isRecording":[{"onIsRecordingChange":0}]}]]],["ai-rating.cjs",[[513,"ai-rating",{"question":[1],"subtitle":[1],"successMessage":[1,"success-message"],"value":[1026],"disabled":[4],"hovered":[32],"submitted":[32]}]]],["ai-chat-header.cjs",[[513,"ai-chat-header",{"mode":[1],"conversation":[1],"agentName":[1,"agent-name"],"agentStatus":[1,"agent-status"],"agentAvatar":[1,"agent-avatar"],"showBack":[4,"show-back"],"statusIndicator":[1,"status-indicator"],"pageTitle":[1,"page-title"],"pageUrl":[1,"page-url"],"conversationItems":[16],"conversationActiveId":[1,"conversation-active-id"],"conversationLoading":[4,"conversation-loading"],"conversationError":[4,"conversation-error"],"conversationErrorText":[1,"conversation-error-text"],"conversationRetryLabel":[1,"conversation-retry-label"],"conversationEmptyText":[1,"conversation-empty-text"],"conversationDeletingId":[1,"conversation-deleting-id"],"titleLoading":[4,"title-loading"],"avatarError":[32],"dropdownOpen":[32],"isFloating":[32]},[[4,"click","handleDocumentClick"]]]]],["ai-agent-error.cjs",[[513,"ai-agent-error",{"headline":[1],"message":[1],"errorCode":[1,"error-code"],"retryable":[4],"retryLabel":[1,"retry-label"],"dismissible":[4]}]]],["ai-chat-container.cjs",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1537],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"loading":[4],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"],"direction":[513],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64],"cyclePosition":[64]},[[0,"headerPositionClick","handleHeaderPositionClick"]],{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-chat-message.cjs",[[769,"ai-chat-message",{"role":[1],"content":[1],"format":[1],"agentName":[1,"agent-name"],"timestamp":[1],"showActions":[4,"show-actions"],"enableRegenerate":[4,"enable-regenerate"],"feedbackValue":[1025,"feedback-value"],"copySuccess":[32]}]]],["ai-conversation-summary.cjs",[[769,"ai-conversation-summary",{"conversation":[1],"summary":[1],"messageCount":[2,"message-count"],"language":[1]}]]],["ai-in-chat-browser.cjs",[[513,"ai-in-chat-browser",{"url":[1],"pageTitle":[1,"page-title"],"isLoading":[32],"hasError":[32]},null,{"url":[{"onUrlChange":0}]}]]],["ai-link.cjs",[[769,"ai-link",{"label":[1],"href":[1],"target":[1],"rel":[1]}]]],["ai-loading.cjs",[[513,"ai-loading",{"mode":[1],"statusText":[1,"status-text"],"thinkingSubtext":[1,"thinking-subtext"],"steps":[16],"headerTitle":[1,"header-title"],"currentAgent":[1,"current-agent"],"showAgentBadges":[4,"show-agent-badges"],"expanded":[1028],"collapsible":[4],"_expanded":[32]}]]],["ai-route-decision.cjs",[[513,"ai-route-decision",{"selectedAgent":[1,"selected-agent"],"agentIcon":[1,"agent-icon"],"reason":[1],"confidence":[2],"detectedLanguage":[1,"detected-language"],"expanded":[1028],"_expanded":[32]}]]],["ai-suggestion.cjs",[[769,"ai-suggestion",{"label":[1],"disabled":[4]}]]],["ai-voice-input.cjs",[[513,"ai-voice-input",{"disabled":[4],"showWaveform":[4,"show-waveform"],"autoStart":[4,"auto-start"],"errorText":[1,"error-text"],"waveformColor":[1,"waveform-color"],"state":[32],"error":[32],"recordingDuration":[32],"submitPulse":[32]}]]],["ai-card.cjs",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["ai-conversation-list.cjs",[[513,"ai-conversation-list",{"items":[16],"activeId":[1,"active-id"],"loading":[4],"emptyText":[1,"empty-text"],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"],"deletingId":[1,"deleting-id"]}]]],["ai-icon.cjs",[[513,"ai-icon",{"name":[1],"size":[2]}]]]], options);
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
exports.setNonce = index.setNonce;
|
|
@@ -18,7 +18,7 @@ var patchBrowser = () => {
|
|
|
18
18
|
|
|
19
19
|
patchBrowser().then(async (options) => {
|
|
20
20
|
await index.globalScripts();
|
|
21
|
-
return index.bootstrapLazy([["ai-message-input.cjs",[[513,"ai-message-input",{"placeholder":[1],"disabled":[4],"showVoiceButton":[4,"show-voice-button"],"maxLength":[2,"max-length"],"isRecording":[4,"is-recording"],"inputValue":[32],"showVoiceRecorder":[32],"isMultiline":[32],"setInputValue":[64]},null,{"isRecording":[{"onIsRecordingChange":0}]}]]],["ai-rating.cjs",[[513,"ai-rating",{"question":[1],"subtitle":[1],"successMessage":[1,"success-message"],"value":[1026],"disabled":[4],"hovered":[32],"submitted":[32]}]]],["ai-chat-header.cjs",[[513,"ai-chat-header",{"mode":[1],"conversation":[1],"agentName":[1,"agent-name"],"agentStatus":[1,"agent-status"],"agentAvatar":[1,"agent-avatar"],"showBack":[4,"show-back"],"statusIndicator":[1,"status-indicator"],"pageTitle":[1,"page-title"],"pageUrl":[1,"page-url"],"conversationItems":[16],"conversationActiveId":[1,"conversation-active-id"],"conversationLoading":[4,"conversation-loading"],"titleLoading":[4,"title-loading"],"avatarError":[32],"dropdownOpen":[32],"isFloating":[32]},[[4,"click","handleDocumentClick"]]]]],["ai-agent-error.cjs",[[513,"ai-agent-error",{"headline":[1],"message":[1],"errorCode":[1,"error-code"],"retryable":[4],"retryLabel":[1,"retry-label"],"dismissible":[4]}]]],["ai-chat-container.cjs",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1537],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"loading":[4],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"],"direction":[513],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64],"cyclePosition":[64]},[[0,"headerPositionClick","handleHeaderPositionClick"]],{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-chat-message.cjs",[[769,"ai-chat-message",{"role":[1],"content":[1],"format":[1],"agentName":[1,"agent-name"],"timestamp":[1],"showActions":[4,"show-actions"],"enableRegenerate":[4,"enable-regenerate"],"feedbackValue":[1025,"feedback-value"],"copySuccess":[32]}]]],["ai-conversation-summary.cjs",[[769,"ai-conversation-summary",{"conversation":[1],"summary":[1],"messageCount":[2,"message-count"],"language":[1]}]]],["ai-in-chat-browser.cjs",[[513,"ai-in-chat-browser",{"url":[1],"pageTitle":[1,"page-title"],"isLoading":[32],"hasError":[32]},null,{"url":[{"onUrlChange":0}]}]]],["ai-link.cjs",[[769,"ai-link",{"label":[1],"href":[1],"target":[1],"rel":[1]}]]],["ai-loading.cjs",[[513,"ai-loading",{"mode":[1],"statusText":[1,"status-text"],"thinkingSubtext":[1,"thinking-subtext"],"steps":[16],"headerTitle":[1,"header-title"],"currentAgent":[1,"current-agent"],"showAgentBadges":[4,"show-agent-badges"],"expanded":[1028],"collapsible":[4],"_expanded":[32]}]]],["ai-route-decision.cjs",[[513,"ai-route-decision",{"selectedAgent":[1,"selected-agent"],"agentIcon":[1,"agent-icon"],"reason":[1],"confidence":[2],"detectedLanguage":[1,"detected-language"],"expanded":[1028],"_expanded":[32]}]]],["ai-suggestion.cjs",[[769,"ai-suggestion",{"label":[1],"disabled":[4]}]]],["ai-voice-input.cjs",[[513,"ai-voice-input",{"disabled":[4],"showWaveform":[4,"show-waveform"],"autoStart":[4,"auto-start"],"errorText":[1,"error-text"],"waveformColor":[1,"waveform-color"],"state":[32],"error":[32],"recordingDuration":[32],"submitPulse":[32]}]]],["ai-card.cjs",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["ai-conversation-list.cjs",[[513,"ai-conversation-list",{"items":[16],"activeId":[1,"active-id"],"loading":[4],"emptyText":[1,"empty-text"],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"]}]]],["ai-icon.cjs",[[513,"ai-icon",{"name":[1],"size":[2]}]]]], options);
|
|
21
|
+
return index.bootstrapLazy([["ai-message-input.cjs",[[513,"ai-message-input",{"placeholder":[1],"disabled":[4],"showVoiceButton":[4,"show-voice-button"],"maxLength":[2,"max-length"],"isRecording":[4,"is-recording"],"inputValue":[32],"showVoiceRecorder":[32],"isMultiline":[32],"setInputValue":[64]},null,{"isRecording":[{"onIsRecordingChange":0}]}]]],["ai-rating.cjs",[[513,"ai-rating",{"question":[1],"subtitle":[1],"successMessage":[1,"success-message"],"value":[1026],"disabled":[4],"hovered":[32],"submitted":[32]}]]],["ai-chat-header.cjs",[[513,"ai-chat-header",{"mode":[1],"conversation":[1],"agentName":[1,"agent-name"],"agentStatus":[1,"agent-status"],"agentAvatar":[1,"agent-avatar"],"showBack":[4,"show-back"],"statusIndicator":[1,"status-indicator"],"pageTitle":[1,"page-title"],"pageUrl":[1,"page-url"],"conversationItems":[16],"conversationActiveId":[1,"conversation-active-id"],"conversationLoading":[4,"conversation-loading"],"conversationError":[4,"conversation-error"],"conversationErrorText":[1,"conversation-error-text"],"conversationRetryLabel":[1,"conversation-retry-label"],"conversationEmptyText":[1,"conversation-empty-text"],"conversationDeletingId":[1,"conversation-deleting-id"],"titleLoading":[4,"title-loading"],"avatarError":[32],"dropdownOpen":[32],"isFloating":[32]},[[4,"click","handleDocumentClick"]]]]],["ai-agent-error.cjs",[[513,"ai-agent-error",{"headline":[1],"message":[1],"errorCode":[1,"error-code"],"retryable":[4],"retryLabel":[1,"retry-label"],"dismissible":[4]}]]],["ai-chat-container.cjs",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1537],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"loading":[4],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"],"direction":[513],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64],"cyclePosition":[64]},[[0,"headerPositionClick","handleHeaderPositionClick"]],{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-chat-message.cjs",[[769,"ai-chat-message",{"role":[1],"content":[1],"format":[1],"agentName":[1,"agent-name"],"timestamp":[1],"showActions":[4,"show-actions"],"enableRegenerate":[4,"enable-regenerate"],"feedbackValue":[1025,"feedback-value"],"copySuccess":[32]}]]],["ai-conversation-summary.cjs",[[769,"ai-conversation-summary",{"conversation":[1],"summary":[1],"messageCount":[2,"message-count"],"language":[1]}]]],["ai-in-chat-browser.cjs",[[513,"ai-in-chat-browser",{"url":[1],"pageTitle":[1,"page-title"],"isLoading":[32],"hasError":[32]},null,{"url":[{"onUrlChange":0}]}]]],["ai-link.cjs",[[769,"ai-link",{"label":[1],"href":[1],"target":[1],"rel":[1]}]]],["ai-loading.cjs",[[513,"ai-loading",{"mode":[1],"statusText":[1,"status-text"],"thinkingSubtext":[1,"thinking-subtext"],"steps":[16],"headerTitle":[1,"header-title"],"currentAgent":[1,"current-agent"],"showAgentBadges":[4,"show-agent-badges"],"expanded":[1028],"collapsible":[4],"_expanded":[32]}]]],["ai-route-decision.cjs",[[513,"ai-route-decision",{"selectedAgent":[1,"selected-agent"],"agentIcon":[1,"agent-icon"],"reason":[1],"confidence":[2],"detectedLanguage":[1,"detected-language"],"expanded":[1028],"_expanded":[32]}]]],["ai-suggestion.cjs",[[769,"ai-suggestion",{"label":[1],"disabled":[4]}]]],["ai-voice-input.cjs",[[513,"ai-voice-input",{"disabled":[4],"showWaveform":[4,"show-waveform"],"autoStart":[4,"auto-start"],"errorText":[1,"error-text"],"waveformColor":[1,"waveform-color"],"state":[32],"error":[32],"recordingDuration":[32],"submitPulse":[32]}]]],["ai-card.cjs",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["ai-conversation-list.cjs",[[513,"ai-conversation-list",{"items":[16],"activeId":[1,"active-id"],"loading":[4],"emptyText":[1,"empty-text"],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"],"deletingId":[1,"deleting-id"]}]]],["ai-icon.cjs",[[513,"ai-icon",{"name":[1],"size":[2]}]]]], options);
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
exports.setNonce = index.setNonce;
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
--ai-card-padding: 16px;
|
|
6
6
|
--ai-card-gap: 12px;
|
|
7
7
|
--ai-card-shadow: var(--ai-shadow-sm);
|
|
8
|
+
--ai-card-header-padding: 16px;
|
|
9
|
+
--ai-card-footer-padding: 16px;
|
|
8
10
|
display: block;
|
|
9
11
|
}
|
|
10
12
|
|
|
@@ -35,3 +37,23 @@
|
|
|
35
37
|
.card--no-shadow {
|
|
36
38
|
box-shadow: none;
|
|
37
39
|
}
|
|
40
|
+
|
|
41
|
+
/* ─── Card Header & Footer ───────────────────────────────────────────────── */
|
|
42
|
+
::slotted([slot="header"]) {
|
|
43
|
+
padding: var(--ai-card-header-padding);
|
|
44
|
+
margin: calc(var(--ai-card-padding) * -1) calc(var(--ai-card-padding) * -1) 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
::slotted([slot="footer"]) {
|
|
48
|
+
padding: var(--ai-card-footer-padding);
|
|
49
|
+
margin: 0 calc(var(--ai-card-padding) * -1) calc(var(--ai-card-padding) * -1);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* When card has no padding, header and footer shouldn't have negative margins */
|
|
53
|
+
.card--no-padding ::slotted([slot="header"]) {
|
|
54
|
+
margin: 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.card--no-padding ::slotted([slot="footer"]) {
|
|
58
|
+
margin: 0;
|
|
59
|
+
}
|
|
@@ -9,7 +9,7 @@ export class AiCard {
|
|
|
9
9
|
card: true,
|
|
10
10
|
'card--no-padding': this.noPadding,
|
|
11
11
|
'card--no-shadow': this.noShadow,
|
|
12
|
-
} }, h("slot", { key: '
|
|
12
|
+
} }, h("slot", { key: '149e85041e3318ea8e5dfa7ddf67e6236e49e6e8', name: "header" }), h("slot", { key: '774d0408e091a0603e5feac3bc5927cf698b5c8c' }), h("slot", { key: 'be0157314b280caa5c9b4f038ca6ca4aec2f8c8f', name: "footer" }))));
|
|
13
13
|
}
|
|
14
14
|
static get is() { return "ai-card"; }
|
|
15
15
|
static get encapsulation() { return "shadow"; }
|
|
@@ -26,6 +26,16 @@ export class AiChatHeader {
|
|
|
26
26
|
conversationActiveId = '';
|
|
27
27
|
/** Conversation list: show skeleton loading state */
|
|
28
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 = '';
|
|
29
39
|
/** Show a shimmer skeleton in place of the conversation title (e.g. while loading conversation) */
|
|
30
40
|
titleLoading = false;
|
|
31
41
|
avatarError = false;
|
|
@@ -59,6 +69,8 @@ export class AiChatHeader {
|
|
|
59
69
|
conversationSelect;
|
|
60
70
|
/** Fired when a conversation delete button is clicked */
|
|
61
71
|
conversationDelete;
|
|
72
|
+
/** Fired when the retry button is clicked in the conversation list error state */
|
|
73
|
+
conversationRetry;
|
|
62
74
|
handleDocumentClick(event) {
|
|
63
75
|
if (this.dropdownOpen && !this.el.contains(event.target)) {
|
|
64
76
|
this.dropdownOpen = false;
|
|
@@ -132,10 +144,14 @@ export class AiChatHeader {
|
|
|
132
144
|
e.stopPropagation();
|
|
133
145
|
this.conversationDelete.emit(e.detail);
|
|
134
146
|
};
|
|
147
|
+
handleConversationRetry = (e) => {
|
|
148
|
+
e.stopPropagation();
|
|
149
|
+
this.conversationRetry.emit();
|
|
150
|
+
};
|
|
135
151
|
renderConversationDropdown() {
|
|
136
152
|
if (!this.dropdownOpen || this.mode !== 'agent')
|
|
137
153
|
return null;
|
|
138
|
-
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 })));
|
|
139
155
|
}
|
|
140
156
|
renderAgentMode() {
|
|
141
157
|
return [
|
|
@@ -164,7 +180,7 @@ export class AiChatHeader {
|
|
|
164
180
|
];
|
|
165
181
|
}
|
|
166
182
|
render() {
|
|
167
|
-
return (h(Host, { key: '
|
|
183
|
+
return (h(Host, { key: '80236bfcbfac98d3efa3955f03aab4ef68c9cfea' }, h("div", { key: 'dcc4142bba1d5f07782dbc7b0a3ec287e0154223', class: "header-wrapper" }, h("div", { key: 'ca0ff9a2946cead0b86cb82390624894ed414378', class: "header-container" }, this.mode === 'agent' ? this.renderAgentMode() : this.mode === 'human' ? this.renderHumanMode() : this.renderBrowserMode()), this.renderConversationDropdown())));
|
|
168
184
|
}
|
|
169
185
|
static get is() { return "ai-chat-header"; }
|
|
170
186
|
static get encapsulation() { return "shadow"; }
|
|
@@ -425,6 +441,106 @@ export class AiChatHeader {
|
|
|
425
441
|
"attribute": "conversation-loading",
|
|
426
442
|
"defaultValue": "false"
|
|
427
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
|
+
},
|
|
428
544
|
"titleLoading": {
|
|
429
545
|
"type": "boolean",
|
|
430
546
|
"mutable": false,
|
|
@@ -605,6 +721,21 @@ export class AiChatHeader {
|
|
|
605
721
|
"resolved": "string",
|
|
606
722
|
"references": {}
|
|
607
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
|
+
}
|
|
608
739
|
}];
|
|
609
740
|
}
|
|
610
741
|
static get elementRef() { return "el"; }
|
|
@@ -201,7 +201,7 @@ export class AiChatMessage {
|
|
|
201
201
|
} })), h("slot", null), showActions && this.renderActionsBar()), (this.agentName || this.timestamp) && (h("div", { class: "agent-info" }, this.agentName && h("span", { class: "agent-info-name" }, this.agentName), this.agentName && this.timestamp && this.renderIcon('eclipse', 10), this.timestamp && h("span", { class: "agent-info-time" }, this.getRelativeTime()))))));
|
|
202
202
|
}
|
|
203
203
|
render() {
|
|
204
|
-
return h(Host, { key: '
|
|
204
|
+
return h(Host, { key: 'f8a49971896742ae952d84efb1527ed0db440876' }, this.role === 'user' ? this.renderUserMessage() : this.renderAgentMessage());
|
|
205
205
|
}
|
|
206
206
|
static get is() { return "ai-chat-message"; }
|
|
207
207
|
static get encapsulation() { return "shadow"; }
|
|
@@ -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 {
|