@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.
Files changed (31) hide show
  1. package/dist/cjs/ai-chat-header.cjs.entry.js +5 -5
  2. package/dist/cjs/ai-conversation-summary.cjs.entry.js +2 -2
  3. package/dist/cjs/ai-voice-input.cjs.entry.js +15 -9
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/ui-ai-kit.cjs.js +1 -1
  6. package/dist/collection/components/ai-chat-header/ai-chat-header.js +6 -6
  7. package/dist/collection/components/ai-conversation-summary/ai-conversation-summary.js +4 -4
  8. package/dist/collection/components/ai-voice-input/ai-voice-input.css +1 -1
  9. package/dist/collection/components/ai-voice-input/ai-voice-input.js +14 -8
  10. package/dist/components/ai-chat-header.js +1 -1
  11. package/dist/components/ai-conversation-summary.js +1 -1
  12. package/dist/components/ai-message-input.js +1 -1
  13. package/dist/components/ai-voice-input.js +1 -1
  14. package/dist/components/p-CX1Yp79q.js +1 -0
  15. package/dist/esm/ai-chat-header.entry.js +5 -5
  16. package/dist/esm/ai-conversation-summary.entry.js +2 -2
  17. package/dist/esm/ai-voice-input.entry.js +15 -9
  18. package/dist/esm/loader.js +1 -1
  19. package/dist/esm/ui-ai-kit.js +1 -1
  20. package/dist/types/components/ai-chat-header/ai-chat-header.d.ts +1 -1
  21. package/dist/types/components/ai-conversation-summary/ai-conversation-summary.d.ts +1 -1
  22. package/dist/types/components.d.ts +13 -13
  23. package/dist/ui-ai-kit/p-76195745.entry.js +1 -0
  24. package/dist/ui-ai-kit/p-79c78d8e.entry.js +1 -0
  25. package/dist/ui-ai-kit/p-9c4c6c01.entry.js +1 -0
  26. package/dist/ui-ai-kit/ui-ai-kit.esm.js +1 -1
  27. package/package.json +1 -1
  28. package/dist/components/p-DCr8F_XV.js +0 -1
  29. package/dist/ui-ai-kit/p-21c4fc1f.entry.js +0 -1
  30. package/dist/ui-ai-kit/p-6d3505e9.entry.js +0 -1
  31. 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.moreClick = index.createEvent(this, "moreClick");
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
- moreClick;
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\u0645\u0632\u064A\u062F / More", onClick: () => this.moreClick.emit() }, this.renderIcon('ellipsis', 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))),
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\u0645\u0632\u064A\u062F / More", onClick: () => this.moreClick.emit() }, this.renderIcon('ellipsis', 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))),
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: 'f0b6caccf925bc1388b2680b49e4aec3a44fa353' }, index.h("div", { key: 'fd144266fb338cbb5d70a3fb1ae9c1b39710ffc5', class: "header-container" }, this.mode === 'agent' ? this.renderAgentMode() : this.renderHumanMode())));
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
- title = 'ملخص المحادثة';
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: '86515141f587c12228ed4c6654dedca7b4ca98aa' }, index.h("div", { key: '92eb74db5756446522ad2ebd822cb156cec25e82', class: "summary-card" }, index.h("div", { key: 'e524143089223e6f223c29a869d6fe2f8e681f29', class: "summary-header" }, index.h("div", { key: '33298a6bd249a6a1befa48385fa03c002e13b14d', class: "sparkle-avatar" }, this.renderIcon('sparkle', 14, 14)), index.h("span", { key: '800084477746e0f5123f6977e45460299b802cdc', class: "summary-title" }, this.title), index.h("div", { key: 'c1c3d94d0d57fae1601ff3c1de52ce2392d0b0d4', class: "summary-badges" }, this.messageCount > 0 && (index.h("span", { key: '8252e3dd8054980ed20af95e7148b944c420ce70', class: "badge" }, this.renderIcon('list', 12, 12), this.messageCount)), this.language && (index.h("span", { key: 'd793ccbf1234050ad17f731050314cc51214de68', class: "badge lang-badge" }, this.language)))), this.summary && (index.h("p", { key: '0e0a0bcf45b947826a9e417b62fe3e6e3f530cfc', class: "summary-body", ref: el => el && (el.textContent = this.summary) })), index.h("div", { key: '9897f21508b7f1193ba596d0918d410d31a815b5', class: "summary-slot" }, index.h("slot", { key: 'be036f1905059a9914f2b6e12a87e4dfa1166194' })))));
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;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}`;
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: 'ed98f3466e7ffb3855ad00f3a6963d14e9e14952' }, index.h("div", { key: 'babc46a00e425becd642e2f929c21f4771fa7253', class: "wrapper" }, index.h("div", { key: 'ae9bb1c3236a0c326d1c31ccec06132aa765a30d', class: `glow${this.state === 'recording' ? ' visible' : ''}`, "aria-hidden": "true" }), index.h("div", { key: 'd5b03673b6d078e153255a5ca1d91b366442ff19', 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", width: "260", 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 }))))))));
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();
@@ -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",{"title":[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);
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",{"title":[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);
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
- moreClick;
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\u0645\u0632\u064A\u062F / More", onClick: () => this.moreClick.emit() }, this.renderIcon('ellipsis', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
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\u0645\u0632\u064A\u062F / More", onClick: () => this.moreClick.emit() }, this.renderIcon('ellipsis', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
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: 'f0b6caccf925bc1388b2680b49e4aec3a44fa353' }, h("div", { key: 'fd144266fb338cbb5d70a3fb1ae9c1b39710ffc5', class: "header-container" }, this.mode === 'agent' ? this.renderAgentMode() : this.renderHumanMode())));
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": "moreClick",
301
- "name": "moreClick",
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
- title = 'ملخص المحادثة';
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: '86515141f587c12228ed4c6654dedca7b4ca98aa' }, h("div", { key: '92eb74db5756446522ad2ebd822cb156cec25e82', class: "summary-card" }, h("div", { key: 'e524143089223e6f223c29a869d6fe2f8e681f29', class: "summary-header" }, h("div", { key: '33298a6bd249a6a1befa48385fa03c002e13b14d', class: "sparkle-avatar" }, this.renderIcon('sparkle', 14, 14)), h("span", { key: '800084477746e0f5123f6977e45460299b802cdc', class: "summary-title" }, this.title), h("div", { key: 'c1c3d94d0d57fae1601ff3c1de52ce2392d0b0d4', class: "summary-badges" }, this.messageCount > 0 && (h("span", { key: '8252e3dd8054980ed20af95e7148b944c420ce70', class: "badge" }, this.renderIcon('list', 12, 12), this.messageCount)), this.language && (h("span", { key: 'd793ccbf1234050ad17f731050314cc51214de68', class: "badge lang-badge" }, this.language)))), this.summary && (h("p", { key: '0e0a0bcf45b947826a9e417b62fe3e6e3f530cfc', class: "summary-body", ref: el => el && (el.textContent = this.summary) })), h("div", { key: '9897f21508b7f1193ba596d0918d410d31a815b5', class: "summary-slot" }, h("slot", { key: 'be036f1905059a9914f2b6e12a87e4dfa1166194' })))));
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
- "title": {
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": "title",
53
+ "attribute": "conversation",
54
54
  "defaultValue": "'\u0645\u0644\u062E\u0635 \u0627\u0644\u0645\u062D\u0627\u062F\u062B\u0629'"
55
55
  },
56
56
  "summary": {
@@ -119,8 +119,8 @@
119
119
  /* Waveform canvas */
120
120
  .waveform {
121
121
  flex: 1;
122
+ min-width: 0;
122
123
  height: 32px;
123
- max-width: 100%;
124
124
  }
125
125
 
126
126
  /* Error message */
@@ -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: 'ed98f3466e7ffb3855ad00f3a6963d14e9e14952' }, h("div", { key: 'babc46a00e425becd642e2f929c21f4771fa7253', class: "wrapper" }, h("div", { key: 'ae9bb1c3236a0c326d1c31ccec06132aa765a30d', class: `glow${this.state === 'recording' ? ' visible' : ''}`, "aria-hidden": "true" }), h("div", { key: 'd5b03673b6d078e153255a5ca1d91b366442ff19', 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", width: "260", 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 }))))))));
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 r}from"./p-DnO4dikr.js";import{i as s}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.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,a,i){const n=s[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":"المزيد / More",onClick:()=>this.moreClick.emit()},this.renderIcon("ellipsis",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":"المزيد / More",onClick:()=>this.moreClick.emit()},this.renderIcon("ellipsis",22,22)),e("button",{class:"action-btn","aria-label":"إغلاق / Close",onClick:()=>this.closeClick.emit()},this.renderIcon("cancel",22,22)))]}render(){return e(n,{key:"f0b6caccf925bc1388b2680b49e4aec3a44fa353"},e("div",{key:"fd144266fb338cbb5d70a3fb1ae9c1b39710ffc5",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(r(t))||customElements.define(r(t),o))}))};export{c as AiChatHeader,l as defineCustomElement}
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 n=a(class extends e{constructor(a){super(),!1!==a&&this.__registerHost(),this.__attachShadow()}title="ملخص المحادثة";summary="";messageCount=0;language="";renderIcon(a,e,r){const t=i[a];return t?s("span",{class:"icon-wrap",innerHTML:`<svg width="${e}" height="${r}" viewBox="${t.viewBox}" fill="none" xmlns="http://www.w3.org/2000/svg">${t.content}</svg>`}):null}render(){return s(r,{key:"86515141f587c12228ed4c6654dedca7b4ca98aa"},s("div",{key:"92eb74db5756446522ad2ebd822cb156cec25e82",class:"summary-card"},s("div",{key:"e524143089223e6f223c29a869d6fe2f8e681f29",class:"summary-header"},s("div",{key:"33298a6bd249a6a1befa48385fa03c002e13b14d",class:"sparkle-avatar"},this.renderIcon("sparkle",14,14)),s("span",{key:"800084477746e0f5123f6977e45460299b802cdc",class:"summary-title"},this.title),s("div",{key:"c1c3d94d0d57fae1601ff3c1de52ce2392d0b0d4",class:"summary-badges"},this.messageCount>0&&s("span",{key:"8252e3dd8054980ed20af95e7148b944c420ce70",class:"badge"},this.renderIcon("list",12,12),this.messageCount),this.language&&s("span",{key:"d793ccbf1234050ad17f731050314cc51214de68",class:"badge lang-badge"},this.language))),this.summary&&s("p",{key:"0e0a0bcf45b947826a9e417b62fe3e6e3f530cfc",class:"summary-body",ref:a=>a&&(a.textContent=this.summary)}),s("div",{key:"9897f21508b7f1193ba596d0918d410d31a815b5",class:"summary-slot"},s("slot",{key:"be036f1905059a9914f2b6e12a87e4dfa1166194"}))))}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",{title:[1],summary:[1],messageCount:[2,"message-count"],language:[1]}]),d=n,o=function(){"undefined"!=typeof customElements&&["ai-conversation-summary"].forEach((a=>{"ai-conversation-summary"===a&&(customElements.get(t(a))||customElements.define(t(a),n))}))};export{d as AiConversationSummary,o as defineCustomElement}
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-DCr8F_XV.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
+ 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 r}from"./p-DCr8F_XV.js";const s=o,p=r;export{s as AiVoiceInput,p as defineCustomElement}
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.moreClick = createEvent(this, "moreClick");
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
- moreClick;
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\u0645\u0632\u064A\u062F / More", onClick: () => this.moreClick.emit() }, this.renderIcon('ellipsis', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
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\u0645\u0632\u064A\u062F / More", onClick: () => this.moreClick.emit() }, this.renderIcon('ellipsis', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
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: 'f0b6caccf925bc1388b2680b49e4aec3a44fa353' }, h("div", { key: 'fd144266fb338cbb5d70a3fb1ae9c1b39710ffc5', class: "header-container" }, this.mode === 'agent' ? this.renderAgentMode() : this.renderHumanMode())));
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
- title = 'ملخص المحادثة';
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: '86515141f587c12228ed4c6654dedca7b4ca98aa' }, h("div", { key: '92eb74db5756446522ad2ebd822cb156cec25e82', class: "summary-card" }, h("div", { key: 'e524143089223e6f223c29a869d6fe2f8e681f29', class: "summary-header" }, h("div", { key: '33298a6bd249a6a1befa48385fa03c002e13b14d', class: "sparkle-avatar" }, this.renderIcon('sparkle', 14, 14)), h("span", { key: '800084477746e0f5123f6977e45460299b802cdc', class: "summary-title" }, this.title), h("div", { key: 'c1c3d94d0d57fae1601ff3c1de52ce2392d0b0d4', class: "summary-badges" }, this.messageCount > 0 && (h("span", { key: '8252e3dd8054980ed20af95e7148b944c420ce70', class: "badge" }, this.renderIcon('list', 12, 12), this.messageCount)), this.language && (h("span", { key: 'd793ccbf1234050ad17f731050314cc51214de68', class: "badge lang-badge" }, this.language)))), this.summary && (h("p", { key: '0e0a0bcf45b947826a9e417b62fe3e6e3f530cfc', class: "summary-body", ref: el => el && (el.textContent = this.summary) })), h("div", { key: '9897f21508b7f1193ba596d0918d410d31a815b5', class: "summary-slot" }, h("slot", { key: 'be036f1905059a9914f2b6e12a87e4dfa1166194' })))));
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;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}`;
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: 'ed98f3466e7ffb3855ad00f3a6963d14e9e14952' }, h("div", { key: 'babc46a00e425becd642e2f929c21f4771fa7253', class: "wrapper" }, h("div", { key: 'ae9bb1c3236a0c326d1c31ccec06132aa765a30d', class: `glow${this.state === 'recording' ? ' visible' : ''}`, "aria-hidden": "true" }), h("div", { key: 'd5b03673b6d078e153255a5ca1d91b366442ff19', 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", width: "260", 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 }))))))));
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();
@@ -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",{"title":[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);
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 };
@@ -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",{"title":[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);
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
- moreClick: EventEmitter<void>;
26
+ positionClick: EventEmitter<void>;
27
27
  /** Back-arrow button (human mode) */
28
28
  backClick: EventEmitter<void>;
29
29
  /**
@@ -1,6 +1,6 @@
1
1
  export declare class AiConversationSummary {
2
2
  /** Card heading */
3
- title: string;
3
+ conversation: string;
4
4
  /** Summary body text */
5
5
  summary: string;
6
6
  /** Total message count shown as a badge */
@@ -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
- "moreClick": void;
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
- "onMoreClick"?: (event: AiChatHeaderCustomEvent<void>) => void;
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
- "title": string;
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-6d3505e9",[[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-a9e4eaef",[[769,"ai-conversation-summary",{title:[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-21c4fc1f",[[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))));
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@salla.sa/ui-ai-kit-core",
3
- "version": "1.1.1",
3
+ "version": "2.0.0",
4
4
  "main": "dist/index.cjs.js",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -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}