EN
Getting started

Core components.

The core component set that carries product teams' shared expectations for behavior, appearance and accessibility.

80 components 322 live examples Keyboard accessible
01 · Colors

Colors

The Acun UI palette. Components use Tailwind's color names (brand, gray, zinc, emerald…); the @theme block in panel.css sets their values. Each color's light and dark shades are derived from a single base value with color-mix, so changing a color takes a single line.

panel.css @theme
ALL EXAMPLES →
<div class="space-y-3">
    @foreach (['brand' => 'Primary', 'emerald' => 'Success', 'sky' => 'Info', 'amber' => 'Warning', 'red' => 'Danger'] as $color => $name)
        <div class="grid grid-cols-[6rem_1fr] items-center gap-3">
            <span class="text-xs font-medium text-gray-500 dark:text-zinc-400">{{ $name }}</span>
            <div class="grid grid-cols-11 overflow-hidden rounded-sm">
                @foreach ([50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as $shade)
                    <span class="h-9" style="background: var(--color-{{ $color }}-{{ $shade }})" title="{{ $color }}-{{ $shade }}"></span>
                @endforeach
            </div>
        </div>
    @endforeach
</div>
02 · Typography

Typography

Text is set in Public Sans, and code and numeric labels in DM Mono (both under the SIL Open Font License). Component body text is 14px (text-sm); heading tags automatically get the ink color and a slight negative letter spacing.

Public Sans · DM Mono
ALL EXAMPLES →
<div class="space-y-4">
    <p class="text-4xl font-bold tracking-tight">Monthly sales · 4xl / 40px</p>
    <p class="text-3xl font-bold tracking-tight">Monthly sales · 3xl / 32px</p>
    <h1 class="text-2xl font-semibold">Page title · 2xl / 26px</h1>
    <h2 class="text-xl font-semibold">Section title · xl / 21px</h2>
    <h3 class="text-lg font-semibold">Subsection · lg / 18px</h3>
    <h4 class="text-base font-semibold">Card title (large) · base / 16px</h4>
    <h5 class="text-sm font-semibold">Card title · sm / 14px</h5>
    <h6 class="text-xs font-semibold tracking-wide text-gray-500 uppercase dark:text-zinc-400">Section label · xs / 12px</h6>
</div>
03 · Icons

Icons

Heroicons v2 (MIT): 324 icons in outline and solid styles. The drawings are embedded in the package; no icon font, CDN or extra package is needed, and only the icons you use end up on the page.

acun:icon
ALL EXAMPLES →
<div class="flex flex-wrap items-center gap-5">
    <acun:icon name="home" />
    <acun:icon name="map-pin" />
    <acun:icon name="truck" />
    <acun:icon name="users" />
    <acun:icon name="document-text" />
</div>
04 · Layout

Vertical layout

A panel layout with a left-hand menu. It includes a sidebar that collapses on desktop, a drawer that opens from the left on mobile, and a floating top bar that carries the page title, search, actions, the theme toggle and the user menu. As the application's main layout, it renders the entire HTML document.

acun:layout.sidebar
<acun:layout.sidebar
    :title="$title ?? null"
    brand-name="Acun Panel"
    brand-tagline="Store Management"
    :home-url="route('dashboard')"
>
    <acun:slot:head>
        <link rel="icon" href="/favicon.svg" type="image/svg+xml">
        @vite(['resources/css/app.css', 'resources/js/app.js'])
    </acun:slot:head>

    <acun:slot:logo><img src="/logo.svg" alt="" class="size-7"></acun:slot:logo>

    <acun:slot:nav>
        <acun:menu menu="main" />
    </acun:slot:nav>

    {{ $slot }}
</acun:layout.sidebar>
05 · Layout

Horizontal layout

A panel layout with a top menu. On wide screens the menu sits horizontally in the top bar; below lg it moves into a drawer that opens from the left. It is an alternative to the vertical layout for applications with a short menu.

acun:layout.horizontal
<acun:layout.horizontal :title="$title ?? null" brand-name="Acun Panel" :home-url="route('dashboard')">
    <acun:slot:head>
        @vite(['resources/css/app.css', 'resources/js/app.js'])
    </acun:slot:head>

    <acun:slot:nav>
        <acun:nav.horizontal-item :href="route('dashboard')" title="Home" :active="request()->routeIs('dashboard')" />
        <acun:nav.horizontal-group title="Customers" :active="request()->routeIs('customers.*')">
            <acun:nav.sub-item compact :href="route('customers.index')" title="Customer List" />
            <acun:nav.sub-item compact :href="route('customer-groups.index')" title="Customer Groups" />
        </acun:nav.horizontal-group>
    </acun:slot:nav>

    {{ $slot }}
</acun:layout.horizontal>
06 · Layout

Auth layout

The layout for login, registration, password reset and two-factor authentication pages. It comes in two variants: an illustration on the left with the form on the right (cover), or a single centered card (basic).

acun:layout.auth
<acun:layout.auth title="Log in">
    <acun:slot:head>
        @vite(['resources/css/app.css', 'resources/js/app.js'])
    </acun:slot:head>

    <acun:slot:logo><img src="/logo.svg" alt="Acun Panel" class="h-8 w-auto"></acun:slot:logo>

    <acun:auth-header title="Welcome" description="Log in to your account to continue." />
    <acun:auth-session-status class="mt-4" :status="session('status')" />

    <form wire:submit="login" class="mt-6 space-y-4">
        <acun:input wire:model="email" type="email" variant="floating" label="Email" />
        <acun:input wire:model="password" type="password" variant="floating" label="Password" viewable />
        <acun:checkbox wire:model="remember" label="Remember me" />
        <acun:button type="submit" class="w-full">Log In</acun:button>
    </form>
</acun:layout.auth>
07 · Layout

Message layout

A full-page message layout for 404, 403, 500, maintenance and coming-soon pages: a large code, a heading, a description, buttons and an optional illustration. On a page that has its own document, use `acun:message-panel` for the same screen.

acun:layout.message
{{-- resources/views/errors/404.blade.php --}}
<acun:layout.message code="404" heading="Page not found" description="The page you are looking for may have been moved or deleted.">
    <acun:slot:head>@vite(['resources/css/app.css', 'resources/js/app.js'])</acun:slot:head>
    <acun:slot:action>
        <acun:button :href="url('/')">Back to home</acun:button>
        <acun:button :href="url()->previous()" variant="white">Go back</acun:button>
    </acun:slot:action>
</acun:layout.message>
08 · Layout

Head

The <head> content: meta tags, the page title, the appearance settings (as data) and a small script (acun-ui-boot.js) that applies the theme and menu state before the first paint. The Alpine stores (appearance, brand, sidebar, navbar, customizer) come from the Acun UI JavaScript: import '@acunsoft/acun-ui-core' or @acunUiScripts. The ready-made layouts add it themselves; you only need it when writing your own layout.

acun:layout.head
<!DOCTYPE html>
<html lang="en">
<head>
    <acun:layout.head :title="$title ?? null">
        <link rel="icon" href="/favicon.svg" type="image/svg+xml">
        @vite(['resources/css/app.css', 'resources/js/app.js'])
    </acun:layout.head>
</head>
<body>
    {{ $slot }}

    @livewireScripts
</body>
</html>
12 · Menu

User menu

The user dropdown menu on the right of the top bar. The button shows the initials of the name and, on wide screens, the name; the menu items come from the slot.

acun:user-menu
ALL EXAMPLES →
<acun:user-menu name="Ayşe Yılmaz">
    <acun:dropdown.item href="#">Profile</acun:dropdown.item>
    <acun:dropdown.item href="#">Settings</acun:dropdown.item>
    <acun:dropdown.item>Log Out</acun:dropdown.item>
</acun:user-menu>
13 · Menu

Theme toggle

An icon button that switches between the light and dark themes. The preference is stored in the browser and, if the layout has a preference-url, also saved to the account. Since the icon is chosen with CSS, it looks right as soon as the page first opens.

acun:theme-toggle
ALL EXAMPLES →
<acun:theme-toggle />
15 · Cards

Basic card

Groups content on a white surface, together with a header, an actions area and a footer. It is the basic container for summaries, lists and forms in dashboards, and it can be collapsed and closed.

acun:card
ALL EXAMPLES →
<acun:card title="Kadıköy warehouse" subtitle="IST-04 · 148 orders">
    <p class="text-sm text-gray-600 dark:text-zinc-400">112 orders shipped this month; 36 orders are waiting.</p>
</acun:card>
16 · Cards

Stat cards

Highlights a single number with its label, an icon and its change from the previous period. Used side by side in dashboard summaries.

acun:stat-card
ALL EXAMPLES →
<acun:stat-card label="Total customers" value="4,812" />
17 · Cards

Chart cards

ApexCharts charts placed inside a card. acun:card and acun:chart are used together for monthly comparisons, ratios and trends.

PRO acun:card + acun:chart
ALL EXAMPLES →
<acun:card title="Monthly orders" subtitle="Last 6 months">
    <acun:chart :height="260" :options="[
        'chart' => ['type' => 'bar'],
        'series' => [['name' => 'Orders', 'data' => [2810, 2944, 3012, 2890, 3240, 3106]], ['name' => 'Returns', 'data' => [240, 198, 221, 260, 190, 214]]],
        'xaxis' => ['categories' => ['Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']],
        'colors' => ['primary', '#e5e7eb'],
        'plotOptions' => ['bar' => ['borderRadius' => 4, 'columnWidth' => '45%']],
        'dataLabels' => ['enabled' => false],
        'legend' => ['position' => 'top', 'horizontalAlign' => 'left'],
    ]" />
