{# app/templates/admin/components.html #} {% extends "admin/base.html" %} {% block title %}UI Components{% endblock %} {# ✅ CRITICAL: Link to Alpine.js component #} {% block alpine_data %}adminComponents(){% endblock %} {% block extra_head %} {# Chart.js for charts section #} {% endblock %} {% block content %}

UI Components Library

Back to Dashboard

Quick Reference Library

Copy-paste ready UI components for your admin pages. All components support dark mode and are fully accessible.

Sections

Pro Tip

Click any code block to copy it to your clipboard!

Jinja Macros

Reusable Components: Use Jinja macros from shared/macros/ instead of copy-pasting HTML. This ensures consistency and makes updates easier.

Available Macro Files

pagination.html

Table pagination with page numbers

pagination(), pagination_simple()

alerts.html

Alerts, loading states, toasts

loading_state(), error_state(), alert(), toast()

badges.html

Status badges and indicators

badge(), status_badge(), verification_badge(), role_badge()

buttons.html

Button variants and action buttons

btn_primary(), btn_secondary(), action_button()

forms.html

Form inputs with validation

form_input(), form_select(), form_textarea()

tables.html

Table components and empty states

table_wrapper(), table_header(), table_empty_state()

cards.html

Stat cards and info cards

stat_card(), card(), info_card(), coming_soon_card()

headers.html

Page headers and breadcrumbs

page_header(), section_header(), breadcrumbs()

Usage Example

{# Import at the top of your template #}
{% raw %}{% from 'shared/macros/pagination.html' import pagination %}
{% from 'shared/macros/alerts.html' import loading_state, error_state %}
{% from 'shared/macros/badges.html' import status_badge, verification_badge %}
{% from 'shared/macros/buttons.html' import btn_primary, action_button %}
{% from 'shared/macros/cards.html' import stat_card %}
{% from 'shared/macros/headers.html' import page_header %}

{# Then use in your template #}
{{ page_header('User Management', action_label='Create User', action_url='/users/create') }}

{{ loading_state('Loading users...') }}
{{ error_state('Error loading users') }}

{# In your table #}
{{ pagination() }}{% endraw %}

Pagination

Full Pagination (with page numbers)

Use the pagination() macro. Requires Alpine.js properties: pagination, startIndex, endIndex, totalPages, pageNumbers.

Showing 1-10 of 97

Simple Pagination (prev/next only)

Use pagination_simple() for a simpler prev/next navigation.

Showing 1-10 of 97 results
Page 1 of 10

Forms

Basic Input

Required Field with Error

Textarea

Select

Buttons

Primary Button

Secondary Button

Danger Button

Cards

Basic Card

Card Title

This is a basic card component with a title and description.

Badges

Status Badges

Active Pending Inactive Info

Tables

Basic Table

Name Email Status
John Doe john@example.com Active
Jane Smith jane@example.com Pending

Modals

Confirmation Modal

Confirm Action

Are you sure you want to perform this action? This cannot be undone.

Alerts

Toast Notifications

Charts

Charts are provided by Chart.js . Note that default legends are disabled and you should provide descriptions for your charts in HTML.

Doughnut/Pie Chart

Shoes
Shirts
Bags

Line Chart

Organic
Paid

Bar Chart

Shoes
Bags
{% endblock %} {% block extra_scripts %} {# ✅ CRITICAL: Load JavaScript file #} {% endblock %}