settings updates, fixed

This commit is contained in:
Mark Gregory
2026-08-25 22:36:39 +01:00
parent d359ac29b6
commit 34569840ae
39 changed files with 3007 additions and 7 deletions
@@ -1005,3 +1005,263 @@ span.flatpickr-weekday {
flex-direction: column;
justify-content: center;
}
/* ==========================================================================
Helpdesk mobile / tablet responsive layer
Keeps the Core desktop presentation while making every Helpdesk screen
usable on touch devices and narrow viewports.
========================================================================== */
.hd-mobile-header {
min-height: 3.75rem;
}
@media (max-width: 1023px) {
.hd-helpdesk-surface {
max-width: 100% !important;
width: 100% !important;
}
.hd-helpdesk-surface > * {
min-width: 0;
}
}
@media (max-width: 767px) {
html,
body {
overflow-x: hidden;
}
.hd-helpdesk-surface,
.hd-helpdesk-surface.hd-mobile-ready {
width: 100%;
max-width: 100% !important;
padding-left: .75rem;
padding-right: .75rem;
margin-left: auto;
margin-right: auto;
gap: 1rem;
}
/* Hero/page headers */
.hd-helpdesk-surface .rounded-3xl {
border-radius: 1.15rem;
}
.hd-helpdesk-surface .bg-gradient-to-br {
padding: 1.1rem !important;
}
.hd-helpdesk-surface .bg-gradient-to-br h1 {
font-size: 1.65rem !important;
line-height: 1.15 !important;
}
.hd-helpdesk-surface .bg-gradient-to-br p {
max-width: 100% !important;
}
/* All action rows become thumb-friendly full-width grids. */
.hd-helpdesk-surface .hd-btn {
min-height: 2.75rem;
justify-content: center;
width: 100%;
padding-inline: .9rem;
}
.hd-helpdesk-surface .bg-gradient-to-br .flex.flex-wrap.gap-2 {
display: grid !important;
grid-template-columns: repeat(2, minmax(0, 1fr));
width: 100%;
gap: .55rem !important;
}
/* Dashboard metrics */
.hd-helpdesk-surface .grid.md\:grid-cols-2,
.hd-helpdesk-surface .grid.lg\:grid-cols-4,
.hd-helpdesk-surface .grid.xl\:grid-cols-4 {
grid-template-columns: 1fr !important;
}
/* Settings cards: two compact coloured cards per row, one on very small phones. */
.hd-core-settings > .grid,
.hd-helpdesk-surface[dusk="helpdesk-settings-manager"] > .grid {
grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
gap: .55rem !important;
}
.hd-core-settings > .grid > a,
.hd-helpdesk-surface[dusk="helpdesk-settings-manager"] > .grid > a {
min-width: 0;
min-height: 4.4rem;
padding: .75rem !important;
border-radius: .8rem !important;
}
.hd-core-settings > .grid > a .text-2xl,
.hd-helpdesk-surface[dusk="helpdesk-settings-manager"] > .grid > a .text-2xl {
font-size: 1.25rem !important;
}
/* Configuration forms */
.hd-core-settings form .grid,
.hd-helpdesk-surface form .grid {
grid-template-columns: 1fr !important;
}
.hd-core-settings input,
.hd-core-settings select,
.hd-core-settings textarea,
.hd-helpdesk-surface input,
.hd-helpdesk-surface select,
.hd-helpdesk-surface textarea {
min-height: 2.8rem;
font-size: 16px !important; /* prevents iOS input zoom */
}
.hd-helpdesk-surface textarea {
min-height: 8rem;
}
/* Search/filter bars */
.hd-helpdesk-surface .grid.md\:grid-cols-4,
.hd-helpdesk-surface .grid.lg\:grid-cols-4,
.hd-helpdesk-surface .grid.xl\:grid-cols-4 {
grid-template-columns: 1fr !important;
}
/* Tables remain usable rather than crushing columns. */
.hd-helpdesk-surface .overflow-x-auto,
.hd-core-settings .overflow-x-auto {
-webkit-overflow-scrolling: touch;
scrollbar-width: thin;
}
.hd-helpdesk-surface table,
.hd-core-settings table {
min-width: 760px;
}
.hd-helpdesk-surface th,
.hd-helpdesk-surface td,
.hd-core-settings th,
.hd-core-settings td {
white-space: nowrap;
}
/* Ticket list table gets a slightly smaller minimum than config tables. */
.hd-helpdesk-surface[dusk="helpdesk-ticket-index"] table {
min-width: 680px;
}
/* Action button groups wrap instead of overflowing. */
.hd-helpdesk-surface td .flex,
.hd-core-settings td .flex {
flex-wrap: wrap;
}
/* Ticket show page */
.hd-helpdesk-surface .xl\:grid-cols-\[minmax\(0\,1fr\)_20rem\],
.hd-helpdesk-surface .lg\:grid-cols-\[minmax\(0\,1fr\)_20rem\] {
grid-template-columns: 1fr !important;
}
/* Attachments/code blocks/content */
.hd-helpdesk-surface pre,
.hd-helpdesk-surface code,
.hd-helpdesk-surface .prose {
max-width: 100%;
overflow-x: auto;
word-break: break-word;
}
/* Kanban: touch-friendly horizontal lanes with scroll snapping. */
[data-helpdesk-kanban-board] {
display: flex !important;
gap: .75rem !important;
overflow-x: auto !important;
overscroll-behavior-inline: contain;
scroll-snap-type: x mandatory;
scroll-padding-left: .75rem;
padding-bottom: 1rem !important;
margin-inline: -.75rem;
padding-inline: .75rem;
-webkit-overflow-scrolling: touch;
}
[data-helpdesk-kanban-board] > section {
width: min(88vw, 330px) !important;
min-width: min(88vw, 330px) !important;
min-height: calc(100dvh - 16rem) !important;
scroll-snap-align: start;
border-radius: 1rem !important;
}
[data-helpdesk-kanban-column] {
min-height: 24rem !important;
}
[data-helpdesk-kanban-ticket] {
cursor: default !important;
touch-action: pan-y;
}
.hd-kanban-mobile-move {
display: block;
}
/* Board selector */
.hd-select-wrap,
.hd-ticket-board-select-wrap {
width: 100% !important;
}
/* Modal/dialog safety */
[role="dialog"],
[data-flux-modal] {
max-width: calc(100vw - 1.5rem) !important;
max-height: calc(100dvh - 1.5rem) !important;
overflow-y: auto;
}
}
@media (max-width: 479px) {
.hd-helpdesk-surface,
.hd-helpdesk-surface.hd-mobile-ready {
padding-left: .55rem;
padding-right: .55rem;
}
.hd-helpdesk-surface .bg-gradient-to-br .flex.flex-wrap.gap-2 {
grid-template-columns: 1fr;
}
.hd-core-settings > .grid,
.hd-helpdesk-surface[dusk="helpdesk-settings-manager"] > .grid {
grid-template-columns: 1fr !important;
}
[data-helpdesk-kanban-board] > section {
width: 91vw !important;
min-width: 91vw !important;
}
.hd-helpdesk-surface .text-3xl,
.hd-helpdesk-surface .text-4xl {
font-size: 1.55rem !important;
}
}
/* Touch-only devices: rely on mobile status selector instead of requiring DnD. */
@media (hover: none) and (pointer: coarse) {
[data-helpdesk-kanban-ticket] {
-webkit-user-drag: none;
user-select: none;
}
.hd-kanban-mobile-move {
display: block !important;
}
}
@@ -85,7 +85,7 @@
</flux:sidebar>
<!-- Mobile User Menu -->
<flux:header class="lg:hidden">
<flux:header class="hd-mobile-header lg:hidden">
<flux:sidebar.toggle
class="lg:hidden"
icon="bars-2"
@@ -1,4 +1,4 @@
<div class="hd-helpdesk-surface mx-auto max-w-[1800px] space-y-6" dusk="helpdesk-kanban-board"
<div class="hd-helpdesk-surface hd-mobile-ready mx-auto max-w-[1800px] space-y-6" dusk="helpdesk-kanban-board"
wire:poll.visible.5s="refreshBoard" wire:key="helpdesk-kanban-root">
<div
class="overflow-hidden rounded-3xl border border-zinc-200 bg-white shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
@@ -197,6 +197,32 @@
SLA breach</div>
@endif
@can('update', $ticket)
<div class="hd-kanban-mobile-move mt-3 md:hidden">
<label
for="mobile-status-{{ $ticket->id }}"
class="mb-1.5 block text-[11px] font-bold uppercase tracking-wide text-zinc-500 dark:text-zinc-400"
>
Move to status
</label>
<select
id="mobile-status-{{ $ticket->id }}"
class="hd-select w-full"
wire:change="moveTicket({{ $ticket->id }}, $event.target.value)"
aria-label="Move {{ $ticket->reference }} to another status"
>
@foreach ($statuses as $mobileStatus)
<option
value="{{ $mobileStatus->id }}"
@selected((int) $ticket->status_id === (int) $mobileStatus->id)
>
{{ $mobileStatus->name }}
</option>
@endforeach
</select>
</div>
@endcan
<div
class="mt-4 flex items-center justify-between gap-2 border-t border-zinc-100 pt-3 dark:border-zinc-800">
<a href="{{ route('helpdesk.tickets.show', $ticket) }}" wire:navigate
@@ -19,7 +19,7 @@
$products = collect($products ?? []);
@endphp
<div class="hd-helpdesk-surface hd-core-settings space-y-4" dusk="helpdesk-settings-manager">
<div class="hd-helpdesk-surface hd-mobile-ready hd-core-settings space-y-4" dusk="helpdesk-settings-manager">
<div
class="overflow-hidden rounded-2xl border border-zinc-200 bg-white shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
<div class="bg-gradient-to-br from-slate-950 via-slate-900 to-blue-950 px-5 py-5 text-white">
@@ -5,7 +5,7 @@
->unique()
->implode(',');
@endphp
<div class="hd-helpdesk-surface space-y-6" dusk="helpdesk-ticket-create" x-data="{ helpdeskAttachmentsUploading: false }">
<div class="hd-helpdesk-surface hd-mobile-ready space-y-6" dusk="helpdesk-ticket-create" x-data="{ helpdeskAttachmentsUploading: false }">
@include('modules.helpdesk.partials.page-header', [
'eyebrow' => 'Helpdesk',
'title' => 'Create ticket',
@@ -1,4 +1,4 @@
<div class="hd-helpdesk-surface space-y-6" dusk="helpdesk-ticket-index">
<div class="hd-helpdesk-surface hd-mobile-ready space-y-6" dusk="helpdesk-ticket-index">
<div
class="overflow-hidden rounded-3xl border border-zinc-200 bg-white shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
<div class="bg-gradient-to-br from-slate-950 via-slate-900 to-blue-950 px-6 py-7 text-white">
@@ -23,7 +23,7 @@
@endphp
<div data-dusk="helpdesk-ticket-show" dusk="helpdesk-ticket-show" class="hd-helpdesk-surface space-y-4">
<div data-dusk="helpdesk-ticket-show" dusk="helpdesk-ticket-show" class="hd-helpdesk-surface hd-mobile-ready space-y-4">
<div
class="overflow-hidden rounded-2xl border border-zinc-200 bg-white shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
<div class="bg-gradient-to-br from-slate-950 via-slate-900 to-blue-950 px-5 py-4 text-white">