</acun:card>
18 · Cards

Cards with actions

The actions area in the card header: a dropdown, buttons, collapsing and closing. While the content refreshes, the card is locked with acun:loading-overlay.

PRO acun:card
ALL EXAMPLES →
<acun:card title="Product summary" subtitle="September 2026">
    <acun:slot:actions>
        <acun:dropdown align="end">
            <acun:slot:trigger>
                <button type="button" class="flex size-7 cursor-pointer items-center justify-center rounded-sm text-gray-400 hover:bg-gray-100 dark:hover:bg-zinc-800" aria-label="Actions"><acun:icon name="ellipsis-vertical" size="4" /></button>
            </acun:slot:trigger>
            <acun:dropdown.item>Refresh</acun:dropdown.item>
            <acun:dropdown.item>Export to Excel</acun:dropdown.item>
            <acun:dropdown.item href="#">Open products</acun:dropdown.item>
        </acun:dropdown>
    </acun:slot:actions>
    <p class="text-sm text-gray-600 dark:text-zinc-400">38 published products, 4 draft products.</p>
</acun:card>
19 · Cards

Card and tabs

Using two components together to show different aspects of a record in a single card with tabs. All the options of each component are described on its own page (Basic card, Tabs).

PRO acun:card · acun:tabs
ALL EXAMPLES →
<acun:card title="Customer summary">
    <acun:slot:actions><acun:button variant="ghost" size="sm">Edit</acun:button></acun:slot:actions>

    <acun:tabs :tabs="['info' => 'Info', 'orders' => 'Orders', 'documents' => 'Documents']">
        <acun:tab-panel value="info"><p class="text-sm text-gray-600 dark:text-zinc-400">Premium member · Istanbul</p></acun:tab-panel>
        <acun:tab-panel value="orders"><acun:progress :value="75" label="Annual target" /></acun:tab-panel>
        <acun:tab-panel value="documents"><acun:empty-state title="No documents" /></acun:tab-panel>
    </acun:tabs>
</acun:card>
20 · UI elements

Accordion

Sections that open and close when their header is clicked. Suitable for FAQs and for grouping long content; by default only one section stays open at a time.

acun:accordion
ALL EXAMPLES →
<acun:accordion open="shipping">
    <acun:accordion.item name="shipping" title="When does my order ship?">
        Orders placed before 15:00 ship the same day; the tracking number is sent by email.
    </acun:accordion.item>
    <acun:accordion.item name="returns" title="How do I return a product?">
        Create a return request from My account > Orders; the return shipping code is valid for 14 days.
    </acun:accordion.item>
    <acun:accordion.item name="import" title="Can products be imported from Excel?">
        Yes, you can download the template from the Imports menu, fill it in and upload it.
    </acun:accordion.item>
