@salla.sa/ui-ai-kit-core 2.2.0 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/cjs/ai-agent-error.cjs.entry.js +2 -2
  2. package/dist/cjs/ai-card.cjs.entry.js +3 -3
  3. package/dist/cjs/ai-chat-container.cjs.entry.js +29 -3
  4. package/dist/cjs/ai-chat-header.cjs.entry.js +73 -11
  5. package/dist/cjs/ai-chat-message.cjs.entry.js +1 -1
  6. package/dist/cjs/ai-conversation-list.cjs.entry.js +11 -5
  7. package/dist/cjs/ai-conversation-summary.cjs.entry.js +1 -1
  8. package/dist/cjs/ai-icon.cjs.entry.js +1 -1
  9. package/dist/cjs/ai-in-chat-browser.cjs.entry.js +5 -23
  10. package/dist/cjs/ai-link.cjs.entry.js +2 -2
  11. package/dist/cjs/ai-loading.cjs.entry.js +2 -2
  12. package/dist/cjs/ai-message-input.cjs.entry.js +1 -1
  13. package/dist/cjs/ai-rating.cjs.entry.js +1 -1
  14. package/dist/cjs/ai-route-decision.cjs.entry.js +2 -2
  15. package/dist/cjs/ai-suggestion.cjs.entry.js +3 -3
  16. package/dist/cjs/ai-voice-input.cjs.entry.js +2 -2
  17. package/dist/cjs/{index-BQ8Az7-D.js → index-Cc05u4ND.js} +15 -0
  18. package/dist/cjs/loader.cjs.js +2 -2
  19. package/dist/cjs/ui-ai-kit.cjs.js +2 -2
  20. package/dist/collection/collection-manifest.json +1 -1
  21. package/dist/collection/components/ai-agent-error/ai-agent-error.js +1 -1
  22. package/dist/collection/components/ai-card/ai-card.js +2 -2
  23. package/dist/collection/components/ai-chat-container/ai-chat-container.js +110 -7
  24. package/dist/collection/components/ai-chat-header/ai-chat-header.js +204 -33
  25. package/dist/collection/components/ai-conversation-list/ai-conversation-list.css +20 -0
  26. package/dist/collection/components/ai-conversation-list/ai-conversation-list.js +29 -3
  27. package/dist/collection/components/ai-in-chat-browser/ai-in-chat-browser.css +0 -10
  28. package/dist/collection/components/ai-in-chat-browser/ai-in-chat-browser.js +5 -74
  29. package/dist/collection/components/ai-link/ai-link.js +1 -1
  30. package/dist/collection/components/ai-loading/ai-loading.js +1 -1
  31. package/dist/collection/components/ai-route-decision/ai-route-decision.js +1 -1
  32. package/dist/collection/components/ai-suggestion/ai-suggestion.js +2 -2
  33. package/dist/collection/components/ai-voice-input/ai-voice-input.js +1 -1
  34. package/dist/components/ai-agent-error.js +1 -1
  35. package/dist/components/ai-card.js +1 -1
  36. package/dist/components/ai-chat-container.js +1 -1
  37. package/dist/components/ai-chat-header.js +1 -1
  38. package/dist/components/ai-chat-message.js +2 -2
  39. package/dist/components/ai-conversation-list.js +1 -1
  40. package/dist/components/ai-conversation-summary.js +1 -1
  41. package/dist/components/ai-icon.js +1 -1
  42. package/dist/components/ai-in-chat-browser.js +1 -1
  43. package/dist/components/ai-link.js +1 -1
  44. package/dist/components/ai-loading.js +1 -1
  45. package/dist/components/ai-message-input.js +1 -1
  46. package/dist/components/ai-rating.js +1 -1
  47. package/dist/components/ai-route-decision.js +1 -1
  48. package/dist/components/ai-suggestion.js +1 -1
  49. package/dist/components/ai-voice-input.js +1 -1
  50. package/dist/components/index.js +1 -1
  51. package/dist/components/{p-CXJ3iEt8.js → p-BPkf7wZg.js} +1 -1
  52. package/dist/components/{p-B3gdcdCK.js → p-Ba0urr6Q.js} +1 -1
  53. package/dist/components/p-CFSr3KcL.js +1 -0
  54. package/dist/components/{p-C2LB8D3t.js → p-DZuBxUde.js} +1 -1
  55. package/dist/components/{p-NKAwri_g.js → p-bGFmyIp1.js} +1 -1
  56. package/dist/esm/ai-agent-error.entry.js +2 -2
  57. package/dist/esm/ai-card.entry.js +3 -3
  58. package/dist/esm/ai-chat-container.entry.js +29 -3
  59. package/dist/esm/ai-chat-header.entry.js +73 -11
  60. package/dist/esm/ai-chat-message.entry.js +1 -1
  61. package/dist/esm/ai-conversation-list.entry.js +11 -5
  62. package/dist/esm/ai-conversation-summary.entry.js +1 -1
  63. package/dist/esm/ai-icon.entry.js +1 -1
  64. package/dist/esm/ai-in-chat-browser.entry.js +5 -23
  65. package/dist/esm/ai-link.entry.js +2 -2
  66. package/dist/esm/ai-loading.entry.js +2 -2
  67. package/dist/esm/ai-message-input.entry.js +1 -1
  68. package/dist/esm/ai-rating.entry.js +1 -1
  69. package/dist/esm/ai-route-decision.entry.js +2 -2
  70. package/dist/esm/ai-suggestion.entry.js +3 -3
  71. package/dist/esm/ai-voice-input.entry.js +2 -2
  72. package/dist/esm/{index-BSQ0GkzI.js → index-VMEwYfaX.js} +15 -0
  73. package/dist/esm/loader.js +3 -3
  74. package/dist/esm/ui-ai-kit.js +3 -3
  75. package/dist/types/components/ai-chat-container/ai-chat-container.d.ts +21 -1
  76. package/dist/types/components/ai-chat-header/ai-chat-header.d.ts +28 -3
  77. package/dist/types/components/ai-conversation-list/ai-conversation-list.d.ts +2 -0
  78. package/dist/types/components/ai-in-chat-browser/ai-in-chat-browser.d.ts +1 -10
  79. package/dist/types/components.d.ts +107 -53
  80. package/dist/types/index.d.ts +1 -0
  81. package/dist/ui-ai-kit/{p-1e8e6440.entry.js → p-062cad02.entry.js} +1 -1
  82. package/dist/ui-ai-kit/p-17e5d542.entry.js +1 -0
  83. package/dist/ui-ai-kit/{p-b88808a4.entry.js → p-187db371.entry.js} +1 -1
  84. package/dist/ui-ai-kit/p-1b247096.entry.js +1 -0
  85. package/dist/ui-ai-kit/p-278895fd.entry.js +1 -0
  86. package/dist/ui-ai-kit/{p-39a2d4c3.entry.js → p-338d55d3.entry.js} +1 -1
  87. package/dist/ui-ai-kit/{p-dac67692.entry.js → p-4359a116.entry.js} +1 -1
  88. package/dist/ui-ai-kit/{p-3a86919b.entry.js → p-5f005ec5.entry.js} +1 -1
  89. package/dist/ui-ai-kit/{p-849cd7e2.entry.js → p-6a4b66ed.entry.js} +1 -1
  90. package/dist/ui-ai-kit/{p-47797619.entry.js → p-6b644d32.entry.js} +1 -1
  91. package/dist/ui-ai-kit/{p-658d8b24.entry.js → p-6bd54e29.entry.js} +1 -1
  92. package/dist/ui-ai-kit/{p-eb40ffd0.entry.js → p-83f46030.entry.js} +2 -2
  93. package/dist/ui-ai-kit/{p-c9dca99e.entry.js → p-8fabdbe8.entry.js} +1 -1
  94. package/dist/ui-ai-kit/{p-BSQ0GkzI.js → p-VMEwYfaX.js} +2 -2
  95. package/dist/ui-ai-kit/{p-73cbb80b.entry.js → p-cae762e0.entry.js} +1 -1
  96. package/dist/ui-ai-kit/p-d02f2db5.entry.js +1 -0
  97. package/dist/ui-ai-kit/{p-78fb4ceb.entry.js → p-e6236df2.entry.js} +1 -1
  98. package/dist/ui-ai-kit/ui-ai-kit.esm.js +1 -1
  99. package/package.json +1 -1
  100. package/dist/components/p-D4mVoP6B.js +0 -1
  101. package/dist/components/p-DKsh1ZQX.js +0 -1
  102. package/dist/ui-ai-kit/p-29d84924.entry.js +0 -1
  103. package/dist/ui-ai-kit/p-77ef8015.entry.js +0 -1
  104. package/dist/ui-ai-kit/p-8cb807f3.entry.js +0 -1
  105. package/dist/ui-ai-kit/p-abd68089.entry.js +0 -1
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, a as getElement, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, c as createEvent, a as getElement, h, H as Host } from './index-VMEwYfaX.js';
2
2
  import { i as iconRegistry } from './icon-registry-DlD8m3rf.js';
3
3
 
