{# 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 %}
Copy-paste ready UI components for your admin pages. All components support dark mode and are fully accessible.
Shop Components: Reusable e-commerce components from shared/macros/shop/. These support vendor theming via CSS variables and are designed for the shop frontend.
Product cards with badges, ratings, wishlist
product_card(), product_badge()
Responsive product grid with loading states
product_grid(), product_skeleton()
Add to cart buttons and forms
add_to_cart_button(), add_to_cart_form()
Cart dropdown, cart items, summary
mini_cart(), cart_item(), cart_summary()
Versatile product cards with badges, ratings, wishlist, and quick-add functionality. Supports sm, md, and lg sizes.
Standardized add to cart buttons with loading states. Integrates with number_stepper for quantity selection.
Image gallery with thumbnails, navigation, zoom on hover, and fullscreen lightbox.
Product variant selection with button groups and color swatches. Supports out-of-stock indicators.
Product details section with title, price, rating, stock status, and description.
Tabbed content for product description, specifications, reviews, and shipping info.
Sidebar navigation with nested categories, collapsible sections, and active state tracking.
Navigation trail showing category hierarchy with home link, separator icons, and current page indicator.
Product search with autocomplete, recent searches, popular suggestions, and mobile-optimized full-screen search.
Product filtering with price range, categories, brands, colors, sizes, ratings, and availability.
Flexible star rating components for displaying and collecting ratings.
Full Stars
{{ star_rating(rating=4) }}Half Stars
{{ star_rating(rating=4.5) }}Exact Precision
{{ star_rating(rating=3.7, precision='exact') }}With Value
{{ star_rating(rating=4.5, show_value=true) }}With Count
{{ star_rating(rating=4.5, show_count=true, count=127) }}Sizes
Extra Small
{{ compact_rating(rating=4.5, count=127, size='xs') }}Small
{{ compact_rating(rating=4.5, count=127, size='sm') }}Medium
{{ compact_rating(rating=4.5, count=127, size='md') }}Standard Input
{{ rating_input(model='demoUserRating', size='md') }}Large with Half Stars
{{ rating_input(model='demoUserRating', size='lg', allow_half=true) }}Complete review system with cards, lists, forms, and summary sections.
Trust signals and security indicators to build customer confidence.
All Methods
{{ payment_icons(methods=['visa', 'mastercard', 'paypal', 'apple_pay', 'google_pay', 'amex']) }}With Label
{{ payment_icons(methods=['visa', 'mastercard', 'paypal'], size='lg') }}Money Back
{{ guarantee_badge(type='money_back', days=30) }}Satisfaction
{{ guarantee_badge(type='satisfaction', variant='filled') }}
Reusable Components: Use Jinja macros from shared/macros/ instead of copy-pasting HTML. This ensures consistency and makes updates easier.
Table pagination with page numbers
pagination(), pagination_simple()
Alerts, loading states, toasts
loading_state(), error_state(), alert(), toast()
Status badges and indicators
badge(), status_badge(), verification_badge(), role_badge()
Button variants and action buttons
btn_primary(), btn_secondary(), action_button()
Form inputs with validation
form_input(), form_select(), form_textarea()
Table components and empty states
table_wrapper(), table_header(), table_empty_state()
Stat cards and info cards
stat_card(), card(), info_card(), coming_soon_card()
Page headers and breadcrumbs
page_header(), section_header(), breadcrumbs()
Tab navigation components
tabs_nav(), tabs_inline(), tab_button()
Specialized input components
search_autocomplete(), number_stepper()
Language/i18n components
language_selector(), language_selector_compact(), language_toggle()
{# 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 %}
A number input with +/- buttons. Use number_stepper() from inputs.html. Supports size variants and min/max bounds.
Language selector components for multi-language support. Use macros from language_selector.html. Supports dropdown, compact (icon-only), and toggle variants.
{% raw %}{% from 'shared/macros/language_selector.html' import language_selector, language_selector_compact, language_toggle %}
{# Full dropdown with labels #}
{{ language_selector(
current_language='fr',
enabled_languages=['en', 'fr', 'de', 'lb'],
position='right'
) }}
{# Compact (flag icon only) - good for headers #}
{{ language_selector_compact(
current_language='fr',
enabled_languages=['en', 'fr', 'de'],
position='right'
) }}
{# Toggle for 2 languages #}
{{ language_toggle(
current_language='fr',
enabled_languages=['fr', 'de']
) }}{% endraw %}
Use the pagination() macro. Requires Alpine.js properties: pagination, startIndex, endIndex, totalPages, pageNumbers.
Use pagination_simple() for a simpler prev/next navigation.
Jinja Macros Available: Use the tabs_nav, tabs_inline, and tab_button macros from shared/macros/tabs.html.
Standalone tabs for page-level navigation. Use tabs_nav() with tab_button().
Dashboard content goes here...
Settings content goes here...
Profile content goes here...
Compact tabs for use inside cards or alongside other elements. Use tabs_inline().
When you need to run additional logic on tab change (e.g., load data), use the onclick parameter.
{% raw %}{% from 'shared/macros/tabs.html' import tabs_nav, tab_button %}
{# Tabs with custom click handlers and different tab variable #}
{% call tabs_nav() %}
{{ tab_button('database', 'Database Logs',
tab_var='logSource',
icon='database',
onclick="logSource = 'database'; loadDatabaseLogs()") }}
{{ tab_button('file', 'File Logs',
tab_var='logSource',
icon='document',
onclick="logSource = 'file'; loadFileLogs()") }}
{% endcall %}{% endraw %}
Dropdown Macros: Use macros from shared/macros/dropdowns.html for consistent dropdown styling.
Standard dropdown with items. Uses its own Alpine.js state.
Dropdown that supports disabled/loading state. Uses external Alpine.js state from parent component.
Icon-only dropdown commonly used for row actions in tables.
Primary, secondary, and ghost variants.
This is a basic card component with a title and description.
| Name | Status | |
|---|---|---|
| John Doe | john@example.com | Active |
| Jane Smith | jane@example.com | Pending |
Are you sure you want to perform this action? This cannot be undone.
Use the confirm_modal and confirm_modal_dynamic macros for styled confirmation dialogs. These support danger, warning, and info variants.
Are you sure you want to delete this item? This action cannot be undone.
Are you sure you want to remove access? The user will need to be re-invited.
Are you sure you want to publish these changes? They will be visible to all users.
Static Message (confirm_modal):
Dynamic Message (confirm_modal_dynamic):
Parameters: id, title, message (or message_var for dynamic), confirm_action, show_var, confirm_text, cancel_text, variant ('danger'|'warning'|'info'), icon
Pattern for displaying record details with a header (icon + badge), table layout, and optional sections. Used for Job Details, Log Details, etc.
ID: 12345
150
Imported
25
Updated
2
Errors
177
Total
|
Owner
|
Acme Corp |
|
Created
|
Dec 11, 2024 14:30 |
|
Source
|
api/products.csv
|
Usage: See app/templates/shared/macros/modals.html → job_details_modal for full implementation.
Specialized modal for displaying log entries with level-based styling, message section, exception display, and stack trace with copy functionality.
ID:
|
Timestamp
|
|
|
Logger
|
|
|
Module
|
|
Usage: See app/templates/admin/logs.html for full implementation.
Charts are provided by Chart.js . Note that default legends are disabled and you should provide descriptions for your charts in HTML.