</acun:accordion>
21 · UI elements

Alert

An in-page notification box that sits right above the related content. Use it for the result of an action, a situation that needs attention or a persistent error; for feedback that lasts a few seconds, Toast is a better fit.

acun:alert
ALL EXAMPLES →
<div class="space-y-3">
    <acun:alert>The October campaign schedule has been published.</acun:alert>
    <acun:alert variant="success">Product details updated.</acun:alert>
    <acun:alert variant="warning">Deleted records are also listed.</acun:alert>
    <acun:alert variant="danger">Nothing was deleted because the customer has 3 open orders.</acun:alert>
</div>
22 · UI elements

Badge

A small, rounded label for showing a status, a category or a count. Used in table cells, card headers and inside buttons.

acun:badge
ALL EXAMPLES →
<div class="flex flex-wrap items-center gap-2">
    <acun:badge>Draft</acun:badge>
    <acun:badge variant="success">Active</acun:badge>
    <acun:badge variant="warning">Pending</acun:badge>
    <acun:badge variant="danger">Inactive</acun:badge>
    <acun:badge variant="info">Notified</acun:badge>
    <acun:badge variant="primary">New</acun:badge>
    <acun:badge variant="dark">Archived</acun:badge>
</div>
<div class="mt-3 flex flex-wrap items-center gap-2">
    <acun:badge solid>Draft</acun:badge>
    <acun:badge variant="success" solid>Active</acun:badge>
    <acun:badge variant="warning" solid>Pending</acun:badge>
    <acun:badge variant="danger" solid>Inactive</acun:badge>
    <acun:badge variant="info" solid>Notified</acun:badge>
    <acun:badge variant="primary" solid>New</acun:badge>
    <acun:badge variant="dark" solid>Archived</acun:badge>
</div>
23 · UI elements

Button

A button that starts an action. With href it renders a link, otherwise a button element; it has solid, outline and soft color variants, a colored shadow, three sizes, an icon-only form and a loading state.

acun:button
ALL EXAMPLES →
<div class="flex flex-wrap gap-2">
    <acun:button>Save</acun:button>
    <acun:button variant="success">Confirm</acun:button>
    <acun:button variant="danger">Delete</acun:button>
    <acun:button variant="warning">Hold</acun:button>
    <acun:button variant="info">Info</acun:button>
    <acun:button variant="secondary">Archive</acun:button>
    <acun:button variant="dark">Draft</acun:button>
    <acun:button variant="light">Preview</acun:button>
    <acun:button variant="white">Cancel</acun:button>
    <acun:button variant="ghost">Clear selection</acun:button>
    <acun:button variant="link">View all</acun:button>
</div>
24 · UI elements

Button group

Shows related buttons as an attached, single-piece group. It suits period selection or icon toolbars.

acun:button-group
ALL EXAMPLES →
<acun:button-group aria-label="Period">
    <acun:button variant="white" class="!rounded-none first:!rounded-l last:!rounded-r -ml-px first:ml-0 relative hover:z-10 focus-visible:z-10">Day</acun:button>
    <acun:button variant="white" class="!rounded-none first:!rounded-l last:!rounded-r -ml-px first:ml-0 relative hover:z-10 focus-visible:z-10">Week</acun:button>
    <acun:button variant="white" class="!rounded-none first:!rounded-l last:!rounded-r -ml-px first:ml-0 relative hover:z-10 focus-visible:z-10">Month</acun:button>
</acun:button-group>
26 · UI elements

Collapse

Opens and closes the area below a link when the link is clicked. Used to hide details, extra options or long descriptions at first glance.

acun:collapse
ALL EXAMPLES →
<acun:collapse label="Import details">
    <p class="text-sm text-gray-600 dark:text-zinc-400">1,248 rows were read: 1,201 products were added, 39 products were updated, and 8 rows were skipped because of an invalid barcode.</p>
</acun:collapse>
29 · UI elements

List group

A bordered list with rows separated by lines. Rows can be plain text, links, active or disabled, and can be enriched with icons and badges.

acun:list-group
ALL EXAMPLES →
<acun:list-group>
    <acun:list-group.item>Istanbul Main Warehouse</acun:list-group.item>
    <acun:list-group.item>Ankara Warehouse</acun:list-group.item>
    <acun:list-group.item>Izmir Warehouse</acun:list-group.item>
</acun:list-group>
31 · UI elements

Confirmation dialog

A narrow window that asks the user one last time before an action that cannot be undone, such as deleting. It is built on acun:modal; opening, closing and focus behave the same way.

acun:confirmation-dialog
ALL EXAMPLES →
<acun:modal.trigger name="catalog-product-delete"><acun:button variant="outline-danger">Delete the product</acun:button></acun:modal.trigger>

<acun:confirmation-dialog
    name="catalog-product-delete"
    title="Delete the product"
    description="Are you sure you want to delete the 'Wireless headphones' product? This cannot be undone."
    confirm-text="Delete"
/>
32 · UI elements

Drawer

A panel that slides in from the side of the screen. Use it for content viewed without leaving the page, such as record details, a short form or the filters of a list page.

acun:drawer
ALL EXAMPLES →
<acun:drawer.trigger name="catalog-details"><acun:button variant="white">Open the customer summary</acun:button></acun:drawer.trigger>

<acun:drawer name="catalog-details" title="Customer summary">
    <dl class="space-y-3 text-sm">
        <div class="flex justify-between"><dt class="text-gray-500 dark:text-zinc-400">Membership</dt><dd>Premium</dd></div>
        <div class="flex justify-between"><dt class="text-gray-500 dark:text-zinc-400">Orders</dt><dd>5</dd></div>
    </dl>
    <acun:slot:footer>
        <acun:drawer.close><acun:button variant="white">Close</acun:button></acun:drawer.close>
        <acun:button>Edit</acun:button>
    </acun:slot:footer>
