mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-23 17:51:09 -05:00
12 KiB
12 KiB
ThrillWiki Component Library
This document catalogs all reusable UI components available in ThrillWiki.
Layout Components
Page Header
Standardized header for pages with optional actions and breadcrumbs.
{% include 'components/layout/page_header.html' with
title='Parks'
subtitle='Browse theme parks worldwide'
icon='fas fa-map-marker-alt'
primary_action_url='/parks/create/'
primary_action_text='Add Park'
primary_action_icon='fas fa-plus'
%}
Parameters:
| Parameter | Type | Description |
|---|---|---|
title |
string | Page title (required) |
subtitle |
string | Optional subtitle |
icon |
string | Icon class for title |
primary_action_url |
string | URL for primary action button |
primary_action_text |
string | Text for primary action |
primary_action_icon |
string | Icon for primary action |
secondary_action_url |
string | URL for secondary action |
secondary_action_text |
string | Text for secondary action |
Action Bar
Container for action buttons with consistent layout.
{% include 'components/ui/action_bar.html' with
align='between'
primary_action_text='Save'
secondary_action_text='Preview'
tertiary_action_text='Cancel'
tertiary_action_url='/back/'
%}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
align |
string | 'right' | 'left', 'right', 'center', 'between' |
mobile_stack |
boolean | true | Stack vertically on mobile |
show_border |
boolean | false | Show top border |
primary_action_* |
various | - | Primary button configuration |
secondary_action_* |
various | - | Secondary button configuration |
tertiary_action_* |
various | - | Tertiary button configuration |
Navigation Components
Breadcrumbs
Hierarchical navigation with Schema.org support.
{% include 'components/navigation/breadcrumbs.html' %}
Set breadcrumbs in your view:
from apps.core.utils import build_breadcrumb
def park_detail(request, slug):
park = get_object_or_404(Park, slug=slug)
request.breadcrumbs = [
build_breadcrumb('Home', '/', icon='fas fa-home'),
build_breadcrumb('Parks', reverse('parks:list')),
build_breadcrumb(park.name, is_current=True),
]
return render(request, 'parks/detail.html', {'park': park})
Modal Components
Modal Base
Base modal component with customizable content.
{% include 'components/modals/modal_base.html' with
modal_id='edit-modal'
show_var='showEditModal'
title='Edit Park'
subtitle='Update park information'
icon='fas fa-edit'
size='lg'
animation='scale'
%}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
modal_id |
string | required | Unique identifier |
show_var |
string | required | Alpine.js show variable |
title |
string | - | Modal title |
subtitle |
string | - | Modal subtitle |
icon |
string | - | Title icon class |
size |
string | 'md' | 'sm', 'md', 'lg', 'xl', 'full' |
animation |
string | 'scale' | 'scale', 'slide-up', 'fade' |
close_on_backdrop |
boolean | true | Close when clicking backdrop |
close_on_escape |
boolean | true | Close on Escape key |
show_close_button |
boolean | true | Show X button |
prevent_scroll |
boolean | true | Prevent body scroll |
Confirmation Modal
Pre-styled confirmation dialog.
{% include 'components/modals/modal_confirm.html' with
modal_id='delete-confirm'
show_var='showDeleteModal'
title='Delete Park'
message='Are you sure? This cannot be undone.'
confirm_text='Delete'
confirm_variant='destructive'
confirm_hx_delete='/parks/123/'
%}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
modal_id |
string | required | Unique identifier |
show_var |
string | required | Alpine.js show variable |
title |
string | required | Modal title |
message |
string | required | Confirmation message |
icon |
string | auto | Icon class |
icon_variant |
string | 'warning' | 'destructive', 'warning', 'info', 'success' |
confirm_text |
string | 'Confirm' | Confirm button text |
confirm_variant |
string | 'primary' | 'destructive', 'primary', 'warning' |
cancel_text |
string | 'Cancel' | Cancel button text |
confirm_url |
string | - | URL for confirm (makes it a link) |
confirm_hx_post |
string | - | HTMX POST URL |
confirm_hx_delete |
string | - | HTMX DELETE URL |
on_confirm |
string | - | Alpine.js expression |
Skeleton Components
List Skeleton
{% include 'components/skeletons/list_skeleton.html' with rows=5 %}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
rows |
number | 5 | Number of skeleton rows |
show_avatar |
boolean | false | Show avatar placeholder |
show_meta |
boolean | true | Show metadata line |
show_action |
boolean | true | Show action button placeholder |
Card Grid Skeleton
{% include 'components/skeletons/card_grid_skeleton.html' with cards=6 cols=3 %}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
cards |
number | 6 | Number of skeleton cards |
cols |
number | 3 | Grid columns (sm screens) |
show_image |
boolean | true | Show image placeholder |
show_badge |
boolean | false | Show badge placeholder |
Detail Skeleton
{% include 'components/skeletons/detail_skeleton.html' %}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
show_image |
boolean | true | Show hero image placeholder |
show_sidebar |
boolean | true | Show sidebar section |
content_lines |
number | 8 | Number of content lines |
Table Skeleton
{% include 'components/skeletons/table_skeleton.html' with rows=10 columns=5 %}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
rows |
number | 5 | Number of table rows |
columns |
number | 4 | Number of columns |
show_checkbox |
boolean | false | Show checkbox column |
show_actions |
boolean | true | Show actions column |
Form Skeleton
{% include 'components/skeletons/form_skeleton.html' with fields=4 %}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
fields |
number | 4 | Number of form fields |
show_textarea |
boolean | true | Include textarea field |
columns |
number | 1 | Form columns (1 or 2) |
Form Components
Form Field
Standardized form field with label, input, and validation.
{% include 'forms/partials/form_field.html' with
field=form.name
help_text='Enter the full park name'
size='lg'
%}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
field |
Field | required | Django form field |
label |
string | field.label | Override label |
help_text |
string | field.help_text | Help text |
size |
string | 'md' | 'sm', 'md', 'lg' |
show_label |
boolean | true | Show label |
inline |
boolean | false | Inline layout |
Form Actions
Form submission buttons.
{% include 'forms/partials/form_actions.html' with
submit_text='Save Park'
cancel_url='/parks/'
%}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
submit_text |
string | 'Submit' | Submit button text |
submit_icon |
string | - | Submit button icon |
cancel_url |
string | - | Cancel button URL |
cancel_text |
string | 'Cancel' | Cancel button text |
show_cancel |
boolean | true | Show cancel button |
Field Error
Display field validation errors.
{% include 'forms/partials/field_error.html' with errors=field.errors %}
Field Success
Display field validation success.
{% include 'forms/partials/field_success.html' with message='Available' %}
UI Components
Button
<button class="btn btn-primary">Primary</button>
<button class="btn btn-secondary">Secondary</button>
<button class="btn btn-outline">Outline</button>
<button class="btn btn-ghost">Ghost</button>
<button class="btn btn-link">Link</button>
<button class="btn btn-destructive">Destructive</button>
Sizes:
<button class="btn btn-primary btn-sm">Small</button>
<button class="btn btn-primary">Default</button>
<button class="btn btn-primary btn-lg">Large</button>
Card
{% include 'components/ui/card.html' with
title='Card Title'
subtitle='Card subtitle'
%}
<p>Card content goes here.</p>
{% endinclude %}
Input
{% include 'components/ui/input.html' with
name='email'
type='email'
placeholder='Enter email'
required=True
%}
Status Badge
{% include 'components/status_badge.html' with
status='published'
label='Published'
%}
Status variants:
published/active/approved- Greendraft/pending- Yellowrejected/archived- Redreview- Blue
Icon
{% include 'components/ui/icon.html' with
icon='fas fa-star'
size='lg'
color='primary'
%}
Dialog (Alert Dialog)
{% include 'components/ui/dialog.html' with
dialog_id='alert-dialog'
show_var='showAlert'
title='Alert'
message='This is an alert message.'
confirm_text='OK'
%}
Toast Notifications
From JavaScript
// Success toast
Alpine.store('toast').success('Saved successfully!');
// Error toast
Alpine.store('toast').error('Something went wrong');
// Warning toast
Alpine.store('toast').warning('Session expiring soon');
// Info toast
Alpine.store('toast').info('New features available');
// With custom duration (ms)
Alpine.store('toast').success('Quick message', 2000);
// With action button
Alpine.store('toast').success('Item deleted', 5000, {
action: { label: 'Undo', onClick: () => undoAction() }
});
From Django Views
from apps.core.htmx_utils import htmx_success, htmx_error
# Success toast
return htmx_success('Park saved successfully!')
# Error toast
return htmx_error('Validation failed', status=422)
# With action
return htmx_success('Item deleted', action={
'label': 'Undo',
'onClick': 'undoDelete()'
})
Loading Components
Loading Indicator
{% include 'htmx/components/loading_indicator.html' with
id='my-loading'
text='Loading...'
size='md'
%}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
id |
string | - | Element ID for hx-indicator |
text |
string | 'Loading...' | Loading text |
size |
string | 'md' | 'sm', 'md', 'lg' |
type |
string | 'spinner' | 'spinner', 'dots', 'pulse' |
Pagination
Standard Pagination
{% include 'components/pagination.html' with
page_obj=page_obj
show_first_last=True
%}
HTMX Pagination
{% include 'components/pagination.html' with
page_obj=page_obj
hx_target='#items-list'
hx_swap='innerHTML'
hx_push_url='true'
%}
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
page_obj |
Page | required | Django paginator page |
show_first_last |
boolean | true | Show first/last buttons |
show_page_numbers |
boolean | true | Show page numbers |
max_pages |
number | 5 | Max visible page numbers |
hx_target |
string | - | HTMX target selector |
hx_swap |
string | - | HTMX swap method |
hx_push_url |
boolean | false | Push URL on navigation |