@salla.sa/ui-ai-kit-core 1.1.1 → 2.0.0
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-chat-header.cjs.entry.js +5 -5
- package/dist/cjs/ai-conversation-summary.cjs.entry.js +2 -2
- package/dist/cjs/ai-voice-input.cjs.entry.js +15 -9
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/ui-ai-kit.cjs.js +1 -1
- package/dist/collection/components/ai-chat-header/ai-chat-header.js +6 -6
- package/dist/collection/components/ai-conversation-summary/ai-conversation-summary.js +4 -4
- package/dist/collection/components/ai-voice-input/ai-voice-input.css +1 -1
- package/dist/collection/components/ai-voice-input/ai-voice-input.js +14 -8
- package/dist/components/ai-chat-header.js +1 -1
- package/dist/components/ai-conversation-summary.js +1 -1
- package/dist/components/ai-message-input.js +1 -1
- package/dist/components/ai-voice-input.js +1 -1
- package/dist/components/p-CX1Yp79q.js +1 -0
- package/dist/esm/ai-chat-header.entry.js +5 -5
- package/dist/esm/ai-conversation-summary.entry.js +2 -2
- package/dist/esm/ai-voice-input.entry.js +15 -9
- 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 +1 -1
- package/dist/types/components/ai-conversation-summary/ai-conversation-summary.d.ts +1 -1
- package/dist/types/components.d.ts +13 -13
- package/dist/ui-ai-kit/p-76195745.entry.js +1 -0
- package/dist/ui-ai-kit/p-79c78d8e.entry.js +1 -0
- package/dist/ui-ai-kit/p-9c4c6c01.entry.js +1 -0
- package/dist/ui-ai-kit/ui-ai-kit.esm.js +1 -1
- package/package.json +1 -1
- package/dist/components/p-DCr8F_XV.js +0 -1
- package/dist/ui-ai-kit/p-21c4fc1f.entry.js +0 -1
- package/dist/ui-ai-kit/p-6d3505e9.entry.js +0 -1
- package/dist/ui-ai-kit/p-a9e4eaef.entry.js +0 -1
|
@@ -11,7 +11,7 @@ const AiChatHeader = class {
|
|
|
11
11
|
this.closeClick = index.createEvent(this, "closeClick");
|
|
12
12
|
this.editClick = index.createEvent(this, "editClick");
|
|
13
13
|
this.dropdownClick = index.createEvent(this, "dropdownClick");
|
|
14
|
-
this.
|
|
14
|
+
this.positionClick = index.createEvent(this, "positionClick");
|
|
15
15
|
this.backClick = index.createEvent(this, "backClick");
|
|
16
16
|
this.headerDragStart = index.createEvent(this, "headerDragStart");
|
|
17
17
|
}
|
|
@@ -38,7 +38,7 @@ const AiChatHeader = class {
|
|
|
38
38
|
/** Title / chevron click → open conversation list (agent mode) */
|
|
39
39
|
dropdownClick;
|
|
40
40
|
/** More options button */
|
|
41
|
-
|
|
41
|
+
positionClick;
|
|
42
42
|
/** Back-arrow button (human mode) */
|
|
43
43
|
backClick;
|
|
44
44
|
/**
|
|
@@ -70,18 +70,18 @@ const AiChatHeader = class {
|
|
|
70
70
|
return [
|
|
71
71
|
this.renderDragBtn(),
|
|
72
72
|
index.h("div", { class: "content agent dropdown-trigger", role: "button", onClick: () => this.dropdownClick.emit(), "aria-haspopup": "listbox", "aria-expanded": false, "aria-label": `${this.conversation}, افتح قائمة المحادثات` }, index.h("span", { class: "title" }, this.conversation), index.h("span", { class: "dropdown-chevron" }, this.renderIcon('chevron-down', 24, 24))),
|
|
73
|
-
index.h("div", { class: "actions" }, index.h("button", { class: "action-btn", "aria-label": "\u062A\u0639\u062F\u064A\u0644 / Edit", onClick: () => this.editClick.emit() }, this.renderIcon('pencil-edit', 22, 22)), index.h("button", { class: "action-btn", "aria-label": "\u0627\u0644\
|
|
73
|
+
index.h("div", { class: "actions" }, index.h("button", { class: "action-btn", "aria-label": "\u062A\u0639\u062F\u064A\u0644 / Edit", onClick: () => this.editClick.emit() }, this.renderIcon('pencil-edit', 22, 22)), index.h("button", { class: "action-btn", "aria-label": "\u0627\u0644\u0639\u0631\u0636 / Position", onClick: () => this.positionClick.emit() }, this.renderIcon('hand', 22, 22)), index.h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
|
|
74
74
|
];
|
|
75
75
|
}
|
|
76
76
|
renderHumanMode() {
|
|
77
77
|
return [
|
|
78
78
|
this.renderDragBtn(),
|
|
79
79
|
index.h("div", { class: "content human" }, this.showBack && (index.h("button", { class: "back-btn", "aria-label": "\u0631\u062C\u0648\u0639 / Back", onClick: () => this.backClick.emit() }, this.renderIcon('arrow-right', 24, 24))), index.h("div", { class: "avatar-wrapper" }, this.renderAvatar(), index.h("span", { class: `online-dot status-${this.statusIndicator}` }, this.renderIcon('online-dot', 10, 10))), index.h("div", { class: "text-block" }, index.h("span", { class: "agent-name" }, this.agentName), this.agentStatus && index.h("span", { class: "agent-status" }, this.agentStatus))),
|
|
80
|
-
index.h("div", { class: "actions" }, index.h("button", { class: "action-btn", "aria-label": "\u0627\u0644\
|
|
80
|
+
index.h("div", { class: "actions" }, index.h("button", { class: "action-btn", "aria-label": "\u0627\u0644\u0639\u0631\u0636 / Position", onClick: () => this.positionClick.emit() }, this.renderIcon('hand', 22, 22)), index.h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
|
|
81
81
|
];
|
|
82
82
|
}
|
|
83
83
|
render() {
|
|
84
|
-
return (index.h(index.Host, { key: '
|
|
84
|
+
return (index.h(index.Host, { key: 'f96f4d5c533747b2843706c165866769b834fb98' }, index.h("div", { key: '8643a8cb214cbe40f0ee1a0b64c483829b5de6c9', class: "header-container" }, this.mode === 'agent' ? this.renderAgentMode() : this.renderHumanMode())));
|
|
85
85
|
}
|
|
86
86
|
};
|
|
87
87
|
AiChatHeader.style = aiChatHeaderCss();
|
|
@@ -10,7 +10,7 @@ const AiConversationSummary = class {
|
|
|
10
10
|
index.registerInstance(this, hostRef);
|
|
11
11
|
}
|
|
12
12
|
/** Card heading */
|
|
13
|
-
|
|
13
|
+
conversation = 'ملخص المحادثة';
|
|
14
14
|
/** Summary body text */
|
|
15
15
|
summary = '';
|
|
16
16
|
/** Total message count shown as a badge */
|
|
@@ -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: 'ba825419953fd661993da1d66225739ebef76d74' }, index.h("div", { key: 'fe04fdadafde04a068c26b312f806d072d8d1bf7', class: "summary-card" }, index.h("div", { key: '4f3ec735cb2ac9dcd6a2f9692e1e4969a39a0131', class: "summary-header" }, index.h("div", { key: '4ba618456b44073d8ac93d79c29818fb9252b822', class: "sparkle-avatar" }, this.renderIcon('sparkle', 14, 14)), index.h("span", { key: 'bf6d22cfc8c5fc40b0199f46b36fcaceca8dc944', class: "summary-title" }, this.conversation), index.h("div", { key: '2a96497dcaa02da9e6f8a2bdcd3ec9f0e2f78b57', class: "summary-badges" }, this.messageCount > 0 && (index.h("span", { key: '679c9d24f8d34fc0d5b4dfe0c7ef1f5564c7eff9', class: "badge" }, this.renderIcon('list', 12, 12), this.messageCount)), this.language && (index.h("span", { key: '8a0f13ed6d7ec584ed22c9316af2758cb1ea5b24', class: "badge lang-badge" }, this.language)))), this.summary && (index.h("p", { key: '5a51b1b00c35daf289690c526de3525c9de40f7e', class: "summary-body", ref: el => el && (el.textContent = this.summary) })), index.h("div", { key: 'ccbb381d21d7c3e6ac8ebddc4a9a3ed26e1aa874', class: "summary-slot" }, index.h("slot", { key: '58a86a50dcef6c5d2534e664d309c194eb5c89df' })))));
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
31
|
AiConversationSummary.style = aiConversationSummaryCss();
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var index = require('./index-BkNg07SW.js');
|
|
4
4
|
|
|
5
|
-
const aiVoiceInputCss = () => `:host{display:block;width:100%}.wrapper{position:relative;padding:var(--Spacing-Sizes-lg, 12px)}.glow{position:absolute;bottom:20px;left:39px;right:39px;height:29px;border-radius:9999px;background:var(--ai-input-glow);filter:blur(20px);opacity:0;pointer-events:none;transition:opacity 0.2s ease}.glow.visible{opacity:0.9}.input-container{position:relative;background-color:var(--ai-bg-input);border-radius:var(--ai-input-border-radius, 9999px);border:1px solid var(--ai-border-default);box-shadow:var(--ai-shadow-sm);padding:var(--ai-input-padding, 12px);overflow:hidden}.recording-row{display:flex;align-items:center;gap:var(--ai-input-gap, 10px)}.cancel-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:32px;max-height:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-border-default);background-color:var(--ai-border-default);color:var(--ai-text-secondary);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.cancel-button:hover{background-color:var(--ai-bg-surface);border-color:var(--ai-bg-surface)}.submit-button{display:inline-flex;align-items:center;justify-content:center;height:32px;width:32px;min-width:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-send-button-active-border, var(--ai-accent));background-color:var(--ai-send-button-active-bg, var(--ai-accent));color:var(--ai-accent-text);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.submit-button:hover{background-color:var(--ai-send-button-active-hover-bg, var(--ai-accent));border-color:var(--ai-send-button-active-hover-border, var(--ai-accent))}@keyframes pulse-once{0%{transform:scale(1)}40%{transform:scale(1.18)}100%{transform:scale(1)}}.submit-button.pulse{animation:pulse-once 0.35s ease}.timer{font-size:13px;font-weight:500;color:var(--ai-text-secondary);min-width:36px;text-align:center;flex-shrink:0}.timer.warning{color:var(--ai-voice-timer-warning-color, var(--ai-danger-text))}.waveform{flex:1;height:32px
|
|
5
|
+
const aiVoiceInputCss = () => `:host{display:block;width:100%}.wrapper{position:relative;padding:var(--Spacing-Sizes-lg, 12px)}.glow{position:absolute;bottom:20px;left:39px;right:39px;height:29px;border-radius:9999px;background:var(--ai-input-glow);filter:blur(20px);opacity:0;pointer-events:none;transition:opacity 0.2s ease}.glow.visible{opacity:0.9}.input-container{position:relative;background-color:var(--ai-bg-input);border-radius:var(--ai-input-border-radius, 9999px);border:1px solid var(--ai-border-default);box-shadow:var(--ai-shadow-sm);padding:var(--ai-input-padding, 12px);overflow:hidden}.recording-row{display:flex;align-items:center;gap:var(--ai-input-gap, 10px)}.cancel-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:32px;max-height:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-border-default);background-color:var(--ai-border-default);color:var(--ai-text-secondary);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.cancel-button:hover{background-color:var(--ai-bg-surface);border-color:var(--ai-bg-surface)}.submit-button{display:inline-flex;align-items:center;justify-content:center;height:32px;width:32px;min-width:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-send-button-active-border, var(--ai-accent));background-color:var(--ai-send-button-active-bg, var(--ai-accent));color:var(--ai-accent-text);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.submit-button:hover{background-color:var(--ai-send-button-active-hover-bg, var(--ai-accent));border-color:var(--ai-send-button-active-hover-border, var(--ai-accent))}@keyframes pulse-once{0%{transform:scale(1)}40%{transform:scale(1.18)}100%{transform:scale(1)}}.submit-button.pulse{animation:pulse-once 0.35s ease}.timer{font-size:13px;font-weight:500;color:var(--ai-text-secondary);min-width:36px;text-align:center;flex-shrink:0}.timer.warning{color:var(--ai-voice-timer-warning-color, var(--ai-danger-text))}.waveform{flex:1;min-width:0;height:32px}.error-message{position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);background:var(--ai-voice-error-bg, var(--ai-danger-bg));color:var(--ai-voice-error-color, var(--ai-danger-text));font-size:11px;padding:6px 12px;border-radius:6px;white-space:nowrap;box-shadow:var(--ai-shadow-error);border:1px solid var(--ai-voice-error-border, var(--ai-danger-border));z-index:10}`;
|
|
6
6
|
|
|
7
7
|
const MAX_RECORDING_TIME = 60; // seconds
|
|
8
8
|
const VoiceInput = class {
|
|
@@ -198,21 +198,15 @@ const VoiceInput = class {
|
|
|
198
198
|
const ctx = canvas.getContext('2d');
|
|
199
199
|
if (!ctx)
|
|
200
200
|
return;
|
|
201
|
-
const barCount = 100;
|
|
202
201
|
const barWidth = 1;
|
|
203
202
|
const gap = 2;
|
|
203
|
+
const minHeight = 4;
|
|
204
204
|
const bufferLength = this.analyserRef.frequencyBinCount;
|
|
205
205
|
const dataArray = new Uint8Array(bufferLength);
|
|
206
|
-
const binsPerBar = Math.max(1, Math.floor(bufferLength / barCount));
|
|
207
|
-
const minHeight = 4;
|
|
208
206
|
// Resolve waveform color from prop → CSS var → fallback
|
|
209
207
|
const resolvedColor = this.waveformColor ||
|
|
210
208
|
getComputedStyle(this.el).getPropertyValue('--ai-waveform-color').trim() ||
|
|
211
209
|
'#9ca3af';
|
|
212
|
-
// Initialize lerp state
|
|
213
|
-
if (this.prevHeights.length !== barCount) {
|
|
214
|
-
this.prevHeights = new Array(barCount).fill(minHeight);
|
|
215
|
-
}
|
|
216
210
|
const drawRoundRect = (x, y, w, h, r) => {
|
|
217
211
|
ctx.beginPath();
|
|
218
212
|
if (typeof ctx.roundRect === 'function') {
|
|
@@ -237,6 +231,18 @@ const VoiceInput = class {
|
|
|
237
231
|
if (this.state !== 'recording')
|
|
238
232
|
return;
|
|
239
233
|
this.animationFrameId = requestAnimationFrame(draw);
|
|
234
|
+
// Sync canvas buffer to actual rendered size so it never overflows
|
|
235
|
+
const renderedWidth = canvas.offsetWidth;
|
|
236
|
+
if (renderedWidth > 0 && canvas.width !== renderedWidth) {
|
|
237
|
+
canvas.width = renderedWidth;
|
|
238
|
+
}
|
|
239
|
+
// Recompute barCount each frame based on actual canvas width
|
|
240
|
+
const barCount = Math.min(100, Math.floor(canvas.width / (barWidth + gap)));
|
|
241
|
+
const binsPerBar = Math.max(1, Math.floor(bufferLength / barCount));
|
|
242
|
+
// Re-initialize lerp state when barCount changes
|
|
243
|
+
if (this.prevHeights.length !== barCount) {
|
|
244
|
+
this.prevHeights = new Array(barCount).fill(minHeight);
|
|
245
|
+
}
|
|
240
246
|
this.analyserRef.getByteFrequencyData(dataArray);
|
|
241
247
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
242
248
|
const centerY = canvas.height / 2;
|
|
@@ -273,7 +279,7 @@ const VoiceInput = class {
|
|
|
273
279
|
};
|
|
274
280
|
render() {
|
|
275
281
|
const remaining = MAX_RECORDING_TIME - this.recordingDuration;
|
|
276
|
-
return (index.h(index.Host, { key: '
|
|
282
|
+
return (index.h(index.Host, { key: '225036c9c966084bcbdef9760d08cb677c985cc1' }, index.h("div", { key: '3cb3841dcb8a8e283cc325a200073ba3d540d7f8', class: "wrapper" }, index.h("div", { key: '1e71acf6ceb25d50d4131bf1a8021837756d0a41', class: `glow${this.state === 'recording' ? ' visible' : ''}`, "aria-hidden": "true" }), index.h("div", { key: 'c96027342fdf08edc990cae9f25ebb087dd33612', 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 }))))))));
|
|
277
283
|
}
|
|
278
284
|
};
|
|
279
285
|
VoiceInput.style = aiVoiceInputCss();
|
package/dist/cjs/loader.cjs.js
CHANGED
|
@@ -5,7 +5,7 @@ var index = require('./index-BkNg07SW.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-chat-container.cjs",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64]},null,{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-card.cjs",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["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"],"isDraggable":[4,"is-draggable"],"statusIndicator":[1,"status-indicator"],"avatarError":[32]}]]],["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-list.cjs",[[513,"ai-conversation-list",{"items":[1],"activeId":[1,"active-id"],"loading":[4]}]]],["ai-conversation-summary.cjs",[[769,"ai-conversation-summary",{"
|
|
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-chat-container.cjs",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64]},null,{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-card.cjs",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["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"],"isDraggable":[4,"is-draggable"],"statusIndicator":[1,"status-indicator"],"avatarError":[32]}]]],["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-list.cjs",[[513,"ai-conversation-list",{"items":[1],"activeId":[1,"active-id"],"loading":[4]}]]],["ai-conversation-summary.cjs",[[769,"ai-conversation-summary",{"conversation":[1],"summary":[1],"messageCount":[2,"message-count"],"language":[1]}]]],["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-rating.cjs",[[513,"ai-rating",{"question":[1],"subtitle":[1],"value":[1026],"disabled":[4],"hovered":[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-icon.cjs",[[513,"ai-icon",{"name":[1],"size":[2]}]]],["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]}]]]], 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-chat-container.cjs",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64]},null,{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-card.cjs",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["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"],"isDraggable":[4,"is-draggable"],"statusIndicator":[1,"status-indicator"],"avatarError":[32]}]]],["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-list.cjs",[[513,"ai-conversation-list",{"items":[1],"activeId":[1,"active-id"],"loading":[4]}]]],["ai-conversation-summary.cjs",[[769,"ai-conversation-summary",{"
|
|
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-chat-container.cjs",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64]},null,{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-card.cjs",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["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"],"isDraggable":[4,"is-draggable"],"statusIndicator":[1,"status-indicator"],"avatarError":[32]}]]],["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-list.cjs",[[513,"ai-conversation-list",{"items":[1],"activeId":[1,"active-id"],"loading":[4]}]]],["ai-conversation-summary.cjs",[[769,"ai-conversation-summary",{"conversation":[1],"summary":[1],"messageCount":[2,"message-count"],"language":[1]}]]],["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-rating.cjs",[[513,"ai-rating",{"question":[1],"subtitle":[1],"value":[1026],"disabled":[4],"hovered":[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-icon.cjs",[[513,"ai-icon",{"name":[1],"size":[2]}]]],["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]}]]]], options);
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
exports.setNonce = index.setNonce;
|
|
@@ -24,7 +24,7 @@ export class AiChatHeader {
|
|
|
24
24
|
/** Title / chevron click → open conversation list (agent mode) */
|
|
25
25
|
dropdownClick;
|
|
26
26
|
/** More options button */
|
|
27
|
-
|
|
27
|
+
positionClick;
|
|
28
28
|
/** Back-arrow button (human mode) */
|
|
29
29
|
backClick;
|
|
30
30
|
/**
|
|
@@ -56,18 +56,18 @@ export class AiChatHeader {
|
|
|
56
56
|
return [
|
|
57
57
|
this.renderDragBtn(),
|
|
58
58
|
h("div", { class: "content agent dropdown-trigger", role: "button", onClick: () => this.dropdownClick.emit(), "aria-haspopup": "listbox", "aria-expanded": false, "aria-label": `${this.conversation}, افتح قائمة المحادثات` }, h("span", { class: "title" }, this.conversation), h("span", { class: "dropdown-chevron" }, this.renderIcon('chevron-down', 24, 24))),
|
|
59
|
-
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u062A\u0639\u062F\u064A\u0644 / Edit", onClick: () => this.editClick.emit() }, this.renderIcon('pencil-edit', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0627\u0644\
|
|
59
|
+
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u062A\u0639\u062F\u064A\u0644 / Edit", onClick: () => this.editClick.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.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))),
|
|
60
60
|
];
|
|
61
61
|
}
|
|
62
62
|
renderHumanMode() {
|
|
63
63
|
return [
|
|
64
64
|
this.renderDragBtn(),
|
|
65
65
|
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))),
|
|
66
|
-
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u0627\u0644\
|
|
66
|
+
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))),
|
|
67
67
|
];
|
|
68
68
|
}
|
|
69
69
|
render() {
|
|
70
|
-
return (h(Host, { key: '
|
|
70
|
+
return (h(Host, { key: 'f96f4d5c533747b2843706c165866769b834fb98' }, h("div", { key: '8643a8cb214cbe40f0ee1a0b64c483829b5de6c9', class: "header-container" }, this.mode === 'agent' ? this.renderAgentMode() : this.renderHumanMode())));
|
|
71
71
|
}
|
|
72
72
|
static get is() { return "ai-chat-header"; }
|
|
73
73
|
static get encapsulation() { return "shadow"; }
|
|
@@ -297,8 +297,8 @@ export class AiChatHeader {
|
|
|
297
297
|
"references": {}
|
|
298
298
|
}
|
|
299
299
|
}, {
|
|
300
|
-
"method": "
|
|
301
|
-
"name": "
|
|
300
|
+
"method": "positionClick",
|
|
301
|
+
"name": "positionClick",
|
|
302
302
|
"bubbles": true,
|
|
303
303
|
"cancelable": true,
|
|
304
304
|
"composed": true,
|
|
@@ -2,7 +2,7 @@ import { Host, h } from "@stencil/core";
|
|
|
2
2
|
import { iconRegistry } from "../../utils/icon-registry";
|
|
3
3
|
export class AiConversationSummary {
|
|
4
4
|
/** Card heading */
|
|
5
|
-
|
|
5
|
+
conversation = 'ملخص المحادثة';
|
|
6
6
|
/** Summary body text */
|
|
7
7
|
summary = '';
|
|
8
8
|
/** Total message count shown as a badge */
|
|
@@ -17,7 +17,7 @@ export class AiConversationSummary {
|
|
|
17
17
|
return h("span", { class: "icon-wrap", innerHTML: svg });
|
|
18
18
|
}
|
|
19
19
|
render() {
|
|
20
|
-
return (h(Host, { key: '
|
|
20
|
+
return (h(Host, { key: 'ba825419953fd661993da1d66225739ebef76d74' }, h("div", { key: 'fe04fdadafde04a068c26b312f806d072d8d1bf7', class: "summary-card" }, h("div", { key: '4f3ec735cb2ac9dcd6a2f9692e1e4969a39a0131', class: "summary-header" }, h("div", { key: '4ba618456b44073d8ac93d79c29818fb9252b822', class: "sparkle-avatar" }, this.renderIcon('sparkle', 14, 14)), h("span", { key: 'bf6d22cfc8c5fc40b0199f46b36fcaceca8dc944', class: "summary-title" }, this.conversation), h("div", { key: '2a96497dcaa02da9e6f8a2bdcd3ec9f0e2f78b57', class: "summary-badges" }, this.messageCount > 0 && (h("span", { key: '679c9d24f8d34fc0d5b4dfe0c7ef1f5564c7eff9', class: "badge" }, this.renderIcon('list', 12, 12), this.messageCount)), this.language && (h("span", { key: '8a0f13ed6d7ec584ed22c9316af2758cb1ea5b24', class: "badge lang-badge" }, this.language)))), this.summary && (h("p", { key: '5a51b1b00c35daf289690c526de3525c9de40f7e', class: "summary-body", ref: el => el && (el.textContent = this.summary) })), h("div", { key: 'ccbb381d21d7c3e6ac8ebddc4a9a3ed26e1aa874', class: "summary-slot" }, h("slot", { key: '58a86a50dcef6c5d2534e664d309c194eb5c89df' })))));
|
|
21
21
|
}
|
|
22
22
|
static get is() { return "ai-conversation-summary"; }
|
|
23
23
|
static get encapsulation() { return "shadow"; }
|
|
@@ -33,7 +33,7 @@ export class AiConversationSummary {
|
|
|
33
33
|
}
|
|
34
34
|
static get properties() {
|
|
35
35
|
return {
|
|
36
|
-
"
|
|
36
|
+
"conversation": {
|
|
37
37
|
"type": "string",
|
|
38
38
|
"mutable": false,
|
|
39
39
|
"complexType": {
|
|
@@ -50,7 +50,7 @@ export class AiConversationSummary {
|
|
|
50
50
|
"getter": false,
|
|
51
51
|
"setter": false,
|
|
52
52
|
"reflect": false,
|
|
53
|
-
"attribute": "
|
|
53
|
+
"attribute": "conversation",
|
|
54
54
|
"defaultValue": "'\u0645\u0644\u062E\u0635 \u0627\u0644\u0645\u062D\u0627\u062F\u062B\u0629'"
|
|
55
55
|
},
|
|
56
56
|
"summary": {
|
|
@@ -188,21 +188,15 @@ export class VoiceInput {
|
|
|
188
188
|
const ctx = canvas.getContext('2d');
|
|
189
189
|
if (!ctx)
|
|
190
190
|
return;
|
|
191
|
-
const barCount = 100;
|
|
192
191
|
const barWidth = 1;
|
|
193
192
|
const gap = 2;
|
|
193
|
+
const minHeight = 4;
|
|
194
194
|
const bufferLength = this.analyserRef.frequencyBinCount;
|
|
195
195
|
const dataArray = new Uint8Array(bufferLength);
|
|
196
|
-
const binsPerBar = Math.max(1, Math.floor(bufferLength / barCount));
|
|
197
|
-
const minHeight = 4;
|
|
198
196
|
// Resolve waveform color from prop → CSS var → fallback
|
|
199
197
|
const resolvedColor = this.waveformColor ||
|
|
200
198
|
getComputedStyle(this.el).getPropertyValue('--ai-waveform-color').trim() ||
|
|
201
199
|
'#9ca3af';
|
|
202
|
-
// Initialize lerp state
|
|
203
|
-
if (this.prevHeights.length !== barCount) {
|
|
204
|
-
this.prevHeights = new Array(barCount).fill(minHeight);
|
|
205
|
-
}
|
|
206
200
|
const drawRoundRect = (x, y, w, h, r) => {
|
|
207
201
|
ctx.beginPath();
|
|
208
202
|
if (typeof ctx.roundRect === 'function') {
|
|
@@ -227,6 +221,18 @@ export class VoiceInput {
|
|
|
227
221
|
if (this.state !== 'recording')
|
|
228
222
|
return;
|
|
229
223
|
this.animationFrameId = requestAnimationFrame(draw);
|
|
224
|
+
// Sync canvas buffer to actual rendered size so it never overflows
|
|
225
|
+
const renderedWidth = canvas.offsetWidth;
|
|
226
|
+
if (renderedWidth > 0 && canvas.width !== renderedWidth) {
|
|
227
|
+
canvas.width = renderedWidth;
|
|
228
|
+
}
|
|
229
|
+
// Recompute barCount each frame based on actual canvas width
|
|
230
|
+
const barCount = Math.min(100, Math.floor(canvas.width / (barWidth + gap)));
|
|
231
|
+
const binsPerBar = Math.max(1, Math.floor(bufferLength / barCount));
|
|
232
|
+
// Re-initialize lerp state when barCount changes
|
|
233
|
+
if (this.prevHeights.length !== barCount) {
|
|
234
|
+
this.prevHeights = new Array(barCount).fill(minHeight);
|
|
235
|
+
}
|
|
230
236
|
this.analyserRef.getByteFrequencyData(dataArray);
|
|
231
237
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
232
238
|
const centerY = canvas.height / 2;
|
|
@@ -263,7 +269,7 @@ export class VoiceInput {
|
|
|
263
269
|
};
|
|
264
270
|
render() {
|
|
265
271
|
const remaining = MAX_RECORDING_TIME - this.recordingDuration;
|
|
266
|
-
return (h(Host, { key: '
|
|
272
|
+
return (h(Host, { key: '225036c9c966084bcbdef9760d08cb677c985cc1' }, h("div", { key: '3cb3841dcb8a8e283cc325a200073ba3d540d7f8', class: "wrapper" }, h("div", { key: '1e71acf6ceb25d50d4131bf1a8021837756d0a41', class: `glow${this.state === 'recording' ? ' visible' : ''}`, "aria-hidden": "true" }), h("div", { key: 'c96027342fdf08edc990cae9f25ebb087dd33612', class: "input-container" }, this.state === 'idle' ? (h("div", { class: "recording-row" }, h("button", { type: "button", class: "submit-button", onClick: this.startRecording, disabled: this.disabled, "aria-label": "Start recording" }, h("ai-icon", { name: "mic", size: 16 })), this.error && (h("div", { class: "error-message", role: "alert" }, this.error)))) : (h("div", { class: "recording-row" }, h("button", { type: "button", class: "cancel-button", onClick: this.cancelRecording, "aria-label": "Cancel" }, h("ai-icon", { name: "cancel", size: 14 })), h("div", { class: `timer${remaining <= 5 ? ' warning' : ''}` }, this.formatDuration(this.recordingDuration)), this.showWaveform && h("canvas", { ref: el => (this.canvasRef = el), class: "waveform", height: "32" }), h("button", { type: "button", class: `submit-button${this.submitPulse ? ' pulse' : ''}`, onClick: this.stopRecording, "aria-label": "Send" }, h("ai-icon", { name: "arrow-up", size: 14 }))))))));
|
|
267
273
|
}
|
|
268
274
|
static get is() { return "ai-voice-input"; }
|
|
269
275
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as t,H as a,d as i,h as e,c as n,t as
|
|
1
|
+
import{p as t,H as a,d as i,h as e,c as n,t as s}from"./p-DnO4dikr.js";import{i as r}from"./p-SJZ6Ujn9.js";const o=t(class extends a{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.closeClick=i(this,"closeClick"),this.editClick=i(this,"editClick"),this.dropdownClick=i(this,"dropdownClick"),this.positionClick=i(this,"positionClick"),this.backClick=i(this,"backClick"),this.headerDragStart=i(this,"headerDragStart")}mode="agent";conversation="محادثة جديدة";agentName="";agentStatus="";agentAvatar="";showBack=!0;isDraggable=!1;statusIndicator="online";avatarError=!1;closeClick;editClick;dropdownClick;positionClick;backClick;headerDragStart;renderIcon(t,a,i){const n=r[t];return n?e("span",{class:"icon-wrap",innerHTML:`<svg width="${a}" height="${i}" viewBox="${n.viewBox}" fill="none" xmlns="http://www.w3.org/2000/svg">${n.content}</svg>`}):null}renderAvatar(){const t=this.agentName?this.agentName.charAt(0):"?";return!this.agentAvatar||this.avatarError?e("div",{class:"avatar-fallback"},t):e("img",{class:"avatar",src:this.agentAvatar,alt:this.agentName,onError:()=>{this.avatarError=!0}})}renderDragBtn(){return this.isDraggable&&e("button",{class:"action-btn drag-btn","aria-label":"سحب / Drag",onPointerDown:t=>{t.preventDefault(),this.headerDragStart.emit({clientX:t.clientX,clientY:t.clientY})}},this.renderIcon("drag",11,15))}renderAgentMode(){return[this.renderDragBtn(),e("div",{class:"content agent dropdown-trigger",role:"button",onClick:()=>this.dropdownClick.emit(),"aria-haspopup":"listbox","aria-expanded":!1,"aria-label":this.conversation+", افتح قائمة المحادثات"},e("span",{class:"title"},this.conversation),e("span",{class:"dropdown-chevron"},this.renderIcon("chevron-down",24,24))),e("div",{class:"actions"},e("button",{class:"action-btn","aria-label":"تعديل / Edit",onClick:()=>this.editClick.emit()},this.renderIcon("pencil-edit",22,22)),e("button",{class:"action-btn","aria-label":"العرض / Position",onClick:()=>this.positionClick.emit()},this.renderIcon("hand",22,22)),e("button",{class:"action-btn","aria-label":"إغلاق / Close",onClick:()=>this.closeClick.emit()},this.renderIcon("cancel",22,22)))]}renderHumanMode(){return[this.renderDragBtn(),e("div",{class:"content human"},this.showBack&&e("button",{class:"back-btn","aria-label":"رجوع / Back",onClick:()=>this.backClick.emit()},this.renderIcon("arrow-right",24,24)),e("div",{class:"avatar-wrapper"},this.renderAvatar(),e("span",{class:"online-dot status-"+this.statusIndicator},this.renderIcon("online-dot",10,10))),e("div",{class:"text-block"},e("span",{class:"agent-name"},this.agentName),this.agentStatus&&e("span",{class:"agent-status"},this.agentStatus))),e("div",{class:"actions"},e("button",{class:"action-btn","aria-label":"العرض / Position",onClick:()=>this.positionClick.emit()},this.renderIcon("hand",22,22)),e("button",{class:"action-btn","aria-label":"إغلاق / Close",onClick:()=>this.closeClick.emit()},this.renderIcon("cancel",22,22)))]}render(){return e(n,{key:"f96f4d5c533747b2843706c165866769b834fb98"},e("div",{key:"8643a8cb214cbe40f0ee1a0b64c483829b5de6c9",class:"header-container"},"agent"===this.mode?this.renderAgentMode():this.renderHumanMode()))}static get style(){return":host{display:block}.header-container{display:flex;align-items:center;gap:8px;padding:16px;background:var(--ai-bg-card);border-bottom:1px solid var(--ai-border-light);width:100%;box-sizing:border-box}.drag-btn{cursor:grab;color:var(--ai-text-muted)}.drag-btn:active{cursor:grabbing}.action-btn,.back-btn{width:40px;height:40px;padding:4px;display:flex;align-items:center;justify-content:center;background:var(--ai-bg-card);border:none;border-radius:8px;cursor:pointer;flex-shrink:0;color:var(--ai-text-primary);transition:background 0.15s ease}.action-btn:hover,.back-btn:hover{background:var(--ai-bg-surface)}.action-btn:focus-visible,.back-btn:focus-visible{outline:2px solid var(--ai-focus-ring);outline-offset:2px}.action-btn:active,.back-btn:active{background:var(--ai-bg-surface)}.actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.content{flex:1 0 0;display:flex;align-items:center;justify-content:flex-start;min-width:0}.content.agent{gap:4px;height:40px}.content.human{gap:8px}.dropdown-trigger{display:flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;padding:0;flex-shrink:0;color:var(--ai-text-primary)}.dropdown-trigger:focus-visible{outline:2px solid var(--ai-focus-ring);outline-offset:2px}.title{font-size:16px;font-weight:700;color:var(--ai-text-primary);white-space:nowrap;line-height:normal;min-width:0;overflow:hidden;text-overflow:ellipsis}.avatar-wrapper{position:relative;width:40px;height:40px;flex-shrink:0}.avatar{width:40px;height:40px;border-radius:9999px;border:1px solid var(--ai-border-default);object-fit:cover;display:block}.avatar-fallback{width:40px;height:40px;border-radius:9999px;border:1px solid var(--ai-border-default);background:var(--ai-bg-surface);color:var(--ai-text-primary);font-size:16px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0}.online-dot{position:absolute;bottom:0;inset-inline-end:0;width:10px;height:10px;display:inline-flex;align-items:center;justify-content:center;color:var(--ai-bg-card);}.online-dot.status-online{color:#22c55e;}.online-dot.status-offline{color:#9ca3af;}.online-dot.status-busy{color:#ef4444;}.online-dot.status-away{color:#f59e0b;}.text-block{display:flex;flex-direction:column;align-items:flex-start;gap:0;flex-shrink:0}.agent-name{font-size:14px;font-weight:500;color:var(--ai-text-primary);line-height:20px;white-space:nowrap}.agent-status{font-size:14px;font-weight:400;color:var(--ai-text-secondary);line-height:20px;white-space:nowrap}.icon-wrap{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.icon-wrap svg{display:block}:host-context([dir='ltr']) .back-btn .icon-wrap,:host([dir='ltr']) .back-btn .icon-wrap{transform:scaleX(-1)}"}},[513,"ai-chat-header",{mode:[1],conversation:[1],agentName:[1,"agent-name"],agentStatus:[1,"agent-status"],agentAvatar:[1,"agent-avatar"],showBack:[4,"show-back"],isDraggable:[4,"is-draggable"],statusIndicator:[1,"status-indicator"],avatarError:[32]}]),c=o,l=function(){"undefined"!=typeof customElements&&["ai-chat-header"].forEach((t=>{"ai-chat-header"===t&&(customElements.get(s(t))||customElements.define(s(t),o))}))};export{c as AiChatHeader,l as defineCustomElement}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as a,H as e,h as s,c as r,t}from"./p-DnO4dikr.js";import{i}from"./p-SJZ6Ujn9.js";const
|
|
1
|
+
import{p as a,H as e,h as s,c as r,t as i}from"./p-DnO4dikr.js";import{i as t}from"./p-SJZ6Ujn9.js";const d=a(class extends e{constructor(a){super(),!1!==a&&this.__registerHost(),this.__attachShadow()}conversation="ملخص المحادثة";summary="";messageCount=0;language="";renderIcon(a,e,r){const i=t[a];return i?s("span",{class:"icon-wrap",innerHTML:`<svg width="${e}" height="${r}" viewBox="${i.viewBox}" fill="none" xmlns="http://www.w3.org/2000/svg">${i.content}</svg>`}):null}render(){return s(r,{key:"ba825419953fd661993da1d66225739ebef76d74"},s("div",{key:"fe04fdadafde04a068c26b312f806d072d8d1bf7",class:"summary-card"},s("div",{key:"4f3ec735cb2ac9dcd6a2f9692e1e4969a39a0131",class:"summary-header"},s("div",{key:"4ba618456b44073d8ac93d79c29818fb9252b822",class:"sparkle-avatar"},this.renderIcon("sparkle",14,14)),s("span",{key:"bf6d22cfc8c5fc40b0199f46b36fcaceca8dc944",class:"summary-title"},this.conversation),s("div",{key:"2a96497dcaa02da9e6f8a2bdcd3ec9f0e2f78b57",class:"summary-badges"},this.messageCount>0&&s("span",{key:"679c9d24f8d34fc0d5b4dfe0c7ef1f5564c7eff9",class:"badge"},this.renderIcon("list",12,12),this.messageCount),this.language&&s("span",{key:"8a0f13ed6d7ec584ed22c9316af2758cb1ea5b24",class:"badge lang-badge"},this.language))),this.summary&&s("p",{key:"5a51b1b00c35daf289690c526de3525c9de40f7e",class:"summary-body",ref:a=>a&&(a.textContent=this.summary)}),s("div",{key:"ccbb381d21d7c3e6ac8ebddc4a9a3ed26e1aa874",class:"summary-slot"},s("slot",{key:"58a86a50dcef6c5d2534e664d309c194eb5c89df"}))))}static get style(){return":host{display:block}.icon-wrap{display:inline-flex;align-items:center;justify-content:center;line-height:0}.summary-card{background:var(--ai-bg-card);border:1px solid var(--ai-border-default);border-radius:16px;box-shadow:var(--ai-shadow-sm);overflow:hidden;animation:fade-in 0.3s ease}@keyframes fade-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.summary-header{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--ai-border-default)}.sparkle-avatar{width:24px;height:24px;border-radius:9999px;background:var(--ai-bg-surface);box-shadow:var(--ai-shadow-inner);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--ai-amber)}.summary-title{font-size:15px;font-weight:500;color:var(--ai-text-primary);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.summary-badges{display:inline-flex;align-items:center;gap:6px;flex-shrink:0}.badge{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:500;color:var(--ai-accent-dark);background:var(--ai-accent-bg);padding:2px 8px;border-radius:9999px;white-space:nowrap}.lang-badge{color:var(--ai-text-secondary);background:var(--ai-bg-surface)}.summary-body{margin:0;padding:12px 16px;font-size:14px;color:var(--ai-text-secondary);line-height:1.6;border-bottom:1px solid var(--ai-border-default)}.summary-slot{padding:12px 16px}.summary-slot:empty{display:none}"}},[769,"ai-conversation-summary",{conversation:[1],summary:[1],messageCount:[2,"message-count"],language:[1]}]),n=d,o=function(){"undefined"!=typeof customElements&&["ai-conversation-summary"].forEach((a=>{"ai-conversation-summary"===a&&(customElements.get(i(a))||customElements.define(i(a),d))}))};export{n as AiConversationSummary,o as defineCustomElement}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as e,H as i,d as t,h as a,c as o,t as r}from"./p-DnO4dikr.js";import{d as n}from"./p-Dr2tAPV7.js";import{d as s}from"./p-
|
|
1
|
+
import{p as e,H as i,d as t,h as a,c as o,t as r}from"./p-DnO4dikr.js";import{d as n}from"./p-Dr2tAPV7.js";import{d as s}from"./p-CX1Yp79q.js";const c=e(class extends i{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.sendMessage=t(this,"sendMessage"),this.voiceAudioReady=t(this,"voiceAudioReady")}get el(){return this}placeholder="ايش في بالك؟";disabled=!1;showVoiceButton=!0;maxLength=4e3;isRecording=!1;inputValue="";showVoiceRecorder=!1;isMultiline=!1;textareaRef;sendMessage;voiceAudioReady;onIsRecordingChange(e){this.showVoiceRecorder=e}async setInputValue(e){this.inputValue=e,this.textareaRef&&(this.textareaRef.value=e,this.updateHeight(),this.textareaRef.focus())}updateHeight=()=>{this.textareaRef&&(this.textareaRef.style.height="auto",this.textareaRef.style.height=this.textareaRef.scrollHeight+"px",this.isMultiline=this.textareaRef.scrollHeight>28)};handleSendMessage=()=>{this.inputValue.trim()&&!this.disabled&&(this.sendMessage.emit(this.inputValue.trim()),this.inputValue="",this.textareaRef&&(this.textareaRef.style.height="auto",this.isMultiline=!1))};handleKeyDown=e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),this.handleSendMessage())};handleVoiceClick=()=>{this.showVoiceRecorder=!0};handleAudioRecorded=e=>{this.showVoiceRecorder=!1,this.voiceAudioReady.emit(e.detail)};handleRecordingCancel=()=>{this.showVoiceRecorder=!1};handleInputChange=e=>{this.inputValue=e.target.value,this.updateHeight()};render(){if(this.showVoiceRecorder)return a(o,null,a("ai-voice-input",{autoStart:!0,onAudioRecorded:this.handleAudioRecorded,onRecordingCancel:this.handleRecordingCancel}));const e=!!this.inputValue.trim()&&!this.disabled,i=this.maxLength-this.inputValue.length;return a(o,null,a("div",{part:"wrapper",class:"wrapper"},a("div",{part:"glow",class:"glow","aria-hidden":"true"}),a("div",{part:"container",class:"input-container"+(this.isMultiline?" multiline":"")},a("div",{class:"input-row"},a("textarea",{part:"textarea",ref:e=>this.textareaRef=e,value:this.inputValue,onInput:this.handleInputChange,onKeyDown:this.handleKeyDown,disabled:this.disabled,placeholder:this.placeholder,rows:1,class:"textarea",maxLength:this.maxLength}),i<200&&a("span",{class:"char-counter"+(i<50?" warning":""),"aria-live":"polite"},i),a("div",{class:"actions"},this.showVoiceButton&&!this.inputValue&&a("button",{part:"voice-button",class:"voice-button",onClick:this.handleVoiceClick,disabled:this.disabled,type:"button","aria-label":"Record voice"},a("ai-icon",{name:"mic",size:16})),a("button",{part:"send-button",class:"send-button"+(e?" active":""),onClick:this.handleSendMessage,disabled:!e,type:"button","aria-label":"Send message"},a("ai-icon",{name:"send",size:16})))))))}static get watchers(){return{isRecording:[{onIsRecordingChange:0}]}}static get style(){return":host{display:block;width:100%}.wrapper{position:relative;padding:var(--Spacing-Sizes-lg, 12px)}.glow{position:absolute;bottom:20px;left:39px;right:39px;height:29px;border-radius:9999px;background:var(--ai-input-glow);filter:blur(20px);opacity:0.9;pointer-events:none}.input-container{position:relative;background-color:var(--ai-bg-input);border-radius:var(--ai-input-border-radius, 9999px);border:1px solid var(--ai-border-default);box-shadow:var(--ai-shadow-sm);padding:var(--ai-input-padding, 12px);overflow:hidden;transition:border-radius 0.15s ease}.input-container.multiline{border-radius:var(--ai-input-border-radius-multiline, 20px)}.input-row{display:flex;align-items:center;gap:var(--ai-input-gap, 12px)}.input-container.multiline .input-row{align-items:flex-end}.actions{display:flex;align-items:center;gap:var(--ai-actions-gap, 8px);flex-shrink:0}.send-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:32px;max-height:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-border-default);background-color:var(--ai-border-default);color:var(--ai-text-secondary);cursor:not-allowed;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;flex-shrink:0}.send-button.active{background-color:var(--ai-send-button-active-bg, var(--ai-accent));border-color:var(--ai-send-button-active-border, var(--ai-accent));color:var(--ai-accent-text);cursor:pointer}.send-button.active:hover{background-color:var(--ai-send-button-active-hover-bg, var(--ai-accent));border-color:var(--ai-send-button-active-hover-border, var(--ai-accent))}.send-button:focus{outline:none;box-shadow:0 0 0 2px var(--ai-focus-ring-color, var(--ai-focus-ring))}.voice-button{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:32px;border:none;background-color:transparent;color:var(--ai-text-secondary);cursor:pointer;transition:background-color 0.2s ease, color 0.2s ease;flex-shrink:0}.voice-button:hover:not(:disabled){background-color:var(--ai-hover-overlay);color:var(--ai-voice-button-hover-color, var(--ai-text-secondary))}.voice-button:disabled{cursor:not-allowed;opacity:0.5}.voice-button:focus{outline:none;box-shadow:0 0 0 2px var(--ai-focus-ring-color, var(--ai-focus-ring))}.textarea{flex:1;resize:none;outline:none;border:none;background:transparent;font-size:var(--ai-input-font-size, 14px);line-height:var(--ai-input-line-height, 20px);color:var(--ai-text-primary);font-family:inherit;min-height:20px;max-height:var(--ai-input-max-height, 120px);overflow-y:hidden;text-align:start;padding:0}.textarea::placeholder{color:var(--ai-text-secondary)}.textarea:disabled{cursor:not-allowed;opacity:0.6}.input-container:focus-within{border-color:var(--ai-input-focus-border-color, var(--ai-accent));box-shadow:var(--ai-input-focus-glow)}:host([disabled]) .wrapper{opacity:0.6;pointer-events:none}:host([disabled]) .glow{display:none}.char-counter{font-size:11px;color:var(--ai-text-secondary);flex-shrink:0;transition:color 0.2s ease}.char-counter.warning{color:var(--ai-voice-timer-warning-color, var(--ai-danger-text))}"}},[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]},void 0,{isRecording:[{onIsRecordingChange:0}]}]),d=c,l=function(){"undefined"!=typeof customElements&&["ai-message-input","ai-icon","ai-voice-input"].forEach((e=>{switch(e){case"ai-message-input":customElements.get(r(e))||customElements.define(r(e),c);break;case"ai-icon":customElements.get(r(e))||n();break;case"ai-voice-input":customElements.get(r(e))||s()}}))};export{d as AiMessageInput,l as defineCustomElement}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{V as o,d as
|
|
1
|
+
import{V as o,d as p}from"./p-CX1Yp79q.js";const s=o,r=p;export{s as AiVoiceInput,r as defineCustomElement}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as t,H as i,d as e,h as r,c as a,t as o}from"./p-DnO4dikr.js";import{d as s}from"./p-Dr2tAPV7.js";const n=t(class extends i{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.audioRecorded=e(this,"audioRecorded"),this.recordingCancel=e(this,"recordingCancel")}get el(){return this}disabled=!1;showWaveform=!0;autoStart=!1;errorText="";waveformColor="";state="idle";error=null;recordingDuration=0;submitPulse=!1;audioRecorded;recordingCancel;streamRef=null;audioContextRef=null;analyserRef=null;mediaRecorderRef=null;audioChunks=[];recordingStartTime=0;recordingTimer=null;maxTimeoutRef=null;canvasRef;animationFrameId=0;prevHeights=[];componentDidLoad(){this.autoStart&&!this.disabled&&this.startRecording()}disconnectedCallback(){this.cleanup()}cleanup=()=>{this.recordingTimer&&(clearInterval(this.recordingTimer),this.recordingTimer=null),this.maxTimeoutRef&&(clearTimeout(this.maxTimeoutRef),this.maxTimeoutRef=null),this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=0),this.mediaRecorderRef&&"inactive"!==this.mediaRecorderRef.state&&(this.mediaRecorderRef.stop(),this.mediaRecorderRef=null),this.audioContextRef&&(this.audioContextRef.close(),this.audioContextRef=null),this.analyserRef&&(this.analyserRef=null),this.streamRef&&(this.streamRef.getTracks().forEach((t=>t.stop())),this.streamRef=null)};getErrorText(){return this.errorText?this.errorText:"en"===document.documentElement.lang?"Microphone access denied":"تعذّر الوصول للميكروفون"}startRecording=async()=>{try{this.error=null,this.audioChunks=[];const t=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}});this.streamRef=t;const i=new AudioContext;if(this.audioContextRef=i,this.showWaveform){const e=i.createAnalyser();e.fftSize=256,e.smoothingTimeConstant=.8,this.analyserRef=e,i.createMediaStreamSource(t).connect(e)}this.setupMediaRecorder(t),this.recordingStartTime=Date.now(),this.recordingDuration=0,this.prevHeights=[],this.state="recording",this.showWaveform&&requestAnimationFrame((()=>{this.drawWaveform()})),this.recordingTimer=window.setInterval((()=>{this.recordingDuration=Math.floor((Date.now()-this.recordingStartTime)/1e3)}),1e3),this.maxTimeoutRef=window.setTimeout((()=>{this.stopRecording()}),6e4)}catch(t){console.error("Error starting recording:",t),this.error=this.getErrorText(),this.state="idle"}};setupMediaRecorder=t=>{const i=MediaRecorder.isTypeSupported("audio/webm")?"audio/webm":MediaRecorder.isTypeSupported("audio/ogg")?"audio/ogg":"",e=new MediaRecorder(t,i?{mimeType:i}:{});e.ondataavailable=t=>{t.data.size>0&&this.audioChunks.push(t.data)},e.onstop=()=>{const t=new Blob(this.audioChunks,{type:i||"audio/mp4"});this.audioRecorded.emit({blob:t,duration:this.recordingDuration})},this.mediaRecorderRef=e,e.start(100)};stopRecording=()=>{if(this.recordingDuration<1)return this.submitPulse=!0,void setTimeout((()=>{this.submitPulse=!1}),400);this.recordingTimer&&(clearInterval(this.recordingTimer),this.recordingTimer=null),this.maxTimeoutRef&&(clearTimeout(this.maxTimeoutRef),this.maxTimeoutRef=null),this.cleanup(),this.state="idle"};cancelRecording=()=>{this.mediaRecorderRef&&"inactive"!==this.mediaRecorderRef.state&&(this.mediaRecorderRef.ondataavailable=null,this.mediaRecorderRef.onstop=null),this.cleanup(),this.state="idle",this.recordingCancel.emit()};drawWaveform=()=>{if(!this.canvasRef||!this.analyserRef)return;const t=this.canvasRef,i=t.getContext("2d");if(!i)return;const e=this.analyserRef.frequencyBinCount,r=new Uint8Array(e),a=this.waveformColor||getComputedStyle(this.el).getPropertyValue("--ai-waveform-color").trim()||"#9ca3af",o=(t,e,r,a,o)=>{if(i.beginPath(),"function"==typeof i.roundRect)i.roundRect(t,e,r,a,o);else{const s=Math.min(o,r/2,a/2);i.moveTo(t+s,e),i.lineTo(t+r-s,e),i.arcTo(t+r,e,t+r,e+s,s),i.lineTo(t+r,e+a-s),i.arcTo(t+r,e+a,t+r-s,e+a,s),i.lineTo(t+s,e+a),i.arcTo(t,e+a,t,e+a-s,s),i.lineTo(t,e+s),i.arcTo(t,e,t+s,e,s),i.closePath()}},s=()=>{if("recording"!==this.state)return;this.animationFrameId=requestAnimationFrame(s);const n=t.offsetWidth;n>0&&t.width!==n&&(t.width=n);const c=Math.min(100,Math.floor(t.width/3)),d=Math.max(1,Math.floor(e/c));this.prevHeights.length!==c&&(this.prevHeights=new Array(c).fill(4)),this.analyserRef.getByteFrequencyData(r),i.clearRect(0,0,t.width,t.height);const l=t.height/2,h=(t.width-3*c)/2,u=t.height-4;for(let t=0;t<c;t++){let s=0;for(let i=0;i<d;i++){const a=t*d+i;a<e&&(s+=r[a])}const n=Math.min(1,s/d/255);this.prevHeights[t]=.7*this.prevHeights[t]+.3*(4+n*(u-4));const c=this.prevHeights[t],p=h+3*t,b=l-c/2;i.fillStyle=a,o(p,b,1,c,.5),i.fill()}};s()};formatDuration=t=>`${Math.floor(t/60)}:${(t%60).toString().padStart(2,"0")}`;render(){const t=60-this.recordingDuration;return r(a,{key:"225036c9c966084bcbdef9760d08cb677c985cc1"},r("div",{key:"3cb3841dcb8a8e283cc325a200073ba3d540d7f8",class:"wrapper"},r("div",{key:"1e71acf6ceb25d50d4131bf1a8021837756d0a41",class:"glow"+("recording"===this.state?" visible":""),"aria-hidden":"true"}),r("div",{key:"c96027342fdf08edc990cae9f25ebb087dd33612",class:"input-container"},"idle"===this.state?r("div",{class:"recording-row"},r("button",{type:"button",class:"submit-button",onClick:this.startRecording,disabled:this.disabled,"aria-label":"Start recording"},r("ai-icon",{name:"mic",size:16})),this.error&&r("div",{class:"error-message",role:"alert"},this.error)):r("div",{class:"recording-row"},r("button",{type:"button",class:"cancel-button",onClick:this.cancelRecording,"aria-label":"Cancel"},r("ai-icon",{name:"cancel",size:14})),r("div",{class:"timer"+(t<=5?" warning":"")},this.formatDuration(this.recordingDuration)),this.showWaveform&&r("canvas",{ref:t=>this.canvasRef=t,class:"waveform",height:"32"}),r("button",{type:"button",class:"submit-button"+(this.submitPulse?" pulse":""),onClick:this.stopRecording,"aria-label":"Send"},r("ai-icon",{name:"arrow-up",size:14}))))))}static get style(){return":host{display:block;width:100%}.wrapper{position:relative;padding:var(--Spacing-Sizes-lg, 12px)}.glow{position:absolute;bottom:20px;left:39px;right:39px;height:29px;border-radius:9999px;background:var(--ai-input-glow);filter:blur(20px);opacity:0;pointer-events:none;transition:opacity 0.2s ease}.glow.visible{opacity:0.9}.input-container{position:relative;background-color:var(--ai-bg-input);border-radius:var(--ai-input-border-radius, 9999px);border:1px solid var(--ai-border-default);box-shadow:var(--ai-shadow-sm);padding:var(--ai-input-padding, 12px);overflow:hidden}.recording-row{display:flex;align-items:center;gap:var(--ai-input-gap, 10px)}.cancel-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:32px;max-height:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-border-default);background-color:var(--ai-border-default);color:var(--ai-text-secondary);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.cancel-button:hover{background-color:var(--ai-bg-surface);border-color:var(--ai-bg-surface)}.submit-button{display:inline-flex;align-items:center;justify-content:center;height:32px;width:32px;min-width:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-send-button-active-border, var(--ai-accent));background-color:var(--ai-send-button-active-bg, var(--ai-accent));color:var(--ai-accent-text);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.submit-button:hover{background-color:var(--ai-send-button-active-hover-bg, var(--ai-accent));border-color:var(--ai-send-button-active-hover-border, var(--ai-accent))}@keyframes pulse-once{0%{transform:scale(1)}40%{transform:scale(1.18)}100%{transform:scale(1)}}.submit-button.pulse{animation:pulse-once 0.35s ease}.timer{font-size:13px;font-weight:500;color:var(--ai-text-secondary);min-width:36px;text-align:center;flex-shrink:0}.timer.warning{color:var(--ai-voice-timer-warning-color, var(--ai-danger-text))}.waveform{flex:1;min-width:0;height:32px}.error-message{position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);background:var(--ai-voice-error-bg, var(--ai-danger-bg));color:var(--ai-voice-error-color, var(--ai-danger-text));font-size:11px;padding:6px 12px;border-radius:6px;white-space:nowrap;box-shadow:var(--ai-shadow-error);border:1px solid var(--ai-voice-error-border, var(--ai-danger-border));z-index:10}"}},[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]}]);function c(){"undefined"!=typeof customElements&&["ai-voice-input","ai-icon"].forEach((t=>{switch(t){case"ai-voice-input":customElements.get(o(t))||customElements.define(o(t),n);break;case"ai-icon":customElements.get(o(t))||s()}}))}export{n as V,c as d}
|
|
@@ -9,7 +9,7 @@ const AiChatHeader = class {
|
|
|
9
9
|
this.closeClick = createEvent(this, "closeClick");
|
|
10
10
|
this.editClick = createEvent(this, "editClick");
|
|
11
11
|
this.dropdownClick = createEvent(this, "dropdownClick");
|
|
12
|
-
this.
|
|
12
|
+
this.positionClick = createEvent(this, "positionClick");
|
|
13
13
|
this.backClick = createEvent(this, "backClick");
|
|
14
14
|
this.headerDragStart = createEvent(this, "headerDragStart");
|
|
15
15
|
}
|
|
@@ -36,7 +36,7 @@ const AiChatHeader = class {
|
|
|
36
36
|
/** Title / chevron click → open conversation list (agent mode) */
|
|
37
37
|
dropdownClick;
|
|
38
38
|
/** More options button */
|
|
39
|
-
|
|
39
|
+
positionClick;
|
|
40
40
|
/** Back-arrow button (human mode) */
|
|
41
41
|
backClick;
|
|
42
42
|
/**
|
|
@@ -68,18 +68,18 @@ const AiChatHeader = class {
|
|
|
68
68
|
return [
|
|
69
69
|
this.renderDragBtn(),
|
|
70
70
|
h("div", { class: "content agent dropdown-trigger", role: "button", onClick: () => this.dropdownClick.emit(), "aria-haspopup": "listbox", "aria-expanded": false, "aria-label": `${this.conversation}, افتح قائمة المحادثات` }, h("span", { class: "title" }, this.conversation), h("span", { class: "dropdown-chevron" }, this.renderIcon('chevron-down', 24, 24))),
|
|
71
|
-
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u062A\u0639\u062F\u064A\u0644 / Edit", onClick: () => this.editClick.emit() }, this.renderIcon('pencil-edit', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0627\u0644\
|
|
71
|
+
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u062A\u0639\u062F\u064A\u0644 / Edit", onClick: () => this.editClick.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.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))),
|
|
72
72
|
];
|
|
73
73
|
}
|
|
74
74
|
renderHumanMode() {
|
|
75
75
|
return [
|
|
76
76
|
this.renderDragBtn(),
|
|
77
77
|
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))),
|
|
78
|
-
h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u0627\u0644\
|
|
78
|
+
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))),
|
|
79
79
|
];
|
|
80
80
|
}
|
|
81
81
|
render() {
|
|
82
|
-
return (h(Host, { key: '
|
|
82
|
+
return (h(Host, { key: 'f96f4d5c533747b2843706c165866769b834fb98' }, h("div", { key: '8643a8cb214cbe40f0ee1a0b64c483829b5de6c9', class: "header-container" }, this.mode === 'agent' ? this.renderAgentMode() : this.renderHumanMode())));
|
|
83
83
|
}
|
|
84
84
|
};
|
|
85
85
|
AiChatHeader.style = aiChatHeaderCss();
|
|
@@ -8,7 +8,7 @@ const AiConversationSummary = class {
|
|
|
8
8
|
registerInstance(this, hostRef);
|
|
9
9
|
}
|
|
10
10
|
/** Card heading */
|
|
11
|
-
|
|
11
|
+
conversation = 'ملخص المحادثة';
|
|
12
12
|
/** Summary body text */
|
|
13
13
|
summary = '';
|
|
14
14
|
/** Total message count shown as a badge */
|
|
@@ -23,7 +23,7 @@ const AiConversationSummary = class {
|
|
|
23
23
|
return h("span", { class: "icon-wrap", innerHTML: svg });
|
|
24
24
|
}
|
|
25
25
|
render() {
|
|
26
|
-
return (h(Host, { key: '
|
|
26
|
+
return (h(Host, { key: 'ba825419953fd661993da1d66225739ebef76d74' }, h("div", { key: 'fe04fdadafde04a068c26b312f806d072d8d1bf7', class: "summary-card" }, h("div", { key: '4f3ec735cb2ac9dcd6a2f9692e1e4969a39a0131', class: "summary-header" }, h("div", { key: '4ba618456b44073d8ac93d79c29818fb9252b822', class: "sparkle-avatar" }, this.renderIcon('sparkle', 14, 14)), h("span", { key: 'bf6d22cfc8c5fc40b0199f46b36fcaceca8dc944', class: "summary-title" }, this.conversation), h("div", { key: '2a96497dcaa02da9e6f8a2bdcd3ec9f0e2f78b57', class: "summary-badges" }, this.messageCount > 0 && (h("span", { key: '679c9d24f8d34fc0d5b4dfe0c7ef1f5564c7eff9', class: "badge" }, this.renderIcon('list', 12, 12), this.messageCount)), this.language && (h("span", { key: '8a0f13ed6d7ec584ed22c9316af2758cb1ea5b24', class: "badge lang-badge" }, this.language)))), this.summary && (h("p", { key: '5a51b1b00c35daf289690c526de3525c9de40f7e', class: "summary-body", ref: el => el && (el.textContent = this.summary) })), h("div", { key: 'ccbb381d21d7c3e6ac8ebddc4a9a3ed26e1aa874', class: "summary-slot" }, h("slot", { key: '58a86a50dcef6c5d2534e664d309c194eb5c89df' })))));
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
AiConversationSummary.style = aiConversationSummaryCss();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as registerInstance, c as createEvent, a as getElement, h, H as Host } from './index-B0yIzgh4.js';
|
|
2
2
|
|
|
3
|
-
const aiVoiceInputCss = () => `:host{display:block;width:100%}.wrapper{position:relative;padding:var(--Spacing-Sizes-lg, 12px)}.glow{position:absolute;bottom:20px;left:39px;right:39px;height:29px;border-radius:9999px;background:var(--ai-input-glow);filter:blur(20px);opacity:0;pointer-events:none;transition:opacity 0.2s ease}.glow.visible{opacity:0.9}.input-container{position:relative;background-color:var(--ai-bg-input);border-radius:var(--ai-input-border-radius, 9999px);border:1px solid var(--ai-border-default);box-shadow:var(--ai-shadow-sm);padding:var(--ai-input-padding, 12px);overflow:hidden}.recording-row{display:flex;align-items:center;gap:var(--ai-input-gap, 10px)}.cancel-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:32px;max-height:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-border-default);background-color:var(--ai-border-default);color:var(--ai-text-secondary);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.cancel-button:hover{background-color:var(--ai-bg-surface);border-color:var(--ai-bg-surface)}.submit-button{display:inline-flex;align-items:center;justify-content:center;height:32px;width:32px;min-width:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-send-button-active-border, var(--ai-accent));background-color:var(--ai-send-button-active-bg, var(--ai-accent));color:var(--ai-accent-text);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.submit-button:hover{background-color:var(--ai-send-button-active-hover-bg, var(--ai-accent));border-color:var(--ai-send-button-active-hover-border, var(--ai-accent))}@keyframes pulse-once{0%{transform:scale(1)}40%{transform:scale(1.18)}100%{transform:scale(1)}}.submit-button.pulse{animation:pulse-once 0.35s ease}.timer{font-size:13px;font-weight:500;color:var(--ai-text-secondary);min-width:36px;text-align:center;flex-shrink:0}.timer.warning{color:var(--ai-voice-timer-warning-color, var(--ai-danger-text))}.waveform{flex:1;height:32px
|
|
3
|
+
const aiVoiceInputCss = () => `:host{display:block;width:100%}.wrapper{position:relative;padding:var(--Spacing-Sizes-lg, 12px)}.glow{position:absolute;bottom:20px;left:39px;right:39px;height:29px;border-radius:9999px;background:var(--ai-input-glow);filter:blur(20px);opacity:0;pointer-events:none;transition:opacity 0.2s ease}.glow.visible{opacity:0.9}.input-container{position:relative;background-color:var(--ai-bg-input);border-radius:var(--ai-input-border-radius, 9999px);border:1px solid var(--ai-border-default);box-shadow:var(--ai-shadow-sm);padding:var(--ai-input-padding, 12px);overflow:hidden}.recording-row{display:flex;align-items:center;gap:var(--ai-input-gap, 10px)}.cancel-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:32px;max-height:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-border-default);background-color:var(--ai-border-default);color:var(--ai-text-secondary);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.cancel-button:hover{background-color:var(--ai-bg-surface);border-color:var(--ai-bg-surface)}.submit-button{display:inline-flex;align-items:center;justify-content:center;height:32px;width:32px;min-width:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-send-button-active-border, var(--ai-accent));background-color:var(--ai-send-button-active-bg, var(--ai-accent));color:var(--ai-accent-text);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.submit-button:hover{background-color:var(--ai-send-button-active-hover-bg, var(--ai-accent));border-color:var(--ai-send-button-active-hover-border, var(--ai-accent))}@keyframes pulse-once{0%{transform:scale(1)}40%{transform:scale(1.18)}100%{transform:scale(1)}}.submit-button.pulse{animation:pulse-once 0.35s ease}.timer{font-size:13px;font-weight:500;color:var(--ai-text-secondary);min-width:36px;text-align:center;flex-shrink:0}.timer.warning{color:var(--ai-voice-timer-warning-color, var(--ai-danger-text))}.waveform{flex:1;min-width:0;height:32px}.error-message{position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);background:var(--ai-voice-error-bg, var(--ai-danger-bg));color:var(--ai-voice-error-color, var(--ai-danger-text));font-size:11px;padding:6px 12px;border-radius:6px;white-space:nowrap;box-shadow:var(--ai-shadow-error);border:1px solid var(--ai-voice-error-border, var(--ai-danger-border));z-index:10}`;
|
|
4
4
|
|
|
5
5
|
const MAX_RECORDING_TIME = 60; // seconds
|
|
6
6
|
const VoiceInput = class {
|
|
@@ -196,21 +196,15 @@ const VoiceInput = class {
|
|
|
196
196
|
const ctx = canvas.getContext('2d');
|
|
197
197
|
if (!ctx)
|
|
198
198
|
return;
|
|
199
|
-
const barCount = 100;
|
|
200
199
|
const barWidth = 1;
|
|
201
200
|
const gap = 2;
|
|
201
|
+
const minHeight = 4;
|
|
202
202
|
const bufferLength = this.analyserRef.frequencyBinCount;
|
|
203
203
|
const dataArray = new Uint8Array(bufferLength);
|
|
204
|
-
const binsPerBar = Math.max(1, Math.floor(bufferLength / barCount));
|
|
205
|
-
const minHeight = 4;
|
|
206
204
|
// Resolve waveform color from prop → CSS var → fallback
|
|
207
205
|
const resolvedColor = this.waveformColor ||
|
|
208
206
|
getComputedStyle(this.el).getPropertyValue('--ai-waveform-color').trim() ||
|
|
209
207
|
'#9ca3af';
|
|
210
|
-
// Initialize lerp state
|
|
211
|
-
if (this.prevHeights.length !== barCount) {
|
|
212
|
-
this.prevHeights = new Array(barCount).fill(minHeight);
|
|
213
|
-
}
|
|
214
208
|
const drawRoundRect = (x, y, w, h, r) => {
|
|
215
209
|
ctx.beginPath();
|
|
216
210
|
if (typeof ctx.roundRect === 'function') {
|
|
@@ -235,6 +229,18 @@ const VoiceInput = class {
|
|
|
235
229
|
if (this.state !== 'recording')
|
|
236
230
|
return;
|
|
237
231
|
this.animationFrameId = requestAnimationFrame(draw);
|
|
232
|
+
// Sync canvas buffer to actual rendered size so it never overflows
|
|
233
|
+
const renderedWidth = canvas.offsetWidth;
|
|
234
|
+
if (renderedWidth > 0 && canvas.width !== renderedWidth) {
|
|
235
|
+
canvas.width = renderedWidth;
|
|
236
|
+
}
|
|
237
|
+
// Recompute barCount each frame based on actual canvas width
|
|
238
|
+
const barCount = Math.min(100, Math.floor(canvas.width / (barWidth + gap)));
|
|
239
|
+
const binsPerBar = Math.max(1, Math.floor(bufferLength / barCount));
|
|
240
|
+
// Re-initialize lerp state when barCount changes
|
|
241
|
+
if (this.prevHeights.length !== barCount) {
|
|
242
|
+
this.prevHeights = new Array(barCount).fill(minHeight);
|
|
243
|
+
}
|
|
238
244
|
this.analyserRef.getByteFrequencyData(dataArray);
|
|
239
245
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
240
246
|
const centerY = canvas.height / 2;
|
|
@@ -271,7 +277,7 @@ const VoiceInput = class {
|
|
|
271
277
|
};
|
|
272
278
|
render() {
|
|
273
279
|
const remaining = MAX_RECORDING_TIME - this.recordingDuration;
|
|
274
|
-
return (h(Host, { key: '
|
|
280
|
+
return (h(Host, { key: '225036c9c966084bcbdef9760d08cb677c985cc1' }, h("div", { key: '3cb3841dcb8a8e283cc325a200073ba3d540d7f8', class: "wrapper" }, h("div", { key: '1e71acf6ceb25d50d4131bf1a8021837756d0a41', class: `glow${this.state === 'recording' ? ' visible' : ''}`, "aria-hidden": "true" }), h("div", { key: 'c96027342fdf08edc990cae9f25ebb087dd33612', class: "input-container" }, this.state === 'idle' ? (h("div", { class: "recording-row" }, h("button", { type: "button", class: "submit-button", onClick: this.startRecording, disabled: this.disabled, "aria-label": "Start recording" }, h("ai-icon", { name: "mic", size: 16 })), this.error && (h("div", { class: "error-message", role: "alert" }, this.error)))) : (h("div", { class: "recording-row" }, h("button", { type: "button", class: "cancel-button", onClick: this.cancelRecording, "aria-label": "Cancel" }, h("ai-icon", { name: "cancel", size: 14 })), h("div", { class: `timer${remaining <= 5 ? ' warning' : ''}` }, this.formatDuration(this.recordingDuration)), this.showWaveform && h("canvas", { ref: el => (this.canvasRef = el), class: "waveform", height: "32" }), h("button", { type: "button", class: `submit-button${this.submitPulse ? ' pulse' : ''}`, onClick: this.stopRecording, "aria-label": "Send" }, h("ai-icon", { name: "arrow-up", size: 14 }))))))));
|
|
275
281
|
}
|
|
276
282
|
};
|
|
277
283
|
VoiceInput.style = aiVoiceInputCss();
|
package/dist/esm/loader.js
CHANGED
|
@@ -4,7 +4,7 @@ export { s as setNonce } from './index-B0yIzgh4.js';
|
|
|
4
4
|
const defineCustomElements = async (win, options) => {
|
|
5
5
|
if (typeof window === 'undefined') return undefined;
|
|
6
6
|
await globalScripts();
|
|
7
|
-
return bootstrapLazy([["ai-message-input",[[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-chat-container",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64]},null,{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-card",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["ai-chat-header",[[513,"ai-chat-header",{"mode":[1],"conversation":[1],"agentName":[1,"agent-name"],"agentStatus":[1,"agent-status"],"agentAvatar":[1,"agent-avatar"],"showBack":[4,"show-back"],"isDraggable":[4,"is-draggable"],"statusIndicator":[1,"status-indicator"],"avatarError":[32]}]]],["ai-chat-message",[[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-list",[[513,"ai-conversation-list",{"items":[1],"activeId":[1,"active-id"],"loading":[4]}]]],["ai-conversation-summary",[[769,"ai-conversation-summary",{"
|
|
7
|
+
return bootstrapLazy([["ai-message-input",[[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-chat-container",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64]},null,{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-card",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["ai-chat-header",[[513,"ai-chat-header",{"mode":[1],"conversation":[1],"agentName":[1,"agent-name"],"agentStatus":[1,"agent-status"],"agentAvatar":[1,"agent-avatar"],"showBack":[4,"show-back"],"isDraggable":[4,"is-draggable"],"statusIndicator":[1,"status-indicator"],"avatarError":[32]}]]],["ai-chat-message",[[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-list",[[513,"ai-conversation-list",{"items":[1],"activeId":[1,"active-id"],"loading":[4]}]]],["ai-conversation-summary",[[769,"ai-conversation-summary",{"conversation":[1],"summary":[1],"messageCount":[2,"message-count"],"language":[1]}]]],["ai-link",[[769,"ai-link",{"label":[1],"href":[1],"target":[1],"rel":[1]}]]],["ai-loading",[[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-rating",[[513,"ai-rating",{"question":[1],"subtitle":[1],"value":[1026],"disabled":[4],"hovered":[32]}]]],["ai-route-decision",[[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",[[769,"ai-suggestion",{"label":[1],"disabled":[4]}]]],["ai-icon",[[513,"ai-icon",{"name":[1],"size":[2]}]]],["ai-voice-input",[[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]}]]]], options);
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
export { defineCustomElements };
|
package/dist/esm/ui-ai-kit.js
CHANGED
|
@@ -16,5 +16,5 @@ var patchBrowser = () => {
|
|
|
16
16
|
|
|
17
17
|
patchBrowser().then(async (options) => {
|
|
18
18
|
await globalScripts();
|
|
19
|
-
return bootstrapLazy([["ai-message-input",[[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-chat-container",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64]},null,{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-card",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["ai-chat-header",[[513,"ai-chat-header",{"mode":[1],"conversation":[1],"agentName":[1,"agent-name"],"agentStatus":[1,"agent-status"],"agentAvatar":[1,"agent-avatar"],"showBack":[4,"show-back"],"isDraggable":[4,"is-draggable"],"statusIndicator":[1,"status-indicator"],"avatarError":[32]}]]],["ai-chat-message",[[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-list",[[513,"ai-conversation-list",{"items":[1],"activeId":[1,"active-id"],"loading":[4]}]]],["ai-conversation-summary",[[769,"ai-conversation-summary",{"
|
|
19
|
+
return bootstrapLazy([["ai-message-input",[[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-chat-container",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64]},null,{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-card",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["ai-chat-header",[[513,"ai-chat-header",{"mode":[1],"conversation":[1],"agentName":[1,"agent-name"],"agentStatus":[1,"agent-status"],"agentAvatar":[1,"agent-avatar"],"showBack":[4,"show-back"],"isDraggable":[4,"is-draggable"],"statusIndicator":[1,"status-indicator"],"avatarError":[32]}]]],["ai-chat-message",[[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-list",[[513,"ai-conversation-list",{"items":[1],"activeId":[1,"active-id"],"loading":[4]}]]],["ai-conversation-summary",[[769,"ai-conversation-summary",{"conversation":[1],"summary":[1],"messageCount":[2,"message-count"],"language":[1]}]]],["ai-link",[[769,"ai-link",{"label":[1],"href":[1],"target":[1],"rel":[1]}]]],["ai-loading",[[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-rating",[[513,"ai-rating",{"question":[1],"subtitle":[1],"value":[1026],"disabled":[4],"hovered":[32]}]]],["ai-route-decision",[[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",[[769,"ai-suggestion",{"label":[1],"disabled":[4]}]]],["ai-icon",[[513,"ai-icon",{"name":[1],"size":[2]}]]],["ai-voice-input",[[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]}]]]], options);
|
|
20
20
|
});
|
|
@@ -23,7 +23,7 @@ export declare class AiChatHeader {
|
|
|
23
23
|
/** Title / chevron click → open conversation list (agent mode) */
|
|
24
24
|
dropdownClick: EventEmitter<void>;
|
|
25
25
|
/** More options button */
|
|
26
|
-
|
|
26
|
+
positionClick: EventEmitter<void>;
|
|
27
27
|
/** Back-arrow button (human mode) */
|
|
28
28
|
backClick: EventEmitter<void>;
|
|
29
29
|
/**
|
|
@@ -158,6 +158,11 @@ export namespace Components {
|
|
|
158
158
|
"loading": boolean;
|
|
159
159
|
}
|
|
160
160
|
interface AiConversationSummary {
|
|
161
|
+
/**
|
|
162
|
+
* Card heading
|
|
163
|
+
* @default 'ملخص المحادثة'
|
|
164
|
+
*/
|
|
165
|
+
"conversation": string;
|
|
161
166
|
/**
|
|
162
167
|
* Conversation language label
|
|
163
168
|
* @default ''
|
|
@@ -173,11 +178,6 @@ export namespace Components {
|
|
|
173
178
|
* @default ''
|
|
174
179
|
*/
|
|
175
180
|
"summary": string;
|
|
176
|
-
/**
|
|
177
|
-
* Card heading
|
|
178
|
-
* @default 'ملخص المحادثة'
|
|
179
|
-
*/
|
|
180
|
-
"title": string;
|
|
181
181
|
}
|
|
182
182
|
interface AiIcon {
|
|
183
183
|
/**
|
|
@@ -437,7 +437,7 @@ declare global {
|
|
|
437
437
|
"closeClick": void;
|
|
438
438
|
"editClick": void;
|
|
439
439
|
"dropdownClick": void;
|
|
440
|
-
"
|
|
440
|
+
"positionClick": void;
|
|
441
441
|
"backClick": void;
|
|
442
442
|
"headerDragStart": { clientX: number; clientY: number };
|
|
443
443
|
}
|
|
@@ -735,7 +735,7 @@ declare namespace LocalJSX {
|
|
|
735
735
|
/**
|
|
736
736
|
* More options button
|
|
737
737
|
*/
|
|
738
|
-
"
|
|
738
|
+
"onPositionClick"?: (event: AiChatHeaderCustomEvent<void>) => void;
|
|
739
739
|
/**
|
|
740
740
|
* Human mode: show the back button
|
|
741
741
|
* @default true
|
|
@@ -804,6 +804,11 @@ declare namespace LocalJSX {
|
|
|
804
804
|
"onConversationSelect"?: (event: AiConversationListCustomEvent<string>) => void;
|
|
805
805
|
}
|
|
806
806
|
interface AiConversationSummary {
|
|
807
|
+
/**
|
|
808
|
+
* Card heading
|
|
809
|
+
* @default 'ملخص المحادثة'
|
|
810
|
+
*/
|
|
811
|
+
"conversation"?: string;
|
|
807
812
|
/**
|
|
808
813
|
* Conversation language label
|
|
809
814
|
* @default ''
|
|
@@ -819,11 +824,6 @@ declare namespace LocalJSX {
|
|
|
819
824
|
* @default ''
|
|
820
825
|
*/
|
|
821
826
|
"summary"?: string;
|
|
822
|
-
/**
|
|
823
|
-
* Card heading
|
|
824
|
-
* @default 'ملخص المحادثة'
|
|
825
|
-
*/
|
|
826
|
-
"title"?: string;
|
|
827
827
|
}
|
|
828
828
|
interface AiIcon {
|
|
829
829
|
/**
|
|
@@ -1086,7 +1086,7 @@ declare namespace LocalJSX {
|
|
|
1086
1086
|
"loading": boolean;
|
|
1087
1087
|
}
|
|
1088
1088
|
interface AiConversationSummaryAttributes {
|
|
1089
|
-
"
|
|
1089
|
+
"conversation": string;
|
|
1090
1090
|
"summary": string;
|
|
1091
1091
|
"messageCount": number;
|
|
1092
1092
|
"language": string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as t,c as i,h as a,H as e}from"./p-B0yIzgh4.js";import{i as n}from"./p-SJZ6Ujn9.js";const r=class{constructor(a){t(this,a),this.closeClick=i(this,"closeClick"),this.editClick=i(this,"editClick"),this.dropdownClick=i(this,"dropdownClick"),this.positionClick=i(this,"positionClick"),this.backClick=i(this,"backClick"),this.headerDragStart=i(this,"headerDragStart")}mode="agent";conversation="محادثة جديدة";agentName="";agentStatus="";agentAvatar="";showBack=!0;isDraggable=!1;statusIndicator="online";avatarError=!1;closeClick;editClick;dropdownClick;positionClick;backClick;headerDragStart;renderIcon(t,i,e){const r=n[t];return r?a("span",{class:"icon-wrap",innerHTML:`<svg width="${i}" height="${e}" viewBox="${r.viewBox}" fill="none" xmlns="http://www.w3.org/2000/svg">${r.content}</svg>`}):null}renderAvatar(){const t=this.agentName?this.agentName.charAt(0):"?";return!this.agentAvatar||this.avatarError?a("div",{class:"avatar-fallback"},t):a("img",{class:"avatar",src:this.agentAvatar,alt:this.agentName,onError:()=>{this.avatarError=!0}})}renderDragBtn(){return this.isDraggable&&a("button",{class:"action-btn drag-btn","aria-label":"سحب / Drag",onPointerDown:t=>{t.preventDefault(),this.headerDragStart.emit({clientX:t.clientX,clientY:t.clientY})}},this.renderIcon("drag",11,15))}renderAgentMode(){return[this.renderDragBtn(),a("div",{class:"content agent dropdown-trigger",role:"button",onClick:()=>this.dropdownClick.emit(),"aria-haspopup":"listbox","aria-expanded":!1,"aria-label":`${this.conversation}, افتح قائمة المحادثات`},a("span",{class:"title"},this.conversation),a("span",{class:"dropdown-chevron"},this.renderIcon("chevron-down",24,24))),a("div",{class:"actions"},a("button",{class:"action-btn","aria-label":"تعديل / Edit",onClick:()=>this.editClick.emit()},this.renderIcon("pencil-edit",22,22)),a("button",{class:"action-btn","aria-label":"العرض / Position",onClick:()=>this.positionClick.emit()},this.renderIcon("hand",22,22)),a("button",{class:"action-btn","aria-label":"إغلاق / Close",onClick:()=>this.closeClick.emit()},this.renderIcon("cancel",22,22)))]}renderHumanMode(){return[this.renderDragBtn(),a("div",{class:"content human"},this.showBack&&a("button",{class:"back-btn","aria-label":"رجوع / Back",onClick:()=>this.backClick.emit()},this.renderIcon("arrow-right",24,24)),a("div",{class:"avatar-wrapper"},this.renderAvatar(),a("span",{class:`online-dot status-${this.statusIndicator}`},this.renderIcon("online-dot",10,10))),a("div",{class:"text-block"},a("span",{class:"agent-name"},this.agentName),this.agentStatus&&a("span",{class:"agent-status"},this.agentStatus))),a("div",{class:"actions"},a("button",{class:"action-btn","aria-label":"العرض / Position",onClick:()=>this.positionClick.emit()},this.renderIcon("hand",22,22)),a("button",{class:"action-btn","aria-label":"إغلاق / Close",onClick:()=>this.closeClick.emit()},this.renderIcon("cancel",22,22)))]}render(){return a(e,{key:"f96f4d5c533747b2843706c165866769b834fb98"},a("div",{key:"8643a8cb214cbe40f0ee1a0b64c483829b5de6c9",class:"header-container"},"agent"===this.mode?this.renderAgentMode():this.renderHumanMode()))}};r.style=":host{display:block}.header-container{display:flex;align-items:center;gap:8px;padding:16px;background:var(--ai-bg-card);border-bottom:1px solid var(--ai-border-light);width:100%;box-sizing:border-box}.drag-btn{cursor:grab;color:var(--ai-text-muted)}.drag-btn:active{cursor:grabbing}.action-btn,.back-btn{width:40px;height:40px;padding:4px;display:flex;align-items:center;justify-content:center;background:var(--ai-bg-card);border:none;border-radius:8px;cursor:pointer;flex-shrink:0;color:var(--ai-text-primary);transition:background 0.15s ease}.action-btn:hover,.back-btn:hover{background:var(--ai-bg-surface)}.action-btn:focus-visible,.back-btn:focus-visible{outline:2px solid var(--ai-focus-ring);outline-offset:2px}.action-btn:active,.back-btn:active{background:var(--ai-bg-surface)}.actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.content{flex:1 0 0;display:flex;align-items:center;justify-content:flex-start;min-width:0}.content.agent{gap:4px;height:40px}.content.human{gap:8px}.dropdown-trigger{display:flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;padding:0;flex-shrink:0;color:var(--ai-text-primary)}.dropdown-trigger:focus-visible{outline:2px solid var(--ai-focus-ring);outline-offset:2px}.title{font-size:16px;font-weight:700;color:var(--ai-text-primary);white-space:nowrap;line-height:normal;min-width:0;overflow:hidden;text-overflow:ellipsis}.avatar-wrapper{position:relative;width:40px;height:40px;flex-shrink:0}.avatar{width:40px;height:40px;border-radius:9999px;border:1px solid var(--ai-border-default);object-fit:cover;display:block}.avatar-fallback{width:40px;height:40px;border-radius:9999px;border:1px solid var(--ai-border-default);background:var(--ai-bg-surface);color:var(--ai-text-primary);font-size:16px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0}.online-dot{position:absolute;bottom:0;inset-inline-end:0;width:10px;height:10px;display:inline-flex;align-items:center;justify-content:center;color:var(--ai-bg-card);}.online-dot.status-online{color:#22c55e;}.online-dot.status-offline{color:#9ca3af;}.online-dot.status-busy{color:#ef4444;}.online-dot.status-away{color:#f59e0b;}.text-block{display:flex;flex-direction:column;align-items:flex-start;gap:0;flex-shrink:0}.agent-name{font-size:14px;font-weight:500;color:var(--ai-text-primary);line-height:20px;white-space:nowrap}.agent-status{font-size:14px;font-weight:400;color:var(--ai-text-secondary);line-height:20px;white-space:nowrap}.icon-wrap{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.icon-wrap svg{display:block}:host-context([dir='ltr']) .back-btn .icon-wrap,:host([dir='ltr']) .back-btn .icon-wrap{transform:scaleX(-1)}";export{r as ai_chat_header}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as a,h as e,H as r}from"./p-B0yIzgh4.js";import{i as s}from"./p-SJZ6Ujn9.js";const d=class{constructor(e){a(this,e)}conversation="ملخص المحادثة";summary="";messageCount=0;language="";renderIcon(a,r,d){const i=s[a];return i?e("span",{class:"icon-wrap",innerHTML:`<svg width="${r}" height="${d}" viewBox="${i.viewBox}" fill="none" xmlns="http://www.w3.org/2000/svg">${i.content}</svg>`}):null}render(){return e(r,{key:"ba825419953fd661993da1d66225739ebef76d74"},e("div",{key:"fe04fdadafde04a068c26b312f806d072d8d1bf7",class:"summary-card"},e("div",{key:"4f3ec735cb2ac9dcd6a2f9692e1e4969a39a0131",class:"summary-header"},e("div",{key:"4ba618456b44073d8ac93d79c29818fb9252b822",class:"sparkle-avatar"},this.renderIcon("sparkle",14,14)),e("span",{key:"bf6d22cfc8c5fc40b0199f46b36fcaceca8dc944",class:"summary-title"},this.conversation),e("div",{key:"2a96497dcaa02da9e6f8a2bdcd3ec9f0e2f78b57",class:"summary-badges"},this.messageCount>0&&e("span",{key:"679c9d24f8d34fc0d5b4dfe0c7ef1f5564c7eff9",class:"badge"},this.renderIcon("list",12,12),this.messageCount),this.language&&e("span",{key:"8a0f13ed6d7ec584ed22c9316af2758cb1ea5b24",class:"badge lang-badge"},this.language))),this.summary&&e("p",{key:"5a51b1b00c35daf289690c526de3525c9de40f7e",class:"summary-body",ref:a=>a&&(a.textContent=this.summary)}),e("div",{key:"ccbb381d21d7c3e6ac8ebddc4a9a3ed26e1aa874",class:"summary-slot"},e("slot",{key:"58a86a50dcef6c5d2534e664d309c194eb5c89df"}))))}};d.style=":host{display:block}.icon-wrap{display:inline-flex;align-items:center;justify-content:center;line-height:0}.summary-card{background:var(--ai-bg-card);border:1px solid var(--ai-border-default);border-radius:16px;box-shadow:var(--ai-shadow-sm);overflow:hidden;animation:fade-in 0.3s ease}@keyframes fade-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.summary-header{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--ai-border-default)}.sparkle-avatar{width:24px;height:24px;border-radius:9999px;background:var(--ai-bg-surface);box-shadow:var(--ai-shadow-inner);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--ai-amber)}.summary-title{font-size:15px;font-weight:500;color:var(--ai-text-primary);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.summary-badges{display:inline-flex;align-items:center;gap:6px;flex-shrink:0}.badge{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:500;color:var(--ai-accent-dark);background:var(--ai-accent-bg);padding:2px 8px;border-radius:9999px;white-space:nowrap}.lang-badge{color:var(--ai-text-secondary);background:var(--ai-bg-surface)}.summary-body{margin:0;padding:12px 16px;font-size:14px;color:var(--ai-text-secondary);line-height:1.6;border-bottom:1px solid var(--ai-border-default)}.summary-slot{padding:12px 16px}.summary-slot:empty{display:none}";export{d as ai_conversation_summary}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as i,c as t,a as e,h as r,H as a}from"./p-B0yIzgh4.js";const o=class{constructor(e){i(this,e),this.audioRecorded=t(this,"audioRecorded"),this.recordingCancel=t(this,"recordingCancel")}get el(){return e(this)}disabled=!1;showWaveform=!0;autoStart=!1;errorText="";waveformColor="";state="idle";error=null;recordingDuration=0;submitPulse=!1;audioRecorded;recordingCancel;streamRef=null;audioContextRef=null;analyserRef=null;mediaRecorderRef=null;audioChunks=[];recordingStartTime=0;recordingTimer=null;maxTimeoutRef=null;canvasRef;animationFrameId=0;prevHeights=[];componentDidLoad(){this.autoStart&&!this.disabled&&this.startRecording()}disconnectedCallback(){this.cleanup()}cleanup=()=>{this.recordingTimer&&(clearInterval(this.recordingTimer),this.recordingTimer=null),this.maxTimeoutRef&&(clearTimeout(this.maxTimeoutRef),this.maxTimeoutRef=null),this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=0),this.mediaRecorderRef&&"inactive"!==this.mediaRecorderRef.state&&(this.mediaRecorderRef.stop(),this.mediaRecorderRef=null),this.audioContextRef&&(this.audioContextRef.close(),this.audioContextRef=null),this.analyserRef&&(this.analyserRef=null),this.streamRef&&(this.streamRef.getTracks().forEach((i=>i.stop())),this.streamRef=null)};getErrorText(){return this.errorText?this.errorText:"en"===document.documentElement.lang?"Microphone access denied":"تعذّر الوصول للميكروفون"}startRecording=async()=>{try{this.error=null,this.audioChunks=[];const i=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}});this.streamRef=i;const t=new AudioContext;if(this.audioContextRef=t,this.showWaveform){const e=t.createAnalyser();e.fftSize=256,e.smoothingTimeConstant=.8,this.analyserRef=e,t.createMediaStreamSource(i).connect(e)}this.setupMediaRecorder(i),this.recordingStartTime=Date.now(),this.recordingDuration=0,this.prevHeights=[],this.state="recording",this.showWaveform&&requestAnimationFrame((()=>{this.drawWaveform()})),this.recordingTimer=window.setInterval((()=>{this.recordingDuration=Math.floor((Date.now()-this.recordingStartTime)/1e3)}),1e3),this.maxTimeoutRef=window.setTimeout((()=>{this.stopRecording()}),6e4)}catch(i){console.error("Error starting recording:",i),this.error=this.getErrorText(),this.state="idle"}};setupMediaRecorder=i=>{const t=MediaRecorder.isTypeSupported("audio/webm")?"audio/webm":MediaRecorder.isTypeSupported("audio/ogg")?"audio/ogg":"",e=new MediaRecorder(i,t?{mimeType:t}:{});e.ondataavailable=i=>{i.data.size>0&&this.audioChunks.push(i.data)},e.onstop=()=>{const i=new Blob(this.audioChunks,{type:t||"audio/mp4"});this.audioRecorded.emit({blob:i,duration:this.recordingDuration})},this.mediaRecorderRef=e,e.start(100)};stopRecording=()=>{if(this.recordingDuration<1)return this.submitPulse=!0,void setTimeout((()=>{this.submitPulse=!1}),400);this.recordingTimer&&(clearInterval(this.recordingTimer),this.recordingTimer=null),this.maxTimeoutRef&&(clearTimeout(this.maxTimeoutRef),this.maxTimeoutRef=null),this.cleanup(),this.state="idle"};cancelRecording=()=>{this.mediaRecorderRef&&"inactive"!==this.mediaRecorderRef.state&&(this.mediaRecorderRef.ondataavailable=null,this.mediaRecorderRef.onstop=null),this.cleanup(),this.state="idle",this.recordingCancel.emit()};drawWaveform=()=>{if(!this.canvasRef||!this.analyserRef)return;const i=this.canvasRef,t=i.getContext("2d");if(!t)return;const e=this.analyserRef.frequencyBinCount,r=new Uint8Array(e),a=this.waveformColor||getComputedStyle(this.el).getPropertyValue("--ai-waveform-color").trim()||"#9ca3af",o=(i,e,r,a,o)=>{if(t.beginPath(),"function"==typeof t.roundRect)t.roundRect(i,e,r,a,o);else{const s=Math.min(o,r/2,a/2);t.moveTo(i+s,e),t.lineTo(i+r-s,e),t.arcTo(i+r,e,i+r,e+s,s),t.lineTo(i+r,e+a-s),t.arcTo(i+r,e+a,i+r-s,e+a,s),t.lineTo(i+s,e+a),t.arcTo(i,e+a,i,e+a-s,s),t.lineTo(i,e+s),t.arcTo(i,e,i+s,e,s),t.closePath()}},s=()=>{if("recording"!==this.state)return;this.animationFrameId=requestAnimationFrame(s);const n=i.offsetWidth;n>0&&i.width!==n&&(i.width=n);const c=Math.min(100,Math.floor(i.width/3)),d=Math.max(1,Math.floor(e/c));this.prevHeights.length!==c&&(this.prevHeights=new Array(c).fill(4)),this.analyserRef.getByteFrequencyData(r),t.clearRect(0,0,i.width,i.height);const l=i.height/2,h=(i.width-3*c)/2,u=i.height-4;for(let i=0;i<c;i++){let s=0;for(let t=0;t<d;t++){const a=i*d+t;a<e&&(s+=r[a])}const n=Math.min(1,s/d/255);this.prevHeights[i]=.7*this.prevHeights[i]+.3*(4+n*(u-4));const c=this.prevHeights[i],p=h+3*i,b=l-c/2;t.fillStyle=a,o(p,b,1,c,.5),t.fill()}};s()};formatDuration=i=>`${Math.floor(i/60)}:${(i%60).toString().padStart(2,"0")}`;render(){const i=60-this.recordingDuration;return r(a,{key:"225036c9c966084bcbdef9760d08cb677c985cc1"},r("div",{key:"3cb3841dcb8a8e283cc325a200073ba3d540d7f8",class:"wrapper"},r("div",{key:"1e71acf6ceb25d50d4131bf1a8021837756d0a41",class:"glow"+("recording"===this.state?" visible":""),"aria-hidden":"true"}),r("div",{key:"c96027342fdf08edc990cae9f25ebb087dd33612",class:"input-container"},"idle"===this.state?r("div",{class:"recording-row"},r("button",{type:"button",class:"submit-button",onClick:this.startRecording,disabled:this.disabled,"aria-label":"Start recording"},r("ai-icon",{name:"mic",size:16})),this.error&&r("div",{class:"error-message",role:"alert"},this.error)):r("div",{class:"recording-row"},r("button",{type:"button",class:"cancel-button",onClick:this.cancelRecording,"aria-label":"Cancel"},r("ai-icon",{name:"cancel",size:14})),r("div",{class:"timer"+(i<=5?" warning":"")},this.formatDuration(this.recordingDuration)),this.showWaveform&&r("canvas",{ref:i=>this.canvasRef=i,class:"waveform",height:"32"}),r("button",{type:"button",class:"submit-button"+(this.submitPulse?" pulse":""),onClick:this.stopRecording,"aria-label":"Send"},r("ai-icon",{name:"arrow-up",size:14}))))))}};o.style=":host{display:block;width:100%}.wrapper{position:relative;padding:var(--Spacing-Sizes-lg, 12px)}.glow{position:absolute;bottom:20px;left:39px;right:39px;height:29px;border-radius:9999px;background:var(--ai-input-glow);filter:blur(20px);opacity:0;pointer-events:none;transition:opacity 0.2s ease}.glow.visible{opacity:0.9}.input-container{position:relative;background-color:var(--ai-bg-input);border-radius:var(--ai-input-border-radius, 9999px);border:1px solid var(--ai-border-default);box-shadow:var(--ai-shadow-sm);padding:var(--ai-input-padding, 12px);overflow:hidden}.recording-row{display:flex;align-items:center;gap:var(--ai-input-gap, 10px)}.cancel-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:32px;max-height:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-border-default);background-color:var(--ai-border-default);color:var(--ai-text-secondary);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.cancel-button:hover{background-color:var(--ai-bg-surface);border-color:var(--ai-bg-surface)}.submit-button{display:inline-flex;align-items:center;justify-content:center;height:32px;width:32px;min-width:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-send-button-active-border, var(--ai-accent));background-color:var(--ai-send-button-active-bg, var(--ai-accent));color:var(--ai-accent-text);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.submit-button:hover{background-color:var(--ai-send-button-active-hover-bg, var(--ai-accent));border-color:var(--ai-send-button-active-hover-border, var(--ai-accent))}@keyframes pulse-once{0%{transform:scale(1)}40%{transform:scale(1.18)}100%{transform:scale(1)}}.submit-button.pulse{animation:pulse-once 0.35s ease}.timer{font-size:13px;font-weight:500;color:var(--ai-text-secondary);min-width:36px;text-align:center;flex-shrink:0}.timer.warning{color:var(--ai-voice-timer-warning-color, var(--ai-danger-text))}.waveform{flex:1;min-width:0;height:32px}.error-message{position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);background:var(--ai-voice-error-bg, var(--ai-danger-bg));color:var(--ai-voice-error-color, var(--ai-danger-text));font-size:11px;padding:6px 12px;border-radius:6px;white-space:nowrap;box-shadow:var(--ai-shadow-error);border:1px solid var(--ai-voice-error-border, var(--ai-danger-border));z-index:10}";export{o as ai_voice_input}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as e,g as a,b as t}from"./p-B0yIzgh4.js";export{s as setNonce}from"./p-B0yIzgh4.js";(()=>{const a=import.meta.url,t={};return""!==a&&(t.resourcesUrl=new URL(".",a).href),e(t)})().then((async e=>(await a(),t([["p-b28af13a",[[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}]}]]],["p-eb0c7e7a",[[769,"ai-chat-container",{isOpen:[4,"is-open"],position:[1],width:[1],autoScroll:[4,"auto-scroll"],showWatermark:[4,"show-watermark"],floatHeight:[1,"float-height"],theme:[1],isMobile:[32],floatLeft:[32],floatTop:[32],scrollToBottom:[64]},null,{isOpen:[{isOpenChanged:0}],position:[{positionChanged:0}]}]]],["p-74c5c83f",[[769,"ai-card",{noPadding:[4,"no-padding"],noShadow:[4,"no-shadow"]}]]],["p-
|
|
1
|
+
import{p as e,g as a,b as t}from"./p-B0yIzgh4.js";export{s as setNonce}from"./p-B0yIzgh4.js";(()=>{const a=import.meta.url,t={};return""!==a&&(t.resourcesUrl=new URL(".",a).href),e(t)})().then((async e=>(await a(),t([["p-b28af13a",[[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}]}]]],["p-eb0c7e7a",[[769,"ai-chat-container",{isOpen:[4,"is-open"],position:[1],width:[1],autoScroll:[4,"auto-scroll"],showWatermark:[4,"show-watermark"],floatHeight:[1,"float-height"],theme:[1],isMobile:[32],floatLeft:[32],floatTop:[32],scrollToBottom:[64]},null,{isOpen:[{isOpenChanged:0}],position:[{positionChanged:0}]}]]],["p-74c5c83f",[[769,"ai-card",{noPadding:[4,"no-padding"],noShadow:[4,"no-shadow"]}]]],["p-76195745",[[513,"ai-chat-header",{mode:[1],conversation:[1],agentName:[1,"agent-name"],agentStatus:[1,"agent-status"],agentAvatar:[1,"agent-avatar"],showBack:[4,"show-back"],isDraggable:[4,"is-draggable"],statusIndicator:[1,"status-indicator"],avatarError:[32]}]]],["p-ef07638f",[[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]}]]],["p-87e9739b",[[513,"ai-conversation-list",{items:[1],activeId:[1,"active-id"],loading:[4]}]]],["p-79c78d8e",[[769,"ai-conversation-summary",{conversation:[1],summary:[1],messageCount:[2,"message-count"],language:[1]}]]],["p-2955439f",[[769,"ai-link",{label:[1],href:[1],target:[1],rel:[1]}]]],["p-5c9e9822",[[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]}]]],["p-a099fcfb",[[513,"ai-rating",{question:[1],subtitle:[1],value:[1026],disabled:[4],hovered:[32]}]]],["p-d1bb1ad0",[[513,"ai-route-decision",{selectedAgent:[1,"selected-agent"],agentIcon:[1,"agent-icon"],reason:[1],confidence:[2],detectedLanguage:[1,"detected-language"],expanded:[1028],_expanded:[32]}]]],["p-5caf1c38",[[769,"ai-suggestion",{label:[1],disabled:[4]}]]],["p-eec6f083",[[513,"ai-icon",{name:[1],size:[2]}]]],["p-9c4c6c01",[[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]}]]]],e))));
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{p as t,H as i,d as e,h as r,c as a,t as o}from"./p-DnO4dikr.js";import{d as s}from"./p-Dr2tAPV7.js";const n=t(class extends i{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.audioRecorded=e(this,"audioRecorded"),this.recordingCancel=e(this,"recordingCancel")}get el(){return this}disabled=!1;showWaveform=!0;autoStart=!1;errorText="";waveformColor="";state="idle";error=null;recordingDuration=0;submitPulse=!1;audioRecorded;recordingCancel;streamRef=null;audioContextRef=null;analyserRef=null;mediaRecorderRef=null;audioChunks=[];recordingStartTime=0;recordingTimer=null;maxTimeoutRef=null;canvasRef;animationFrameId=0;prevHeights=[];componentDidLoad(){this.autoStart&&!this.disabled&&this.startRecording()}disconnectedCallback(){this.cleanup()}cleanup=()=>{this.recordingTimer&&(clearInterval(this.recordingTimer),this.recordingTimer=null),this.maxTimeoutRef&&(clearTimeout(this.maxTimeoutRef),this.maxTimeoutRef=null),this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=0),this.mediaRecorderRef&&"inactive"!==this.mediaRecorderRef.state&&(this.mediaRecorderRef.stop(),this.mediaRecorderRef=null),this.audioContextRef&&(this.audioContextRef.close(),this.audioContextRef=null),this.analyserRef&&(this.analyserRef=null),this.streamRef&&(this.streamRef.getTracks().forEach((t=>t.stop())),this.streamRef=null)};getErrorText(){return this.errorText?this.errorText:"en"===document.documentElement.lang?"Microphone access denied":"تعذّر الوصول للميكروفون"}startRecording=async()=>{try{this.error=null,this.audioChunks=[];const t=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}});this.streamRef=t;const i=new AudioContext;if(this.audioContextRef=i,this.showWaveform){const e=i.createAnalyser();e.fftSize=256,e.smoothingTimeConstant=.8,this.analyserRef=e,i.createMediaStreamSource(t).connect(e)}this.setupMediaRecorder(t),this.recordingStartTime=Date.now(),this.recordingDuration=0,this.prevHeights=[],this.state="recording",this.showWaveform&&requestAnimationFrame((()=>{this.drawWaveform()})),this.recordingTimer=window.setInterval((()=>{this.recordingDuration=Math.floor((Date.now()-this.recordingStartTime)/1e3)}),1e3),this.maxTimeoutRef=window.setTimeout((()=>{this.stopRecording()}),6e4)}catch(t){console.error("Error starting recording:",t),this.error=this.getErrorText(),this.state="idle"}};setupMediaRecorder=t=>{const i=MediaRecorder.isTypeSupported("audio/webm")?"audio/webm":MediaRecorder.isTypeSupported("audio/ogg")?"audio/ogg":"",e=new MediaRecorder(t,i?{mimeType:i}:{});e.ondataavailable=t=>{t.data.size>0&&this.audioChunks.push(t.data)},e.onstop=()=>{const t=new Blob(this.audioChunks,{type:i||"audio/mp4"});this.audioRecorded.emit({blob:t,duration:this.recordingDuration})},this.mediaRecorderRef=e,e.start(100)};stopRecording=()=>{if(this.recordingDuration<1)return this.submitPulse=!0,void setTimeout((()=>{this.submitPulse=!1}),400);this.recordingTimer&&(clearInterval(this.recordingTimer),this.recordingTimer=null),this.maxTimeoutRef&&(clearTimeout(this.maxTimeoutRef),this.maxTimeoutRef=null),this.cleanup(),this.state="idle"};cancelRecording=()=>{this.mediaRecorderRef&&"inactive"!==this.mediaRecorderRef.state&&(this.mediaRecorderRef.ondataavailable=null,this.mediaRecorderRef.onstop=null),this.cleanup(),this.state="idle",this.recordingCancel.emit()};drawWaveform=()=>{if(!this.canvasRef||!this.analyserRef)return;const t=this.canvasRef,i=t.getContext("2d");if(!i)return;const e=100,r=this.analyserRef.frequencyBinCount,a=new Uint8Array(r),o=Math.max(1,Math.floor(r/e)),s=this.waveformColor||getComputedStyle(this.el).getPropertyValue("--ai-waveform-color").trim()||"#9ca3af";this.prevHeights.length!==e&&(this.prevHeights=new Array(e).fill(4));const n=(t,e,r,a,o)=>{if(i.beginPath(),"function"==typeof i.roundRect)i.roundRect(t,e,r,a,o);else{const s=Math.min(o,r/2,a/2);i.moveTo(t+s,e),i.lineTo(t+r-s,e),i.arcTo(t+r,e,t+r,e+s,s),i.lineTo(t+r,e+a-s),i.arcTo(t+r,e+a,t+r-s,e+a,s),i.lineTo(t+s,e+a),i.arcTo(t,e+a,t,e+a-s,s),i.lineTo(t,e+s),i.arcTo(t,e,t+s,e,s),i.closePath()}},c=()=>{if("recording"!==this.state)return;this.animationFrameId=requestAnimationFrame(c),this.analyserRef.getByteFrequencyData(a),i.clearRect(0,0,t.width,t.height);const l=t.height/2,d=(t.width-300)/2,h=t.height-4;for(let t=0;t<e;t++){let e=0;for(let i=0;i<o;i++){const s=t*o+i;s<r&&(e+=a[s])}const c=Math.min(1,e/o/255);this.prevHeights[t]=.7*this.prevHeights[t]+.3*(4+c*(h-4));const u=this.prevHeights[t],p=d+3*t,b=l-u/2;i.fillStyle=s,n(p,b,1,u,.5),i.fill()}};c()};formatDuration=t=>`${Math.floor(t/60)}:${(t%60).toString().padStart(2,"0")}`;render(){const t=60-this.recordingDuration;return r(a,{key:"ed98f3466e7ffb3855ad00f3a6963d14e9e14952"},r("div",{key:"babc46a00e425becd642e2f929c21f4771fa7253",class:"wrapper"},r("div",{key:"ae9bb1c3236a0c326d1c31ccec06132aa765a30d",class:"glow"+("recording"===this.state?" visible":""),"aria-hidden":"true"}),r("div",{key:"d5b03673b6d078e153255a5ca1d91b366442ff19",class:"input-container"},"idle"===this.state?r("div",{class:"recording-row"},r("button",{type:"button",class:"submit-button",onClick:this.startRecording,disabled:this.disabled,"aria-label":"Start recording"},r("ai-icon",{name:"mic",size:16})),this.error&&r("div",{class:"error-message",role:"alert"},this.error)):r("div",{class:"recording-row"},r("button",{type:"button",class:"cancel-button",onClick:this.cancelRecording,"aria-label":"Cancel"},r("ai-icon",{name:"cancel",size:14})),r("div",{class:"timer"+(t<=5?" warning":"")},this.formatDuration(this.recordingDuration)),this.showWaveform&&r("canvas",{ref:t=>this.canvasRef=t,class:"waveform",width:"260",height:"32"}),r("button",{type:"button",class:"submit-button"+(this.submitPulse?" pulse":""),onClick:this.stopRecording,"aria-label":"Send"},r("ai-icon",{name:"arrow-up",size:14}))))))}static get style(){return":host{display:block;width:100%}.wrapper{position:relative;padding:var(--Spacing-Sizes-lg, 12px)}.glow{position:absolute;bottom:20px;left:39px;right:39px;height:29px;border-radius:9999px;background:var(--ai-input-glow);filter:blur(20px);opacity:0;pointer-events:none;transition:opacity 0.2s ease}.glow.visible{opacity:0.9}.input-container{position:relative;background-color:var(--ai-bg-input);border-radius:var(--ai-input-border-radius, 9999px);border:1px solid var(--ai-border-default);box-shadow:var(--ai-shadow-sm);padding:var(--ai-input-padding, 12px);overflow:hidden}.recording-row{display:flex;align-items:center;gap:var(--ai-input-gap, 10px)}.cancel-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:32px;max-height:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-border-default);background-color:var(--ai-border-default);color:var(--ai-text-secondary);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.cancel-button:hover{background-color:var(--ai-bg-surface);border-color:var(--ai-bg-surface)}.submit-button{display:inline-flex;align-items:center;justify-content:center;height:32px;width:32px;min-width:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-send-button-active-border, var(--ai-accent));background-color:var(--ai-send-button-active-bg, var(--ai-accent));color:var(--ai-accent-text);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.submit-button:hover{background-color:var(--ai-send-button-active-hover-bg, var(--ai-accent));border-color:var(--ai-send-button-active-hover-border, var(--ai-accent))}@keyframes pulse-once{0%{transform:scale(1)}40%{transform:scale(1.18)}100%{transform:scale(1)}}.submit-button.pulse{animation:pulse-once 0.35s ease}.timer{font-size:13px;font-weight:500;color:var(--ai-text-secondary);min-width:36px;text-align:center;flex-shrink:0}.timer.warning{color:var(--ai-voice-timer-warning-color, var(--ai-danger-text))}.waveform{flex:1;height:32px;max-width:100%}.error-message{position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);background:var(--ai-voice-error-bg, var(--ai-danger-bg));color:var(--ai-voice-error-color, var(--ai-danger-text));font-size:11px;padding:6px 12px;border-radius:6px;white-space:nowrap;box-shadow:var(--ai-shadow-error);border:1px solid var(--ai-voice-error-border, var(--ai-danger-border));z-index:10}"}},[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]}]);function c(){"undefined"!=typeof customElements&&["ai-voice-input","ai-icon"].forEach((t=>{switch(t){case"ai-voice-input":customElements.get(o(t))||customElements.define(o(t),n);break;case"ai-icon":customElements.get(o(t))||s()}}))}export{n as V,c as d}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as i,c as t,a as e,h as r,H as a}from"./p-B0yIzgh4.js";const o=class{constructor(e){i(this,e),this.audioRecorded=t(this,"audioRecorded"),this.recordingCancel=t(this,"recordingCancel")}get el(){return e(this)}disabled=!1;showWaveform=!0;autoStart=!1;errorText="";waveformColor="";state="idle";error=null;recordingDuration=0;submitPulse=!1;audioRecorded;recordingCancel;streamRef=null;audioContextRef=null;analyserRef=null;mediaRecorderRef=null;audioChunks=[];recordingStartTime=0;recordingTimer=null;maxTimeoutRef=null;canvasRef;animationFrameId=0;prevHeights=[];componentDidLoad(){this.autoStart&&!this.disabled&&this.startRecording()}disconnectedCallback(){this.cleanup()}cleanup=()=>{this.recordingTimer&&(clearInterval(this.recordingTimer),this.recordingTimer=null),this.maxTimeoutRef&&(clearTimeout(this.maxTimeoutRef),this.maxTimeoutRef=null),this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=0),this.mediaRecorderRef&&"inactive"!==this.mediaRecorderRef.state&&(this.mediaRecorderRef.stop(),this.mediaRecorderRef=null),this.audioContextRef&&(this.audioContextRef.close(),this.audioContextRef=null),this.analyserRef&&(this.analyserRef=null),this.streamRef&&(this.streamRef.getTracks().forEach((i=>i.stop())),this.streamRef=null)};getErrorText(){return this.errorText?this.errorText:"en"===document.documentElement.lang?"Microphone access denied":"تعذّر الوصول للميكروفون"}startRecording=async()=>{try{this.error=null,this.audioChunks=[];const i=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}});this.streamRef=i;const t=new AudioContext;if(this.audioContextRef=t,this.showWaveform){const e=t.createAnalyser();e.fftSize=256,e.smoothingTimeConstant=.8,this.analyserRef=e,t.createMediaStreamSource(i).connect(e)}this.setupMediaRecorder(i),this.recordingStartTime=Date.now(),this.recordingDuration=0,this.prevHeights=[],this.state="recording",this.showWaveform&&requestAnimationFrame((()=>{this.drawWaveform()})),this.recordingTimer=window.setInterval((()=>{this.recordingDuration=Math.floor((Date.now()-this.recordingStartTime)/1e3)}),1e3),this.maxTimeoutRef=window.setTimeout((()=>{this.stopRecording()}),6e4)}catch(i){console.error("Error starting recording:",i),this.error=this.getErrorText(),this.state="idle"}};setupMediaRecorder=i=>{const t=MediaRecorder.isTypeSupported("audio/webm")?"audio/webm":MediaRecorder.isTypeSupported("audio/ogg")?"audio/ogg":"",e=new MediaRecorder(i,t?{mimeType:t}:{});e.ondataavailable=i=>{i.data.size>0&&this.audioChunks.push(i.data)},e.onstop=()=>{const i=new Blob(this.audioChunks,{type:t||"audio/mp4"});this.audioRecorded.emit({blob:i,duration:this.recordingDuration})},this.mediaRecorderRef=e,e.start(100)};stopRecording=()=>{if(this.recordingDuration<1)return this.submitPulse=!0,void setTimeout((()=>{this.submitPulse=!1}),400);this.recordingTimer&&(clearInterval(this.recordingTimer),this.recordingTimer=null),this.maxTimeoutRef&&(clearTimeout(this.maxTimeoutRef),this.maxTimeoutRef=null),this.cleanup(),this.state="idle"};cancelRecording=()=>{this.mediaRecorderRef&&"inactive"!==this.mediaRecorderRef.state&&(this.mediaRecorderRef.ondataavailable=null,this.mediaRecorderRef.onstop=null),this.cleanup(),this.state="idle",this.recordingCancel.emit()};drawWaveform=()=>{if(!this.canvasRef||!this.analyserRef)return;const i=this.canvasRef,t=i.getContext("2d");if(!t)return;const e=100,r=this.analyserRef.frequencyBinCount,a=new Uint8Array(r),o=Math.max(1,Math.floor(r/e)),s=this.waveformColor||getComputedStyle(this.el).getPropertyValue("--ai-waveform-color").trim()||"#9ca3af";this.prevHeights.length!==e&&(this.prevHeights=new Array(e).fill(4));const n=(i,e,r,a,o)=>{if(t.beginPath(),"function"==typeof t.roundRect)t.roundRect(i,e,r,a,o);else{const s=Math.min(o,r/2,a/2);t.moveTo(i+s,e),t.lineTo(i+r-s,e),t.arcTo(i+r,e,i+r,e+s,s),t.lineTo(i+r,e+a-s),t.arcTo(i+r,e+a,i+r-s,e+a,s),t.lineTo(i+s,e+a),t.arcTo(i,e+a,i,e+a-s,s),t.lineTo(i,e+s),t.arcTo(i,e,i+s,e,s),t.closePath()}},c=()=>{if("recording"!==this.state)return;this.animationFrameId=requestAnimationFrame(c),this.analyserRef.getByteFrequencyData(a),t.clearRect(0,0,i.width,i.height);const l=i.height/2,d=(i.width-300)/2,h=i.height-4;for(let i=0;i<e;i++){let e=0;for(let t=0;t<o;t++){const s=i*o+t;s<r&&(e+=a[s])}const c=Math.min(1,e/o/255);this.prevHeights[i]=.7*this.prevHeights[i]+.3*(4+c*(h-4));const u=this.prevHeights[i],p=d+3*i,b=l-u/2;t.fillStyle=s,n(p,b,1,u,.5),t.fill()}};c()};formatDuration=i=>`${Math.floor(i/60)}:${(i%60).toString().padStart(2,"0")}`;render(){const i=60-this.recordingDuration;return r(a,{key:"ed98f3466e7ffb3855ad00f3a6963d14e9e14952"},r("div",{key:"babc46a00e425becd642e2f929c21f4771fa7253",class:"wrapper"},r("div",{key:"ae9bb1c3236a0c326d1c31ccec06132aa765a30d",class:"glow"+("recording"===this.state?" visible":""),"aria-hidden":"true"}),r("div",{key:"d5b03673b6d078e153255a5ca1d91b366442ff19",class:"input-container"},"idle"===this.state?r("div",{class:"recording-row"},r("button",{type:"button",class:"submit-button",onClick:this.startRecording,disabled:this.disabled,"aria-label":"Start recording"},r("ai-icon",{name:"mic",size:16})),this.error&&r("div",{class:"error-message",role:"alert"},this.error)):r("div",{class:"recording-row"},r("button",{type:"button",class:"cancel-button",onClick:this.cancelRecording,"aria-label":"Cancel"},r("ai-icon",{name:"cancel",size:14})),r("div",{class:"timer"+(i<=5?" warning":"")},this.formatDuration(this.recordingDuration)),this.showWaveform&&r("canvas",{ref:i=>this.canvasRef=i,class:"waveform",width:"260",height:"32"}),r("button",{type:"button",class:"submit-button"+(this.submitPulse?" pulse":""),onClick:this.stopRecording,"aria-label":"Send"},r("ai-icon",{name:"arrow-up",size:14}))))))}};o.style=":host{display:block;width:100%}.wrapper{position:relative;padding:var(--Spacing-Sizes-lg, 12px)}.glow{position:absolute;bottom:20px;left:39px;right:39px;height:29px;border-radius:9999px;background:var(--ai-input-glow);filter:blur(20px);opacity:0;pointer-events:none;transition:opacity 0.2s ease}.glow.visible{opacity:0.9}.input-container{position:relative;background-color:var(--ai-bg-input);border-radius:var(--ai-input-border-radius, 9999px);border:1px solid var(--ai-border-default);box-shadow:var(--ai-shadow-sm);padding:var(--ai-input-padding, 12px);overflow:hidden}.recording-row{display:flex;align-items:center;gap:var(--ai-input-gap, 10px)}.cancel-button{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:32px;max-height:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-border-default);background-color:var(--ai-border-default);color:var(--ai-text-secondary);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.cancel-button:hover{background-color:var(--ai-bg-surface);border-color:var(--ai-bg-surface)}.submit-button{display:inline-flex;align-items:center;justify-content:center;height:32px;width:32px;min-width:32px;padding:4px 8px;border-radius:32px;border:2px solid var(--ai-send-button-active-border, var(--ai-accent));background-color:var(--ai-send-button-active-bg, var(--ai-accent));color:var(--ai-accent-text);cursor:pointer;flex-shrink:0;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.submit-button:hover{background-color:var(--ai-send-button-active-hover-bg, var(--ai-accent));border-color:var(--ai-send-button-active-hover-border, var(--ai-accent))}@keyframes pulse-once{0%{transform:scale(1)}40%{transform:scale(1.18)}100%{transform:scale(1)}}.submit-button.pulse{animation:pulse-once 0.35s ease}.timer{font-size:13px;font-weight:500;color:var(--ai-text-secondary);min-width:36px;text-align:center;flex-shrink:0}.timer.warning{color:var(--ai-voice-timer-warning-color, var(--ai-danger-text))}.waveform{flex:1;height:32px;max-width:100%}.error-message{position:absolute;bottom:-40px;left:50%;transform:translateX(-50%);background:var(--ai-voice-error-bg, var(--ai-danger-bg));color:var(--ai-voice-error-color, var(--ai-danger-text));font-size:11px;padding:6px 12px;border-radius:6px;white-space:nowrap;box-shadow:var(--ai-shadow-error);border:1px solid var(--ai-voice-error-border, var(--ai-danger-border));z-index:10}";export{o as ai_voice_input}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as t,c as i,h as a,H as e}from"./p-B0yIzgh4.js";import{i as n}from"./p-SJZ6Ujn9.js";const r=class{constructor(a){t(this,a),this.closeClick=i(this,"closeClick"),this.editClick=i(this,"editClick"),this.dropdownClick=i(this,"dropdownClick"),this.moreClick=i(this,"moreClick"),this.backClick=i(this,"backClick"),this.headerDragStart=i(this,"headerDragStart")}mode="agent";conversation="محادثة جديدة";agentName="";agentStatus="";agentAvatar="";showBack=!0;isDraggable=!1;statusIndicator="online";avatarError=!1;closeClick;editClick;dropdownClick;moreClick;backClick;headerDragStart;renderIcon(t,i,e){const r=n[t];return r?a("span",{class:"icon-wrap",innerHTML:`<svg width="${i}" height="${e}" viewBox="${r.viewBox}" fill="none" xmlns="http://www.w3.org/2000/svg">${r.content}</svg>`}):null}renderAvatar(){const t=this.agentName?this.agentName.charAt(0):"?";return!this.agentAvatar||this.avatarError?a("div",{class:"avatar-fallback"},t):a("img",{class:"avatar",src:this.agentAvatar,alt:this.agentName,onError:()=>{this.avatarError=!0}})}renderDragBtn(){return this.isDraggable&&a("button",{class:"action-btn drag-btn","aria-label":"سحب / Drag",onPointerDown:t=>{t.preventDefault(),this.headerDragStart.emit({clientX:t.clientX,clientY:t.clientY})}},this.renderIcon("drag",11,15))}renderAgentMode(){return[this.renderDragBtn(),a("div",{class:"content agent dropdown-trigger",role:"button",onClick:()=>this.dropdownClick.emit(),"aria-haspopup":"listbox","aria-expanded":!1,"aria-label":`${this.conversation}, افتح قائمة المحادثات`},a("span",{class:"title"},this.conversation),a("span",{class:"dropdown-chevron"},this.renderIcon("chevron-down",24,24))),a("div",{class:"actions"},a("button",{class:"action-btn","aria-label":"تعديل / Edit",onClick:()=>this.editClick.emit()},this.renderIcon("pencil-edit",22,22)),a("button",{class:"action-btn","aria-label":"المزيد / More",onClick:()=>this.moreClick.emit()},this.renderIcon("ellipsis",22,22)),a("button",{class:"action-btn","aria-label":"إغلاق / Close",onClick:()=>this.closeClick.emit()},this.renderIcon("cancel",22,22)))]}renderHumanMode(){return[this.renderDragBtn(),a("div",{class:"content human"},this.showBack&&a("button",{class:"back-btn","aria-label":"رجوع / Back",onClick:()=>this.backClick.emit()},this.renderIcon("arrow-right",24,24)),a("div",{class:"avatar-wrapper"},this.renderAvatar(),a("span",{class:`online-dot status-${this.statusIndicator}`},this.renderIcon("online-dot",10,10))),a("div",{class:"text-block"},a("span",{class:"agent-name"},this.agentName),this.agentStatus&&a("span",{class:"agent-status"},this.agentStatus))),a("div",{class:"actions"},a("button",{class:"action-btn","aria-label":"المزيد / More",onClick:()=>this.moreClick.emit()},this.renderIcon("ellipsis",22,22)),a("button",{class:"action-btn","aria-label":"إغلاق / Close",onClick:()=>this.closeClick.emit()},this.renderIcon("cancel",22,22)))]}render(){return a(e,{key:"f0b6caccf925bc1388b2680b49e4aec3a44fa353"},a("div",{key:"fd144266fb338cbb5d70a3fb1ae9c1b39710ffc5",class:"header-container"},"agent"===this.mode?this.renderAgentMode():this.renderHumanMode()))}};r.style=":host{display:block}.header-container{display:flex;align-items:center;gap:8px;padding:16px;background:var(--ai-bg-card);border-bottom:1px solid var(--ai-border-light);width:100%;box-sizing:border-box}.drag-btn{cursor:grab;color:var(--ai-text-muted)}.drag-btn:active{cursor:grabbing}.action-btn,.back-btn{width:40px;height:40px;padding:4px;display:flex;align-items:center;justify-content:center;background:var(--ai-bg-card);border:none;border-radius:8px;cursor:pointer;flex-shrink:0;color:var(--ai-text-primary);transition:background 0.15s ease}.action-btn:hover,.back-btn:hover{background:var(--ai-bg-surface)}.action-btn:focus-visible,.back-btn:focus-visible{outline:2px solid var(--ai-focus-ring);outline-offset:2px}.action-btn:active,.back-btn:active{background:var(--ai-bg-surface)}.actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.content{flex:1 0 0;display:flex;align-items:center;justify-content:flex-start;min-width:0}.content.agent{gap:4px;height:40px}.content.human{gap:8px}.dropdown-trigger{display:flex;align-items:center;gap:4px;background:none;border:none;cursor:pointer;padding:0;flex-shrink:0;color:var(--ai-text-primary)}.dropdown-trigger:focus-visible{outline:2px solid var(--ai-focus-ring);outline-offset:2px}.title{font-size:16px;font-weight:700;color:var(--ai-text-primary);white-space:nowrap;line-height:normal;min-width:0;overflow:hidden;text-overflow:ellipsis}.avatar-wrapper{position:relative;width:40px;height:40px;flex-shrink:0}.avatar{width:40px;height:40px;border-radius:9999px;border:1px solid var(--ai-border-default);object-fit:cover;display:block}.avatar-fallback{width:40px;height:40px;border-radius:9999px;border:1px solid var(--ai-border-default);background:var(--ai-bg-surface);color:var(--ai-text-primary);font-size:16px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0}.online-dot{position:absolute;bottom:0;inset-inline-end:0;width:10px;height:10px;display:inline-flex;align-items:center;justify-content:center;color:var(--ai-bg-card);}.online-dot.status-online{color:#22c55e;}.online-dot.status-offline{color:#9ca3af;}.online-dot.status-busy{color:#ef4444;}.online-dot.status-away{color:#f59e0b;}.text-block{display:flex;flex-direction:column;align-items:flex-start;gap:0;flex-shrink:0}.agent-name{font-size:14px;font-weight:500;color:var(--ai-text-primary);line-height:20px;white-space:nowrap}.agent-status{font-size:14px;font-weight:400;color:var(--ai-text-secondary);line-height:20px;white-space:nowrap}.icon-wrap{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.icon-wrap svg{display:block}:host-context([dir='ltr']) .back-btn .icon-wrap,:host([dir='ltr']) .back-btn .icon-wrap{transform:scaleX(-1)}";export{r as ai_chat_header}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as a,h as e,H as r}from"./p-B0yIzgh4.js";import{i as s}from"./p-SJZ6Ujn9.js";const i=class{constructor(e){a(this,e)}title="ملخص المحادثة";summary="";messageCount=0;language="";renderIcon(a,r,i){const d=s[a];return d?e("span",{class:"icon-wrap",innerHTML:`<svg width="${r}" height="${i}" viewBox="${d.viewBox}" fill="none" xmlns="http://www.w3.org/2000/svg">${d.content}</svg>`}):null}render(){return e(r,{key:"86515141f587c12228ed4c6654dedca7b4ca98aa"},e("div",{key:"92eb74db5756446522ad2ebd822cb156cec25e82",class:"summary-card"},e("div",{key:"e524143089223e6f223c29a869d6fe2f8e681f29",class:"summary-header"},e("div",{key:"33298a6bd249a6a1befa48385fa03c002e13b14d",class:"sparkle-avatar"},this.renderIcon("sparkle",14,14)),e("span",{key:"800084477746e0f5123f6977e45460299b802cdc",class:"summary-title"},this.title),e("div",{key:"c1c3d94d0d57fae1601ff3c1de52ce2392d0b0d4",class:"summary-badges"},this.messageCount>0&&e("span",{key:"8252e3dd8054980ed20af95e7148b944c420ce70",class:"badge"},this.renderIcon("list",12,12),this.messageCount),this.language&&e("span",{key:"d793ccbf1234050ad17f731050314cc51214de68",class:"badge lang-badge"},this.language))),this.summary&&e("p",{key:"0e0a0bcf45b947826a9e417b62fe3e6e3f530cfc",class:"summary-body",ref:a=>a&&(a.textContent=this.summary)}),e("div",{key:"9897f21508b7f1193ba596d0918d410d31a815b5",class:"summary-slot"},e("slot",{key:"be036f1905059a9914f2b6e12a87e4dfa1166194"}))))}};i.style=":host{display:block}.icon-wrap{display:inline-flex;align-items:center;justify-content:center;line-height:0}.summary-card{background:var(--ai-bg-card);border:1px solid var(--ai-border-default);border-radius:16px;box-shadow:var(--ai-shadow-sm);overflow:hidden;animation:fade-in 0.3s ease}@keyframes fade-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.summary-header{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--ai-border-default)}.sparkle-avatar{width:24px;height:24px;border-radius:9999px;background:var(--ai-bg-surface);box-shadow:var(--ai-shadow-inner);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--ai-amber)}.summary-title{font-size:15px;font-weight:500;color:var(--ai-text-primary);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.summary-badges{display:inline-flex;align-items:center;gap:6px;flex-shrink:0}.badge{display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:500;color:var(--ai-accent-dark);background:var(--ai-accent-bg);padding:2px 8px;border-radius:9999px;white-space:nowrap}.lang-badge{color:var(--ai-text-secondary);background:var(--ai-bg-surface)}.summary-body{margin:0;padding:12px 16px;font-size:14px;color:var(--ai-text-secondary);line-height:1.6;border-bottom:1px solid var(--ai-border-default)}.summary-slot{padding:12px 16px}.summary-slot:empty{display:none}";export{i as ai_conversation_summary}
|