</acun:drawer>
33 · UI elements

Pagination

A ready-made view for the Laravel paginator: a "Showing 1 to 6 of 48 results" summary on the left, previous/next and page numbers on the right. In Livewire components it works without reloading the page; without Livewire it uses regular links.

components.ui.pagination
ALL EXAMPLES →
{{ $examplePaginator->links('acun-ui::components.ui.pagination') }}
34 · UI elements

Progress

Shows how much of a task is complete with a horizontal bar. The value can come fixed from the server or be bound to an Alpine expression that changes in the browser.

acun:progress
ALL EXAMPLES →
<div class="space-y-1.5">
    <div class="flex justify-between text-sm">
        <span class="font-medium text-gray-900 dark:text-zinc-100">Sales target</span>
        <span class="tabular-nums">68%</span>
    </div>
    <acun:progress :value="68" label="Sales target" />
</div>
35 · UI elements

Spinner

Shows a loading state while an operation runs. On buttons, use the loading prop of acun:button, and to lock an area, use acun:loading-overlay; the spinner is for everywhere else.

acun:spinner
ALL EXAMPLES →
<div class="flex flex-wrap items-center gap-6">
    <acun:spinner size="sm" />
    <acun:spinner />
    <acun:spinner size="lg" />
</div>
36 · UI elements

Tabs

Splits content into tabs shown in the same area. It has two looks, underlined and pills; switching tabs does not reload the page.

acun:tabs
ALL EXAMPLES →
<acun:tabs :tabs="['general' => 'General', 'orders' => 'Orders', 'history' => 'History']">
    <acun:tab-panel value="general"><p class="text-sm text-gray-600 dark:text-zinc-400">Premium member · Kadıköy, Istanbul</p></acun:tab-panel>
    <acun:tab-panel value="orders"><p class="text-sm text-gray-600 dark:text-zinc-400">Last order: September 12, 2026</p></acun:tab-panel>
    <acun:tab-panel value="history"><p class="text-sm text-gray-600 dark:text-zinc-400">9 orders and 1 return in 2026.</p></acun:tab-panel>
</acun:tabs>
37 · UI elements

Toast

A short notification that appears at the bottom right of the screen for a few seconds and disappears on its own. It reports the result of an action such as saving, deleting or importing without disturbing the page; it comes installed in all the ready-made layouts.

acun:toast-container
ALL EXAMPLES →
<div class="flex flex-wrap gap-2" x-data>
    <acun:button variant="success" x-on:click="$dispatch('toast', { type: 'success', message: 'Product saved.' })">Success</acun:button>
    <acun:button variant="danger" x-on:click="$dispatch('toast', { type: 'error', message: 'The record could not be deleted.' })">Error</acun:button>
    <acun:button variant="warning" x-on:click="$dispatch('toast', { type: 'warning', message: '2 records were skipped due to permissions.' })">Warning</acun:button>
    <acun:button variant="white" x-on:click="$dispatch('toast', { message: 'The import was queued.' })">Info</acun:button>
</div>
38 · UI elements

Tooltip

A short explanation that appears when an element is hovered with the mouse or focused with the keyboard. Use it to show what an icon button does or the full text of a shortened value.

acun:tooltip
ALL EXAMPLES →
<div class="py-6">
    <acun:tooltip text="The customer's order history">
        <acun:button variant="white" size="sm">History</acun:button>
    </acun:tooltip>
</div>
39 · UI elements

Popover

An info bubble, with an optional title, that opens when the trigger is clicked. Suitable for explanations a few sentences long; for one-line hints, use acun:tooltip.

acun:popover
ALL EXAMPLES →
<acun:popover title="Return policy">
    <acun:slot:trigger><acun:button variant="white" size="sm">Why can't it be returned?</acun:button></acun:slot:trigger>
    Products can be returned within 14 days of delivery. This order was delivered on September 12.
</acun:popover>
41 · UI elements

Description list

Lists the details of a record as label and value pairs, one below the other. Suits read-only summaries such as order, license, or customer details.

acun:description-list
ALL EXAMPLES →
<acun:description-list :items="[
    'Customer name' => 'Ayşe Yılmaz',
    'Customer no.' => 'CUS-10482',
    'Membership' => 'Premium',
    'Orders' => '5',
    'Address' => 'No. 14, Moda St., Kadıköy / Istanbul',
]" />
42 · Extended UI

Avatar

Represents a person or a record with a small, round image. Without a photo, initials are generated from the name; colors, a status dot and an overlapping group view are supported.

PRO acun:avatar
ALL EXAMPLES →
<div class="flex flex-wrap items-center gap-4">
    <acun:avatar name="Ayşe Yılmaz" size="xs" />
    <acun:avatar name="Ayşe Yılmaz" size="sm" />
    <acun:avatar name="Ayşe Yılmaz" />
    <acun:avatar name="Ayşe Yılmaz" size="lg" />
    <acun:avatar name="Ayşe Yılmaz" size="xl" />
</div>
43 · Extended UI

Loading overlay

Covers an area with a semi-transparent layer while an operation runs and blocks clicks on it. It is bound to a Livewire action or an Alpine expression.

PRO acun:loading-overlay
ALL EXAMPLES →
<div class="relative rounded-sm border border-gray-200 p-6 dark:border-zinc-700" x-data="{ locked: false }">
    <p class="text-sm text-gray-600 dark:text-zinc-400">This area is locked while the report is being prepared.</p>
    <acun:button class="mt-4" size="sm" x-on:click="locked = true; setTimeout(() => locked = false, 2000)">Prepare report</acun:button>
    <acun:loading-overlay show="locked" label="Preparing" />
</div>
44 · Extended UI

Drag and drop

Lets users reorder items by dragging and dropping them. It uses the Alpine Sort plugin that ships with Livewire 4; if a handler is given, the new order is sent to the server.

PRO acun:sortable
ALL EXAMPLES →
<acun:sortable>
    <acun:sortable.item key="1">Electronics</acun:sortable.item>
    <acun:sortable.item key="2">Home and living</acun:sortable.item>
    <acun:sortable.item key="3">Clothing</acun:sortable.item>
    <acun:sortable.item key="4">Beauty</acun:sortable.item>
