Releases: wexiohub/messenger-widget-angular
Releases · wexiohub/messenger-widget-angular
Release list
v1.3.1
Patch Changes
-
231e345: Fix the widget when it runs embedded inside a host app (the dashboard's live preview / the React-component embed).
- Demo content no longer breaks the host page. In demo/preview mode the mock threads, help articles and news are now read straight from the widget's bundled demo content instead of next-intl's lazy
demonamespace. Inside an embedded host (Turbopack) that lazy namespace was not visible to the demo builders, so previews rendered empty and loggedMISSING_MESSAGEfor every key, and the thread-list builder crashed the whole host page with "map is not a function". The builders are also guarded so a not-yet-resolved value degrades to empty instead of throwing. - Pickers and menus are clickable inside the Shadow DOM embed. The GIF and emoji pickers, the conversation-header overflow menu, the language selector and the composer commands popover used a document-level click-outside check against
event.target. In the Shadow DOM embed that target is retargeted to the shadow host, so every in-picker click read as "outside" and closed the popover on mousedown before the click landed (a GIF/sticker/emoji tap "fell through"). They now testevent.composedPath(), which pierces the shadow boundary and is unchanged for the iframe / standalone embeds. - team-status "online" dot alignment. The status dot is now aligned to the title's first line instead of drifting above it when operator avatars make the row taller.
- Demo content no longer breaks the host page. In demo/preview mode the mock threads, help articles and news are now read straight from the widget's bundled demo content instead of next-intl's lazy
v1.3.0
Minor Changes
-
037c210: Full two-way messaging: multi-topic threads, offline outbox, blocked visitors, richer composer, and transcript download.
Multi-topic conversation threads
- A multi-topic conversation list: the visitor can keep several topics side by side, each with its own preview, unread count, and status (open / pending / resolved). Starting a new question opens a fresh thread instead of overwriting the current one.
- The launcher badge, peek, thread list, and open thread now share one unread source, so reading a message clears it everywhere at once. Quick-reply chips render inside the launcher peek so a visitor can answer without opening the panel.
- Per-thread realtime: typing, unread, operator-handoff and status changes update the right thread live.
Blocked visitors
- Two levels of blocking are now honored on the client. Thread-level: the visitor can't reply in that thread but can still start a new one. Global (contact-level): no composer anywhere and no new conversations, with friendly copy. The block is enforced on first paint (so a blocked visitor never sees a live composer) and kept current via the realtime stream. Blocked sends are dropped from the offline queue instead of retrying forever.
Offline outbox
- A generic IndexedDB queue backs the visitor's outbound actions — message sends, reactions, read receipts, profile changes, and activity tracking. Actions taken offline (or mid-reconnect) are persisted and converge automatically when the connection returns, so nothing is silently lost.
Composer
- Rich-text editing (bold / lists / links, Markdown-aware) and a GIF / sticker picker join the existing emoji picker, file attachments, and voice recorder.
Conversation lifecycle
- Download a conversation transcript from the header.
- A clearer "conversation closed" state with a one-tap "start a new conversation".
- A connection-status footer replaces the old branding footer, so a dropped connection is visible in-thread.
Reliability
- A code-split chunk that can't be fetched (for example the voice-note player while offline) now degrades gracefully to a fallback instead of breaking the whole conversation.
Captured visitors (lazy inbox)
- A drive-by visitor no longer opens a conversation until they actually engage. When there is nothing in the inbox yet, a configured welcome message shows as a default thread the visitor can read and reply in, rather than an empty "no conversations" screen — and the proactive welcome peek + badge appear once, then clear after it is read.
- A first message (or an operator's proactive message) creates the conversation on the fly and its reply, greeting, and typing now render live in-thread — no reload, and no double launcher peek when a greeting flow is active.
- Sent-message stability: the visitor's own bubble no longer flickers (animate out then back in) when the thread refetches after a send, and switching a thread's conversation id no longer remounts the open thread.
Media message previews
- A thread whose last message is a photo, video, gif, sticker, voice note, audio, or file now shows a typed label + thumbnail in the thread list and launcher peek, instead of a blank row.
i18n
- New conversation, thread, block, and transcript strings across all supported UI locales.
No breaking changes to the package API —
publicKey,user,config, and theonOpen/onClose/onResizecallbacks are unchanged.
v1.2.4
Patch Changes
- 4215287: Re-publish to complete the release across all distribution channels (npm, the per-package dist repos, GitHub Releases, and the CDN bundle) after the 1.2.3 publish only partially completed. No functional changes from 1.2.3.
v1.2.2
Patch Changes
- 948dbaf: Fix website page-view tracking reporting the PREVIOUS page's title after a SPA navigation. The host router changes the URL synchronously but updates
document.titlea tick later, so the title was read too early. Both capture paths (the iframeloader.jsand the web-component provider) now wait for<title>to actually update (via aMutationObserver, with a short timeout fallback) before reporting, so the title matches the new URL.