Commit Graph

888 Commits

Author SHA1 Message Date
Abhinav Raut bde6f019dc Merge pull request #401 from abhinavxd/fix-dark-highlight-css-leak
fix dark-mode mention highlight leaking a yellow background
2026-07-07 23:34:51 +05:30
Abhinav Raut 8268221ea2 fix dark-mode mention highlight leaking a yellow background onto every .dark element 2026-07-07 23:26:57 +05:30
ahfoysal 27e8efb27b fix: update assignment notification state in UI 2026-07-06 16:47:20 +06:00
Abhinav Raut 3feecf4296 Merge pull request #394 from abhinavxd/minor-improvements
add livechat widget preview and misc improvements
2026-07-05 20:09:25 +05:30
Abhinav Raut 0949761d04 fix contrast threshold and cache invalidation order on login 2026-07-05 20:03:31 +05:30
Abhinav Raut 62a1fc836e add livechat widget preview and misc improvements
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.
2026-07-03 02:34:42 +05:30
Abhinav Raut 42a3b3a4b5 Merge pull request #391 from abhinavxd/roles-learn-more-link
add learn more link to roles admin page
2026-07-01 03:16:08 +05:30
dependabot[bot] a7bcd5e748 build(deps-dev): bump vite from 6.4.2 to 6.4.3 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.4.2 to 6.4.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.4.3/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.4.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.4.3
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-30 10:06:35 +00:00
Abhinav Raut 8720e37bbf add learn more link to roles admin page 2026-06-25 09:52:07 +05:30
Abhinav Raut a110d38dd8 adjusts padding in filter group builder
adds comments with sample payloads to make the filter format easier to understand
2026-06-17 15:35:05 +05:30
Abhinav Raut 85a200247b keeps filter builder Add group button visible and tidies group controls 2026-06-16 23:25:50 +05:30
Abhinav Raut 54e30e2e71 feat: disable 'Add group' in filter builder at the backend group cap 2026-06-16 16:14:12 +05:30
Abhinav Raut 20b3aec44e fix: restrict contains operator to trigram-indexed fields in view filters
contains on users.external_user_id has no trigram index and would full-scan;
only users.email keeps partial matching.
2026-06-16 16:14:12 +05:30
Abhinav Raut 95f829b37c fix: stop filter builder from mutating form state; emit immutable tree updates
Fixes typing in a filter value overwriting the whole filters object
(vee-validate listeners falling through to the builder root), the form
going stale after save/reset, and Create reusing a cancelled edit's data.
2026-06-16 16:14:12 +05:30
Abhinav Raut 6a24612412 fix: drop icon from 'Remove group' button so it doesn't draw focus 2026-06-16 16:14:12 +05:30
Abhinav Raut 496264d590 fix: separate group-remove from per-condition remove in filter builder
The group remove button sat inline with the first condition's close button (8px apart, easy to misclick). Move it to a labeled 'Remove group' header button (trash icon) so it's clearly distinct from the per-condition X.
2026-06-16 16:14:12 +05:30
Abhinav Raut 9b31e282c8 fix: reject empty filter values in query builder; tighten filter tree handling
- builder: error on value-requiring operators with empty value and on empty 'in' arrays instead of emitting invalid SQL (field IN ())
- filterTree: coerce array IDs to strings in toStringIdArray
- useConversationFilters: external_user_id uses TEXT operators (was SELECT)
- FilterGroupBuilder: strict two-level guard verifies group children are leaves
- drop orphaned partiallyFilled i18n key
- tests for empty 'in' and empty value rejection
2026-06-16 16:14:12 +05:30
Abhinav Raut 3247a3aa58 feat: support nested AND/OR filter groups and new fields in views 2026-06-16 16:14:12 +05:30
Abhinav Raut 14a812d023 Merge pull request #371 from abhinavxd/update-font
update font family to Instrument Sans
2026-06-10 23:43:08 +05:30
Abhinav Raut d300ce26e6 feat: show day separators in conversation message list
closes https://github.com/abhinavxd/libredesk/issues/376
2026-06-10 21:20:07 +05:30
Abhinav Raut edbc026a24 Merge pull request #359 from abhinavxd/transcript
feat: add conversation transcript download and CSAT in sidebar
2026-06-07 15:29:20 +05:30
Abhinav Raut 2d81703ae2 fix: address review nits on transcript download
- sanitize Content-Disposition filename via stringutil.SanitizeFilename to neutralize header injection
- use i18n.Tc for count-aware singular/plural attachment label
- append download anchor to DOM and defer URL.revokeObjectURL for cross-browser reliability
2026-06-07 15:17:03 +05:30
Abhinav Raut 1ce638e9d7 refactor: extract AssignSelfNudge component, let store own local assignee state 2026-06-07 15:01:29 +05:30
Abhinav Raut f9e044676a feat: nudge agent to self-assign after replying to an unassigned conversation 2026-06-07 14:51:03 +05:30
Abhinav Raut 1fccfceb4c feat: add customisable From display name template for outgoing emails
Adds a from_name_template field to email inboxes. When set and the sender is an agent, the template renders with agent and inbox variables and becomes the From display name; the inbox email address is unchanged. Any render failure, or a system-user sender, falls back to the plain inbox From so a misconfigured template never blocks delivery.

