@salla.sa/ui-ai-kit-react 2.1.0 → 2.2.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 (73) hide show
  1. package/dist/components.d.ts +6 -0
  2. package/dist/components.d.ts.map +1 -0
  3. package/dist/components.js +23 -0
  4. package/dist/components.js.map +1 -0
  5. package/dist/generated/components.d.ts +14 -2
  6. package/dist/generated/components.d.ts.map +1 -1
  7. package/dist/generated/components.js +19 -3
  8. package/dist/generated/components.js.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -2
  12. package/dist/index.js.map +1 -1
  13. package/dist/stories/ai-agent-error.stories.d.ts +2 -2
  14. package/dist/stories/ai-agent-error.stories.d.ts.map +1 -1
  15. package/dist/stories/ai-agent-error.stories.js +35 -35
  16. package/dist/stories/ai-agent-error.stories.js.map +1 -1
  17. package/dist/stories/ai-card.stories.d.ts +1 -1
  18. package/dist/stories/ai-card.stories.d.ts.map +1 -1
  19. package/dist/stories/ai-card.stories.js +1 -1
  20. package/dist/stories/ai-card.stories.js.map +1 -1
  21. package/dist/stories/ai-chat-container.stories.d.ts +5 -1
  22. package/dist/stories/ai-chat-container.stories.d.ts.map +1 -1
  23. package/dist/stories/ai-chat-container.stories.js +146 -17
  24. package/dist/stories/ai-chat-container.stories.js.map +1 -1
  25. package/dist/stories/ai-chat-header.stories.d.ts +4 -3
  26. package/dist/stories/ai-chat-header.stories.d.ts.map +1 -1
  27. package/dist/stories/ai-chat-header.stories.js +117 -75
  28. package/dist/stories/ai-chat-header.stories.js.map +1 -1
  29. package/dist/stories/ai-chat-message.stories.d.ts +1 -1
  30. package/dist/stories/ai-chat-message.stories.d.ts.map +1 -1
  31. package/dist/stories/ai-chat-message.stories.js +1 -1
  32. package/dist/stories/ai-chat-message.stories.js.map +1 -1
  33. package/dist/stories/ai-conversation-list.stories.d.ts +3 -2
  34. package/dist/stories/ai-conversation-list.stories.d.ts.map +1 -1
  35. package/dist/stories/ai-conversation-list.stories.js +86 -31
  36. package/dist/stories/ai-conversation-list.stories.js.map +1 -1
  37. package/dist/stories/ai-conversation-summary.stories.d.ts +1 -1
  38. package/dist/stories/ai-conversation-summary.stories.d.ts.map +1 -1
  39. package/dist/stories/ai-conversation-summary.stories.js +1 -1
  40. package/dist/stories/ai-conversation-summary.stories.js.map +1 -1
  41. package/dist/stories/ai-in-chat-browser.stories.d.ts +13 -0
  42. package/dist/stories/ai-in-chat-browser.stories.d.ts.map +1 -0
  43. package/dist/stories/ai-in-chat-browser.stories.js +71 -0
  44. package/dist/stories/ai-in-chat-browser.stories.js.map +1 -0
  45. package/dist/stories/ai-link.stories.d.ts +1 -1
  46. package/dist/stories/ai-link.stories.d.ts.map +1 -1
  47. package/dist/stories/ai-link.stories.js +1 -1
  48. package/dist/stories/ai-link.stories.js.map +1 -1
  49. package/dist/stories/ai-loading.stories.d.ts +1 -1
  50. package/dist/stories/ai-loading.stories.d.ts.map +1 -1
  51. package/dist/stories/ai-loading.stories.js +2 -2
  52. package/dist/stories/ai-loading.stories.js.map +1 -1
  53. package/dist/stories/ai-message-input.stories.d.ts +3 -1
  54. package/dist/stories/ai-message-input.stories.d.ts.map +1 -1
  55. package/dist/stories/ai-message-input.stories.js +50 -1
  56. package/dist/stories/ai-message-input.stories.js.map +1 -1
  57. package/dist/stories/ai-rating.stories.d.ts +1 -1
  58. package/dist/stories/ai-rating.stories.d.ts.map +1 -1
  59. package/dist/stories/ai-rating.stories.js +2 -2
  60. package/dist/stories/ai-rating.stories.js.map +1 -1
  61. package/dist/stories/ai-route-decision.stories.d.ts +1 -1
  62. package/dist/stories/ai-route-decision.stories.d.ts.map +1 -1
  63. package/dist/stories/ai-route-decision.stories.js +1 -1
  64. package/dist/stories/ai-route-decision.stories.js.map +1 -1
  65. package/dist/stories/ai-suggestion.stories.d.ts +1 -1
  66. package/dist/stories/ai-suggestion.stories.d.ts.map +1 -1
  67. package/dist/stories/ai-suggestion.stories.js +2 -2
  68. package/dist/stories/ai-suggestion.stories.js.map +1 -1
  69. package/dist/stories/ai-voice-input.stories.d.ts +1 -1
  70. package/dist/stories/ai-voice-input.stories.d.ts.map +1 -1
  71. package/dist/stories/ai-voice-input.stories.js +1 -1
  72. package/dist/stories/ai-voice-input.stories.js.map +1 -1
  73. package/package.json +6 -3
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
- import { AiCard, AiChatContainer, AiChatHeader, AiChatMessage, AiConversationList, AiLink, AiLoading, AiMessageInput, AiRating, AiSuggestion, } from "../generated/components";
3
+ import { AiCard, AiChatContainer, AiChatHeader, AiChatMessage, AiLink, AiLoading, AiMessageInput, AiRating, AiSuggestion, } from "../components";
4
4
  const meta = {
5
5
  title: "Chat/Chat Container",
6
6
  component: AiChatContainer,
@@ -31,6 +31,22 @@ const meta = {
31
31
  control: "boolean",
32
32
  description: "Show AI watermark in the top half of the container",
33
33
  },
34
+ loading: {
35
+ control: "boolean",
36
+ description: "Show skeleton loading state while loading conversation history",
37
+ },
38
+ error: {
39
+ control: "boolean",
40
+ description: "Show error state when conversation fails to load",
41
+ },
42
+ errorText: {
43
+ control: "text",
44
+ description: "Error message text displayed in the error state",
45
+ },
46
+ retryLabel: {
47
+ control: "text",
48
+ description: "Label for the retry button in the error state",
49
+ },
34
50
  },
