feature/VSN-2860 - resolve 15 UI bugs across ticket management module && Fix unread counter, duplicate message bubble, mini back navigation in chat.
Tickets :
- Fix search firing on every keystroke (debounce + instant client-side filter)
- Fix client-side filter using debouncedSearch instead of raw search (1-letter bug)
- Add "Sélectionner tout" to team MultiSelect in CreateTicketModal
- Add dirty-check confirmation banner on modal close with unsaved changes
- Fix KPI auto-refresh in GlobalTicketsPage (refreshAll pattern)
- Fix KPI/Kanban count mismatch in GlobalTicketsPage (use filtered tickets.length)
- Fix team selection reset on page refresh (sessionStorage persistence)
- Add assignedTo filter dropdown in GlobalTicketsPage advanced filters
- Fix refresh button in GlobalTicketsPage (missing label + calling refreshAll)
- Add inline save confirmation banner in TicketPanel after edit
- Add "Assigné à moi" as first option in collaborator list (sort self first)
- Auto-assign ticket to current user when assignedTo left empty
- Make assignedTo field optional in ticket schema + auto-select self on load
- Fix board onStatusChange to call refreshAll (KPIs stay in sync after drag)
- Fix pagination filtered count display (shows "X filtrés sur Y" when active)
Chat :
- Fixed a stale closure bug in useMessages.ts where userId = null at listener registration caused sent messages to render as both sent and received.
- Fixed the unread counter in useConversation.ts by reading activeConversation directly from the Zustand store instead of a potentially stale ref.
- Fixed mini-mode back navigation in ChatWidget.tsx by also clearing activeConversation on back, preventing the conversation panel from re-mounting immediately.
Closes VSN-2860