</acun:sortable>
45 · Extended UI

Media player

Plays video and audio files with a single control bar that matches the theme, instead of the built-in controls that differ from browser to browser: play/pause, seek bar, time, volume, speed, and full screen. If JavaScript does not run, the browser's own controls appear and the file can still be played.

PRO acun:media-player
ALL EXAMPLES →
<acun:media-player
    src="../assets/media/sample-video.mp4"
    poster="../assets/media/sample-poster.jpg"
    title="Intro video"
/>
46 · Extended UI

Scroll area

Scrolls long or wide content inside a bounded box. The scrollbar is drawn thin and adapts to the light/dark theme; no separate JavaScript library is needed. Optionally, the edges that still have hidden content behind them fade out softly.

acun:scroll-area
ALL EXAMPLES →
<acun:scroll-area max-height="15rem" label="Recently sold products" class="rounded-sm border border-gray-200 dark:border-zinc-700">
    <ul class="divide-y divide-gray-100 dark:divide-zinc-800">
        @foreach (['Wireless headphones', 'Mechanical keyboard', 'USB-C charger', '27-inch monitor', 'Ergonomic chair', 'Laptop stand', 'Webcam', 'External SSD 1 TB', 'Bluetooth speaker', 'Smartwatch'] as $product)
            <li class="flex items-center justify-between gap-4 px-4 py-2.5 text-sm">
                <span class="text-gray-900 dark:text-zinc-100">{{ $product }}</span>
                <span class="text-xs text-gray-500 dark:text-zinc-400">September {{ 20 - $loop->index }}</span>
            </li>
        @endforeach
    </ul>
</acun:scroll-area>
47 · Extended UI

Star rating

Lets users give a rating with stars, or shows an existing rating. It is used with name in a plain form, with wire:model in Livewire and with x-model in Alpine; in read-only mode it only displays the rating.

PRO acun:rating
ALL EXAMPLES →
<acun:rating :value="3" label="Order satisfaction" />
48 · Extended UI

Divider

Separates content blocks with a horizontal line. Text placed inside it is shown in the middle, at the start or at the end of the line.

acun:divider
ALL EXAMPLES →
<p class="text-sm text-gray-600 dark:text-zinc-400">The customer details were updated.</p>
<acun:divider class="my-4" />
<p class="text-sm text-gray-600 dark:text-zinc-400">Next invoice: October 14, 2026.</p>
49 · Extended UI

Timeline

Shows the history of a record in chronological order along a vertical line. Suited to order history, support ticket workflows or activity logs.

PRO acun:timeline
ALL EXAMPLES →
<acun:timeline>
    <acun:timeline.item title="Delivered" time="12.09.2026 14:32">Package handed to the recipient at the door.</acun:timeline.item>
    <acun:timeline.item title="Shipped" time="11.09.2026 09:00">Package left the Kadıköy warehouse.</acun:timeline.item>
    <acun:timeline.item title="Order placed" time="10.09.2026 16:47" />
</acun:timeline>
50 · Extended UI

Tour

Walks the user through the important parts of the page step by step. At each step one element is highlighted, the rest of the screen dims, and a small popover opens next to the element with a title, a description, a step counter, and Back / Next step buttons. It suits introducing the panel on first sign-in or showing off a new feature.

PRO acun:tour
ALL EXAMPLES →
<acun:tour name="order-tour" :steps="[
    ['target' => '#order-search', 'title' => 'Order search', 'text' => 'Find orders by number, customer name, or phone number.'],
    ['target' => '#order-add', 'title' => 'New order', 'text' => 'Record an order that came in by phone here.'],
    ['target' => '#order-summary', 'title' => 'Monthly summary', 'text' => 'Follow the shipments and pending returns for this month here.', 'placement' => 'top'],
]">
    <acun:button variant="white" x-on:click="start()">Start the tour</acun:button>
</acun:tour>

<div class="mt-6 space-y-4">
    <div class="flex flex-wrap items-center gap-3">
        <div id="order-search" class="w-64"><acun:input name="search" placeholder="Search orders…" /></div>
        <acun:button id="order-add">New order</acun:button>
    </div>
    <div id="order-summary" class="grid grid-cols-2 gap-3">
        <acun:stat-card label="Shipped this month" value="148" />
        <acun:stat-card label="Pending returns" value="23" />
    </div>
</div>
51 · Extended UI

Tree view

Shows nested data such as category › subcategory › product group as collapsible branches. The whole structure is passed as a single items array.

PRO acun:tree
ALL EXAMPLES →
<acun:tree :items="[
    ['label' => 'Electronics', 'children' => [
        ['label' => 'Computers', 'children' => [['label' => 'Laptops'], ['label' => 'Desktops']]],
        ['label' => 'Phones', 'children' => [['label' => 'Smartphones']]],
    ]],
    ['label' => 'Clothing', 'children' => [['label' => 'Women']]],
]" />
52 · Extended UI

Miscellaneous

Small helper components: acun:copy-button copies a text to the clipboard with one click, and acun:kbd shows keyboard keys and shortcuts within text, styled as keys.

PRO acun:copy-button · acun:kbd
ALL EXAMPLES →
<div class="flex flex-wrap items-center gap-3">
    <span class="font-mono text-sm text-gray-900 dark:text-zinc-100">ORD-2026-004817</span>
    <acun:copy-button text="ORD-2026-004817" size="sm" />
    <acun:copy-button text="ORD-2026-004817" variant="soft" size="sm" label="Copy order number" />
</div>
53 · Extended UI

Skeleton

A gray, softly pulsing placeholder that stands in for content while it loads. By imitating the shape of the real content, it keeps the page from jumping once loading finishes.

PRO acun:skeleton
ALL EXAMPLES →
<div class="flex items-center gap-4">
    <acun:skeleton class="h-16 w-24" />
    <acun:skeleton variant="circle" class="size-12" />
    <div class="flex-1 space-y-2">
        <acun:skeleton variant="text" />
        <acun:skeleton variant="text" class="w-2/3" />
    </div>
