diff --git a/assets/css/ticket.css b/assets/css/ticket.css
index eb3ae9b..93be6ac 100644
--- a/assets/css/ticket.css
+++ b/assets/css/ticket.css
@@ -270,6 +270,42 @@ kbd {
.thread-depth-3 { margin-left: 2.25rem; }
}
+/* ── @mention autocomplete dropdown ─────────────────────────── */
+.mention-autocomplete {
+ display: none;
+ position: absolute;
+ z-index: 200;
+ background: var(--bg-overlay, #060c14);
+ border: 1px solid var(--accent-cyan-border, rgba(0,212,255,0.3));
+ box-shadow: 0 8px 24px rgba(0,0,0,0.6);
+ min-width: 200px;
+ max-width: 320px;
+}
+.mention-autocomplete.active { display: block; }
+.mention-option {
+ display: flex;
+ align-items: baseline;
+ gap: 0.5rem;
+ padding: 0.4rem 0.75rem;
+ cursor: pointer;
+ border-bottom: 1px solid var(--border-dim, rgba(0,255,65,0.1));
+ transition: background 0.1s;
+}
+.mention-option:last-child { border-bottom: none; }
+.mention-option.selected,
+.mention-option:hover {
+ background: rgba(0,212,255,0.08);
+}
+.mention-username {
+ font-size: 0.75rem;
+ font-weight: 700;
+ color: var(--accent-cyan, #00d4ff);
+}
+.mention-displayname {
+ font-size: 0.7rem;
+ color: var(--text-muted);
+}
+
/* ── Watcher avatar group in toolbar ────────────────────────── */
.lt-avatar-group {
display: flex;
diff --git a/views/DashboardView.php b/views/DashboardView.php
index 28cbbe4..feded98 100644
--- a/views/DashboardView.php
+++ b/views/DashboardView.php
@@ -365,6 +365,9 @@ include __DIR__ . '/layout_header.php';
+
+
+
@@ -502,7 +505,9 @@ include __DIR__ . '/layout_header.php';
'lt-badge-p1', 2 => 'lt-badge-p2', 3 => 'lt-badge-p3', default => 'lt-badge-p4' }; ?>
P= $pNum ?>
-
= htmlspecialchars($row['title']) ?> |
+
+ = htmlspecialchars($row['title']) ?>
+ |
= htmlspecialchars($row['category']) ?> |
= htmlspecialchars($row['type']) ?> |
@@ -518,7 +523,12 @@ include __DIR__ . '/layout_header.php';
|
= $creator ?> |
- = ($row['assigned_display_name'] ?? $row['assigned_username'] ?? null) ? $assignedTo : 'Unassigned' ?>
+
+
+ = htmlspecialchars($assigneeDisplay) ?>
+
+ Unassigned
+
|
' +
+ lt.escHtml(f.filter_name) +
+ (f.is_default ? ' ★' : '') +
+ '';
+ });
+ pillsWrap.innerHTML = html;
+ pillsWrap.style.display = 'flex';
+
+ // Wire clicks: apply filter criteria as URL params
+ pillsWrap.querySelectorAll('.saved-filter-pill').forEach(function(btn) {
+ btn.addEventListener('click', function() {
+ try {
+ var c = JSON.parse(btn.dataset.criteria);
+ var params = new URLSearchParams();
+ if (c.search) params.set('search', c.search);
+ if (c.status && c.status.length) params.set('status', c.status.join(','));
+ if (c.priority_min) params.set('priority_min', c.priority_min);
+ if (c.priority_max) params.set('priority_max', c.priority_max);
+ if (c.assigned_to) params.set('assigned_to', c.assigned_to);
+ if (c.created_by) params.set('created_by', c.created_by);
+ if (c.created_from) params.set('created_from', c.created_from);
+ if (c.created_to) params.set('created_to', c.created_to);
+ window.location.href = '/?' + params.toString();
+ } catch(e) {}
+ });
+ });
+ }).catch(function() {});
+})();
+
// Helper: get date in server timezone
function getServerDate() {
var now = new Date();
|