Files
bitvid/js/ui/dm/MessageBubble.js
T

61 lines
1.5 KiB
JavaScript

function createElement(doc, tag, className, text) {
const element = doc.createElement(tag);
if (className) {
element.className = className;
}
if (typeof text === "string") {
element.textContent = text;
}
return element;
}
export function MessageBubble({
document: doc,
message = {},
variant = "incoming",
} = {}) {
if (!doc) {
throw new Error("MessageBubble requires a document reference.");
}
const {
body = "",
timestamp = "",
status = "sent",
} = message;
const wrapper = createElement(doc, "div", "dm-message-bubble");
wrapper.classList.add(`dm-message-bubble--${variant}`);
wrapper.dataset.status = status;
const content = createElement(doc, "div", "dm-message-bubble__content", body);
wrapper.appendChild(content);
const meta = createElement(doc, "div", "dm-message-bubble__meta");
if (timestamp) {
// Added 'text-muted' class for theme-respecting color (usually handles light/dark text)
const timeSpan = createElement(doc, "span", "dm-message-bubble__time text-muted", timestamp);
meta.appendChild(timeSpan);
}
if (variant === "outgoing") {
const statusLabel = createElement(
doc,
"span",
"dm-message-bubble__status",
status === "failed"
? "Failed to send"
: status === "pending"
? "Pending…"
: status === "sending"
? "Sending…"
: "Sent",
);
statusLabel.dataset.status = status;
meta.appendChild(statusLabel);
}
wrapper.appendChild(meta);
return wrapper;
}