4
4
  const aiChatHeaderCss = () => `:host{display:block;position:relative;z-index:10}.header-wrapper{position:relative;display:flex;flex-direction:column}.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}.content.browser{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-chevron{display:inline-flex;transition:transform 0.2s ease}.dropdown-chevron.open{transform:rotate(180deg)}.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}@keyframes title-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}.title-skeleton{display:inline-block;width:120px;height:16px;border-radius:8px;background:var(--ai-shimmer-gradient, linear-gradient(90deg, rgba(0,0,0,0.06) 25%, rgba(0,0,0,0.1) 50%, rgba(0,0,0,0.06) 75%));background-size:200% 100%;animation:title-shimmer 1.6s ease-in-out infinite}.browser-title{font-size:14px;font-weight:600;color:var(--ai-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;line-height:20px}.browser-link-btn{width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;background:none;border:none;border-radius:8px;cursor:pointer;flex-shrink:0;color:var(--ai-text-secondary)}.browser-link-btn:focus-visible{outline:2px solid var(--ai-focus-ring);outline-offset:2px}.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)}.conversation-dropdown{position:absolute;top:100%;left:0;right:0;z-index:20;height:360px;display:flex;flex-direction:column;background:var(--ai-bg-surface);border-bottom:1px solid var(--ai-border-light);box-shadow:var(--ai-shadow-md, 0 4px 12px rgba(0, 0, 0, 0.08));animation:slideDown 0.2s ease;overflow:hidden}.conversation-dropdown ai-conversation-list{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}@keyframes slideDown{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}`;
@@ -7,14 +7,16 @@ const AiChatHeader = class {
7
7
  constructor(hostRef) {
8
8
  registerInstance(this, hostRef);
9
9
  this.closeClick = createEvent(this, "closeClick");
10
- this.editClick = createEvent(this, "editClick");
10
+ this.newChatClick = createEvent(this, "newChatClick");
11
11
  this.dropdownClick = createEvent(this, "dropdownClick");
12
12
  this.positionClick = createEvent(this, "positionClick");
13
+ this.headerPositionClick = createEvent(this, "headerPositionClick");
13
14
  this.backClick = createEvent(this, "backClick");
14
15
  this.headerDragStart = createEvent(this, "headerDragStart");
15
16
  this.openExternal = createEvent(this, "openExternal");
16
17
  this.conversationSelect = createEvent(this, "conversationSelect");
17
18
  this.conversationDelete = createEvent(this, "conversationDelete");
19
+ this.conversationRetry = createEvent(this, "conversationRetry");
18
20
  }
19
21
  get el() { return getElement(this); }
20
22
  /** Layout variant */
@@ -29,7 +31,6 @@ const AiChatHeader = class {
29
31
  agentAvatar = '';
30
32
  /** Human mode: show the back button */
31
33
  showBack = true;
32
- isDraggable = false;
33
34
  /** Human mode: status indicator variant */
34
35
  statusIndicator = 'online';
35
36
  /** Browser mode: page title shown in the header */
@@ -42,18 +43,36 @@ const AiChatHeader = class {
42
43
  conversationActiveId = '';
43
44
  /** Conversation list: show skeleton loading state */
44
45
  conversationLoading = false;
46
+ /** Conversation list: show error state */
47
+ conversationError = false;
48
+ /** Conversation list: error message text */
49
+ conversationErrorText = 'تعذّر تحميل المحادثات';
50
+ /** Conversation list: retry button label */
51
+ conversationRetryLabel = 'إعادة المحاولة';
52
+ /** Conversation list: empty state label */
53
+ conversationEmptyText = 'لا توجد محادثات';
54
+ /** Conversation list: ID of the conversation currently being deleted — shows a spinner on that item */
55
+ conversationDeletingId = '';
45
56
  /** Show a shimmer skeleton in place of the conversation title (e.g. while loading conversation) */
46
57
  titleLoading = false;
47
58
  avatarError = false;
48
59
  dropdownOpen = false;
60
+ /** Internally managed — true when the parent ai-chat-container has position="float" */
61
+ isFloating = false;
62
+ parentPositionObserver = null;
49
63
  /** Cancel / close button */
50
64
  closeClick;
51
65
  /** Pencil-edit button (agent mode) */
52
- editClick;
66
+ newChatClick;
53
67
  /** Title / chevron click → open conversation list (agent mode) */
54
68
  dropdownClick;
55
- /** More options button */
69
+ /** More options button — also fires a composed event so ai-chat-container can auto-cycle position */
56
70
  positionClick;
71
+ /**
72
+ * Composed + bubbling event that ai-chat-container listens to internally
73
+ * to automatically cycle its position. Fires alongside positionClick.
74
+ */
75
+ headerPositionClick;
57
76
  /** Back-arrow button (human mode) */
58
77
  backClick;
59
78
  /**
@@ -67,11 +86,50 @@ const AiChatHeader = class {
67
86
  conversationSelect;
68
87
  /** Fired when a conversation delete button is clicked */
69
88
  conversationDelete;
89
+ /** Fired when the retry button is clicked in the conversation list error state */
90
+ conversationRetry;
70
91
  handleDocumentClick(event) {
71
92
  if (this.dropdownOpen && !this.el.contains(event.target)) {
72
93
  this.dropdownOpen = false;
73
94
  }
74
95
  }
96
+ connectedCallback() {
97
+ // Initial sync will happen in componentDidLoad
98
+ }
99
+ componentDidLoad() {
100
+ // By this point, the element is fully in the DOM and parent relationships are established
101
+ // Small delay to ensure parent custom elements are fully upgraded
102
+ requestAnimationFrame(() => {
103
+ this.syncFloatingState();
104
+ this.observeParentPosition();
105
+ });
106
+ }
107
+ disconnectedCallback() {
108
+ this.parentPositionObserver?.disconnect();
109
+ this.parentPositionObserver = null;
110
+ }
111
+ observeParentPosition() {
112
+ if (this.parentPositionObserver)
113
+ return; // Already observing
114
+ const container = this.el.closest('ai-chat-container');
115
+ if (container) {
116
+ this.parentPositionObserver = new MutationObserver(() => this.syncFloatingState());
117
+ this.parentPositionObserver.observe(container, { attributes: true, attributeFilter: ['position'] });
118
+ }
119
+ }
120
+ syncFloatingState() {
121
+ const container = this.el.closest('ai-chat-container');
122
+ if (container) {
123
+ const newState = container.getAttribute('position') === 'float';
124
+ if (this.isFloating !== newState) {
125
+ this.isFloating = newState;
126
+ }
127
+ return;
128
+ }
129
+ if (this.isFloating !== false) {
130
+ this.isFloating = false;
131
+ }
132
+ }
75
133
  renderIcon(name, width, height) {
76
134
  const icon = iconRegistry[name];
77
135
  if (!icon)
@@ -89,7 +147,7 @@ const AiChatHeader = class {
89
147
  } }));
90
148
  }
91
149
  renderDragBtn() {
92
- return (this.isDraggable && (h("button", { class: "action-btn drag-btn", "aria-label": "\u0633\u062D\u0628 / Drag", onPointerDown: (e) => {
150
+ return (this.isFloating && (h("button", { class: "action-btn drag-btn", "aria-label": "\u0633\u062D\u0628 / Drag", onPointerDown: (e) => {
93
151
  e.preventDefault();
94
152
  this.headerDragStart.emit({ clientX: e.clientX, clientY: e.clientY });
95
153
  } }, this.renderIcon('drag', 11, 15))));
@@ -103,10 +161,14 @@ const AiChatHeader = class {
103
161
  e.stopPropagation();
104
162
  this.conversationDelete.emit(e.detail);
105
163
  };
164
+ handleConversationRetry = (e) => {
165
+ e.stopPropagation();
166
+ this.conversationRetry.emit();
167
+ };
106
168
  renderConversationDropdown() {
107
169
  if (!this.dropdownOpen || this.mode !== 'agent')
108
170
  return null;
109
- return (h("div", { class: "conversation-dropdown" }, h("ai-conversation-list", { items: this.conversationItems, activeId: this.conversationActiveId, loading: this.conversationLoading, onConversationSelect: this.handleConversationSelect, onConversationDelete: this.handleConversationDelete })));
171
+ return (h("div", { class: "conversation-dropdown" }, h("ai-conversation-list", { items: this.conversationItems, activeId: this.conversationActiveId, loading: this.conversationLoading, error: this.conversationError, errorText: this.conversationErrorText, retryLabel: this.conversationRetryLabel, emptyText: this.conversationEmptyText, deletingId: this.conversationDeletingId, onConversationSelect: this.handleConversationSelect, onConversationDelete: this.handleConversationDelete, onRetryClick: this.handleConversationRetry })));
110
172
  }
111
173
  renderAgentMode() {
112
174
  return [
@@ -117,25 +179,25 @@ const AiChatHeader = class {
117
179
  this.dropdownOpen = !this.dropdownOpen;
118
180
  this.dropdownClick.emit();
119
181
  }, "aria-haspopup": "listbox", "aria-expanded": this.dropdownOpen, "aria-label": `${this.conversation}, افتح قائمة المحادثات` }, this.titleLoading ? (h("span", { class: "title-skeleton", "aria-busy": "true", "aria-label": "\u062C\u0627\u0631\u064A \u0627\u0644\u062A\u062D\u0645\u064A\u0644" })) : (h("span", { class: "title" }, this.conversation)), !this.titleLoading && (h("span", { class: `dropdown-chevron${this.dropdownOpen ? ' open' : ''}` }, this.renderIcon('chevron-down', 24, 24)))),
120
- 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))),
182
+ h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u0645\u062D\u0627\u062F\u062B\u0629 \u062C\u062F\u064A\u062F\u0629 / New Chat", onClick: () => this.newChatClick.emit() }, this.renderIcon('pencil-edit', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0627\u0644\u0639\u0631\u0636 / Position", onClick: () => { this.positionClick.emit(); this.headerPositionClick.emit(); } }, this.renderIcon('hand', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
121
183
  ];
122
184
  }
123
185
  renderHumanMode() {
124
186
  return [
125
187
  this.renderDragBtn(),
126
188
  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))),