35
51
  };
36
52
  export default meta;
@@ -63,7 +79,7 @@ const steps = [
63
79
  { step: 4, action: "إعداد الروابط والمصادر", status: "pending" },
64
80
  ];
65
81
  const comparisonContent = `باقة **بلس** مناسبة للمتاجر الصغيرة والمتوسطة، بينما باقة **برو** مصممة للمتاجر الكبيرة اللي تحتاج منتجات غير محدودة وعمولات أقل ودعم فني على مدار الساعة.\n\n**التوصية:** إذا كنت تتوقع نمواً سريعاً، باقة **برو** هي الأنسب.`;
66
- const showcaseConversations = JSON.stringify([
82
+ const showcaseConversations = [
67
83
  {
68
84
  id: "1",
69
85
  title: "مساعد سلة",
@@ -85,10 +101,9 @@ const showcaseConversations = JSON.stringify([
85
101
  timestamp: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(),
86
102
  rating: null,
87
103
  },
88
- ]);
104
+ ];
89
105
  const ShowcaseConversationDemo = () => {
90
106
  const [showVoice, setShowVoice] = useState(false);
91
- const [listOpen, setListOpen] = useState(false);
92
107
  const [activeId, setActiveId] = useState("1");
93
108
  const [conversation, setConversation] = useState("مساعد سلة");
94
109
  const handleConversationSelect = (e) => {
@@ -98,25 +113,15 @@ const ShowcaseConversationDemo = () => {
98
113
  setConversation("محادثة جديدة");
99
114
  }
100
115
  else {
101
- const item = JSON.parse(showcaseConversations).find((c) => c.id === id);
116
+ const item = showcaseConversations.find((c) => c.id === id);
102
117
  setActiveId(id);
103
118
  setConversation(item?.title ?? "");
104
119
  }
105
- setListOpen(false);
106
120
  };
107
- return (_jsx("div", { style: { position: "relative", height: "700px", background: "#f3f4f6" }, children: _jsxs(AiChatContainer, { isOpen: true, position: "float", floatHeight: "800px", width: "28rem", autoScroll: true, children: [_jsx(AiChatHeader, { slot: "header", isDraggable: true, mode: "agent", conversation: conversation, onDropdownClick: () => setListOpen((v) => !v), onEditClick: () => {
121
+ return (_jsx("div", { style: { position: "relative", height: "700px", background: "#f3f4f6" }, children: _jsxs(AiChatContainer, { isOpen: true, position: "float", floatHeight: "800px", width: "28rem", autoScroll: true, children: [_jsx(AiChatHeader, { slot: "header", isDraggable: true, mode: "agent", conversation: conversation, conversationItems: showcaseConversations, conversationActiveId: activeId, onConversationSelect: handleConversationSelect, onConversationDelete: (e) => console.log("delete:", e.detail), onEditClick: () => {
108
122
  setActiveId("");
109
123
  setConversation("محادثة جديدة");
110
- setListOpen(false);
111
- } }), listOpen && (_jsx("div", { style: {
112
- position: "absolute",
113
- inset: 0,
114
- top: "56px",
115
- zIndex: 10,
116
- background: "white",
117
- display: "flex",
118
- flexDirection: "column",
119
- }, children: _jsx(AiConversationList, { items: showcaseConversations, activeId: activeId, onConversationSelect: handleConversationSelect, onConversationDelete: (e) => console.log("delete:", e.detail) }) })), _jsxs("div", { style: {
124
+ } }), _jsxs("div", { style: {
120
125
  display: "flex",
121
126
  flexDirection: "column",
122
127
  gap: "0.75rem",
@@ -132,4 +137,128 @@ const ShowcaseConversationDemo = () => {
132
137
  export const ShowcaseConversation = {
133
138
  render: () => _jsx(ShowcaseConversationDemo, {}),
134
139
  };
140
+ // ── AutoScroll Demo ─────────────────────────────────────────────────────────
141
+ const agentReplies = [
142
+ "أهلاً! كيف أقدر أساعدك اليوم؟",
143
+ "بكل سرور، سأشرح لك الفرق بين الباقات.",
144
+ "باقة بلس مناسبة للمتاجر الصغيرة والمتوسطة.",
145
+ "باقة برو تدعم منتجات غير محدودة وعمولات أقل.",
146
+ "هل تريد مقارنة تفصيلية بين الباقتين؟",
147
+ "يمكنك الترقية من لوحة التحكم في أي وقت.",
148
+ "هل هناك شيء آخر أقدر أساعدك فيه؟",
149
+ ];
150
+ const AutoScrollDemo = () => {
151
+ const [messages, setMessages] = useState([
152
+ { role: "agent", content: "أهلاً! كيف أقدر أساعدك اليوم؟", id: 0 },
153
+ ]);
154
+ const [replyIndex, setReplyIndex] = useState(1);
155
+ const [autoScroll, setAutoScroll] = useState(true);
156
+ const addUserMessage = () => {
157
+ const id = Date.now();
158
+ setMessages((prev) => [
159
+ ...prev,
160
+ { role: "user", content: `رسالة من المستخدم #${prev.length}`, id },
161
+ ]);
162
+ setTimeout(() => {
163
+ const reply = agentReplies[replyIndex % agentReplies.length];
164
+ setReplyIndex((i) => i + 1);
165
+ setMessages((prev) => [
166
+ ...prev,
167
+ { role: "agent", content: reply, id: id + 1 },
168
+ ]);
169
+ }, 600);
170
+ };
171
+ return (_jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "1rem", alignItems: "flex-start", padding: "1rem" }, children: [_jsxs("div", { style: { display: "flex", gap: "0.75rem", alignItems: "center" }, children: [_jsx("button", { onClick: addUserMessage, style: {
172
+ padding: "8px 16px",
173
+ background: "#004956",
174
+ color: "white",
175
+ border: "none",
176
+ borderRadius: "8px",
177
+ cursor: "pointer",
178
+ fontFamily: "inherit",
179
+ }, children: "\u0625\u0636\u0627\u0641\u0629 \u0631\u0633\u0627\u0644\u0629" }), _jsxs("label", { style: { display: "flex", alignItems: "center", gap: "6px", cursor: "pointer" }, children: [_jsx("input", { type: "checkbox", checked: autoScroll, onChange: (e) => setAutoScroll(e.target.checked) }), "autoScroll"] })] }), _jsx("div", { style: { position: "relative", height: "400px", width: "28rem" }, children: _jsxs(AiChatContainer, { isOpen: true, position: "left", width: "28rem", autoScroll: autoScroll, children: [_jsx(AiChatHeader, { slot: "header", conversation: "\u0627\u062E\u062A\u0628\u0627\u0631 \u0627\u0644\u062A\u0645\u0631\u064A\u0631 \u0627\u0644\u062A\u0644\u0642\u0627\u0626\u064A" }), _jsx("div", { style: { display: "flex", flexDirection: "column", gap: "0.75rem" }, children: messages.map((m) => (_jsx(AiChatMessage, { role: m.role, content: m.content, agentName: m.role === "agent" ? "سلة AI" : undefined }, m.id))) })] }) })] }));
180
+ };
181
+ export const AutoScrollTest = {
182
+ render: () => _jsx(AutoScrollDemo, {}),
183
+ parameters: {
184
+ docs: {
185
+ description: {
186
+ story: 'Click **إضافة رسالة** repeatedly to append messages. With **autoScroll** checked the list scrolls to the bottom automatically. Uncheck it to see messages stay in place.',
187
+ },
188
+ },
189
+ },
190
+ };
191
+ // ── Loading (Skeleton) State ────────────────────────────────────────────────
192
+ export const LoadingState = {
193
+ render: (args) => (_jsx("div", { style: { position: "relative", height: "600px", background: "#f3f4f6" }, children: _jsxs(AiChatContainer, { isOpen: args.isOpen, position: "float", width: "28rem", floatHeight: "600px", loading: args.loading, children: [_jsx(AiChatHeader, { slot: "header", titleLoading: true }), _jsx(AiMessageInput, { slot: "footer", disabled: true, placeholder: "\u062C\u0627\u0631\u064A \u0627\u0644\u062A\u062D\u0645\u064A\u0644..." })] }) })),
194
+ args: {
195
+ isOpen: true,
196
+ loading: true,
197
+ },
198
+ parameters: {
199
+ docs: {
200
+ description: {
201
+ story: 'When `loading` is true, the messages area shows skeleton placeholder bubbles. The header also shows a shimmer skeleton via `titleLoading` on `AiChatHeader`.',
202
+ },
203
+ },
204
+ },
205
+ };
206
+ // ── Error State ─────────────────────────────────────────────────────────────
207
+ const ErrorDemo = () => {
208
+ const [error, setError] = useState(true);
209
+ const [loading, setLoading] = useState(false);
210
+ const handleRetry = () => {
211
+ setError(false);
212
+ setLoading(true);
213
+ // Simulate a retry that fails after 2s
214
+ setTimeout(() => {
215
+ setLoading(false);
216
+ setError(true);
217
+ }, 2000);
218
+ };
219
+ return (_jsx("div", { style: { position: "relative", height: "600px", background: "#f3f4f6" }, children: _jsxs(AiChatContainer, { isOpen: true, position: "float", width: "28rem", floatHeight: "600px", error: error, loading: loading, errorText: "\u062A\u0639\u0630\u0651\u0631 \u062A\u062D\u0645\u064A\u0644 \u0627\u0644\u0645\u062D\u0627\u062F\u062B\u0629. \u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u062A\u0635\u0627\u0644\u0643 \u0628\u0627\u0644\u0625\u0646\u062A\u0631\u0646\u062A.", retryLabel: "\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629", onRetryClick: handleRetry, children: [_jsx(AiChatHeader, { slot: "header", conversation: "\u062E\u0637\u0623 \u0641\u064A \u0627\u0644\u062A\u062D\u0645\u064A\u0644", titleLoading: loading }), _jsx(AiMessageInput, { slot: "footer", disabled: true, placeholder: "\u063A\u064A\u0631 \u0645\u062A\u0627\u062D \u062D\u0627\u0644\u064A\u0627\u064B" })] }) }));
220
+ };
221
+ export const ErrorState = {
222
+ render: () => _jsx(ErrorDemo, {}),
223
+ parameters: {
224
+ docs: {
225
+ description: {
226
+ story: 'When `error` is true, the messages area displays an error icon, message, and retry button. Clicking retry triggers the `retryClick` event. This demo simulates a retry that shows loading skeletons for 2 seconds then falls back to the error state again.',
227
+ },
228
+ },
229
+ },
230
+ };
231
+ // ── Loading → Loaded Transition ─────────────────────────────────────────────
232
+ const LoadingTransitionDemo = () => {
233
+ const [loading, setLoading] = useState(true);
234
+ return (_jsxs("div", { style: {
235
+ display: "flex",
236
+ flexDirection: "column",
237
+ gap: "1rem",
238
+ alignItems: "flex-start",
239
+ padding: "1rem",
240
+ }, children: [_jsx("button", { onClick: () => setLoading((l) => !l), style: {
241
+ padding: "8px 16px",
242
+ background: "#004956",
243
+ color: "white",
244
+ border: "none",
245
+ borderRadius: "8px",
246
+ cursor: "pointer",
247
+ fontFamily: "inherit",
248
+ }, children: loading ? "تم التحميل — إظهار الرسائل" : "إعادة التحميل" }), _jsx("div", { style: { position: "relative", height: "500px", width: "28rem" }, children: _jsxs(AiChatContainer, { isOpen: true, position: "left", width: "28rem", loading: loading, children: [_jsx(AiChatHeader, { slot: "header", conversation: "\u0627\u0646\u062A\u0642\u0627\u0644 \u0627\u0644\u062A\u062D\u0645\u064A\u0644", titleLoading: loading }), _jsxs("div", { style: {
249
+ display: "flex",
250
+ flexDirection: "column",
251
+ gap: "0.75rem",
252
+ }, children: [_jsx(AiChatMessage, { role: "agent", content: "\u0623\u0647\u0644\u0627\u064B \u0648\u0633\u0647\u0644\u0627\u064B! \u0623\u0646\u0627 \u0645\u0633\u0627\u0639\u062F \u0633\u0644\u0629 \u0627\u0644\u0630\u0643\u064A \uD83E\uDD16", agentName: "\u0633\u0644\u0629 AI" }), _jsx(AiChatMessage, { role: "user", content: "\u0643\u064A\u0641 \u0623\u0631\u0642\u064A \u0628\u0627\u0642\u062A\u064A\u061F" }), _jsx(AiChatMessage, { role: "agent", content: "\u062A\u0631\u0642\u064A\u0629 \u0628\u0627\u0642\u062A\u0643 \u0633\u0647\u0644\u0629 \u0648\u0633\u0631\u064A\u0639\u0629! \u0627\u0630\u0647\u0628 \u0625\u0644\u0649 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u2190 \u0627\u0644\u0628\u0627\u0642\u0629 \u0648\u0627\u0644\u0641\u0648\u062A\u0631\u0629.", agentName: "\u0633\u0644\u0629 AI" })] }), _jsx(AiMessageInput, { slot: "footer", disabled: loading, placeholder: loading ? "جاري التحميل..." : "اكتب رسالتك هنا..." })] }) })] }));
253
+ };
254
+ export const LoadingTransition = {
255
+ render: () => _jsx(LoadingTransitionDemo, {}),
256
+ parameters: {
257
+ docs: {
258
+ description: {
259
+ story: 'Toggle the button to switch between loading (skeleton) state and the actual conversation content. Demonstrates how the container transitions smoothly.',
260
+ },
261
+ },
262
+ },
263
+ };
135
264
  //# sourceMappingURL=ai-chat-container.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-chat-container.stories.js","sourceRoot":"","sources":["../../src/stories/ai-chat-container.stories.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-chat-container.stories.js","sourceRoot":"","sources":["../../src/stories/ai-chat-container.stories.tsx"],"names":[],"mappings":"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"}
@@ -1,15 +1,16 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { AiChatHeader } from '../generated/components';
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { AiChatHeader } from "../components";
3
3
  declare const meta: Meta<typeof AiChatHeader>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof meta>;
6
6
  export declare const AgentMode: Story;
7
7
  export declare const HumanMode: Story;
8
8
  export declare const HumanWithoutBack: Story;
9
+ export declare const BrowserMode: Story;
9
10
  /** Avatar fallback: no URL → shows first letter of agentName */
10
11
  export declare const AvatarFallback: Story;
11
12
  /** Status indicator variants: online (green), offline (gray), busy (red), away (amber) */
12
13
  export declare const StatusIndicatorVariants: Story;
13
14
  export declare const WithConversationList: Story;
14
- export declare const InChatContainer: Story;
15
+ export declare const TitleLoading: Story;
15
16
  //# sourceMappingURL=ai-chat-header.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-chat-header.stories.d.ts","sourceRoot":"","sources":["../../src/stories/ai-chat-header.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAmB,YAAY,EAAqD,MAAM,yBAAyB,CAAC;AAE3H,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,CAwCnC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,SAAS,EAAE,KAgBvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAqBvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAsB9B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,cAAc,EAAE,KAwC5B,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,uBAAuB,EAAE,KAwBrC,CAAC;AA6GF,eAAO,MAAM,oBAAoB,EAAE,KASlC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAgC7B,CAAC"}
1
+ {"version":3,"file":"ai-chat-header.stories.d.ts","sourceRoot":"","sources":["../../src/stories/ai-chat-header.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAEL,YAAY,EAEb,MAAM,eAAe,CAAC;AAEvB,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,CAiDnC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,SAAS,EAAE,KAgBvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAqBvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAsB9B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAmBzB,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,cAAc,EAAE,KAyC5B,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,uBAAuB,EAAE,KAiCrC,CAAC;AAyGF,eAAO,MAAM,oBAAoB,EAAE,KAUlC,CAAC;AAIF,eAAO,MAAM,YAAY,EAAE,KA4B1B,CAAC"}
@@ -1,160 +1,185 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from 'react';
3
- import { AiChatContainer, AiChatHeader, AiChatMessage, AiConversationList, AiMessageInput } from '../generated/components';
2
+ import { useState } from "react";
3
+ import { AiChatContainer, AiChatHeader, AiChatMessage, } from "../components";
4
4
  const meta = {
5
- title: 'Chat/Chat Header',
5
+ title: "Chat/Chat Header",
6
6
  component: AiChatHeader,
7
- tags: ['autodocs'],
7
+ tags: ["autodocs"],
8
8
  argTypes: {
9
9
  mode: {
10
- control: { type: 'select' },
11
- options: ['agent', 'human'],
12
- description: 'Layout variant',
10
+ control: { type: "select" },
11
+ options: ["agent", "human", "browser"],
12
+ description: "Layout variant",
13
13
  },
14
14
  conversation: {
15
- control: 'text',
16
- description: 'Conversation title (agent mode)',
15
+ control: "text",
16
+ description: "Conversation title (agent mode)",
17
17
  },
18
18
  agentName: {
19
- control: 'text',
20
- description: 'Human agent name (human mode)',
19
+ control: "text",
20
+ description: "Human agent name (human mode)",
21
21
  },
22
22
  agentStatus: {
23
- control: 'text',
24
- description: 'Human agent status label (human mode); hidden when empty',
23
+ control: "text",
24
+ description: "Human agent status label (human mode); hidden when empty",
25
25
  },
26
26
  agentAvatar: {
27
- control: 'text',
28
- description: 'Human agent avatar URL; fallback to first letter of agentName when empty or broken',
27
+ control: "text",
28
+ description: "Human agent avatar URL; fallback to first letter of agentName when empty or broken",
29
29
  },
30
30
  showBack: {
31
- control: 'boolean',
32
- description: 'Show back button (human mode)',
31
+ control: "boolean",
32
+ description: "Show back button (human mode)",
33
+ },
34
+ pageTitle: {
35
+ control: "text",
36
+ description: "Page title displayed in the browser header (browser mode)",
37
+ },
38
+ pageUrl: {
39
+ control: "text",
40
+ description: "The external URL for the open-external button (browser mode)",
33
41
  },
34
42
  isDraggable: {
35
- control: 'boolean',
36
- description: 'Show drag handle (used when container is draggable)',
43
+ control: "boolean",
44
+ description: "Show drag handle (used when container is draggable)",
37
45
  },
38
46
  statusIndicator: {
39
- control: { type: 'select' },
40
- options: ['online', 'offline', 'busy', 'away'],
41
- description: 'Online-dot color variant (human mode)',
47
+ control: { type: "select" },
48
+ options: ["online", "offline", "busy", "away"],
49
+ description: "Online-dot color variant (human mode)",
42
50
  },
43
51
  },
44
52
  };
45
53
  export default meta;
46
54
  export const AgentMode = {
47
- render: (args) => (_jsx(AiChatHeader, { mode: args.mode, conversation: args.conversation, isDraggable: args.isDraggable, onCloseClick: () => console.log('Close clicked'), onEditClick: () => console.log('Edit clicked'), onDropdownClick: () => console.log('Dropdown clicked') })),
55
+ render: (args) => (_jsx(AiChatHeader, { mode: args.mode, conversation: args.conversation, isDraggable: args.isDraggable, onCloseClick: () => console.log("Close clicked"), onEditClick: () => console.log("Edit clicked"), onDropdownClick: () => console.log("Dropdown clicked") })),
48
56
  args: {
49
- mode: 'agent',
50
- conversation: 'محادثة جديدة',
57
+ mode: "agent",
58
+ conversation: "محادثة جديدة",
51
59
  isDraggable: true,
52
60
  },
53
61
  };
54
62
  export const HumanMode = {
55
- render: (args) => (_jsx(AiChatHeader, { mode: args.mode, agentName: args.agentName, agentStatus: args.agentStatus, agentAvatar: args.agentAvatar, showBack: args.showBack, statusIndicator: args.statusIndicator, onCloseClick: () => console.log('Close clicked'), onBackClick: () => console.log('Back clicked') })),
63
+ render: (args) => (_jsx(AiChatHeader, { mode: args.mode, agentName: args.agentName, agentStatus: args.agentStatus, agentAvatar: args.agentAvatar, showBack: args.showBack, statusIndicator: args.statusIndicator, onCloseClick: () => console.log("Close clicked"), onBackClick: () => console.log("Back clicked") })),
56
64
  args: {
57
- mode: 'human',
58
- agentName: 'هلا',
59
- agentStatus: 'Active',
60
- agentAvatar: 'https://i.pravatar.cc/40?img=5',
65
+ mode: "human",
66
+ agentName: "هلا",
67
+ agentStatus: "Active",
68
+ agentAvatar: "https://i.pravatar.cc/40?img=5",
61
69
  showBack: true,
62
- statusIndicator: 'online',
70
+ statusIndicator: "online",
63
71
  },
64
72
  };
65
73
  export const HumanWithoutBack = {
66
- render: (args) => (_jsx(AiChatHeader, { mode: args.mode, agentName: args.agentName, agentStatus: args.agentStatus, agentAvatar: args.agentAvatar, showBack: args.showBack, isDraggable: args.isDraggable, statusIndicator: args.statusIndicator, onCloseClick: () => console.log('Close clicked') })),
74
+ render: (args) => (_jsx(AiChatHeader, { mode: args.mode, agentName: args.agentName, agentStatus: args.agentStatus, agentAvatar: args.agentAvatar, showBack: args.showBack, isDraggable: args.isDraggable, statusIndicator: args.statusIndicator, onCloseClick: () => console.log("Close clicked") })),
67
75
  args: {
68
- mode: 'human',
69
- agentName: 'هلا',
70
- agentStatus: 'Active',
71
- agentAvatar: 'https://i.pravatar.cc/40?img=5',
76
+ mode: "human",
77
+ agentName: "هلا",
78
+ agentStatus: "Active",
79
+ agentAvatar: "https://i.pravatar.cc/40?img=5",
72
80
  showBack: false,
73
81
  isDraggable: true,
74
- statusIndicator: 'online',
82
+ statusIndicator: "online",
83
+ },
84
+ };
85
+ export const BrowserMode = {
86
+ render: (args) => (_jsx(AiChatHeader, { mode: "browser", pageTitle: args.pageTitle, pageUrl: args.pageUrl, isDraggable: args.isDraggable, onBackClick: () => console.log("Back / Close browser clicked"), onOpenExternal: (e) => console.log("Open external:", e.detail) })),
87
+ args: {
88
+ mode: "browser",
89
+ pageTitle: "تفاصيل الطلب #12345",
90
+ pageUrl: "https://example.com/order/12345",
91
+ isDraggable: false,
75
92
  },
76
93
  };
77
94
  /** Avatar fallback: no URL → shows first letter of agentName */
78
95
  export const AvatarFallback = {
79
- render: () => (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: [_jsx(AiChatHeader, { mode: "human", agentName: "\u0645\u062D\u0645\u062F", agentStatus: "\u0645\u062A\u0635\u0644", agentAvatar: "", showBack: true, statusIndicator: "online", onCloseClick: () => console.log('close'), onBackClick: () => console.log('back') }), _jsx(AiChatHeader, { mode: "human", agentName: "\u0633\u0627\u0631\u0629", agentStatus: "", agentAvatar: "", showBack: false, statusIndicator: "busy", onCloseClick: () => console.log('close') }), _jsx(AiChatHeader, { mode: "human", agentName: "\u0647\u0644\u0627", agentAvatar: "https://broken-url-that-will-404.example/img.png", showBack: true, statusIndicator: "away", onCloseClick: () => console.log('close'), onBackClick: () => console.log('back') })] })),
96
+ render: () => (_jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: [_jsx(AiChatHeader, { mode: "human", agentName: "\u0645\u062D\u0645\u062F", agentStatus: "\u0645\u062A\u0635\u0644", agentAvatar: "", showBack: true, statusIndicator: "online", onCloseClick: () => console.log("close"), onBackClick: () => console.log("back") }), _jsx(AiChatHeader, { mode: "human", agentName: "\u0633\u0627\u0631\u0629", agentStatus: "", agentAvatar: "", showBack: false, statusIndicator: "busy", onCloseClick: () => console.log("close") }), _jsx(AiChatHeader, { mode: "human", agentName: "\u0647\u0644\u0627", agentAvatar: "https://broken-url-that-will-404.example/img.png", showBack: true, statusIndicator: "away", onCloseClick: () => console.log("close"), onBackClick: () => console.log("back") })] })),
80
97
  parameters: {
81
98
  docs: {
82
99
  description: {
83
- story: 'When `agentAvatar` is empty or the image fails to load, a fallback div showing the first letter of `agentName` is rendered. `agentStatus` is hidden when blank.',
100
+ story: "When `agentAvatar` is empty or the image fails to load, a fallback div showing the first letter of `agentName` is rendered. `agentStatus` is hidden when blank.",
84
101
  },
85
102
  },
86
103
  },
87
104
  };
88
105
  /** Status indicator variants: online (green), offline (gray), busy (red), away (amber) */
89
106
  export const StatusIndicatorVariants = {
90
- render: () => (_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: ['online', 'offline', 'busy', 'away'].map(status => (_jsx(AiChatHeader, { mode: "human", agentName: "\u0647\u0644\u0627", agentStatus: status === 'online' ? 'متصل الآن' : status === 'offline' ? 'غير متصل' : status === 'busy' ? 'مشغول' : 'بعيد', agentAvatar: "https://i.pravatar.cc/40?img=5", showBack: false, statusIndicator: status, onCloseClick: () => console.log('close') }, status))) })),
107
+ render: () => (_jsx("div", { style: { display: "flex", flexDirection: "column", gap: "8px" }, children: ["online", "offline", "busy", "away"].map((status) => (_jsx(AiChatHeader, { mode: "human", agentName: "\u0647\u0644\u0627", agentStatus: status === "online"
108
+ ? "متصل الآن"
109
+ : status === "offline"
110
+ ? "غير متصل"
111
+ : status === "busy"
112
+ ? "مشغول"
113
+ : "بعيد", agentAvatar: "https://i.pravatar.cc/40?img=5", showBack: false, statusIndicator: status, onCloseClick: () => console.log("close") }, status))) })),
91
114
  parameters: {
92
115
  docs: {
93
116
  description: {
94
- story: '`statusIndicator` controls the online-dot color: **online** = green, **offline** = gray, **busy** = red, **away** = amber.',
117
+ story: "`statusIndicator` controls the online-dot color: **online** = green, **offline** = gray, **busy** = red, **away** = amber.",
95
118
  },
96
119
  },
97
120
  },
98
121
  };
99
- const conversations = JSON.stringify([
122
+ const conversations = [
100
123
  {
101
- id: '1',
102
- title: 'مساعدة في كتابة تقرير',
103
- preview: 'أحتاج إلى مساعدة في كتابة تقرير عن أداء المبيعات للربع الثالث',
124
+ id: "1",
125
+ title: "مساعدة في كتابة تقرير",
126
+ preview: "أحتاج إلى مساعدة في كتابة تقرير عن أداء المبيعات للربع الثالث",
104
127
  timestamp: new Date(Date.now() - 5 * 60 * 1000).toISOString(),
105
128
  rating: 5,
106
129
  },
107
130
  {
108
- id: '2',
109
- title: 'تحليل البيانات',
110
- preview: 'هل يمكنك مساعدتي في تحليل هذه البيانات وإخراج تقرير مختصر؟',
131
+ id: "2",
132
+ title: "تحليل البيانات",
133
+ preview: "هل يمكنك مساعدتي في تحليل هذه البيانات وإخراج تقرير مختصر؟",
111
134
  timestamp: new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(),
112
135
  rating: 3,
113
136
  },
114
137
  {
115
- id: '3',
116
- title: 'استفسار عن المنتجات',
117
- preview: 'أريد معرفة المزيد عن المنتجات المتاحة وأسعارها وطرق الشحن',
138
+ id: "3",
139
+ title: "استفسار عن المنتجات",
140
+ preview: "أريد معرفة المزيد عن المنتجات المتاحة وأسعارها وطرق الشحن",
118
141
  timestamp: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(),
119
142
  rating: null,
120
143
  },
121
144
  {
122
- id: '4',
123
- title: 'دعم فني',
124
- preview: 'واجهت مشكلة في تسجيل الدخول ولا أستطيع إعادة تعيين كلمة المرور',
145
+ id: "4",
146
+ title: "دعم فني",
147
+ preview: "واجهت مشكلة في تسجيل الدخول ولا أستطيع إعادة تعيين كلمة المرور",
125
148
  timestamp: new Date(Date.now() - 3 * 24 * 60 * 60 * 1000).toISOString(),
126
149
  rating: 2,
127
150
  },
128
- ]);
151
+ ];
129
152
  const WithConversationListDemo = () => {
130
- const [listOpen, setListOpen] = useState(false);
131
- const [activeId, setActiveId] = useState('1');
132
- const [conversation, setConversation] = useState('مساعدة في كتابة تقرير');
153
+ const [activeId, setActiveId] = useState("1");
154
+ const [conversation, setConversation] = useState("مساعدة في كتابة تقرير");
133
155
  const handleSelect = (e) => {
134
156
  const id = e.detail;
135
157
  if (!id) {
136
- setActiveId('');
137
- setConversation('محادثة جديدة');
158
+ setActiveId("");
159
+ setConversation("محادثة جديدة");
138
160
  }
139
161
  else {
140
- const item = JSON.parse(conversations).find((c) => c.id === id);
162
+ const item = conversations.find((c) => c.id === id);
141
163
  setActiveId(id);
142
- setConversation(item?.title ?? '');
164
+ setConversation(item?.title ?? "");
143
165
  }
144
- setListOpen(false);
145
166
  };
146
167
  const handleDelete = (e) => {
147
- console.log('delete:', e.detail);
168
+ console.log("delete:", e.detail);
148
169
  };
149
- return (_jsx("div", { style: { position: 'relative', height: '600px', background: '#f3f4f6', display: 'flex', alignItems: 'flex-start', justifyContent: 'center', padding: '2rem' }, children: _jsxs("div", { style: { width: '28rem', borderRadius: '16px', overflow: 'hidden', boxShadow: '0 4px 24px rgba(0,0,0,0.10)', background: 'white', display: 'flex', flexDirection: 'column', height: '520px', position: 'relative' }, children: [_jsx(AiChatHeader, { mode: "agent", conversation: conversation, onDropdownClick: () => setListOpen(v => !v), onEditClick: () => { setActiveId(''); setConversation('محادثة جديدة'); setListOpen(false); }, onCloseClick: () => console.log('close') }), listOpen && (_jsx("div", { style: {
150
- position: 'absolute',
151
- inset: 0,
152
- top: '56px', // below header
153
- zIndex: 10,
154
- background: 'white',
155
- display: 'flex',
156
- flexDirection: 'column',
157
- }, children: _jsx(AiConversationList, { items: conversations, activeId: activeId, onConversationSelect: handleSelect, onConversationDelete: handleDelete }) })), _jsxs("div", { style: { flex: 1, padding: '1rem', display: 'flex', flexDirection: 'column', gap: '0.75rem', overflowY: 'auto' }, children: [_jsx(AiChatMessage, { role: "agent", content: "\u0623\u0647\u0644\u0627\u064B! \u0643\u064A\u0641 \u0623\u0642\u062F\u0631 \u0623\u0633\u0627\u0639\u062F\u0643 \u0627\u0644\u064A\u0648\u0645\u061F", agentName: "\u0633\u0644\u0629 AI", timestamp: new Date(Date.now() - 120000).toISOString(), showActions: true }), _jsx(AiChatMessage, { role: "user", content: "\u0623\u062D\u062A\u0627\u062C \u0645\u0633\u0627\u0639\u062F\u0629 \u0641\u064A \u062A\u0642\u0631\u064A\u0631 \u0627\u0644\u0645\u0628\u064A\u0639\u0627\u062A", timestamp: new Date(Date.now() - 60000).toISOString() })] }), _jsx("div", { style: { padding: '0 8px 8px', flexShrink: 0 }, children: _jsx(AiMessageInput, { placeholder: "\u0627\u0643\u062A\u0628 \u0631\u0633\u0627\u0644\u062A\u0643..." }) })] }) }));
170
+ return (_jsx("div", { style: {
171
+ height: "600px",
172
+ }, children: _jsxs(AiChatContainer, { isOpen: true, position: "right", width: "32rem", children: [_jsx(AiChatHeader, { slot: "header", mode: "agent", conversation: conversation, conversationItems: conversations, conversationActiveId: activeId, onConversationSelect: handleSelect, onConversationDelete: handleDelete, onEditClick: () => {
173
+ setActiveId("");
174
+ setConversation("محادثة جديدة");
175
+ }, onCloseClick: () => console.log("close") }), _jsxs("div", { style: {
176
+ flex: 1,
177
+ padding: "1rem",
178
+ display: "flex",
179
+ flexDirection: "column",
180
+ gap: "0.75rem",
181
+ overflowY: "auto",
182
+ }, children: [_jsx(AiChatMessage, { role: "agent", content: "\u0623\u0647\u0644\u0627\u064B! \u0643\u064A\u0641 \u0623\u0642\u062F\u0631 \u0623\u0633\u0627\u0639\u062F\u0643 \u0627\u0644\u064A\u0648\u0645\u061F", agentName: "\u0633\u0644\u0629 AI", timestamp: new Date(Date.now() - 120000).toISOString(), showActions: true }), _jsx(AiChatMessage, { role: "user", content: "\u0623\u062D\u062A\u0627\u062C \u0645\u0633\u0627\u0639\u062F\u0629 \u0641\u064A \u062A\u0642\u0631\u064A\u0631 \u0627\u0644\u0645\u0628\u064A\u0639\u0627\u062A", timestamp: new Date(Date.now() - 60000).toISOString() })] })] }) }));
158
183
  };
159
184
  export const WithConversationList = {
160
185
  render: () => _jsx(WithConversationListDemo, {}),
@@ -166,7 +191,24 @@ export const WithConversationList = {
166
191
  },
167
192
  },
168
193
  };
169
- export const InChatContainer = {
170
- render: () => (_jsx("div", { style: { position: 'relative', height: '600px', background: '#f3f4f6' }, children: _jsx(AiChatContainer, { isOpen: true, position: "right", width: "32rem", children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', height: '100%', background: 'white' }, children: [_jsx(AiChatHeader, { mode: "agent", conversation: "\u0645\u062D\u0627\u062F\u062B\u0629 \u0645\u0639 \u0627\u0644\u0645\u0633\u0627\u0639\u062F \u0627\u0644\u0630\u0643\u064A", onCloseClick: () => console.log('Close clicked'), onEditClick: () => console.log('Edit clicked'), onDropdownClick: () => console.log('Dropdown clicked') }), _jsxs("div", { style: { flex: 1, padding: '1rem', display: 'flex', flexDirection: 'column', gap: '1rem', overflowY: 'auto' }, children: [_jsx(AiChatMessage, { role: "user", content: "\u0645\u0631\u062D\u0628\u0627\u064B\u060C \u0643\u064A\u0641 \u064A\u0645\u0643\u0646\u0646\u064A \u0627\u0644\u0645\u0633\u0627\u0639\u062F\u0629\u061F", timestamp: new Date(Date.now() - 300000).toISOString() }), _jsx(AiChatMessage, { role: "assistant", content: "\u0645\u0631\u062D\u0628\u0627\u064B \u0628\u0643! \u0623\u0646\u0627 \u0647\u0646\u0627 \u0644\u0645\u0633\u0627\u0639\u062F\u062A\u0643. \u0645\u0627 \u0627\u0644\u0630\u064A \u062A\u062D\u062A\u0627\u062C \u0625\u0644\u064A\u0647 \u0627\u0644\u064A\u0648\u0645\u061F", timestamp: new Date().toISOString(), showActions: true })] }), _jsx("div", { style: { padding: '1rem', borderTop: '1px solid #e5e7eb' }, children: _jsx(AiMessageInput, { placeholder: "\u0627\u0643\u062A\u0628 \u0631\u0633\u0627\u0644\u062A\u0643..." }) })] }) }) })),
194
+ // ── Title Loading State ─────────────────────────────────────────────────────
195
+ export const TitleLoading = {
196
+ render: (args) => (_jsx(AiChatHeader, { mode: "agent", titleLoading: args.titleLoading, conversation: "\u0645\u062D\u0627\u062F\u062B\u0629 \u062C\u062F\u064A\u062F\u0629", isDraggable: true, onCloseClick: () => console.log("Close clicked"), onEditClick: () => console.log("Edit clicked") })),
197
+ args: {
198
+ titleLoading: true,
199
+ },
200
+ argTypes: {
201
+ titleLoading: {
202
+ control: "boolean",
203
+ description: "Show a shimmer skeleton in place of the conversation title",
204
+ },
205
+ },
206
+ parameters: {
207
+ docs: {
208
+ description: {
209
+ story: 'When `titleLoading` is true, a shimmer skeleton replaces the conversation title and the dropdown chevron is hidden. Toggle the control to see the transition.',
210
+ },
211
+ },
212
+ },
171
213
  };
172
214
  //# sourceMappingURL=ai-chat-header.stories.js.map