The widget's UI language was either the inbox's fixed language or, on
"auto", the browser's. Host apps with their own language switch had no
way to tell the widget which language their user picked.
- widget.js: an optional `language` setting (LibredeskSettings or
initLibredesk) is passed to the iframe as `lang`, and
`Libredesk.setLanguage(code)` switches it later. A call made while the
iframe is still loading is sent once it reports WIDGET_LOADED.
- main.js: on inboxes set to "auto", a `lang` the host passed wins over
the browser language; a language the admin fixed for the inbox stays.
- App.vue: SET_LANGUAGE loads the strings and switches the i18n locale in
place (help center content reloads in the new language), so an open
conversation is not reset.
- Short or regional tags match a shipped translation: zh -> zh-CN,
de-AT -> de-DE.
Closes#657
Reduce the inbox form to five grouped tabs and add a responsive live preview.
Add separate light and dark branding with system theme support.
Add launcher size and logo scale controls. Ref #627
Fix realtime message ordering in the agent dashboard. Fixes#626
- handoff form no longer overwrites a JWT contact's name, email or phone.
The CRM resyncs those on every exchange, so the edit reverted anyway.
Visitors still get their submitted values saved.
- search queries dropped the cs and cp table aliases. Any saved view
filtering on conversation_statuses.name returned a 500.
- status and priority never showed as selected in the search filters.
The combobox compares strings, the store gives numbers.
- widget logout left the previous visitor's pre chat draft on screen.
- an auto hidden campaign preview was suppressed forever instead of for
the session.
- switching campaigns in the admin preview did not close the open panel.
The watcher only saw null and non null, so it now keys on campaign id.
- the Help tab blanked out when featured_ids came back as null.
- copilot panel spinner stuck when no conversation was open.
- help center theme toggle was hidden when there were no nav links and
one locale.
- help center dark mode leaked into the article panel inside the widget.
Widget:
- home background stays pinned while the content scrolls, fade sits on it
- one radius and shadow scale across cards, buttons and inputs
- live search in the help tab with a "no results" state
- attachment-only messages show "Image" in the conversation preview
- launcher and panel use the same shadows as the header
Admin:
- preview column is a fixed width so zoom does not resize it, hidden on small screens
- preview matches the real widget again
- search spinner replaces the magnifier instead of covering the page
Fixes:
- deleting a proactive message did nothing, the dialog cleared the pending
id before the handler read it
- an inbox created through the API could not be saved from the form, it
jumped to the pre-chat tab with no error
Adds livechatWidgetTabs.cy.js covering the proactive message and help
center tabs.
The launcher grows a little on hover and springs back when the pointer
leaves. Also adds a black launcher logo for light backgrounds, softens
the launcher shadow, and expands the widget when help opens on an article.
Move the translation_group_id migration into v2.9.0 and drop the slug backfill. Existing articles each get their own group and admins link translations from the new UI. The public article page now builds its language links from the group instead of the slug, so translations with different slugs no longer 404.
Expand widget conversations with audience-specific forms, AI handoffs, message previews, and help article translations. Keep existing inbox settings compatible and reject invalid live chat configuration.
contrastColor() fed raw sRGB channel values straight into the WCAG
relative-luminance formula and compared the result against the 0.179
threshold. That threshold assumes gamma-corrected (linear) values, so
without the correction dark colors like #333333 were scored as bright
enough for black text, producing black-on-dark-background icons.
Fixes#351
Draft attachments now keep url and disposition, so a restored draft can render its attachments correctly instead of losing them.
The prechat phone field now picks a country code from the browser locale when the field is required (falling back to US), so users are not forced to pick one manually. Non-required phone fields still start blank.
Also soften the widget iframe and launcher bubble box shadows to a lighter, tinted look.
Livechat:
- Add a live widget preview that renders in the inbox settings help rail.
- Warn when the primary or header colors are too close to the background.
- Require gradient/image background values and notice banner text when enabled.
- Show a default launcher logo in the widget when none is set, matching the preview.
- Drop the Beta badge from the livechat channel.
General settings:
- Add "set agents away on login". Agents log in as away and must go online manually.
- Add "show subject in conversation list" toggle.
Other:
- Add a keyboard shortcuts dialog from the user menu.
- Show a "snoozed until" badge on snoozed conversations.
- Contact search now matches emails partially instead of exact.
- Give outgoing message bubbles a secondary background.
- Refactor widget.js.
- Fix possible race conditions in inbox reload logic.
- Reload only the updated inbox when an inbox is updated / created not all.
- Retain last inbox while navigatin back from admin -> inbox
showChat() unconditionally hides the unread badge, but hideChat()
never re-evaluates it. If the visitor opens and closes the widget
without viewing any conversation, the badge stays hidden even though
unread messages remain.
- Continuity email layout fixes and improvments.
- Replace haikunator with email local part for visitor names, fallback to "Visitor"
- Add optional website_url config field for "go to chat" link in continuity email footer
- Remove unused / unncessary i18n keys.
- fix duplicate initialization guard
- notification bell for agents
- Refactor and clean up dead code
- Fixes to pre chat form
- Add new column country to users table
- Update ratelimit pkg to be generic
- fix: live chat email inbox not being initialized.
- make launcher logo take entire launcher space.
- New columns last_interaction_sender_id and last_message_sender_id to track who sent last message in conversation