</div>
54 · Extended UI

Empty state

A box shown in place of the table when a list is empty or a search returns no results. It tells users why they see nothing and, where possible, suggests the next step.

PRO acun:empty-state
ALL EXAMPLES →
<acun:empty-state title="No orders yet" description="There are no orders recorded for this store this month." />
55 · Extended UI

Pill action

An action button with a colored round badge and a label. It is used on mobile screens to offer a few quick actions side by side, at equal width.

PRO acun:pill-action
ALL EXAMPLES →
<div class="flex flex-wrap">
    <acun:pill-action label="Approve" variant="success"><acun:icon name="check" size="3.5" /></acun:pill-action>
    <acun:pill-action label="Hold" variant="warning"><acun:icon name="exclamation-triangle" size="3.5" /></acun:pill-action>
    <acun:pill-action label="Address"><acun:icon name="map-pin" size="3.5" /></acun:pill-action>
    <acun:pill-action label="Cancel" variant="danger"><acun:icon name="x-mark" size="3.5" /></acun:pill-action>
</div>
56 · Forms

Text input

A labeled text input. The field name and id are derived from the wire:model value, and validation errors from $errors are shown automatically; it offers a floating label and a show/hide password option.

acun:input
ALL EXAMPLES →
<div class="space-y-4">
    <acun:input wire:model="product_name" label="Product name" placeholder="E.g. Wireless headphones" />
    <acun:input name="custom_code" label="Custom code" value="SKU-01" />
</div>
57 · Forms

Input group

Puts a fixed add-on to the left or right of a text field: a country code, currency, unit, domain name or icon. The label, hint and validation error work the same as in acun:input.

acun:input-group
ALL EXAMPLES →
<div class="space-y-4">
    <acun:input-group name="phone" label="Phone" prefix="+90" placeholder="5xx xxx xx xx" />
    <acun:input-group name="price" label="Product price" suffix="₺" placeholder="0.00" inputmode="decimal" />
    <acun:input-group name="site" label="Website" prefix="https://" suffix=".com" />
</div>
59 · Forms

Option cards

Turns a radio button or checkbox into a clickable card with a title, a description and an icon. Suited to a small number of options that need explaining.

PRO acun:option-card
ALL EXAMPLES →
<div class="grid gap-3 md:grid-cols-3">
    <acun:option-card name="billing_period" value="monthly" title="Monthly" description="Renews every month" />
    <acun:option-card name="billing_period" value="yearly" title="Yearly" description="Two months free" checked />
    <acun:option-card name="billing_period" value="lifetime" title="Lifetime" description="One-time payment" />
</div>
60 · Forms

File upload

Single and multiple file upload: a drag-and-drop zone, a file list with previews, per-file progress, cancel and retry, saved files for edit forms, sorting, and avatar and compact looks. It works both in a Livewire component and in a classic form without Livewire.

PRO acun:file-upload
ALL EXAMPLES →
<acun:file-upload model="id_document" label="Identity document" accept=".pdf,image/*" hint="Front of the ID card · PDF or image" />
61 · Forms

Date picker

Shows the browser's own date and time picker in the panel style. Because it is built on acun:input, the label, hint and error display are the same. To pick a date range, the flatpickr-based uiDateRangePicker is used.

PRO acun:date-picker
ALL EXAMPLES →
<acun:date-picker name="delivery_date" label="Delivery date" value="2026-10-07" hint="The day emailed to the customer." />
62 · Forms

Select

A labeled select box. The options come from the options array or from the slot; label, hint and error behavior are the same as acun:input.

acun:select
ALL EXAMPLES →
<acun:select wire:model="status" label="Status" :options="['1' => 'Active', '0' => 'Inactive']" placeholder="Select…" />
63 · Forms

Combobox

A searchable select for long lists: single or multiple selection, removable chips, options with descriptions and groups, search through a Livewire method or a JSON URL, and adding values that are not in the list. Search ignores letter case and Turkish letters; the component is fully usable with a keyboard and screen readers.

PRO acun:combobox
ALL EXAMPLES →
<acun:combobox name="branch_id" label="Branch" value="2" :options="[
    1 => 'Kadıköy Branch', 2 => 'Beşiktaş Branch', 3 => 'Üsküdar Branch',
    4 => 'Çankaya Branch', 5 => 'Karşıyaka Branch', 6 => 'Nilüfer Branch', 7 => 'Ataşehir Branch',
    8 => 'Şişli Branch', 9 => 'Çamlıca Branch', 10 => 'Iğdır Branch',
]" />
64 · Forms

Tag input

acun:tag-input provides free-form or list-based tag entry. Suggestions are matched case-insensitively, following Turkish letter rules. To let users pick one or more values from a long list, use acun:combobox on the Combobox page.

PRO acun:tag-input
ALL EXAMPLES →
<acun:tag-input name="tags" label="Tags" :value="['priority', 'wholesale']" />
65 · Forms

Slider

A slider for picking a value from a numeric range. When a label is given, the selected value is shown live, with its unit, to the right of the label.

PRO acun:range
ALL EXAMPLES →
<acun:range name="rate" label="Customer satisfaction target" :value="85" unit="%" />
66 · Forms

Switch

A switch that turns a setting on and off with a single click. Under the hood it is a checkbox with role="switch"; used for on/off settings that take effect immediately.

PRO acun:switch
ALL EXAMPLES →
<acun:switch name="sw_notifications" label="Order notifications" checked />
<acun:switch name="sw_newsletter">Email newsletter</acun:switch>
67 · Forms

Checkbox and radio

A checkbox (acun:checkbox) and a radio button (acun:radio) in the brand color. The label is drawn inside the component; since the id is derived from the field name and value, the label is always linked to the box.

acun:checkbox · acun:radio
ALL EXAMPLES →
<div class="flex flex-col gap-3">
    <acun:checkbox name="email_notification" label="Email notification" checked />
    <acun:checkbox name="sms_notification" label="SMS notification" />
</div>
68 · Forms

Textarea

A multi-line text field. It is for long entries such as notes, addresses and descriptions; label, hint, floating label and error behavior are the same as acun:input.