Variables: .Agent.FirstName, .Agent.LastName, .Agent.FullName, .Inbox.Name (the inbox name). Based on #249.

Co-authored-by: josephsellers <6892567+josephsellers@users.noreply.github.com>
2026-06-07 14:20:56 +05:30
Abhinav Raut cfed3cfc28 test: add e2e tests for inbox, team, agent and conversation flows 2026-06-07 14:06:40 +05:30
Abhinav Raut ed95b9104f refactor tidy reply box send button imports and dead code 2026-06-07 12:28:12 +05:30
Abhinav Raut 90ceece01b fix apply status update after send confirmation dialogs. 2026-06-07 12:17:29 +05:30
Abhinav Raut bf22811337 fix chevron color 2026-06-07 11:56:15 +05:30
aditya2r b679fc2158 feat: add "Send and set status" split button to reply box.
Add a dropdown next to the Send button that allows agents to send a
reply and update the conversation status in a single action.

- Add split button with dropdown to  ReplyBoxMenuBar
- Extract email validation into reusable validateBeforeSend helper
- Guard for status update on successful message send
- Exclude Snoozed from status options
2026-06-06 16:14:07 -04:00
Abhinav Raut 4f4bbbef5f Fix macro context lost via Ctrl+K and stale macro filter after new conversation 2026-06-06 21:02:25 +05:30
Abhinav Raut cb081b4b38 update font family to Instrument Sans 2026-06-06 19:58:07 +05:30
Vanboom 168add044b Address issue #363, implement CTRL+M hotkey to access the macro dialog
directly
2026-06-03 14:28:38 -05:00
Abhinav Raut eb6a195aaf feat: add conversation transcript download and CSAT in sidebar
Agents can download a full conversation as a .txt file from the
header menu. The conversation sidebar now shows the CSAT rating and
feedback once the customer responds.
2026-06-02 16:25:33 +05:30
dependabot[bot] 3f065439ff build(deps-dev): bump vitest from 3.2.2 to 4.1.0 in /frontend
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 3.2.2 to 4.1.0.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.0/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.1.0
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-01 21:34:46 +00:00
Abhinav Raut 5c5c73b5b7 soft-refresh conversation list on inbox re-entry instead of refetching 2026-06-01 13:17:26 +05:30
Abhinav Raut 97df3ba7a6 fix: remove inbox keep-alive that caused duplicate admin requests 2026-06-01 13:06:52 +05:30
dependabot[bot] 3e9a52f960 build(deps): bump axios from 1.15.2 to 1.16.0 in /frontend
Bumps [axios](https://github.com/axios/axios) from 1.15.2 to 1.16.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.15.2...v1.16.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.16.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-29 16:04:53 +00:00
Abhinav Raut 870f66c229 fix: sanitize invalid UTF-8 in incoming email, fix widget scroll flicker 2026-05-29 21:00:48 +05:30
Abhinav Raut 67ecf3a3a6 fix: keep the mentioned message in view when long messages collapse
Tall message bubbles above the target collapse to a max height right after they render. That shrank the space above and pushed the mentioned message off screen. We now re-pin the message until the layout stops moving.
2026-05-29 16:07:53 +05:30
Abhinav Raut f331b3cd8e Merge pull request #342 from jleroy/i18n/update-2026-05-26
Update translations [2025-05-26]
2026-05-29 01:13:23 +05:30
Abhinav Raut c8a5717b43 fix: filter search results by conversation read permission
Auto focus on search input
Trim search responses to 200 chars as more's not needed.
2026-05-28 21:38:57 +05:30
Jonathan Leroy a318b52b5c Update translations [2025-05-26] 2026-05-28 17:47:44 +02:00
Abhinav Raut 5594cce021 Merge pull request #341 from abhinavxd/widget-ws-improvements
fix: reliably sync widget missed messages on reconnect
2026-05-28 20:48:30 +05:30
Abhinav Raut 9159c26d5f fix: clean up widget ws state on close and announce banner to screen readers 2026-05-28 20:40:54 +05:30
Abhinav Raut bba99d45e5 fix: show typing indicator on scroll, hide view transition abort errors 2026-05-28 20:29:14 +05:30
Abhinav Raut 9480e98d1a Merge pull request #336 from abhinavxd/adhoc-patch-1
perf: WS push for conv list, store/cache cleanups, ad-hoc UI polish, adhoc fixes.
2026-05-28 20:20:18 +05:30
Abhinav Raut 29881f2f82 fix: close ws stale-perm gaps and resub on reconnect
Reject disabled agents in FilterAuthorizedListUUIDs, kick role members on
permission removal or role delete, and re-sub the list and open conv on
ws reconnect using local state. Also plug the app logger into the ws
package so kicks no longer log when no connections exist.
2026-05-28 20:07:19 +05:30
Abhinav Raut 74e2213e75 fix: auto-resub list when conv uuids change 2026-05-28 19:30:01 +05:30
Abhinav Raut 743b00ee22 fix: address PR review across stores, ws broadcast, and sticky scroll 2026-05-28 18:32:16 +05:30