@getwidgets/live-chat-widget 1.0.5 → 1.0.7

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.
@@ -20210,11 +20210,37 @@
20210
20210
  const luminance = (0.299 * r2 + 0.587 * g + 0.114 * b) / 255;
20211
20211
  return luminance > 0.5 ? "#000000" : "#FFFFFF";
20212
20212
  };
20213
+ const getMessageTime = (message) => {
20214
+ if (!message) return "";
20215
+ const raw = message.timestamp ?? message.created_at;
20216
+ if (!raw) return "";
20217
+ if (typeof raw === "string") {
20218
+ const looksLikeTimeOnly = /:\d{2}/.test(raw) && !/\d{4}-\d{2}-\d{2}|T|Z/i.test(raw);
20219
+ if (looksLikeTimeOnly) return raw;
20220
+ const parsed2 = new Date(raw);
20221
+ if (!Number.isNaN(parsed2.getTime())) {
20222
+ return parsed2.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
20223
+ }
20224
+ return "";
20225
+ }
20226
+ const parsed = new Date(raw);
20227
+ if (Number.isNaN(parsed.getTime())) return "";
20228
+ return parsed.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
20229
+ };
20230
+ const timeTextColor = getContrastColor(appearanceConfig.background_color || "#F9FAFB");
20213
20231
  const isMobile = windowWidth < 768;
20214
20232
  return /* @__PURE__ */ React.createElement("div", { style: getPositionStyles() }, !isOpen && showNotificationPreview && /* @__PURE__ */ React.createElement(
20215
- "button",
20233
+ "div",
20216
20234
  {
20235
+ role: "button",
20236
+ tabIndex: 0,
20217
20237
  onClick: toggleWidget,
20238
+ onKeyDown: (e) => {
20239
+ if (e.key === "Enter" || e.key === " ") {
20240
+ e.preventDefault();
20241
+ toggleWidget();
20242
+ }
20243
+ },
20218
20244
  className: "rounded-2xl shadow-lg hover:shadow-xl transition-all duration-300 flex flex-col gap-2 p-4 max-w-xs responsive-notification relative",
20219
20245
  style: {
20220
20246
  backgroundColor: headerConfig.background_color || "#111827",
@@ -20420,23 +20446,25 @@
20420
20446
  }
20421
20447
  },
20422
20448
  inputAreaConfig.first_ai_message || "Hello! How can I assist you today?"
20423
- )) : combinedMessages.map((message) => /* @__PURE__ */ React.createElement("div", { key: message.id, className: `flex ${message.role === "user" ? "justify-end" : "justify-start"}` }, /* @__PURE__ */ React.createElement(
20424
- "div",
20425
- {
20426
- className: `p-3 inline-block rounded-lg`,
20427
- style: {
20428
- backgroundColor: message.role === "user" ? chatAreaConfig.user_response_color || "#4ADE80" : message.isError ? "#FEE2E2" : chatAreaConfig.ai_response_color || "#E2E8F0",
20429
- borderRadius: chatAreaConfig.chat_bubble_radius || "16px",
20430
- fontSize: isMobile ? "13px" : "14px",
20431
- color: message.role === "user" ? chatAreaConfig.user_font_color || "#111827" : message.isError ? "#991B1B" : chatAreaConfig.ai_font_color || "#111827",
20432
- marginBottom: isMobile ? "4px" : "2px",
20433
- maxWidth: isMobile ? "85%" : "80%",
20434
- wordBreak: "break-word"
20435
- }
20436
- },
20437
- message.role !== "system" ? /* @__PURE__ */ React.createElement(Markdown, { remarkPlugins: [remarkGfm] }, message.content) : /* @__PURE__ */ React.createElement("em", { className: "text-xs opacity-70" }, message.content),
20438
- chatAreaConfig.show_timestamps && message.timestamp && /* @__PURE__ */ React.createElement("div", { className: "text-xs opacity-70 mt-1 text-right" }, message.timestamp)
20439
- ))), localLoading && /* @__PURE__ */ React.createElement("div", { className: "flex justify-start" }, /* @__PURE__ */ React.createElement(
20449
+ )) : combinedMessages.map((message) => {
20450
+ const timeText = getMessageTime(message);
20451
+ return /* @__PURE__ */ React.createElement("div", { key: message.id, className: `flex flex-col ${message.role === "user" ? "items-end" : "items-start"}` }, /* @__PURE__ */ React.createElement(
20452
+ "div",
20453
+ {
20454
+ className: `p-3 inline-block rounded-lg`,
20455
+ style: {
20456
+ backgroundColor: message.role === "user" ? chatAreaConfig.user_response_color || "#4ADE80" : message.isError ? "#FEE2E2" : chatAreaConfig.ai_response_color || "#E2E8F0",
20457
+ borderRadius: chatAreaConfig.chat_bubble_radius || "16px",
20458
+ fontSize: isMobile ? "13px" : "14px",
20459
+ color: message.role === "user" ? chatAreaConfig.user_font_color || "#111827" : message.isError ? "#991B1B" : chatAreaConfig.ai_font_color || "#111827",
20460
+ marginBottom: isMobile ? "4px" : "2px",
20461
+ maxWidth: isMobile ? "85%" : "80%",
20462
+ wordBreak: "break-word"
20463
+ }
20464
+ },
20465
+ message.role !== "system" ? /* @__PURE__ */ React.createElement(Markdown, { remarkPlugins: [remarkGfm] }, message.content) : /* @__PURE__ */ React.createElement("em", { className: "text-xs opacity-70" }, message.content)
20466
+ ), message.role !== "system" && timeText && /* @__PURE__ */ React.createElement("div", { className: "text-xs opacity-70", style: { color: timeTextColor, marginBottom: isMobile ? "6px" : "4px" } }, timeText));
20467
+ }), localLoading && /* @__PURE__ */ React.createElement("div", { className: "flex justify-start" }, /* @__PURE__ */ React.createElement(
20440
20468
  "div",
20441
20469
  {
20442
20470
  className: "text-left p-3 inline-block max-w-[85%]",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getwidgets/live-chat-widget",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "main": "dist/live-chat-widget.umd.js",
5
5
  "unpkg": "dist/live-chat-widget.umd.js",
6
6
  "type": "module",