acun:textarea
ALL EXAMPLES →
<acun:textarea wire:model="note" label="Note" rows="3" placeholder="Note for the warehouse team" />
69 · Forms

Verification code

Shows a separate box for each digit of a one-time code sent by SMS or email. The boxes accept digits only; a pasted code is spread across the boxes automatically.

PRO acun:input-otp
ALL EXAMPLES →
<acun:input-otp label="Code sent by SMS" />
70 · Forms

Form validation

Form fields show Laravel validation errors from $errors on their own: if there is an error for the field name, the border turns red and the message appears below the field. No extra code is needed.

$errors
ALL EXAMPLES →
<form class="grid gap-4 md:grid-cols-2">
    <acun:input wire:model="name" label="Customer name" required />
    <acun:input-group wire:model="phone" label="Phone" prefix="+90" value="532 11" />
    <acun:select wire:model="group" label="Customer group" :options="['1' => 'Individual']" placeholder="Select…" />
    <acun:input-group wire:model="creditLimit" label="Credit limit" suffix="₺" value="0" />
    <div class="md:col-span-2"><acun:button type="submit">Save</acun:button></div>
</form>
71 · Forms

Form wizard

Splits a long form into steps. The steps are listed at the top; completed steps are shown with a check mark and can be clicked to go back, while later steps can only be reached with the buttons.

PRO acun:stepper
ALL EXAMPLES →
<acun:stepper :steps="['project' => 'Project', 'team' => 'Team', 'confirm' => 'Confirmation']">
    <acun:stepper.step name="project" class="grid gap-4 md:grid-cols-2">
        <acun:input name="t_name" label="Project name" />
        <acun:select name="t_plan" label="Plan" :options="['1' => 'Starter', '2' => 'Professional']" />
    </acun:stepper.step>
    <acun:stepper.step name="team" class="grid gap-4 md:grid-cols-2">
        <acun:input name="t_people" label="Number of people" type="number" />
        <acun:input name="t_phone" label="Phone" />
    </acun:stepper.step>
    <acun:stepper.step name="confirm">
        <acun:alert variant="success">The details are ready. Press Save to create the project.</acun:alert>
    </acun:stepper.step>

    <div class="mt-6 flex justify-between">
        <acun:button variant="white" x-on:click="previous()" x-bind:disabled="isFirst">Back</acun:button>
        <acun:button x-show="! isLast" x-on:click="next()">Next</acun:button>
        <acun:button x-show="isLast" x-cloak variant="success" x-on:click="$dispatch('toast', { type: 'success', message: 'Project saved.' })">Save</acun:button>
    </div>
</acun:stepper>
72 · Forms

Vertical form

The standard form layout, with labels above the fields. There is no separate component; the fields are arranged with Tailwind spacing and grid classes.

Form layout
ALL EXAMPLES →
<form class="space-y-4">
    <acun:input name="contact_name" label="Full name" />
    <acun:input name="contact_email" type="email" label="Email" />
    <acun:select name="contact_subject" label="Subject" :options="['order' => 'Order', 'billing' => 'Billing', 'other' => 'Other']" placeholder="Select…" />
    <acun:textarea name="contact_message" label="Message" rows="3" />
    <acun:button type="submit" class="w-full">Send</acun:button>
</form>
73 · Forms

Horizontal form

A layout with labels on the left and fields on the right. On settings and detail screens it makes the labels easy to scan in a single column; on small screens the labels still drop above the fields.

Form layout
ALL EXAMPLES →
<acun:card title="Product details">
    <form class="space-y-4">
        <div class="grid items-center gap-2 sm:grid-cols-[10rem_1fr]">
            <label for="product_name" class="text-sm font-medium text-gray-700 dark:text-zinc-300">Product name</label>
            <acun:input name="product_name" value="Wireless headphones" />
        </div>
        <div class="grid items-center gap-2 sm:grid-cols-[10rem_1fr]">
            <label for="product_sku" class="text-sm font-medium text-gray-700 dark:text-zinc-300">SKU</label>
            <acun:input name="product_sku" value="WHP-02" />
        </div>
        <div class="grid items-center gap-2 sm:grid-cols-[10rem_1fr]">
            <label for="product_category" class="text-sm font-medium text-gray-700 dark:text-zinc-300">Category</label>
            <acun:select name="product_category" :options="['1' => 'Electronics', '2' => 'Accessories']" />
        </div>
        <div class="grid gap-2 sm:grid-cols-[10rem_1fr]">
            <span></span>
            <div class="flex gap-2"><acun:button type="submit">Save</acun:button><acun:button variant="white">Cancel</acun:button></div>
        </div>
    </form>
</acun:card>
74 · Forms

Sticky actions

In long forms, the bar with the Save and Cancel buttons stays visible while the page scrolls. It is built with Tailwind's sticky classes; no separate component is needed.

PRO Form layout
ALL EXAMPLES →
<div class="max-h-96 overflow-y-auto rounded-sm bg-white shadow-sm dark:bg-zinc-900">
    <div class="sticky top-0 z-10 flex items-center justify-between border-b border-gray-200 bg-white/90 px-5 py-3 backdrop-blur dark:border-zinc-800 dark:bg-zinc-900/90">
        <h3 class="text-sm font-semibold text-gray-900 dark:text-zinc-100">General settings</h3>
        <div class="flex gap-2"><acun:button size="sm" variant="white">Cancel</acun:button><acun:button size="sm">Save</acun:button></div>
    </div>
    <div class="grid gap-4 p-5 md:grid-cols-2">
        @foreach (['Company name', 'Short name', 'Province', 'District', 'Phone', 'Email', 'Website', 'Tax number', 'Contact person', 'Contact phone'] as $i => $label)
            <acun:input name="field{{ $i }}" :label="$label" />
        @endforeach
    </div>
</div>
75 · Forms

Form guard

A form with unsaved-changes protection. With dirty-check on, leaving the page after fields have changed asks for confirmation: the browser's own warning when leaving through the browser, and the acun:form-guard-dialog dialog on wire:navigate transitions.