127
- 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))),
189
+ h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u0627\u0644\u0639\u0631\u0636 / Position", onClick: () => { this.positionClick.emit(); this.headerPositionClick.emit(); } }, this.renderIcon('hand', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
128
190
  ];
129
191
  }
130
192
  renderBrowserMode() {
131
193
  return [
132
194
  this.renderDragBtn(),
133
195
  h("div", { class: "content browser" }, h("button", { class: "back-btn", "aria-label": "\u0631\u062C\u0648\u0639 / Back", onClick: () => this.backClick.emit() }, this.renderIcon('arrow-right', 24, 24)), h("span", { class: "browser-title" }, this.pageTitle), h("button", { class: "browser-link-btn", "aria-label": "\u0641\u062A\u062D \u0641\u064A \u0646\u0627\u0641\u0630\u0629 \u062C\u062F\u064A\u062F\u0629 / Open externally", onClick: () => this.openExternal.emit(this.pageUrl) }, this.renderIcon('link', 14, 14))),
134
- 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))),
196
+ h("div", { class: "actions" }, h("button", { class: "action-btn", "aria-label": "\u0627\u0644\u0639\u0631\u0636 / Position", onClick: () => { this.positionClick.emit(); this.headerPositionClick.emit(); } }, this.renderIcon('hand', 22, 22)), h("button", { class: "action-btn", "aria-label": "\u0625\u063A\u0644\u0627\u0642 / Close", onClick: () => this.closeClick.emit() }, this.renderIcon('cancel', 22, 22))),
135
197
  ];
136
198
  }
137
199
  render() {
138
- return (h(Host, { key: '8e1fe67030a0cb1eb94327f093327fb23d4faf01' }, h("div", { key: '14766bd663e5fe027f1a3320bd3f16d79e9feb45', class: "header-wrapper" }, h("div", { key: 'bef30f621ba3b148f4af055347eb707bc8f64b15', class: "header-container" }, this.mode === 'agent' ? this.renderAgentMode() : this.mode === 'human' ? this.renderHumanMode() : this.renderBrowserMode()), this.renderConversationDropdown())));
200
+ return (h(Host, { key: '874ee1e0eb62a59a4c9713111856594ef03dd435' }, h("div", { key: 'd8887800ad270c7878f41bdc930b2ca6b1280935', class: "header-wrapper" }, h("div", { key: 'a4fc7e86851cc1cdce6c686880b9f4ee33342fb7', class: "header-container" }, this.mode === 'agent' ? this.renderAgentMode() : this.mode === 'human' ? this.renderHumanMode() : this.renderBrowserMode()), this.renderConversationDropdown())));
139
201
  }
140
202
  };
141
203
  AiChatHeader.style = aiChatHeaderCss();
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, c as createEvent, h, H as Host } from './index-VMEwYfaX.js';
2
2
  import { i as iconRegistry } from './icon-registry-DlD8m3rf.js';
3
3
 
4
4
  /*! @license DOMPurify 3.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.3/LICENSE */
@@ -1,7 +1,7 @@
1
- import { r as registerInstance, c as createEvent, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, c as createEvent, h, H as Host } from './index-VMEwYfaX.js';
2
2
  import { i as iconRegistry } from './icon-registry-DlD8m3rf.js';
3
3
 
4
- const aiConversationListCss = () => `:host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.conversation-list{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0;background:var(--ai-bg-surface)}.list-scroll{flex:1;min-height:0;overflow-y:auto;padding:0 8px 12px;scrollbar-width:thin;scrollbar-color:var(--ai-scrollbar-thumb) transparent}.list-scroll::-webkit-scrollbar{width:3px}.list-scroll::-webkit-scrollbar-track{background:transparent}.list-scroll::-webkit-scrollbar-thumb{background:var(--ai-scrollbar-thumb);border-radius:99px}.list-scroll::-webkit-scrollbar-thumb:hover{background:var(--ai-scrollbar-thumb-hover)}.conv-item{display:flex;align-items:flex-start;gap:6px;margin-top:6px;padding:10px 10px 10px 6px;border-radius:10px;cursor:pointer;transition:background 0.15s;position:relative}.conv-item:hover{background:var(--ai-bg-card)}.conv-item--active{background:var(--ai-bg-card);box-shadow:var(--ai-shadow-sm)}.conv-item__body{flex:1;min-width:0}.conv-item__title{margin:0 0 3px;font-size:13px;font-weight:600;color:var(--ai-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.conv-item__preview{margin:0 0 5px;font-size:12px;color:var(--ai-text-muted);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.conv-item__meta{display:flex;align-items:center;gap:8px}.conv-item__time{font-size:11px;color:var(--ai-text-muted);flex-shrink:0}.rating-dots{display:flex;align-items:center;gap:3px}.rating-dot{width:6px;height:6px;border-radius:50%;background:var(--ai-border-default);transition:background 0.15s}.rating-dot--filled{background:var(--ai-accent-warning, #ffaf44)}.delete-btn{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:transparent;border:none;border-radius:6px;cursor:pointer;color:var(--ai-text-muted);opacity:0;transition:opacity 0.15s, background 0.15s, color 0.15s;margin-block-start:2px}.conv-item:hover .delete-btn,.conv-item--active .delete-btn{opacity:1}.delete-btn:hover{background:var(--ai-status-danger-bg, rgba(239, 68, 68, 0.1));color:var(--ai-status-danger, #ef4444)}.delete-btn .icon-wrap{display:inline-flex;align-items:center;line-height:0}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 16px;text-align:center}.empty-state__icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;background:var(--ai-bg-card);color:var(--ai-text-muted);line-height:0}.empty-state__icon .icon-wrap{display:inline-flex;align-items:center;line-height:0}.empty-state__text{margin:0;font-size:13px;color:var(--ai-text-muted);line-height:1.4}.error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 16px;text-align:center}.error-state__icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;background:var(--ai-status-danger-bg, rgba(239, 68, 68, 0.1));color:var(--ai-status-danger, #ef4444);line-height:0}.error-state__icon .icon-wrap{display:inline-flex;align-items:center;line-height:0}.error-state__text{margin:0;font-size:13px;color:var(--ai-text-muted);line-height:1.4}.error-state__retry{display:inline-flex;align-items:center;gap:4px;margin-top:4px;padding:6px 14px;font-size:12px;font-weight:600;color:var(--ai-text-primary);background:var(--ai-bg-card);border:1px solid var(--ai-border-default);border-radius:8px;cursor:pointer;transition:background 0.15s, box-shadow 0.15s}.error-state__retry:hover{box-shadow:var(--ai-shadow-sm)}.error-state__retry .icon-wrap{display:inline-flex;align-items:center;line-height:0}.skeleton-list{display:flex;flex-direction:column;gap:4px}.skeleton-item{padding:10px;border-radius:10px;display:flex;flex-direction:column;gap:6px}.skeleton-line{border-radius:6px;background:var(--ai-shimmer-gradient, linear-gradient(90deg, rgba(0, 0, 0, 0.06) 25%, rgba(0, 0, 0, 0.1) 50%, rgba(0, 0, 0, 0.06) 75%));background-size:200% 100%;animation:shimmer 2s linear infinite;height:12px}.skeleton-line--title{width:65%;height:13px}.skeleton-line--preview{width:100%}.skeleton-line--meta{width:35%;height:10px}@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}`;
4
+ const aiConversationListCss = () => `:host{display:flex;flex-direction:column;height:100%;min-height:0;overflow:hidden}.conversation-list{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0;background:var(--ai-bg-surface)}.list-scroll{flex:1;min-height:0;overflow-y:auto;padding:0 8px 12px;scrollbar-width:thin;scrollbar-color:var(--ai-scrollbar-thumb) transparent}.list-scroll::-webkit-scrollbar{width:3px}.list-scroll::-webkit-scrollbar-track{background:transparent}.list-scroll::-webkit-scrollbar-thumb{background:var(--ai-scrollbar-thumb);border-radius:99px}.list-scroll::-webkit-scrollbar-thumb:hover{background:var(--ai-scrollbar-thumb-hover)}.conv-item{display:flex;align-items:flex-start;gap:6px;margin-top:6px;padding:10px 10px 10px 6px;border-radius:10px;cursor:pointer;transition:background 0.15s;position:relative}.conv-item:hover{background:var(--ai-bg-card)}.conv-item--active{background:var(--ai-bg-card);box-shadow:var(--ai-shadow-sm)}.conv-item__body{flex:1;min-width:0}.conv-item__title{margin:0 0 3px;font-size:13px;font-weight:600;color:var(--ai-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.conv-item__preview{margin:0 0 5px;font-size:12px;color:var(--ai-text-muted);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.conv-item__meta{display:flex;align-items:center;gap:8px}.conv-item__time{font-size:11px;color:var(--ai-text-muted);flex-shrink:0}.rating-dots{display:flex;align-items:center;gap:3px}.rating-dot{width:6px;height:6px;border-radius:50%;background:var(--ai-border-default);transition:background 0.15s}.rating-dot--filled{background:var(--ai-accent-warning, #ffaf44)}.delete-btn{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:transparent;border:none;border-radius:6px;cursor:pointer;color:var(--ai-text-muted);opacity:0;transition:opacity 0.15s, background 0.15s, color 0.15s;margin-block-start:2px}.conv-item:hover .delete-btn,.conv-item--active .delete-btn{opacity:1}.delete-btn:hover{background:var(--ai-status-danger-bg, rgba(239, 68, 68, 0.1));color:var(--ai-status-danger, #ef4444)}.delete-btn .icon-wrap{display:inline-flex;align-items:center;line-height:0}.delete-btn--deleting{opacity:1;cursor:default;pointer-events:none}.delete-spinner{display:block;width:12px;height:12px;border:2px solid var(--ai-border-default);border-top-color:var(--ai-text-muted);border-radius:50%;animation:delete-spin 0.7s linear infinite}@keyframes delete-spin{to{transform:rotate(360deg)}}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 16px;text-align:center}.empty-state__icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;background:var(--ai-bg-card);color:var(--ai-text-muted);line-height:0}.empty-state__icon .icon-wrap{display:inline-flex;align-items:center;line-height:0}.empty-state__text{margin:0;font-size:13px;color:var(--ai-text-muted);line-height:1.4}.error-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:40px 16px;text-align:center}.error-state__icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:10px;background:var(--ai-status-danger-bg, rgba(239, 68, 68, 0.1));color:var(--ai-status-danger, #ef4444);line-height:0}.error-state__icon .icon-wrap{display:inline-flex;align-items:center;line-height:0}.error-state__text{margin:0;font-size:13px;color:var(--ai-text-muted);line-height:1.4}.error-state__retry{display:inline-flex;align-items:center;gap:4px;margin-top:4px;padding:6px 14px;font-size:12px;font-weight:600;color:var(--ai-text-primary);background:var(--ai-bg-card);border:1px solid var(--ai-border-default);border-radius:8px;cursor:pointer;transition:background 0.15s, box-shadow 0.15s}.error-state__retry:hover{box-shadow:var(--ai-shadow-sm)}.error-state__retry .icon-wrap{display:inline-flex;align-items:center;line-height:0}.skeleton-list{display:flex;flex-direction:column;gap:4px}.skeleton-item{padding:10px;border-radius:10px;display:flex;flex-direction:column;gap:6px}.skeleton-line{border-radius:6px;background:var(--ai-shimmer-gradient, linear-gradient(90deg, rgba(0, 0, 0, 0.06) 25%, rgba(0, 0, 0, 0.1) 50%, rgba(0, 0, 0, 0.06) 75%));background-size:200% 100%;animation:shimmer 2s linear infinite;height:12px}.skeleton-line--title{width:65%;height:13px}.skeleton-line--preview{width:100%}.skeleton-line--meta{width:35%;height:10px}@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}`;
5
5
 
