Jira 27 #92

Merged
NiekRabelink merged 1 commits from dev into main 2026-09-15 20:39:11 +00:00
+141 -117
View File
@@ -517,136 +517,27 @@ $currentUserEmailJson = json_encode($currentUserEmail, JSON_HEX_TAG | JSON_HEX_A
</div>
</div>
<!-- Hoofdbalk: Project Switcher, Wachtrijen, Tabs & Status Filtering -->
<!-- Hoofdbalk: Project Switcher met Dropdown Pijltjes voor Status Settings & Uitvoerder -->
<div class="fociz-card relative z-30 p-4 sm:p-5 space-y-4 shadow-sm border border-slate-200/80 dark:border-slate-800 overflow-visible">
<!-- Prominente Project Switcher (Toegewezen Projecten: SD, GEN, IN, etc.) -->
<div class="flex flex-col md:flex-row md:items-center justify-between gap-3 pb-3 border-b border-slate-100 dark:border-slate-800/80">
<!-- Bovenste balk: Titel links, Zoekveld + Reset rechts -->
<div class="flex flex-col sm:flex-row sm:items-center justify-between gap-3 pb-3 border-b border-slate-100 dark:border-slate-800/80">
<div class="flex items-center space-x-2.5">
<div class="w-7 h-7 rounded-lg bg-indigo-50 dark:bg-indigo-950/60 text-indigo-600 dark:text-indigo-400 flex items-center justify-center font-bold">
<div class="w-7 h-7 rounded-lg bg-indigo-50 dark:bg-indigo-950/60 text-indigo-600 dark:text-indigo-400 flex items-center justify-center font-bold flex-shrink-0">
<i data-lucide="layers" class="w-4 h-4"></i>
</div>
<div>
<span class="text-xs font-black uppercase tracking-wider text-slate-900 dark:text-white">Projecten</span>
<p class="text-[10px] text-slate-400">Direct schakelen tussen jouw toegewezen projecten</p>
<p class="text-[10px] text-slate-400">Direct schakelen tussen projecten • Klik op het pijltje voor status instellingen &amp; uitvoerder</p>
</div>
</div>
<div class="flex flex-wrap items-center gap-1.5" id="projectPillsContainer">
<button type="button" onclick="selectProject('')" data-project="" class="project-pill flex items-center space-x-1.5 px-2.5 sm:px-3 py-1.5 rounded-xl text-xs font-bold transition cursor-pointer bg-slate-900 dark:bg-white text-white dark:text-slate-900 shadow-xs flex-shrink-0">
<i data-lucide="grid" class="w-3.5 h-3.5"></i>
<span>Alle<span class="hidden sm:inline"> Projecten</span></span>
<span id="projCount_all" class="px-1.5 py-0.5 rounded-full text-[10px] bg-white/20 dark:bg-slate-900/20 font-black"><?= count($allIssues) ?></span>
</button>
<?php
$hasUserAssignments = !empty($userQueueFilters);
$isCodeVisible = function(string $code) use ($hasUserAssignments, $userQueueFilters): bool {
if (!$hasUserAssignments) return true;
return in_array(strtoupper(trim($code)), $userQueueFilters, true);
};
?>
<!-- SD: Servicedesk -->
<?php if ($isCodeVisible('SD')): ?>
<button type="button" onclick="selectProject('SD')" data-project="SD" class="project-pill flex items-center space-x-1.5 px-2.5 sm:px-3 py-1.5 rounded-xl text-xs font-bold transition cursor-pointer bg-sky-50 dark:bg-sky-950/40 text-sky-800 dark:text-sky-300 hover:bg-sky-100 dark:hover:bg-sky-900/60 border border-sky-300 dark:border-sky-800 flex-shrink-0">
<span class="px-1.5 py-0.5 rounded font-mono text-[10px] font-black bg-sky-200 dark:bg-sky-800 text-sky-900 dark:text-sky-100">SD</span>
<span class="hidden sm:inline">Servicedesk</span>
<span id="projCount_SD" class="px-1.5 py-0.5 rounded-full text-[10px] bg-sky-200/80 dark:bg-sky-800/80 font-bold">0</span>
</button>
<?php endif; ?>
<!-- GEN: General -->
<?php if ($isCodeVisible('GEN')): ?>
<button type="button" onclick="selectProject('GEN')" data-project="GEN" class="project-pill flex items-center space-x-1.5 px-2.5 sm:px-3 py-1.5 rounded-xl text-xs font-bold transition cursor-pointer bg-indigo-50 dark:bg-indigo-950/40 text-indigo-800 dark:text-indigo-300 hover:bg-indigo-100 dark:hover:bg-indigo-900/60 border border-indigo-300 dark:border-indigo-800 flex-shrink-0">
<span class="px-1.5 py-0.5 rounded font-mono text-[10px] font-black bg-indigo-200 dark:bg-indigo-800 text-indigo-900 dark:text-indigo-100">GEN</span>
<span class="hidden sm:inline">General</span>
<span id="projCount_GEN" class="px-1.5 py-0.5 rounded-full text-[10px] bg-indigo-200/80 dark:bg-indigo-800/80 font-bold">0</span>
</button>
<?php endif; ?>
<!-- IN: Interfaces -->
<?php if ($isCodeVisible('IN')): ?>
<button type="button" onclick="selectProject('IN')" data-project="IN" class="project-pill flex items-center space-x-1.5 px-2.5 sm:px-3 py-1.5 rounded-xl text-xs font-bold transition cursor-pointer bg-amber-50 dark:bg-amber-950/40 text-amber-800 dark:text-amber-300 hover:bg-amber-100 dark:hover:bg-amber-900/60 border border-amber-300 dark:border-amber-800 flex-shrink-0">
<span class="px-1.5 py-0.5 rounded font-mono text-[10px] font-black bg-amber-200 dark:bg-amber-800 text-amber-900 dark:text-amber-100">IN</span>
<span class="hidden sm:inline">Interfaces</span>
<span id="projCount_IN" class="px-1.5 py-0.5 rounded-full text-[10px] bg-amber-200/80 dark:bg-amber-800/80 font-bold">0</span>
</button>
<?php endif; ?>
<!-- AAN: Aanvragen -->
<?php if ($isCodeVisible('AAN')): ?>
<button type="button" onclick="selectProject('AAN')" data-project="AAN" class="project-pill flex items-center space-x-1.5 px-2.5 sm:px-3 py-1.5 rounded-xl text-xs font-bold transition cursor-pointer bg-emerald-50 dark:bg-emerald-950/40 text-emerald-800 dark:text-emerald-300 hover:bg-emerald-100 dark:hover:bg-emerald-900/60 border border-emerald-300 dark:border-emerald-800 flex-shrink-0">
<span class="px-1.5 py-0.5 rounded font-mono text-[10px] font-black bg-emerald-200 dark:bg-emerald-800 text-emerald-900 dark:text-emerald-100">AAN</span>
<span class="hidden sm:inline">Aanvragen</span>
<span id="projCount_AAN" class="px-1.5 py-0.5 rounded-full text-[10px] bg-emerald-200/80 dark:bg-emerald-800/80 font-bold">0</span>
</button>
<?php endif; ?>
<!-- DX: DX Koppelingen -->
<?php if ($isCodeVisible('DX')): ?>
<button type="button" onclick="selectProject('DX')" data-project="DX" class="project-pill flex items-center space-x-1.5 px-2.5 sm:px-3 py-1.5 rounded-xl text-xs font-bold transition cursor-pointer bg-amber-50 dark:bg-amber-950/40 text-amber-800 dark:text-amber-300 hover:bg-amber-100 dark:hover:bg-amber-900/60 border border-amber-300 dark:border-amber-800 flex-shrink-0">
<i data-lucide="zap" class="w-3.5 h-3.5 text-amber-500"></i>
<span>DX</span>
<span id="projCount_DX" class="px-1.5 py-0.5 rounded-full text-[10px] bg-amber-200/80 dark:bg-amber-800/80 font-bold">0</span>
</button>
<?php endif; ?>
<!-- Overige geconfigureerde projectfilters -->
<?php foreach ($queueFilters as $qf):
$qCode = strtoupper(trim($qf['filter_code'] ?? ''));
if (in_array($qCode, ['SD', 'IN', 'AAN', 'GEN', 'DX'], true)) continue;
if (!$isCodeVisible($qCode)) continue;
?>
<button type="button" onclick="selectProject('<?= htmlspecialchars(addslashes($qCode)) ?>')" data-project="<?= htmlspecialchars($qCode) ?>" class="project-pill flex items-center space-x-1.5 px-2.5 sm:px-3 py-1.5 rounded-xl text-xs font-bold transition cursor-pointer bg-white dark:bg-slate-800 text-slate-700 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700 border border-slate-200 dark:border-slate-700 flex-shrink-0">
<span class="px-1.5 py-0.5 rounded font-mono text-[10px] font-black bg-slate-200 dark:bg-slate-700"><?= htmlspecialchars($qCode) ?></span>
<span class="hidden sm:inline"><?= htmlspecialchars($qf['filter_name']) ?></span>
<span id="projCount_<?= htmlspecialchars($qCode) ?>" class="px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-slate-100 dark:bg-slate-700 text-slate-600 dark:text-slate-300">0</span>
</button>
<?php endforeach; ?>
<?php if ($isAdmin): ?>
<a href="/admin.php#projects" title="Wachtrijen & Projecten beheren in Beheer" class="p-1.5 rounded-lg text-slate-400 hover:text-slate-700 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800 transition cursor-pointer flex-shrink-0">
<i data-lucide="settings" class="w-3.5 h-3.5"></i>
</a>
<?php endif; ?>
</div>
</div>
<!-- Rij 2: Status Filters PER Project (Direct onder de projectknoppen) & Zoekveld -->
<div class="flex flex-col md:flex-row md:items-center justify-between gap-3 pt-0.5 relative z-30">
<!-- Linkerkant: Status Dropdowns PER Project -->
<div class="flex flex-wrap items-center gap-2 relative z-50">
<div class="flex items-center space-x-1.5 text-slate-400 dark:text-slate-500 mr-0.5 flex-shrink-0">
<i data-lucide="filter" class="w-3.5 h-3.5 text-indigo-500"></i>
<span class="text-[11px] font-bold uppercase tracking-wider">Status:</span>
</div>
<!-- Hier worden de status dropdowns per project dynamisch ingeladen -->
<div id="projectStatusDropdownsWrapper" class="flex flex-wrap items-center gap-2">
</div>
<!-- Snelle optie: Toegewezen aan mij (uitvoerder) per geselecteerd project -->
<button type="button"
id="btnToggleAssignedToMePill"
onclick="toggleCurrentProjectOnlyAssigned()"
class="flex items-center space-x-1.5 px-2.5 sm:px-3 py-1.5 rounded-xl text-xs font-semibold border transition cursor-pointer shadow-2xs flex-shrink-0 bg-white dark:bg-slate-900 border-slate-200 dark:border-slate-700 text-slate-700 dark:text-slate-300 hover:border-slate-300 dark:hover:border-slate-600"
title="Filter op taken toegewezen aan mijzelf (uitvoerder)">
<i data-lucide="user-check" class="w-3.5 h-3.5 text-indigo-500 flex-shrink-0"></i>
<span id="labelAssignedToMePill">Toegewezen aan mij <span class="hidden sm:inline">(uitvoerder)</span></span>
<span id="badgeAssignedToMeCount" class="px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300">0</span>
</button>
<!-- Actieve filters reset knop als er iets gefilterd is -->
<button type="button" onclick="resetAllFilters()" id="btnResetFiltersInline" class="hidden flex items-center space-x-1 px-2.5 py-1.5 rounded-xl text-xs font-semibold text-slate-500 hover:text-slate-800 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800 transition cursor-pointer">
<div class="flex items-center space-x-2 w-full sm:w-auto">
<button type="button" onclick="resetAllFilters()" id="btnResetFiltersInline" class="hidden flex items-center space-x-1 px-2.5 py-1.5 rounded-xl text-xs font-semibold text-slate-500 hover:text-slate-800 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800 transition cursor-pointer flex-shrink-0">
<i data-lucide="rotate-ccw" class="w-3 h-3"></i>
<span>Filters wissen</span>
</button>
</div>
<!-- Rechterkant: Zoekveld -->
<div class="relative w-full md:w-64 flex-shrink-0">
<div class="relative w-full sm:w-64 flex-shrink-0">
<i data-lucide="search" class="w-3.5 h-3.5 text-slate-400 absolute left-2.5 top-1/2 -translate-y-1/2 pointer-events-none"></i>
<input
type="text"
@@ -660,6 +551,139 @@ $currentUserEmailJson = json_encode($currentUserEmail, JSON_HEX_TAG | JSON_HEX_A
</button>
</div>
</div>
</div>
<!-- Project Knoppen met direct ingebouwde dropdowns voor statusinstellingen & uitvoerder -->
<div class="flex flex-wrap items-center gap-2 relative z-50" id="projectPillsContainer">
<?php
$hasUserAssignments = !empty($userQueueFilters);
$isCodeVisible = function(string $code) use ($hasUserAssignments, $userQueueFilters): bool {
if (!$hasUserAssignments) return true;
return in_array(strtoupper(trim($code)), $userQueueFilters, true);
};
?>
<!-- Alle Projecten -->
<div class="relative inline-flex items-stretch rounded-xl shadow-xs group flex-shrink-0 project-pill-container" data-project="" id="projGroup_all">
<button type="button" onclick="selectProject('')" data-project="" class="project-pill-btn flex items-center space-x-1.5 pl-2.5 sm:pl-3 pr-2 py-1.5 rounded-l-xl text-xs font-bold transition cursor-pointer bg-slate-900 dark:bg-white text-white dark:text-slate-900">
<i data-lucide="grid" class="w-3.5 h-3.5"></i>
<span>Alle<span class="hidden sm:inline"> Projecten</span></span>
<span id="projCount_all" class="px-1.5 py-0.5 rounded-full text-[10px] bg-white/20 dark:bg-slate-900/20 font-black"><?= count($allIssues) ?></span>
</button>
<button type="button" onclick="toggleProjectDropdown('all', event)" id="btnProjectArrow_all" class="project-pill-arrow px-2 py-1.5 flex items-center justify-center rounded-r-xl border-l border-white/20 dark:border-slate-800 text-white dark:text-slate-900 hover:bg-white/10 dark:hover:bg-black/10 transition cursor-pointer relative" title="Status instellingen voor Alle Projecten" aria-expanded="false">
<i data-lucide="chevron-down" id="projChevron_all" class="w-3.5 h-3.5 transition-transform duration-200"></i>
<span id="projFilterActiveDot_all" class="hidden absolute top-1 right-1 w-1.5 h-1.5 rounded-full bg-amber-400 ring-1 ring-white dark:ring-slate-900"></span>
</button>
<div id="projectDropdownMenu_all" class="hidden project-dropdown-menu absolute left-0 top-full mt-2 w-72 sm:w-80 max-w-[calc(100vw-2rem)] bg-white dark:bg-slate-900 rounded-2xl shadow-2xl border border-slate-200 dark:border-slate-800 py-3 px-3.5 z-50 text-xs space-y-2.5"></div>
</div>
<!-- SD: Servicedesk -->
<?php if ($isCodeVisible('SD')): ?>
<div class="relative inline-flex items-stretch rounded-xl shadow-xs group flex-shrink-0 project-pill-container" data-project="SD" id="projGroup_SD">
<button type="button" onclick="selectProject('SD')" data-project="SD" class="project-pill-btn flex items-center space-x-1.5 pl-2.5 sm:pl-3 pr-2 py-1.5 rounded-l-xl text-xs font-bold transition cursor-pointer bg-sky-50 dark:bg-sky-950/40 text-sky-800 dark:text-sky-300 border border-sky-300 dark:border-sky-800 border-r-0">
<span class="px-1.5 py-0.5 rounded font-mono text-[10px] font-black bg-sky-200 dark:bg-sky-800 text-sky-900 dark:text-sky-100">SD</span>
<span class="hidden sm:inline">Servicedesk</span>
<span id="projCount_SD" class="px-1.5 py-0.5 rounded-full text-[10px] bg-sky-200/80 dark:bg-sky-800/80 font-bold">0</span>
</button>
<button type="button" onclick="toggleProjectDropdown('SD', event)" id="btnProjectArrow_SD" class="project-pill-arrow px-2 py-1.5 flex items-center justify-center rounded-r-xl border border-sky-300 dark:border-sky-800 border-l-sky-200 dark:border-l-sky-800 text-sky-700 dark:text-sky-300 hover:bg-sky-100 dark:hover:bg-sky-900/60 transition cursor-pointer relative" title="Status instellingen voor Servicedesk" aria-expanded="false">
<i data-lucide="chevron-down" id="projChevron_SD" class="w-3.5 h-3.5 transition-transform duration-200"></i>
<span id="projFilterActiveDot_SD" class="hidden absolute top-1 right-1 w-1.5 h-1.5 rounded-full bg-amber-400 ring-1 ring-white dark:ring-slate-900"></span>
</button>
<div id="projectDropdownMenu_SD" class="hidden project-dropdown-menu absolute left-0 top-full mt-2 w-72 sm:w-80 max-w-[calc(100vw-2rem)] bg-white dark:bg-slate-900 rounded-2xl shadow-2xl border border-slate-200 dark:border-slate-800 py-3 px-3.5 z-50 text-xs space-y-2.5"></div>
</div>
<?php endif; ?>
<!-- GEN: General -->
<?php if ($isCodeVisible('GEN')): ?>
<div class="relative inline-flex items-stretch rounded-xl shadow-xs group flex-shrink-0 project-pill-container" data-project="GEN" id="projGroup_GEN">
<button type="button" onclick="selectProject('GEN')" data-project="GEN" class="project-pill-btn flex items-center space-x-1.5 pl-2.5 sm:pl-3 pr-2 py-1.5 rounded-l-xl text-xs font-bold transition cursor-pointer bg-indigo-50 dark:bg-indigo-950/40 text-indigo-800 dark:text-indigo-300 border border-indigo-300 dark:border-indigo-800 border-r-0">
<span class="px-1.5 py-0.5 rounded font-mono text-[10px] font-black bg-indigo-200 dark:bg-indigo-800 text-indigo-900 dark:text-indigo-100">GEN</span>
<span class="hidden sm:inline">General</span>
<span id="projCount_GEN" class="px-1.5 py-0.5 rounded-full text-[10px] bg-indigo-200/80 dark:bg-indigo-800/80 font-bold">0</span>
</button>
<button type="button" onclick="toggleProjectDropdown('GEN', event)" id="btnProjectArrow_GEN" class="project-pill-arrow px-2 py-1.5 flex items-center justify-center rounded-r-xl border border-indigo-300 dark:border-indigo-800 border-l-indigo-200 dark:border-l-indigo-800 text-indigo-700 dark:text-indigo-300 hover:bg-indigo-100 dark:hover:bg-indigo-900/60 transition cursor-pointer relative" title="Status instellingen voor General" aria-expanded="false">
<i data-lucide="chevron-down" id="projChevron_GEN" class="w-3.5 h-3.5 transition-transform duration-200"></i>
<span id="projFilterActiveDot_GEN" class="hidden absolute top-1 right-1 w-1.5 h-1.5 rounded-full bg-amber-400 ring-1 ring-white dark:ring-slate-900"></span>
</button>
<div id="projectDropdownMenu_GEN" class="hidden project-dropdown-menu absolute left-0 top-full mt-2 w-72 sm:w-80 max-w-[calc(100vw-2rem)] bg-white dark:bg-slate-900 rounded-2xl shadow-2xl border border-slate-200 dark:border-slate-800 py-3 px-3.5 z-50 text-xs space-y-2.5"></div>
</div>
<?php endif; ?>
<!-- IN: Interfaces -->
<?php if ($isCodeVisible('IN')): ?>
<div class="relative inline-flex items-stretch rounded-xl shadow-xs group flex-shrink-0 project-pill-container" data-project="IN" id="projGroup_IN">
<button type="button" onclick="selectProject('IN')" data-project="IN" class="project-pill-btn flex items-center space-x-1.5 pl-2.5 sm:pl-3 pr-2 py-1.5 rounded-l-xl text-xs font-bold transition cursor-pointer bg-amber-50 dark:bg-amber-950/40 text-amber-800 dark:text-amber-300 border border-amber-300 dark:border-amber-800 border-r-0">
<span class="px-1.5 py-0.5 rounded font-mono text-[10px] font-black bg-amber-200 dark:bg-amber-800 text-amber-900 dark:text-amber-100">IN</span>
<span class="hidden sm:inline">Interfaces</span>
<span id="projCount_IN" class="px-1.5 py-0.5 rounded-full text-[10px] bg-amber-200/80 dark:bg-amber-800/80 font-bold">0</span>
</button>
<button type="button" onclick="toggleProjectDropdown('IN', event)" id="btnProjectArrow_IN" class="project-pill-arrow px-2 py-1.5 flex items-center justify-center rounded-r-xl border border-amber-300 dark:border-amber-800 border-l-amber-200 dark:border-l-amber-800 text-amber-700 dark:text-amber-300 hover:bg-amber-100 dark:hover:bg-amber-900/60 transition cursor-pointer relative" title="Status instellingen voor Interfaces" aria-expanded="false">
<i data-lucide="chevron-down" id="projChevron_IN" class="w-3.5 h-3.5 transition-transform duration-200"></i>
<span id="projFilterActiveDot_IN" class="hidden absolute top-1 right-1 w-1.5 h-1.5 rounded-full bg-amber-400 ring-1 ring-white dark:ring-slate-900"></span>
</button>
<div id="projectDropdownMenu_IN" class="hidden project-dropdown-menu absolute left-0 top-full mt-2 w-72 sm:w-80 max-w-[calc(100vw-2rem)] bg-white dark:bg-slate-900 rounded-2xl shadow-2xl border border-slate-200 dark:border-slate-800 py-3 px-3.5 z-50 text-xs space-y-2.5"></div>
</div>
<?php endif; ?>
<!-- AAN: Aanvragen -->
<?php if ($isCodeVisible('AAN')): ?>
<div class="relative inline-flex items-stretch rounded-xl shadow-xs group flex-shrink-0 project-pill-container" data-project="AAN" id="projGroup_AAN">
<button type="button" onclick="selectProject('AAN')" data-project="AAN" class="project-pill-btn flex items-center space-x-1.5 pl-2.5 sm:pl-3 pr-2 py-1.5 rounded-l-xl text-xs font-bold transition cursor-pointer bg-emerald-50 dark:bg-emerald-950/40 text-emerald-800 dark:text-emerald-300 border border-emerald-300 dark:border-emerald-800 border-r-0">
<span class="px-1.5 py-0.5 rounded font-mono text-[10px] font-black bg-emerald-200 dark:bg-emerald-800 text-emerald-900 dark:text-emerald-100">AAN</span>
<span class="hidden sm:inline">Aanvragen</span>
<span id="projCount_AAN" class="px-1.5 py-0.5 rounded-full text-[10px] bg-emerald-200/80 dark:bg-emerald-800/80 font-bold">0</span>
</button>
<button type="button" onclick="toggleProjectDropdown('AAN', event)" id="btnProjectArrow_AAN" class="project-pill-arrow px-2 py-1.5 flex items-center justify-center rounded-r-xl border border-emerald-300 dark:border-emerald-800 border-l-emerald-200 dark:border-l-emerald-800 text-emerald-700 dark:text-emerald-300 hover:bg-emerald-100 dark:hover:bg-emerald-900/60 transition cursor-pointer relative" title="Status instellingen voor Aanvragen" aria-expanded="false">
<i data-lucide="chevron-down" id="projChevron_AAN" class="w-3.5 h-3.5 transition-transform duration-200"></i>
<span id="projFilterActiveDot_AAN" class="hidden absolute top-1 right-1 w-1.5 h-1.5 rounded-full bg-amber-400 ring-1 ring-white dark:ring-slate-900"></span>
</button>
<div id="projectDropdownMenu_AAN" class="hidden project-dropdown-menu absolute left-0 top-full mt-2 w-72 sm:w-80 max-w-[calc(100vw-2rem)] bg-white dark:bg-slate-900 rounded-2xl shadow-2xl border border-slate-200 dark:border-slate-800 py-3 px-3.5 z-50 text-xs space-y-2.5"></div>
</div>
<?php endif; ?>
<!-- DX: DX Koppelingen -->
<?php if ($isCodeVisible('DX')): ?>
<div class="relative inline-flex items-stretch rounded-xl shadow-xs group flex-shrink-0 project-pill-container" data-project="DX" id="projGroup_DX">
<button type="button" onclick="selectProject('DX')" data-project="DX" class="project-pill-btn flex items-center space-x-1.5 pl-2.5 sm:pl-3 pr-2 py-1.5 rounded-l-xl text-xs font-bold transition cursor-pointer bg-amber-50 dark:bg-amber-950/40 text-amber-800 dark:text-amber-300 border border-amber-300 dark:border-amber-800 border-r-0">
<i data-lucide="zap" class="w-3.5 h-3.5 text-amber-500"></i>
<span>DX</span>
<span id="projCount_DX" class="px-1.5 py-0.5 rounded-full text-[10px] bg-amber-200/80 dark:bg-amber-800/80 font-bold">0</span>
</button>
<button type="button" onclick="toggleProjectDropdown('DX', event)" id="btnProjectArrow_DX" class="project-pill-arrow px-2 py-1.5 flex items-center justify-center rounded-r-xl border border-amber-300 dark:border-amber-800 border-l-amber-200 dark:border-l-amber-800 text-amber-700 dark:text-amber-300 hover:bg-amber-100 dark:hover:bg-amber-900/60 transition cursor-pointer relative" title="Status instellingen voor DX Koppelingen" aria-expanded="false">
<i data-lucide="chevron-down" id="projChevron_DX" class="w-3.5 h-3.5 transition-transform duration-200"></i>
<span id="projFilterActiveDot_DX" class="hidden absolute top-1 right-1 w-1.5 h-1.5 rounded-full bg-amber-400 ring-1 ring-white dark:ring-slate-900"></span>
</button>
<div id="projectDropdownMenu_DX" class="hidden project-dropdown-menu absolute left-0 top-full mt-2 w-72 sm:w-80 max-w-[calc(100vw-2rem)] bg-white dark:bg-slate-900 rounded-2xl shadow-2xl border border-slate-200 dark:border-slate-800 py-3 px-3.5 z-50 text-xs space-y-2.5"></div>
</div>
<?php endif; ?>
<!-- Overige geconfigureerde projectfilters -->
<?php foreach ($queueFilters as $qf):
$qCode = strtoupper(trim($qf['filter_code'] ?? ''));
if (in_array($qCode, ['SD', 'IN', 'AAN', 'GEN', 'DX'], true)) continue;
if (!$isCodeVisible($qCode)) continue;
?>
<div class="relative inline-flex items-stretch rounded-xl shadow-xs group flex-shrink-0 project-pill-container" data-project="<?= htmlspecialchars($qCode) ?>" id="projGroup_<?= htmlspecialchars($qCode) ?>">
<button type="button" onclick="selectProject('<?= htmlspecialchars(addslashes($qCode)) ?>')" data-project="<?= htmlspecialchars($qCode) ?>" class="project-pill-btn flex items-center space-x-1.5 pl-2.5 sm:pl-3 pr-2 py-1.5 rounded-l-xl text-xs font-bold transition cursor-pointer bg-white dark:bg-slate-800 text-slate-700 dark:text-slate-300 border border-slate-200 dark:border-slate-700 border-r-0">
<span class="px-1.5 py-0.5 rounded font-mono text-[10px] font-black bg-slate-200 dark:bg-slate-700"><?= htmlspecialchars($qCode) ?></span>
<span class="hidden sm:inline"><?= htmlspecialchars($qf['filter_name']) ?></span>
<span id="projCount_<?= htmlspecialchars($qCode) ?>" class="px-1.5 py-0.5 rounded-full text-[10px] font-bold bg-slate-100 dark:bg-slate-700 text-slate-600 dark:text-slate-300">0</span>
</button>
<button type="button" onclick="toggleProjectDropdown('<?= htmlspecialchars(addslashes($qCode)) ?>', event)" id="btnProjectArrow_<?= htmlspecialchars($qCode) ?>" class="project-pill-arrow px-2 py-1.5 flex items-center justify-center rounded-r-xl border border-slate-200 dark:border-slate-700 text-slate-600 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700 transition cursor-pointer relative" title="Status instellingen voor <?= htmlspecialchars($qf['filter_name']) ?>" aria-expanded="false">
<i data-lucide="chevron-down" id="projChevron_<?= htmlspecialchars($qCode) ?>" class="w-3.5 h-3.5 transition-transform duration-200"></i>
<span id="projFilterActiveDot_<?= htmlspecialchars($qCode) ?>" class="hidden absolute top-1 right-1 w-1.5 h-1.5 rounded-full bg-amber-400 ring-1 ring-white dark:ring-slate-900"></span>
</button>
<div id="projectDropdownMenu_<?= htmlspecialchars($qCode) ?>" class="hidden project-dropdown-menu absolute left-0 top-full mt-2 w-72 sm:w-80 max-w-[calc(100vw-2rem)] bg-white dark:bg-slate-900 rounded-2xl shadow-2xl border border-slate-200 dark:border-slate-800 py-3 px-3.5 z-50 text-xs space-y-2.5"></div>
</div>
<?php endforeach; ?>
<?php if ($isAdmin): ?>
<a href="/admin.php#projects" title="Wachtrijen & Projecten beheren in Beheer" class="p-2 rounded-xl text-slate-400 hover:text-slate-700 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800 transition cursor-pointer flex-shrink-0">
<i data-lucide="settings" class="w-3.5 h-3.5"></i>
</a>
<?php endif; ?>
</div>
</div>