PRO acun:form · acun:form-guard-dialog
ALL EXAMPLES →
<acun:form dirty-check class="space-y-4"
    x-data="{ changed: false }"
    x-on:input="setTimeout(() => changed = AcunUI.pro.formGuard.dirty)"
    x-on:change="setTimeout(() => changed = AcunUI.pro.formGuard.dirty)">
    <acun:input name="customer_name" label="Customer name" value="Ayşe Yılmaz" />
    <acun:checkbox name="active" label="Active customer" checked />
    <p class="text-sm text-gray-500 dark:text-zinc-400" x-text="changed ? 'There are unsaved changes' : 'No changes'"></p>
</acun:form>
76 · Tables

Table

A card-style, horizontally scrollable container and ready-made table styles for data tables. You write your own table tag; the ui-table class gives the look of headers, cells, rows and the totals row.

acun:table · acun:sortable-th
ALL EXAMPLES →
<acun:table>
    <table class="ui-table">
        <thead>
            <tr><th>Customer</th><th>City</th><th>Last order</th></tr>
        </thead>
        <tbody>
            <tr><td>Ayşe Yılmaz</td><td>Istanbul</td><td>Sep 12, 2026</td></tr>
            <tr><td>Mehmet Kaya</td><td>Ankara</td><td>Sep 10, 2026</td></tr>
            <tr><td>Zeynep Arslan</td><td>Izmir</td><td>Sep 8, 2026</td></tr>
        </tbody>
    </table>
</acun:table>
77 · DataTable

DataTable engine

A ready-made Livewire table whose columns, filters and actions are defined in a PHP class. Search, filters, sorting, selection and pagination run on the server; only the visible page is sent to the browser. Detailed guide: DataTable.

PRO AcunDataTable
use Acun\Ui\DataTable\DataTable;

final class OrdersTable extends DataTable
{
    public string $title = 'Orders';

    protected function query(): Builder
    {
        return Order::query()->visibleTo(auth()->user())->select(['id', 'number', 'customer_name', 'is_paid']);
    }

    protected function columns(): array
    {
        return [
            Column::make('Order no.', 'number')->searchable()->sortable(),
            Column::make('Customer', 'customer_name')->searchable(SearchMode::Contains)->sortable(),
            Column::make('Paid', 'is_paid')->boolean(),
        ];
    }

    protected function authorizeTable(): void
    {
        $this->authorize('viewAny', Order::class);
    }
}
78 · DataTable

Listing page

A complete list page of the panel: toolbar, filter button, bulk selection bar, sortable table and pagination. The look comes from Acun UI components, the behavior (search, sorting, selection, pagination) from the WithListing trait.

PRO WithListing
ALL EXAMPLES →
<div class="space-y-4">
    <acun:list-toolbar>
        <acun:search name="list_search" placeholder="Product name or SKU" />
        <acun:slot:actions>
            <acun:filter-button drawer="catalog-listing-filters" :count="2" />
            <acun:button>New Product</acun:button>
        </acun:slot:actions>
    </acun:list-toolbar>

    <acun:selection-bar :count="2" clear-action="clearSelection">
        <acun:button variant="white" size="sm">Activate</acun:button>
        <acun:button variant="danger" size="sm">Delete</acun:button>
    </acun:selection-bar>

    <acun:table>
        <table class="ui-table">
            <thead>
                <tr>
                    <th class="w-10"><acun:checkbox id="list-all" aria-label="Select all" /></th>
                    <acun:sortable-th field="name" sort-field="name" sort-direction="asc">Product Name</acun:sortable-th>
                    <acun:sortable-th field="sku" sort-field="name" sort-direction="asc">SKU</acun:sortable-th>
                    <th class="text-center">Stock</th>
                    <th>Status</th>
                </tr>
            </thead>
            <tbody>
                <tr><td><acun:checkbox id="list-1" checked /></td><td class="font-medium text-gray-900 dark:text-zinc-100">Wireless headphones</td><td>WH-01</td><td class="text-center tabular-nums">312</td><td><acun:badge variant="success">Active</acun:badge></td></tr>
                <tr><td><acun:checkbox id="list-2" checked /></td><td class="font-medium text-gray-900 dark:text-zinc-100">Mechanical keyboard</td><td>MK-04</td><td class="text-center tabular-nums">148</td><td><acun:badge variant="success">Active</acun:badge></td></tr>
                <tr><td><acun:checkbox id="list-3" /></td><td class="font-medium text-gray-900 dark:text-zinc-100">USB-C charger</td><td>UC-02</td><td class="text-center tabular-nums">96</td><td><acun:badge variant="danger">Inactive</acun:badge></td></tr>
            </tbody>
        </table>
    </acun:table>

    {{ $examplePaginator->links('acun-ui::components.ui.pagination') }}
</div>

<acun:drawer name="catalog-listing-filters" docked title="Filters" compact>
    <acun:select name="list_status" :options="['' => 'All Statuses', '1' => 'Active', '0' => 'Inactive']" />
</acun:drawer>
79 · Charts

Charts

A chart drawn with ApexCharts. The options array is the PHP equivalent of the ApexCharts configuration; in the dark theme the axis, grid and tooltip colors adapt automatically, and the chart is repainted when the theme changes.

PRO acun:chart
ALL EXAMPLES →
<acun:chart :options="[
    'chart' => ['type' => 'area'],
    'series' => [['name' => 'Orders', 'data' => [2810, 2944, 3012, 2890, 3240, 3106]]],
    'xaxis' => ['categories' => ['Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']],
    'colors' => ['primary'],
    'stroke' => ['curve' => 'smooth', 'width' => 3],
    'fill' => ['type' => 'gradient', 'gradient' => ['opacityFrom' => 0.4, 'opacityTo' => 0.05]],
    'dataLabels' => ['enabled' => false],
]" />
80 · Map

Map

A map built with Leaflet and OpenStreetMap. It can show a list of markers and write the clicked location to a Livewire property.

PRO acun:map
ALL EXAMPLES →
<acun:map :center="[41.0082, 28.9784]" :zoom="14" :height="280" />
Acun UIDesigned for people.