6
6
  const AiConversationList = class {
7
7
  constructor(hostRef) {
@@ -24,6 +24,8 @@ const AiConversationList = class {
24
24
  errorText = 'تعذّر تحميل المحادثات';
25
25
  /** Retry button label for error state */
26
26
  retryLabel = 'إعادة المحاولة';
27
+ /** ID of the conversation currently being deleted — shows a spinner on that item */
28
+ deletingId = '';
27
29
  conversationSelect;
28
30
  conversationDelete;
29
31
  retryClick;
@@ -74,7 +76,7 @@ const AiConversationList = class {
74
76
  }
75
77
  render() {
76
78
  const showEmpty = !this.loading && !this.error && this.items.length === 0;
77
- return (h(Host, { key: 'f869a0422848385a43512486a021e3932e51589d' }, h("div", { key: 'b0f78202691e6329b9a73987f499c20d89b86c4b', class: "conversation-list" }, h("div", { key: '5a007fffa3fe9ef16445395966b1e14d2f516cf9', class: "list-scroll", role: "list" }, this.loading
79
+ return (h(Host, { key: '8cf17cedd5c41f0d6ffd2d06e557dc370041d1aa' }, h("div", { key: '50f5eeb57228f55d72acf517ed5eeb5d79e13a4b', class: "conversation-list" }, h("div", { key: '763f7cb557fb9abea75e08379d0ea9090b00ac1e', class: "list-scroll", role: "list" }, this.loading
78
80
  ? this.renderSkeleton()
79
81
  : this.error
80
82
  ? this.renderError()
@@ -82,10 +84,14 @@ const AiConversationList = class {
82
84
  ? this.renderEmpty()
83
85
  : this.items.map(item => {
84
86
  const isActive = item.id === this.activeId;
85
- return (h("div", { key: item.id, class: { 'conv-item': true, 'conv-item--active': isActive }, role: "listitem", "aria-current": isActive ? 'true' : undefined, onClick: () => this.conversationSelect.emit(item.id) }, h("div", { class: "conv-item__body" }, h("p", { class: "conv-item__title" }, item.title), h("p", { class: "conv-item__preview" }, item.preview), h("div", { class: "conv-item__meta" }, h("span", { class: "conv-item__time" }, this.formatRelativeTime(item.timestamp)), item.rating != null && this.renderRatingDots(item.rating))), h("button", { class: "delete-btn", "aria-label": "\u062D\u0630\u0641 \u0627\u0644\u0645\u062D\u0627\u062F\u062B\u0629", onClick: e => {
87
+ return (h("div", { key: item.id, class: { 'conv-item': true, 'conv-item--active': isActive }, role: "listitem", "aria-current": isActive ? 'true' : undefined, onClick: () => this.conversationSelect.emit(item.id) }, h("div", { class: "conv-item__body" }, h("p", { class: "conv-item__title" }, item.title), h("p", { class: "conv-item__preview" }, item.preview), h("div", { class: "conv-item__meta" }, h("span", { class: "conv-item__time" }, this.formatRelativeTime(item.timestamp)), item.rating != null && this.renderRatingDots(item.rating))), h("button", { class: { 'delete-btn': true, 'delete-btn--deleting': this.deletingId === item.id }, "aria-label": "\u062D\u0630\u0641 \u0627\u0644\u0645\u062D\u0627\u062F\u062B\u0629", disabled: this.deletingId === item.id, onClick: e => {
86
88
  e.stopPropagation();
89
+ if (this.deletingId === item.id)
90
+ return;
87
91
  this.conversationDelete.emit(item.id);
88
- } }, this.renderIcon('cancel', 14, 14))));
92
+ } }, this.deletingId === item.id
93
+ ? h("span", { class: "delete-spinner", "aria-label": "\u062C\u0627\u0631\u064A \u0627\u0644\u062D\u0630\u0641" })
94
+ : this.renderIcon('cancel', 14, 14))));
89
95
  })))));
90
96
  }
91
97
  };
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, h, H as Host } from './index-VMEwYfaX.js';
2
2
  import { i as iconRegistry } from './icon-registry-DlD8m3rf.js';
3
3
 
4
4
  const aiConversationSummaryCss = () => `: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}`;
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, h, H as Host } from './index-VMEwYfaX.js';
2
2
  import { i as iconRegistry } from './icon-registry-DlD8m3rf.js';
3
3
 
4
4
  const aiIconCss = () => `:host{display:inline-flex;align-items:center;justify-content:center}svg{display:block}`;
@@ -1,23 +1,15 @@
1
- import { r as registerInstance, c as createEvent, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, h, H as Host } from './index-VMEwYfaX.js';
2
2
 
3
- const aiInChatBrowserCss = () => `:host{display:flex;flex-direction:column;width:calc(100% + 2 * var(--ai-spacing-2xl, 16px));height:calc(100% + 2 * var(--ai-spacing-2xl, 16px));margin:calc(-1 * var(--ai-spacing-2xl, 16px))}.browser-container{display:flex;flex-direction:column;width:100%;height:100%;background:var(--ai-bg-card);overflow:hidden}.browser-content{flex:1;position:relative;overflow:hidden;background:var(--ai-bg-surface)}.browser-iframe{width:100%;height:100%;border:none;display:block;background:var(--ai-bg-card)}.browser-loading{position:absolute;top:0;left:0;right:0;z-index:2;height:3px;overflow:hidden;background:var(--ai-border-light)}.loading-bar{width:40%;height:100%;background:var(--ai-accent);border-radius:2px;animation:browser-loading-slide 1.2s ease-in-out infinite}@keyframes browser-loading-slide{0%{transform:translateX(-100%)}100%{transform:translateX(350%)}}.browser-error{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:8px;padding:24px;text-align:center}.error-text{font-size:14px;font-weight:600;color:var(--ai-text-primary)}.error-url{font-size:12px;color:var(--ai-text-muted);word-break:break-all;max-width:280px}`;
3
+ const aiInChatBrowserCss = () => `:host{display:flex;flex-direction:column;width:calc(100% + 2 * var(--ai-spacing-2xl, 16px));height:calc(100% + 2 * var(--ai-spacing-2xl, 16px));margin:calc(-1 * var(--ai-spacing-2xl, 16px))}.browser-content{flex:1;position:relative;overflow:hidden;background:var(--ai-bg-surface)}.browser-iframe{width:100%;height:100%;border:none;display:block;background:var(--ai-bg-card)}.browser-loading{position:absolute;top:0;left:0;right:0;z-index:2;height:3px;overflow:hidden;background:var(--ai-border-light)}.loading-bar{width:40%;height:100%;background:var(--ai-accent);border-radius:2px;animation:browser-loading-slide 1.2s ease-in-out infinite}@keyframes browser-loading-slide{0%{transform:translateX(-100%)}100%{transform:translateX(350%)}}.browser-error{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:8px;padding:24px;text-align:center}.error-text{font-size:14px;font-weight:600;color:var(--ai-text-primary)}.error-url{font-size:12px;color:var(--ai-text-muted);word-break:break-all;max-width:280px}`;
4
4
 
5
5
  const AiInChatBrowser = class {
6
6
  constructor(hostRef) {
7
7
  registerInstance(this, hostRef);
8
- this.browserClose = createEvent(this, "browserClose");
9
- this.browserOpenExternal = createEvent(this, "browserOpenExternal");
10
8
  }
11
9
  /** The URL to display inside the in-chat browser iframe */
12
10
  url = '';
13
- /** Page title shown in the browser header. Defaults to the URL hostname when empty. */
11
+ /** Page title used as the iframe's accessible title. Defaults to the URL hostname when empty. */
14
12
  pageTitle = '';
15
- /** Show the drag handle in the header (for floating containers) */
16
- isDraggable = false;
17
- /** Fired when the user clicks the back / close button to dismiss the browser */
18
- browserClose;
19
- /** Fired when the user clicks the external-link button */
20
- browserOpenExternal;
21
13
  isLoading = true;
22
14
  hasError = false;
23
15
  onUrlChange() {
@@ -28,8 +20,7 @@ const AiInChatBrowser = class {
28
20
  if (this.pageTitle)
29
21
  return this.pageTitle;
30
22
  try {
31
- const parsed = new URL(this.url);
32
- return parsed.hostname;
23
+ return new URL(this.url).hostname;
33
24
  }
34
25
  catch {
35
26
  return this.url || '';
@@ -42,18 +33,9 @@ const AiInChatBrowser = class {
42
33
  this.isLoading = false;
43
34
  this.hasError = true;
44
35
  };
45
- handleBack = () => {
46
- this.browserClose.emit();
47
- };
48
- handleOpenExternal = () => {
49
- if (this.url) {
50
- window.open(this.url, '_blank', 'noopener,noreferrer');
51
- }
52
- this.browserOpenExternal.emit(this.url);
53
- };
54
36
  render() {
55
37
  const displayTitle = this.getDisplayTitle();
56
- return (h(Host, { key: '8486b7a1506c0eb22dea066adfc98ede9e2542c4' }, h("div", { key: '8781447cadcc8f33dba9b6eb6b63e1e1cb6c0cfd', class: "browser-container" }, h("ai-chat-header", { key: 'f30265b9050991ccbe61e0eeb53015f9b56c113b', mode: "browser", pageTitle: displayTitle, pageUrl: this.url, isDraggable: this.isDraggable, onBackClick: this.handleBack, onOpenExternal: () => this.handleOpenExternal() }), h("div", { key: '2d1ecf5b11e882ab1632278edacf55fa264e1a08', class: "browser-content" }, this.isLoading && (h("div", { key: '0e3fc77efa82fb52c5a531b3b30fb81fcee339d8', class: "browser-loading" }, h("div", { key: '09db30ff5f494eedfaf7928389abda72dceb9597', class: "loading-bar" }))), this.hasError ? (h("div", { class: "browser-error" }, h("span", { class: "error-text" }, "\u062A\u0639\u0630\u0651\u0631 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0635\u0641\u062D\u0629"), h("span", { class: "error-url" }, this.url))) : (this.url && (h("iframe", { class: "browser-iframe", src: this.url, onLoad: this.handleIframeLoad, onError: this.handleIframeError, sandbox: "allow-scripts allow-same-origin allow-forms allow-popups", referrerPolicy: "no-referrer", title: displayTitle })))))));
38
+ return (h(Host, { key: '2d3bb12516396aaf8ca4df1e63e954cc06b2f01d' }, h("div", { key: '3c6f179eb59c982ab299910b5a1941d9b9d17d09', class: "browser-content" }, this.isLoading && (h("div", { key: '0228954a8cfaafed42f1efb5eb1ca5f160bc29e0', class: "browser-loading" }, h("div", { key: 'ccc49943a0af13afdbf1dcee8be0e3d712ac54d6', class: "loading-bar" }))), this.hasError ? (h("div", { class: "browser-error" }, h("span", { class: "error-text" }, "\u062A\u0639\u0630\u0651\u0631 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0635\u0641\u062D\u0629"), h("span", { class: "error-url" }, this.url))) : (this.url && (h("iframe", { class: "browser-iframe", src: this.url, onLoad: this.handleIframeLoad, onError: this.handleIframeError, sandbox: "allow-scripts allow-same-origin allow-forms allow-popups", referrerPolicy: "no-referrer", title: displayTitle }))))));
57
39
  }
58
40
  static get watchers() { return {
59
41
  "url": [{
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, h, H as Host } from './index-VMEwYfaX.js';
2
2
  import { i as iconRegistry } from './icon-registry-DlD8m3rf.js';
3
3
 
4
4
  const aiLinkCss = () => `:host{--ai-link-font-size:14px;--ai-link-font-weight:700;--ai-link-line-height:20px;--ai-link-gap:4px;--ai-link-icon-size:16px;display:flex;align-items:center;gap:var(--ai-link-gap)}.link{display:inline-flex;align-items:center;justify-content:flex-end;gap:var(--ai-link-gap);color:var(--ai-accent-dark);font-size:var(--ai-link-font-size);font-weight:var(--ai-link-font-weight);font-family:inherit;line-height:var(--ai-link-line-height);text-decoration:none;white-space:nowrap;cursor:pointer;transition:color 0.15s ease;outline:none}.link:hover{color:var(--ai-accent-dark);text-decoration:underline}.link:focus-visible{outline:2px solid var(--ai-accent);outline-offset:2px;border-radius:4px}.link__icon{display:inline-flex;align-items:center;justify-content:center;width:var(--ai-link-icon-size);height:var(--ai-link-icon-size);flex-shrink:0;line-height:0}.link__label{color:var(--ai-accent-dark);font-weight:bold}`;
@@ -24,7 +24,7 @@ const AiLink = class {
24
24
  }
25
25
  render() {
26
26
  const rel = this.rel || (this.target === '_blank' ? 'noopener noreferrer' : undefined);
27
- return (h(Host, { key: 'e0e34a4c2a3534a3b449bac613c6f7cb512420d3' }, h("span", { key: '5776ddc64676ecaabb4f36a0e9833026dc730c23', class: "link__label" }, this.label, h("slot", { key: '436a334a51bea342b839d5fad9743aaf6b66a94d' })), h("a", { key: '3880c1429a8a24a9dee700c9f0592ac673ce68f0', class: "link", href: this.href, target: this.target, rel: rel }, this.renderShareIcon())));
27
+ return (h(Host, { key: '98087503b9a0803425b23f7ee00c95025493679d' }, h("span", { key: '41495d6375d1c539b777b3cd38e7b7af8fcbbb9b', class: "link__label" }, this.label, h("slot", { key: 'f416955b31900039f03b0e7ee2e537a22964d553' })), h("a", { key: '4f1d74ff6c600d17fcf80686aeebc5a92a4c7305', class: "link", href: this.href, target: this.target, rel: rel }, this.renderShareIcon())));
28
28
  }
29
29
  };
30
30
  AiLink.style = aiLinkCss();
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, c as createEvent, h, H as Host } from './index-VMEwYfaX.js';
2
2
  import { i as iconRegistry } from './icon-registry-DlD8m3rf.js';
3
3
 
4
4
  const aiLoadingCss = () => `:host{display:block}.icon-wrap{display:inline-flex;align-items:center;justify-content:center;line-height:0}.sparkle-avatar-wrap{display:inline-flex;align-items:center;gap:6px;flex-shrink:0}@keyframes sparkle-twinkle{0%,100%{transform:scale(1);opacity:1;filter:brightness(1)}15%{transform:scale(1.4);opacity:0.4;filter:brightness(2)}30%{transform:scale(0.85);opacity:0.9;filter:brightness(0.9)}50%{transform:scale(1.3);opacity:0.5;filter:brightness(1.8)}70%{transform:scale(0.9);opacity:1;filter:brightness(1)}}.sparkle-avatar{width:24px;height:24px;border-radius:9999px;background:var(--ai-bg-card);box-shadow:var(--ai-shadow-inner);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--ai-amber)}.sparkle-avatar .icon-wrap{animation:sparkle-twinkle 2.4s ease-in-out infinite;transform-origin:center}.header-agent{font-size:12px;color:var(--ai-text-secondary);white-space:nowrap}.thinking-row{display:inline-flex;align-items:center;gap:8px;flex-direction:row}.thinking-col{display:flex;flex-direction:column;gap:2px}@keyframes shimmer{0%{background-position:200% center}100%{background-position:-200% center}}.shimmer-text{font-size:14px;font-weight:400;line-height:1.5;background:var(--ai-glow-gradient);background-size:200% auto;-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;animation:shimmer 2s linear infinite}.shimmer-text.subtext{font-size:12px;opacity:0.75}@keyframes fade-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.steps-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}.steps-header{padding:16px;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--ai-border-default)}.steps-header.collapsible{cursor:pointer;user-select:none}.steps-header-center{flex:1;display:flex;align-items:center;gap:8px;min-width:0}.steps-title{font-size:16px;font-weight:500;color:var(--ai-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.progress-badge{font-size:12px;font-weight:500;color:var(--ai-accent-dark);background:var(--ai-accent-bg);padding:2px 8px;border-radius:9999px;white-space:nowrap;flex-shrink:0}.progress-badge.executing-title{max-width:180px;overflow:hidden;text-overflow:ellipsis}.collapse-btn{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;padding:0;cursor:pointer;color:var(--ai-text-secondary);flex-shrink:0;transition:transform 0.2s ease;transform:rotate(180deg)}.collapse-btn.expanded{transform:rotate(0deg)}.steps-body{padding:12px 16px;display:flex;flex-direction:column}.planning-shimmer{padding:4px 0}.step-row{display:flex;align-items:flex-start;gap:12px;cursor:pointer;padding:4px 0}.step-row:hover .step-text{color:var(--ai-text-primary)}.step-row.pending{opacity:0.5}.step-row.executing .step-text{color:var(--ai-text-primary)}.step-row.failed .step-text{color:var(--ai-error-text, #dc2626)}.step-content{flex:1;display:flex;flex-direction:column;gap:2px;padding-top:4px}.step-text{font-size:14px;font-weight:400;color:var(--ai-text-secondary);line-height:1.5}.step-description{font-size:12px;color:var(--ai-text-secondary);line-height:1.4}.step-duration{font-size:11px;color:var(--ai-text-secondary);opacity:0.7}.agent-chip{display:inline-flex;align-self:flex-start;font-size:11px;padding:1px 6px;border-radius:9999px;border:1px solid var(--ai-border-default);color:var(--ai-text-secondary)}.step-badge-col{display:flex;flex-direction:column;align-items:center;flex-shrink:0}.step-separator{width:1px;height:16px;background:var(--ai-border-default);margin:2px 0}@keyframes pulse-ring{0%{transform:scale(1);opacity:0.6}100%{transform:scale(2);opacity:0}}.step-badge-outer{padding:2px;border-radius:9999px;background:var(--ai-bg-surface);display:inline-flex;align-items:center;justify-content:center;position:relative}.step-badge-outer.pulse-ring::after{content:'';position:absolute;inset:0;border-radius:9999px;border:2px solid var(--ai-amber);animation:pulse-ring 1.2s ease-out infinite}.step-badge-inner{width:26px;height:26px;border-radius:9999px;background:var(--ai-bg-card);box-shadow:var(--ai-shadow-badge);display:flex;align-items:center;justify-content:center;color:var(--ai-text-secondary)}.step-badge-inner.completed{background:var(--ai-success-bg);color:var(--ai-success-text)}.step-badge-inner.executing{color:var(--ai-amber)}.step-badge-inner.failed{background:var(--ai-error-bg, #fee2e2);color:var(--ai-error-text, #dc2626)}.step-number{font-size:14px;font-weight:500;color:var(--ai-text-secondary);line-height:1}`;
@@ -80,7 +80,7 @@ const AiLoading = class {
80
80
  return (h("div", { class: "steps-card" }, h("div", { class: `steps-header ${this.collapsible ? 'collapsible' : ''}`, onClick: () => this.handleToggle() }, this.renderSparkleAvatar(this.currentAgent || undefined), h("div", { class: "steps-header-center" }, h("span", { class: "steps-title" }, this.headerTitle), headerBadge()), this.collapsible && h("button", { class: `collapse-btn ${this._expanded ? 'expanded' : ''}` }, this.renderIcon('chevron-down', 20, 20))), this._expanded && total === 0 && this.renderPlanningShimmer(), this._expanded && total > 0 && (h("div", { class: "steps-body" }, this.steps.map((step, i) => (h("div", { class: `step-row ${step.status}`, onClick: () => this.stepClick.emit(step) }, h("div", { class: "step-badge-col" }, this.renderStepBadge(step, i), i < this.steps.length - 1 && h("div", { class: "step-separator" })), h("div", { class: "step-content" }, h("span", { class: "step-text" }, step.action), step.reason && h("span", { class: "step-description" }, step.reason)))))))));
81
81
  }
82
82
  render() {
83
- return h(Host, { key: 'f4523c26d9ce0d9bf14b313e4b10cadd2fc2b95f' }, this.mode === 'thinking' ? this.renderThinkingMode() : this.renderStepsMode());
83
+ return h(Host, { key: '2053fe1e8a1fcb1ec7441a5d32952ec1f186a5bb' }, this.mode === 'thinking' ? this.renderThinkingMode() : this.renderStepsMode());
84
84
  }
85
85
  };
86
86
  AiLoading.style = aiLoadingCss();
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, a as getElement, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, c as createEvent, a as getElement, h, H as Host } from './index-VMEwYfaX.js';
2
2
 
3
3
  const aiMessageInputCss = () => `: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;width:32px;height:32px;padding:0;border-radius:9999px;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))}.voice-recorder-wrapper{position:relative}.voice-dismiss-btn{position:absolute;bottom:25px;inset-inline-end:25px;display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:2px solid var(--ai-border-default);border-radius:50%;background:var(--ai-border-default);color:var(--ai-text-secondary);font-size:0;cursor:pointer;transition:background 0.15s, border-color 0.15s, color 0.15s;z-index:10}.voice-dismiss-btn:hover{background:var(--ai-bg-surface);border-color:var(--ai-bg-surface);color:var(--ai-status-danger, #ef4444)}.voice-dismiss-btn:focus-visible{outline:2px solid var(--ai-focus-ring-color, var(--ai-focus-ring));outline-offset:1px}`;
4
4
 
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, c as createEvent, h, H as Host } from './index-VMEwYfaX.js';
2
2
  import { i as iconRegistry } from './icon-registry-DlD8m3rf.js';
3
3
 
4
4
  const aiRatingCss = () => `:host{--ai-rating-question-size:16px;--ai-rating-subtitle-size:14px;--ai-rating-gap:8px;--ai-rating-emoji-size:24px;--ai-rating-btn-padding:6px;--ai-rating-btn-border:1px solid var(--ai-border-light);--ai-rating-btn-radius:9999px;--ai-rating-btn-bg-hover:var(--ai-bg-surface);--ai-rating-btn-border-hover:1px solid var(--ai-border-default);--ai-rating-btn-bg-active:var(--ai-warning-bg);--ai-rating-btn-border-active:1px solid var(--ai-warning-border);--ai-rating-btn-shadow-active:var(--ai-shadow-active);--ai-rating-label-size:16px;display:block}.rating{display:flex;flex-direction:column;align-items:center;gap:var(--ai-rating-gap);width:100%}.rating__text{display:flex;flex-direction:column;align-items:center;gap:2px;width:100%;text-align:center}.rating__question{margin:0;font-size:var(--ai-rating-question-size);font-weight:500;line-height:24px;color:var(--ai-text-primary)}.rating__subtitle{margin:0;font-size:var(--ai-rating-subtitle-size);font-weight:400;line-height:20px;color:var(--ai-text-secondary)}.rating__icons{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;flex-wrap:wrap}.emoji-btn{display:inline-flex;align-items:center;justify-content:center;padding:var(--ai-rating-btn-padding);border:var(--ai-rating-btn-border);border-radius:var(--ai-rating-btn-radius);background:transparent;cursor:pointer;transition:background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;outline:none}.emoji-btn:focus-visible{outline:2px solid var(--ai-warning-border);outline-offset:2px}.emoji-btn:hover:not(:disabled),.emoji-btn--hovered{background:var(--ai-rating-btn-bg-hover);border:var(--ai-rating-btn-border-hover);transform:scale(1.1)}.emoji-btn--active{background:var(--ai-rating-btn-bg-active) !important;border:var(--ai-rating-btn-border-active) !important;box-shadow:var(--ai-rating-btn-shadow-active);transform:scale(1.18) !important}.emoji-btn--disabled{opacity:0.45;cursor:not-allowed;pointer-events:none}.emoji-btn__icon{font-size:var(--ai-rating-emoji-size);line-height:1;display:inline-flex;align-items:center;justify-content:center;width:var(--ai-rating-emoji-size);height:var(--ai-rating-emoji-size);pointer-events:none}.rating__hover-label{margin:0;font-size:var(--ai-rating-label-size);font-weight:500;line-height:24px;color:var(--ai-text-primary);text-align:center;width:100%;animation:fadeIn 0.15s ease}.rating--success{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px 0;animation:fadeIn 0.2s ease}.rating__success-message{margin:0;font-size:var(--ai-rating-question-size);font-weight:500;line-height:24px;color:var(--ai-text-primary);text-align:center}@keyframes fadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}`;
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, c as createEvent, h, H as Host } from './index-VMEwYfaX.js';
2
2
  import { i as iconRegistry } from './icon-registry-DlD8m3rf.js';
3
3
 
4
4
  const aiRouteDecisionCss = () => `:host{display:inline-block}.icon-wrap{display:inline-flex;align-items:center;justify-content:center;line-height:0}.route-pill{display:inline-flex;flex-direction:column;background:var(--ai-bg-card);border:1px solid var(--ai-border-default);border-radius:9999px;box-shadow:var(--ai-shadow-sm);overflow:hidden;transition:border-radius 0.2s ease}.route-pill.expanded{border-radius:12px}.route-pill-main{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;background:none;border:none;cursor:pointer;color:var(--ai-text-primary);font-size:13px;font-weight:500;white-space:nowrap;width:100%}.route-icon{color:var(--ai-accent-dark);display:inline-flex;flex-shrink:0}.agent-label{display:inline-flex;align-items:center;gap:4px}.agent-emoji{font-size:14px;line-height:1}.confidence-badge{font-size:11px;font-weight:600;color:var(--ai-accent-dark);background:var(--ai-accent-bg);padding:1px 6px;border-radius:9999px}.expand-icon{display:inline-flex;margin-inline-start:auto;color:var(--ai-text-secondary);transition:transform 0.2s ease;transform:rotate(0deg)}.expand-icon.expanded{transform:rotate(90deg)}.route-details{display:flex;flex-direction:column;gap:8px;padding:8px 12px 12px;border-top:1px solid var(--ai-border-default);animation:fade-in 0.2s ease}@keyframes fade-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.reason-text{margin:0;font-size:12px;color:var(--ai-text-secondary);line-height:1.5}.confidence-bar-wrap{height:4px;border-radius:9999px;background:var(--ai-border-default);overflow:hidden}.confidence-bar{height:100%;border-radius:9999px;background:var(--ai-accent-dark);transition:width 0.4s ease}.meta-row{display:inline-flex;align-items:center;gap:4px;color:var(--ai-text-secondary)}.lang-chip{font-size:11px;color:var(--ai-text-secondary)}`;
@@ -38,7 +38,7 @@ const AiRouteDecision = class {
38
38
  this.routeExpand.emit(this._expanded);
39
39
  }
40
40
  render() {
41
- return (h(Host, { key: 'f12718d142cff27d62c0a0299b029be2e2d88b86' }, h("div", { key: '4fcef90f887300c4884cd981737bf8ce8b796eca', class: `route-pill ${this._expanded ? 'expanded' : ''}` }, h("button", { key: '09eadc07b41b96fb56b4bcd937165de92507ac84', class: "route-pill-main", onClick: () => this.handleToggle() }, h("span", { key: 'd13744692a45c74976f89b582142ae09339015f5', class: "route-icon" }, this.renderIcon('route', 14, 14)), h("span", { key: '4f995cc09a72ba74310df17cf78735c27a910314', class: "agent-label" }, this.agentIcon && h("span", { key: '272dd78f38bbbb4ef845b7a41530d205368faf7e', class: "agent-emoji", "aria-hidden": "true" }, this.agentIcon), this.selectedAgent), this.confidence > 0 && (h("span", { key: 'a061317c9d5b8dad243dce0bb80e927eae04eb3d', class: "confidence-badge" }, this.confidence, "%")), h("span", { key: '4342bdf38aa85a5c5d6bd054504c91bccc7901e9', class: `expand-icon ${this._expanded ? 'expanded' : ''}` }, this.renderIcon('arrow-right', 12, 12))), this._expanded && (h("div", { key: 'ab5340148e832baafdd38e17a748a52b83b25c96', class: "route-details" }, this.reason && h("p", { key: '7854838ea405c5fdb5ebe11fb3df36a9898be445', class: "reason-text" }, this.reason), this.confidence > 0 && (h("div", { key: 'baf946426ad7cda94d2acfbb9f8945b5b40a823c', class: "confidence-bar-wrap" }, h("div", { key: 'a6e08f412706ce18e16030dd4d475d57befdd9e7', class: "confidence-bar", style: { width: `${this.confidence}%` } }))), this.detectedLanguage && (h("div", { key: '58af2dbca56082dcf2910cc44ac553d6f2af015a', class: "meta-row" }, this.renderIcon('list', 12, 12), h("span", { key: '63517ed8802764542de330897372c6a01348d0a6', class: "lang-chip" }, this.detectedLanguage))))))));
41
+ return (h(Host, { key: 'fa9b966cf28225fa458fb00d1114fade995258c5' }, h("div", { key: '5263c969fd1672e1d302f06173dcdbe4450b162e', class: `route-pill ${this._expanded ? 'expanded' : ''}` }, h("button", { key: 'bf7800e828b0b61174f75343fcf9bca3134dfb2a', class: "route-pill-main", onClick: () => this.handleToggle() }, h("span", { key: '8531aeab0872f59417a37294e780d46962b21ead', class: "route-icon" }, this.renderIcon('route', 14, 14)), h("span", { key: '754529860d90a3ceb4f226ff85b1aecb40f4649e', class: "agent-label" }, this.agentIcon && h("span", { key: '39682d3a761d2cd6fae794fcb6036b0044f8f2dc', class: "agent-emoji", "aria-hidden": "true" }, this.agentIcon), this.selectedAgent), this.confidence > 0 && (h("span", { key: '36b3a921ab75c1faa0ece5f286703bf1b0aaca16', class: "confidence-badge" }, this.confidence, "%")), h("span", { key: 'c5199e986bf35d187cad16027f23e62addc45ecb', class: `expand-icon ${this._expanded ? 'expanded' : ''}` }, this.renderIcon('arrow-right', 12, 12))), this._expanded && (h("div", { key: '2a18ae8297ad0d71b14d01d250e15cff452c4b07', class: "route-details" }, this.reason && h("p", { key: '55f5123399929c590fc5c2122fd7220209e5ecac', class: "reason-text" }, this.reason), this.confidence > 0 && (h("div", { key: 'fbc69e8cb7820c87764f46630af8f4a77d2d879b', class: "confidence-bar-wrap" }, h("div", { key: '1db1d454ef64dcf9e4c673d0a26780bd55f563d2', class: "confidence-bar", style: { width: `${this.confidence}%` } }))), this.detectedLanguage && (h("div", { key: '8553d1a20678252b8d4f9a1e9f8b64ce3f509ae5', class: "meta-row" }, this.renderIcon('list', 12, 12), h("span", { key: 'ec104948a04498d06ed73be89778c5b6d84582a2', class: "lang-chip" }, this.detectedLanguage))))))));
42
42
  }
43
43
  };
44
44
  AiRouteDecision.style = aiRouteDecisionCss();
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, c as createEvent, h, H as Host } from './index-VMEwYfaX.js';
2
2
 
3
3
  const aiSuggestionCss = () => `:host{--ai-suggestion-border:1px solid var(--ai-accent);--ai-suggestion-border-hover:1px solid var(--ai-accent);--ai-suggestion-radius:9999px;--ai-suggestion-padding:8px 12px;--ai-suggestion-gap:4px;--ai-suggestion-font-size:14px;--ai-suggestion-line-height:20px;display:inline-block}.chip{display:inline-flex;align-items:center;justify-content:center;gap:var(--ai-suggestion-gap);background:var(--ai-bg-card);border:var(--ai-suggestion-border);border-radius:var(--ai-suggestion-radius);padding:var(--ai-suggestion-padding);color:var(--ai-accent-dark);font-size:var(--ai-suggestion-font-size);font-weight:400;line-height:var(--ai-suggestion-line-height);font-family:inherit;white-space:nowrap;cursor:pointer;transition:background 0.15s ease, border-color 0.15s ease;outline:none;text-align:start}.chip:hover:not(:disabled){background:var(--ai-accent-bg);border:var(--ai-suggestion-border-hover)}.chip:active:not(:disabled){background:var(--ai-accent-bg)}.chip:focus-visible{outline:2px solid var(--ai-accent);outline-offset:2px}.chip--disabled,.chip:disabled{opacity:0.45;cursor:not-allowed;pointer-events:none}.chip__label{display:inline-flex;align-items:center;gap:var(--ai-suggestion-gap)}`;
4
4
 
@@ -18,10 +18,10 @@ const AiSuggestion = class {
18
18
  this.suggestionClick.emit(this.label);
19
19
  }
20
20
  render() {
21
- return (h(Host, { key: 'c2eb388d152586755e9cc10ac57b519e8ff84b4d' }, h("button", { key: '0b9f6ec6d8c57365e2c29bfe1bfc33993d3cb498', class: {
21
+ return (h(Host, { key: '510e649f8778e2298270d320f0555c4d960fb056' }, h("button", { key: 'a4ee17cbd432596804279d8a852635608125452a', class: {
22
22
  chip: true,
23
23
  'chip--disabled': this.disabled,
24
- }, disabled: this.disabled, onClick: () => this.handleClick() }, h("span", { key: 'd4fabc4c8176cd6837e609bad369e8edfc779855', class: "chip__label" }, this.label, h("slot", { key: 'a1074453e53982f10fd2115c2b15d7a7b20eda07' })))));
24
+ }, disabled: this.disabled, onClick: () => this.handleClick() }, h("span", { key: 'cb2d97459b0dd6effe83bbfb81a0af9144759477', class: "chip__label" }, this.label, h("slot", { key: 'ce84f07883f24c216c45da9266af5160baea9cdc' })))));
25
25
  }
26
26
  };
27
27
  AiSuggestion.style = aiSuggestionCss();
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, a as getElement, h, H as Host } from './index-BSQ0GkzI.js';
1
+ import { r as registerInstance, c as createEvent, a as getElement, h, H as Host } from './index-VMEwYfaX.js';
2
2
 
3
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
 
@@ -277,7 +277,7 @@ const VoiceInput = class {
277
277
  };
278
278
  render() {
279
279
  const remaining = MAX_RECORDING_TIME - this.recordingDuration;
280
- return (h(Host, { key: 'ca20fe9dda634af0da1ef6da59880279f0775a9f' }, h("div", { key: 'dc3328cc1ef74e9683bc6c34e1d3279b2ca2ffa2', class: "wrapper" }, h("div", { key: 'b4a4d2799b8c541dc03679686107cc486373e76b', class: `glow${this.state === 'recording' ? ' visible' : ''}`, "aria-hidden": "true" }), h("div", { key: 'f4fa8c638e68528dffd96db627bd80d4c7103143', 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 }))))))));
280
+ return (h(Host, { key: '93565ead1262f192811d4783ac4567b8eb7d59de' }, h("div", { key: '9317e2a24533435e5ac967f3eddaad3d1f6c4613', class: "wrapper" }, h("div", { key: '35631eb88e495be9b2bdabf1b8f15d237d327c4b', class: `glow${this.state === 'recording' ? ' visible' : ''}`, "aria-hidden": "true" }), h("div", { key: 'c65050758e58402c5b341c8d24a0ca58f9f53361', 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 }))))))));
281
281
  }
