{{-- Inbox workspace — three direct children inside this root: 1. Views column (w-60 shrink-0) 2. Ticket list column (w-80 shrink-0) 3. Conversation pane (flex-1 min-w-0) The Conversation child renders the 4th column (right context) inside the pane. Width-collapse guards: - root has `min-w-0 overflow-hidden` so flex children that contain long text don't push the page wider than the viewport. - each fixed-width column has `shrink-0`. - flex-1 columns also have `min-w-0`. --}}
{{-- ─── Views column ───────────────────────────────────── --}} {{-- ─── Ticket list column ─────────────────────────────── --}} {{-- Width discipline — belt-and-braces: • `w-72` sets width: 18rem (288px). • `basis-72` sets flex-basis: 18rem so flex math can't collapse the column even if a future ancestor changes how `width:` interacts with flex. • `shrink-0` is the load-bearing class — without it the column could shrink to fit the conversation pane's content under flex auto-shrink, "sliding" the ticket list behind the conversation pane. • `overflow-x-hidden` prevents long subject lines from pushing horizontal scroll into the column. `min-h-0` lets the inner scroll container shrink so the ticket list scrolls instead of pushing the pagination bar below the viewport. Inline `style` is a final defence in depth — if Tailwind's JIT misses w-72 / basis-72 for any reason, the literal CSS still pins the column. The data-test attributes below let WorkspaceTest assert the load-bearing classes survive every refactor. --}}
@switch($viewFilter) @case('mine') {{ __('Assigned to me') }} @break @case('unassigned') {{ __('Unassigned') }} @break @default {{ __('All tickets') }} @endswitch {{ $this->tickets->total() }}
{{-- Scroll wrapper: vertical only. `overflow-x-hidden` is the load-bearing class — without it a long subject line or customer name could push horizontal scroll and visually "tuck" the list under the conversation pane. --}}
@forelse ($this->tickets as $ticket) @php $isSelected = $ticket->id === $this->selectedTicketId; @endphp {{-- Layout containment for the ticket-list row. ════════════════════════════════════════════ DEVTOOLS-STYLE DIAGNOSIS of the "list bleeds under the conversation pane" regression: Tailwind's `truncate` utility expands to `overflow: hidden; text-overflow: ellipsis; white-space: nowrap;`. Those three together only clip text if the element's effective display is BLOCK or INLINE-BLOCK. A bare `` is `display: inline` — even when it's a flex item, inline content boxes are allowed to bleed beyond the flex item's constrained width because the span itself doesn't establish a containing block for the overflow. The visible symptom is exactly what the operator reported: the customer name and store name "slide out from under the column". The fix is row-level: every text leaf that needs to truncate is now a `
` (or has an explicit `block` class), every flex row carries `min-w-0`, every overflowing axis is clipped at the row level so nothing can escape the column's width — even if the flex math has a momentary off-by-one miscalculation. ════════════════════════════════════════════ --}} @empty
{{ __('No tickets match these filters.') }}
@endforelse
{{ $this->tickets->links() }}
{{-- ─── Conversation pane (renders Conversation child) ── --}} {{-- Explicit `h-full` + `min-h-0` + `min-w-0` + `overflow-hidden` on the pane: • `min-w-0` is the load-bearing class — without it, a long unbroken token inside the conversation (a customer URL, a tracking link, a `
` block) could push the pane's
             min-content width above the available flex space and
             squeeze the ticket-list column to the side / under
             other content.
           • `flex-1` lets the pane fill remaining horizontal space
             after the views aside + ticket list have taken their
             fixed widths.
           • `overflow-hidden` clips any inner overflow at the pane
             edge instead of letting it escape sideways onto the
             ticket list.
         The Conversation child relies on a definite parent height
         to make the timeline's `flex-1 overflow-y-auto` actually
         scroll — without `h-full` + `min-h-0` here, stretched-flex
         height propagation through `
` → workspace root → pane is unreliable in some browsers and the timeline ends up sizing to content. --}}
@if ($this->selectedTicketId !== null) @else
{{ __('Select a ticket') }} {{ __('Pick a conversation from the list to view its messages, customer context, and add internal notes.') }}
@endif