Mobile UX: navbar dropdown, compact KPI, table scrolling, remove test toast
1. Navbar mobile dropdown
- Fixed potential clipping: added z-50 and top-full to dropdown panel
- Added overflow-visible to nav wrapper so dropdown is not cut off
- Wider panel (min-w-52), larger tap targets (py-2.5 per link)
- Active route indicated by colored dot + bold text
- Trigger button now shows hamburger icon + page name
2. KPI cards (section-dashboard)
- grid-cols-2 on mobile (was single column), sm:3, xl:5
- Reduced padding px-3 py-2.5 (was p-4) and font text-xl (was text-2xl)
- flex-col gap-0.5 layout for tighter vertical rhythm
3. Test Toast removed
- Deleted ToastTrigger.jsx component entirely
- Removed import and conditional render from Layout.astro
- Removed unused isDev variable from Layout.astro
4. AnimatedDataTable improvements
- Replaced plain-text loading placeholder with animated skeleton rows
(pulse animation with variable-width grey bars per column)
- Added horizontal scroll fade indicators: left/right gradient overlays
appear automatically via ResizeObserver + scroll event listener
- scroll-smooth touch scrolling on mobile (WebkitOverflowScrolling, scrollbarWidth)
- Added scope=col on th elements and aria-label / aria-busy props
- Slightly snappier spring config (tension 260, friction 28)
- leave animation reduced to 4px shift (was 8px) for less jarring removal
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -92,7 +92,7 @@ export default function Navbar({ minimal = false }) {
|
||||
const currentItem = ITEMS[activeIndex];
|
||||
|
||||
return (
|
||||
<nav className="sticky top-0 z-30 mb-4 rounded-lg border border-border-hairline bg-canvas-elevated/95 px-4 py-3 backdrop-blur">
|
||||
<nav className="sticky top-0 z-30 mb-4 rounded-lg border border-border-hairline bg-canvas-elevated/95 px-4 py-3 backdrop-blur overflow-visible">
|
||||
<div className="flex flex-wrap items-center justify-between gap-2">
|
||||
{/* Logo + korisnik */}
|
||||
<a href="/" className="flex flex-col hover:opacity-80">
|
||||
@@ -135,10 +135,11 @@ export default function Navbar({ minimal = false }) {
|
||||
<div className="flex items-center gap-2">
|
||||
{/* Mobilni dropdown */}
|
||||
<details className="relative sm:hidden">
|
||||
<summary className="list-none cursor-pointer rounded-lg border border-border-hairline px-2 py-1 text-xs text-text-main hover:bg-canvas-deep">
|
||||
{currentItem?.label || 'Izbornik'} ▾
|
||||
<summary className="list-none cursor-pointer rounded-lg border border-border-hairline bg-canvas-base px-3 py-1.5 text-xs font-medium text-text-main hover:bg-canvas-deep select-none">
|
||||
☰ {currentItem?.label || 'Izbornik'}
|
||||
</summary>
|
||||
<div className="absolute right-0 mt-2 min-w-44 rounded-lg border border-border-hairline bg-canvas-elevated shadow-lg">
|
||||
{/* Dropdown je positioniran fixed-like kroz visoki z-index kako ne bi bio odsječen */}
|
||||
<div className="absolute right-0 top-full mt-1 z-50 min-w-52 rounded-lg border border-border-hairline bg-canvas-elevated shadow-xl">
|
||||
<div className="border-b border-border-hairline px-3 py-2 text-[11px] uppercase tracking-wide text-text-muted">
|
||||
Navigacija
|
||||
</div>
|
||||
@@ -149,10 +150,11 @@ export default function Navbar({ minimal = false }) {
|
||||
href={item.href}
|
||||
className={
|
||||
pathname === item.href
|
||||
? 'block bg-indigo-50 px-3 py-2 text-sm font-medium text-indigo-700'
|
||||
: 'block px-3 py-2 text-sm text-text-main hover:bg-canvas-deep'
|
||||
? 'flex items-center gap-2 bg-indigo-50 px-3 py-2.5 text-sm font-medium text-indigo-700'
|
||||
: 'flex items-center gap-2 px-3 py-2.5 text-sm text-text-main hover:bg-canvas-deep'
|
||||
}
|
||||
>
|
||||
{pathname === item.href && <span className="h-1.5 w-1.5 rounded-full bg-indigo-500" />}
|
||||
{item.label}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
Reference in New Issue
Block a user