282
282
  };
283
283
  VoiceInput.style = aiVoiceInputCss();
@@ -935,6 +935,14 @@ var renderVdom = (hostRef, renderFnResults, isInitialLoad = false) => {
935
935
  const isHostElement = isHost(renderFnResults);
936
936
  const rootVnode = isHostElement ? renderFnResults : h(null, null, renderFnResults);
937
937
  hostTagName = hostElm.tagName;
938
+ if (cmpMeta.$attrsToReflect$) {
939
+ rootVnode.$attrs$ = rootVnode.$attrs$ || {};
940
+ cmpMeta.$attrsToReflect$.forEach(([propName, attribute]) => {
941
+ {
942
+ rootVnode.$attrs$[attribute] = hostElm[propName];
943
+ }
944
+ });
945
+ }
938
946
  if (isInitialLoad && rootVnode.$attrs$) {
939
947
  for (const key of Object.keys(rootVnode.$attrs$)) {
940
948
  if (hostElm.hasAttribute(key) && !["key", "ref", "style", "class"].includes(key)) {
@@ -1329,8 +1337,12 @@ var proxyComponent = (Cstr, cmpMeta, flags) => {
1329
1337
  /* @__PURE__ */ new Set([
1330
1338
  ...Object.keys((_b = cmpMeta.$watchers$) != null ? _b : {}),
1331
1339
  ...members.filter(([_, m]) => m[0] & 31 /* HasAttribute */).map(([propName, m]) => {
1340
+ var _a2;
1332
1341
  const attrName = m[1] || propName;
1333
1342
  attrNameToPropName.set(attrName, propName);
1343
+ if (m[0] & 512 /* ReflectAttr */) {
1344
+ (_a2 = cmpMeta.$attrsToReflect$) == null ? void 0 : _a2.push([propName, attrName]);
1345
+ }
1334
1346
  return attrName;
1335
1347
  })
1336
1348
  ])
@@ -1534,6 +1546,9 @@ var bootstrapLazy = (lazyBundles, options = {}) => {
1534
1546
  {
1535
1547
  cmpMeta.$listeners$ = compactMeta[3];
1536
1548
  }
1549
+ {
1550
+ cmpMeta.$attrsToReflect$ = [];
1551
+ }
1537
1552
  {
1538
1553
  cmpMeta.$watchers$ = (_a2 = compactMeta[4]) != null ? _a2 : {};
1539
1554
  cmpMeta.$serializers$ = (_b = compactMeta[5]) != null ? _b : {};
@@ -1,10 +1,10 @@
1
- import { g as globalScripts, b as bootstrapLazy } from './index-BSQ0GkzI.js';
2
- export { s as setNonce } from './index-BSQ0GkzI.js';
1
+ import { g as globalScripts, b as bootstrapLazy } from './index-VMEwYfaX.js';
2
+ export { s as setNonce } from './index-VMEwYfaX.js';
3
3
 
4
4
  const defineCustomElements = async (win, options) => {
5
5
  if (typeof window === 'undefined') return undefined;
6
6
  await globalScripts();
7
- return bootstrapLazy([["ai-in-chat-browser",[[513,"ai-in-chat-browser",{"url":[1],"pageTitle":[1025,"page-title"],"isDraggable":[4,"is-draggable"],"isLoading":[32],"hasError":[32]},null,{"url":[{"onUrlChange":0}]}]]],["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-rating",[[513,"ai-rating",{"question":[1],"subtitle":[1],"successMessage":[1,"success-message"],"value":[1026],"disabled":[4],"hovered":[32],"submitted":[32]}]]],["ai-agent-error",[[513,"ai-agent-error",{"headline":[1],"message":[1],"errorCode":[1,"error-code"],"retryable":[4],"retryLabel":[1,"retry-label"],"dismissible":[4]}]]],["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],"loading":[4],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64]},null,{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["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-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-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-conversation-list",[[513,"ai-conversation-list",{"items":[16],"activeId":[1,"active-id"],"loading":[4],"emptyText":[1,"empty-text"],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"]}]]],["ai-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"],"pageTitle":[1,"page-title"],"pageUrl":[1,"page-url"],"conversationItems":[16],"conversationActiveId":[1,"conversation-active-id"],"conversationLoading":[4,"conversation-loading"],"titleLoading":[4,"title-loading"],"avatarError":[32],"dropdownOpen":[32]},[[4,"click","handleDocumentClick"]]]]],["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]}]]],["ai-card",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]]], 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-rating",[[513,"ai-rating",{"question":[1],"subtitle":[1],"successMessage":[1,"success-message"],"value":[1026],"disabled":[4],"hovered":[32],"submitted":[32]}]]],["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"],"statusIndicator":[1,"status-indicator"],"pageTitle":[1,"page-title"],"pageUrl":[1,"page-url"],"conversationItems":[16],"conversationActiveId":[1,"conversation-active-id"],"conversationLoading":[4,"conversation-loading"],"conversationError":[4,"conversation-error"],"conversationErrorText":[1,"conversation-error-text"],"conversationRetryLabel":[1,"conversation-retry-label"],"conversationEmptyText":[1,"conversation-empty-text"],"conversationDeletingId":[1,"conversation-deleting-id"],"titleLoading":[4,"title-loading"],"avatarError":[32],"dropdownOpen":[32],"isFloating":[32]},[[4,"click","handleDocumentClick"]]]]],["ai-agent-error",[[513,"ai-agent-error",{"headline":[1],"message":[1],"errorCode":[1,"error-code"],"retryable":[4],"retryLabel":[1,"retry-label"],"dismissible":[4]}]]],["ai-chat-container",[[769,"ai-chat-container",{"isOpen":[4,"is-open"],"position":[1537],"width":[1],"autoScroll":[4,"auto-scroll"],"showWatermark":[4,"show-watermark"],"floatHeight":[1,"float-height"],"theme":[1],"loading":[4],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"],"direction":[513],"isMobile":[32],"floatLeft":[32],"floatTop":[32],"scrollToBottom":[64],"cyclePosition":[64]},[[0,"headerPositionClick","handleHeaderPositionClick"]],{"isOpen":[{"isOpenChanged":0}],"position":[{"positionChanged":0}]}]]],["ai-chat-message",[[769,"ai-chat-message",{"role":[1],"content":[1],"format":[1],"agentName":[1,"agent-name"],"timestamp":[1],"showActions":[4,"show-actions"],"enableRegenerate":[4,"enable-regenerate"],"feedbackValue":[1025,"feedback-value"],"copySuccess":[32]}]]],["ai-conversation-summary",[[769,"ai-conversation-summary",{"conversation":[1],"summary":[1],"messageCount":[2,"message-count"],"language":[1]}]]],["ai-in-chat-browser",[[513,"ai-in-chat-browser",{"url":[1],"pageTitle":[1,"page-title"],"isLoading":[32],"hasError":[32]},null,{"url":[{"onUrlChange":0}]}]]],["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-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-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]}]]],["ai-card",[[769,"ai-card",{"noPadding":[4,"no-padding"],"noShadow":[4,"no-shadow"]}]]],["ai-conversation-list",[[513,"ai-conversation-list",{"items":[16],"activeId":[1,"active-id"],"loading":[4],"emptyText":[1,"empty-text"],"error":[4],"errorText":[1,"error-text"],"retryLabel":[1,"retry-label"],"deletingId":[1,"deleting-id"]}]]],["ai-icon",[[513,"ai-icon",{"name":[1],"size":[2]}]]]], options);
8
8
  };
9
9
 
10
10
  export { defineCustomElements };