QuantEngine MudBlazor UI: Complete Phase 1-8 Implementation #14
@@ -0,0 +1,646 @@
|
|||||||
|
# SmartAdmin Bootstrap 5 — Style Guide
|
||||||
|
|
||||||
|
**Version**: 5.5.0
|
||||||
|
**Last Updated**: 2026-07-05
|
||||||
|
**Status**: ✅ Complete
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📖 Overview
|
||||||
|
|
||||||
|
This document provides comprehensive guidelines for using SmartAdmin Bootstrap 5 components and utilities. All styles are organized in modular CSS files for better maintainability and performance.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎨 Color System
|
||||||
|
|
||||||
|
### Primary Palette
|
||||||
|
|
||||||
|
| Color | Hex Value | Usage |
|
||||||
|
|-------|-----------|-------|
|
||||||
|
| **Primary** | `#2196f3` | Main actions, links, highlights |
|
||||||
|
| **Secondary** | `#757575` | Neutral, less prominent elements |
|
||||||
|
| **Success** | `#4caf50` | Positive actions, confirmations |
|
||||||
|
| **Danger** | `#f44336` | Destructive actions, errors |
|
||||||
|
| **Warning** | `#ff9800` | Caution, warnings |
|
||||||
|
| **Info** | `#00bcd4` | Information, notifications |
|
||||||
|
|
||||||
|
### Neutral Palette
|
||||||
|
|
||||||
|
| Color | Hex Value | Usage |
|
||||||
|
|-------|-----------|-------|
|
||||||
|
| **Light** | `#f5f5f5` | Light backgrounds |
|
||||||
|
| **Dark** | `#212121` | Dark backgrounds, text |
|
||||||
|
| **White** | `#ffffff` | Main background |
|
||||||
|
| **Transparent** | `rgba(0,0,0,0)` | No background |
|
||||||
|
|
||||||
|
### Gray Scale
|
||||||
|
|
||||||
|
```
|
||||||
|
Gray 100: #f8f9fa (Lightest)
|
||||||
|
Gray 200: #e9ecef
|
||||||
|
Gray 300: #dee2e6
|
||||||
|
Gray 400: #ced4da
|
||||||
|
Gray 500: #adb5bd (Medium)
|
||||||
|
Gray 600: #6c757d
|
||||||
|
Gray 700: #495057
|
||||||
|
Gray 800: #343a40
|
||||||
|
Gray 900: #212529 (Darkest)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔘 Buttons
|
||||||
|
|
||||||
|
### Variants
|
||||||
|
|
||||||
|
**Primary Button**
|
||||||
|
```html
|
||||||
|
<button class="btn btn-primary">Primary</button>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Success Button**
|
||||||
|
```html
|
||||||
|
<button class="btn btn-success">Success</button>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Danger Button**
|
||||||
|
```html
|
||||||
|
<button class="btn btn-danger">Delete</button>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Warning Button**
|
||||||
|
```html
|
||||||
|
<button class="btn btn-warning">Warning</button>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Sizes
|
||||||
|
|
||||||
|
```html
|
||||||
|
<button class="btn btn-primary btn-xs">Extra Small</button>
|
||||||
|
<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>
|
||||||
|
```
|
||||||
|
|
||||||
|
### States
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Disabled -->
|
||||||
|
<button class="btn btn-primary" disabled>Disabled</button>
|
||||||
|
|
||||||
|
<!-- Loading -->
|
||||||
|
<button class="btn btn-primary" disabled>
|
||||||
|
<span class="spinner-border spinner-border-sm me-2"></span>
|
||||||
|
Loading...
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<!-- With Icon -->
|
||||||
|
<button class="btn btn-primary">
|
||||||
|
<i class="fa-solid fa-save me-2"></i>Save
|
||||||
|
</button>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Button Groups
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<button type="button" class="btn btn-primary">Left</button>
|
||||||
|
<button type="button" class="btn btn-primary">Middle</button>
|
||||||
|
<button type="button" class="btn btn-primary">Right</button>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📇 Cards
|
||||||
|
|
||||||
|
### Basic Card
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
Header
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title">Title</h5>
|
||||||
|
<p class="card-text">Content goes here...</p>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer">
|
||||||
|
Footer
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Card Variants
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Card with Badge -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<span class="badge badge-primary">New</span>
|
||||||
|
<h5 class="card-title">Card Title</h5>
|
||||||
|
<p class="card-text">Content here...</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Hoverable Card -->
|
||||||
|
<div class="card" style="cursor: pointer;">
|
||||||
|
<!-- Content -->
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏷️ Badges
|
||||||
|
|
||||||
|
### Variants
|
||||||
|
|
||||||
|
```html
|
||||||
|
<span class="badge badge-primary">Primary</span>
|
||||||
|
<span class="badge badge-success">Success</span>
|
||||||
|
<span class="badge badge-danger">Danger</span>
|
||||||
|
<span class="badge badge-warning">Warning</span>
|
||||||
|
<span class="badge badge-info">Info</span>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pill Badges
|
||||||
|
|
||||||
|
```html
|
||||||
|
<span class="badge badge-primary badge-pill">Primary</span>
|
||||||
|
<span class="badge badge-success badge-pill">Success</span>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ Alerts
|
||||||
|
|
||||||
|
### Variants
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Info Alert -->
|
||||||
|
<div class="alert alert-primary">
|
||||||
|
<i class="fa-solid fa-info-circle me-2"></i>
|
||||||
|
<strong>Info:</strong> Informational message
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Success Alert -->
|
||||||
|
<div class="alert alert-success">
|
||||||
|
<strong>Success!</strong> Operation completed
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Warning Alert -->
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
<strong>Warning!</strong> Please be careful
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Danger Alert -->
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
<strong>Error!</strong> Something went wrong
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Dismissible Alert
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="alert alert-primary alert-dismissible">
|
||||||
|
<strong>Info:</strong> Message goes here
|
||||||
|
<button type="button" class="btn-close" data-dismiss="alert"></button>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Forms
|
||||||
|
|
||||||
|
### Input Fields
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">Email Address</label>
|
||||||
|
<input type="email" class="form-control" placeholder="user@example.com">
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Input Sizes
|
||||||
|
|
||||||
|
```html
|
||||||
|
<input type="text" class="form-control form-control-sm" placeholder="Small input">
|
||||||
|
<input type="text" class="form-control" placeholder="Default input">
|
||||||
|
<input type="text" class="form-control form-control-lg" placeholder="Large input">
|
||||||
|
```
|
||||||
|
|
||||||
|
### Select
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">Choose Option</label>
|
||||||
|
<select class="form-select">
|
||||||
|
<option>Select...</option>
|
||||||
|
<option value="1">Option 1</option>
|
||||||
|
<option value="2">Option 2</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Textarea
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">Message</label>
|
||||||
|
<textarea class="form-control" rows="4"></textarea>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Checkboxes
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="checkbox" class="form-check-input" id="check1">
|
||||||
|
<label class="form-check-label" for="check1">
|
||||||
|
Check this option
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Radio Buttons
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="radio" class="form-check-input" name="options" id="radio1">
|
||||||
|
<label class="form-check-label" for="radio1">
|
||||||
|
Option 1
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Form Validation
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Valid -->
|
||||||
|
<input type="text" class="form-control is-valid">
|
||||||
|
<div class="valid-feedback">Looks good!</div>
|
||||||
|
|
||||||
|
<!-- Invalid -->
|
||||||
|
<input type="text" class="form-control is-invalid">
|
||||||
|
<div class="invalid-feedback">Please correct this</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Input Groups
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-text">$</span>
|
||||||
|
<input type="number" class="form-control">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="text" class="form-control" placeholder="Search...">
|
||||||
|
<button class="btn btn-primary">
|
||||||
|
<i class="fa-solid fa-search"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Tables
|
||||||
|
|
||||||
|
### Basic Table
|
||||||
|
|
||||||
|
```html
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>ID</th>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Email</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>#001</td>
|
||||||
|
<td>John Doe</td>
|
||||||
|
<td>john@example.com</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Table Variants
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Striped -->
|
||||||
|
<table class="table table-striped">...</table>
|
||||||
|
|
||||||
|
<!-- Hover -->
|
||||||
|
<table class="table table-hover">...</table>
|
||||||
|
|
||||||
|
<!-- Bordered -->
|
||||||
|
<table class="table table-bordered">...</table>
|
||||||
|
|
||||||
|
<!-- Striped + Hover -->
|
||||||
|
<table class="table table-striped table-hover">...</table>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Responsive Table
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table">...</table>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Table Pagination
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="table-pagination">
|
||||||
|
<span>Showing 1-10 of 100</span>
|
||||||
|
<ul class="pagination">
|
||||||
|
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
|
||||||
|
<li class="page-item active"><a class="page-link" href="#">1</a></li>
|
||||||
|
<li class="page-item"><a class="page-link" href="#">2</a></li>
|
||||||
|
<li class="page-item"><a class="page-link" href="#">Next</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎭 Modals
|
||||||
|
|
||||||
|
### Basic Modal
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="modal" id="exampleModal">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">Modal Title</h5>
|
||||||
|
<button class="btn-close" data-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
Modal content goes here...
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button class="btn btn-secondary" data-dismiss="modal">Close</button>
|
||||||
|
<button class="btn btn-primary">Save</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Modal Sizes
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Small -->
|
||||||
|
<div class="modal-dialog modal-sm">...</div>
|
||||||
|
|
||||||
|
<!-- Default -->
|
||||||
|
<div class="modal-dialog">...</div>
|
||||||
|
|
||||||
|
<!-- Large -->
|
||||||
|
<div class="modal-dialog modal-lg">...</div>
|
||||||
|
|
||||||
|
<!-- Extra Large -->
|
||||||
|
<div class="modal-dialog modal-xl">...</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌈 Utilities
|
||||||
|
|
||||||
|
### Spacing
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Margin -->
|
||||||
|
<div class="m-1">Margin 1</div>
|
||||||
|
<div class="m-2">Margin 2</div>
|
||||||
|
<div class="m-3">Margin 3</div>
|
||||||
|
|
||||||
|
<!-- Padding -->
|
||||||
|
<div class="p-1">Padding 1</div>
|
||||||
|
<div class="p-2">Padding 2</div>
|
||||||
|
<div class="p-3">Padding 3</div>
|
||||||
|
|
||||||
|
<!-- Specific Sides -->
|
||||||
|
<div class="mt-3">Margin Top</div>
|
||||||
|
<div class="mb-3">Margin Bottom</div>
|
||||||
|
<div class="ms-3">Margin Start</div>
|
||||||
|
<div class="me-3">Margin End</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Display
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="d-none">Hidden</div>
|
||||||
|
<div class="d-block">Block</div>
|
||||||
|
<div class="d-flex">Flex</div>
|
||||||
|
<div class="d-grid">Grid</div>
|
||||||
|
|
||||||
|
<!-- Responsive -->
|
||||||
|
<div class="d-none d-sm-block">Hidden on mobile, visible on tablet+</div>
|
||||||
|
<div class="d-sm-none">Visible on mobile, hidden on tablet+</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Flexbox
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="d-flex">
|
||||||
|
<div class="flex-fill">Fill available space</div>
|
||||||
|
<div class="flex-shrink-0">Don't shrink</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex justify-content-between">
|
||||||
|
<div>Left</div>
|
||||||
|
<div>Right</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex align-items-center gap-2">
|
||||||
|
<i class="fa-solid fa-check"></i>
|
||||||
|
<span>Centered vertically</span>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Text Utilities
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Alignment -->
|
||||||
|
<p class="text-start">Left</p>
|
||||||
|
<p class="text-center">Center</p>
|
||||||
|
<p class="text-end">Right</p>
|
||||||
|
|
||||||
|
<!-- Transform -->
|
||||||
|
<p class="text-uppercase">UPPERCASE</p>
|
||||||
|
<p class="text-lowercase">lowercase</p>
|
||||||
|
<p class="text-capitalize">Capitalize</p>
|
||||||
|
|
||||||
|
<!-- Weight -->
|
||||||
|
<p class="text-bold">Bold</p>
|
||||||
|
<p class="text-semi-bold">Semi-bold</p>
|
||||||
|
<p class="text-normal">Normal</p>
|
||||||
|
|
||||||
|
<!-- Color -->
|
||||||
|
<p class="text-primary">Primary text</p>
|
||||||
|
<p class="text-success">Success text</p>
|
||||||
|
<p class="text-danger">Danger text</p>
|
||||||
|
<p class="text-muted">Muted text</p>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Background Colors
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="bg-primary text-white">Primary Background</div>
|
||||||
|
<div class="bg-success text-white">Success Background</div>
|
||||||
|
<div class="bg-danger text-white">Danger Background</div>
|
||||||
|
<div class="bg-warning text-white">Warning Background</div>
|
||||||
|
<div class="bg-light">Light Background</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Borders
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="border">All borders</div>
|
||||||
|
<div class="border-top">Top border only</div>
|
||||||
|
<div class="border-0">No border</div>
|
||||||
|
<div class="border border-primary">Primary border</div>
|
||||||
|
|
||||||
|
<!-- Rounded -->
|
||||||
|
<div class="rounded">Rounded corners</div>
|
||||||
|
<div class="rounded-circle">Circle</div>
|
||||||
|
<div class="rounded-pill">Pill shape</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Shadows
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div class="shadow">Small shadow</div>
|
||||||
|
<div class="shadow-lg">Large shadow</div>
|
||||||
|
<div class="shadow-none">No shadow</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌙 Dark Mode
|
||||||
|
|
||||||
|
SmartAdmin supports dark mode through the `data-bs-theme` attribute:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Light Mode (default) -->
|
||||||
|
<html data-bs-theme="light">
|
||||||
|
|
||||||
|
<!-- Dark Mode -->
|
||||||
|
<html data-bs-theme="dark">
|
||||||
|
```
|
||||||
|
|
||||||
|
### Toggle Dark Mode with JavaScript
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const html = document.documentElement;
|
||||||
|
const currentTheme = html.getAttribute('data-bs-theme');
|
||||||
|
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
|
||||||
|
html.setAttribute('data-bs-theme', newTheme);
|
||||||
|
|
||||||
|
// Save preference
|
||||||
|
localStorage.setItem('theme', newTheme);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📱 Responsive Breakpoints
|
||||||
|
|
||||||
|
| Breakpoint | Viewport | Class Prefix |
|
||||||
|
|------------|----------|--------------|
|
||||||
|
| **Mobile** | < 576px | None |
|
||||||
|
| **Tablet (sm)** | ≥ 576px | `-sm-` |
|
||||||
|
| **Tablet (md)** | ≥ 768px | `-md-` |
|
||||||
|
| **Desktop (lg)** | ≥ 992px | `-lg-` |
|
||||||
|
| **Desktop (xl)** | ≥ 1200px | `-xl-` |
|
||||||
|
| **Desktop (xxl)** | ≥ 1400px | `-xxl-` |
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Hide on mobile, show on tablet+ -->
|
||||||
|
<div class="d-none d-sm-block">...</div>
|
||||||
|
|
||||||
|
<!-- Different columns on different screens -->
|
||||||
|
<div class="col-12 col-sm-6 col-md-4 col-lg-3">
|
||||||
|
Responsive column
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Different padding on different screens -->
|
||||||
|
<div class="p-2 p-md-3 p-lg-4">
|
||||||
|
Responsive padding
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Best Practices
|
||||||
|
|
||||||
|
1. **Use Semantic HTML**: Always use appropriate HTML elements
|
||||||
|
2. **Accessibility First**: Include ARIA labels and keyboard navigation
|
||||||
|
3. **Mobile First**: Design for mobile first, then enhance for larger screens
|
||||||
|
4. **Consistent Spacing**: Use spacing scale (1, 2, 3, 4, 5) consistently
|
||||||
|
5. **Color Contrast**: Ensure text has sufficient contrast (WCAG AA minimum)
|
||||||
|
6. **Component Reuse**: Use existing components instead of creating new ones
|
||||||
|
7. **Document Changes**: Update this guide when adding new components
|
||||||
|
8. **Test on Real Devices**: Don't rely only on browser DevTools
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Component Library
|
||||||
|
|
||||||
|
Visit **`components-showcase.html`** to see all components in action with interactive examples.
|
||||||
|
|
||||||
|
### Quick Links
|
||||||
|
|
||||||
|
- [Live Component Demo](./components-showcase.html)
|
||||||
|
- [Bootstrap 5 Official Docs](https://getbootstrap.com/docs/5.0/)
|
||||||
|
- [Icon Library (FontAwesome)](https://fontawesome.com/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 CSS File Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
css/
|
||||||
|
├── base.css (Foundation, resets, typography)
|
||||||
|
├── components.css (Buttons, cards, badges, alerts)
|
||||||
|
├── forms.css (Input fields, validation)
|
||||||
|
├── tables.css (Table styles, responsive)
|
||||||
|
├── layout.css (Header, sidebar, grid)
|
||||||
|
├── darkmode.css (Dark theme overrides)
|
||||||
|
├── responsive.css (Mobile-first media queries)
|
||||||
|
├── utilities.css (Spacing, colors, helpers)
|
||||||
|
└── smartapp.min.css (Legacy, for compatibility)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Load Order (HTML <head>):**
|
||||||
|
1. base.css
|
||||||
|
2. components.css
|
||||||
|
3. forms.css
|
||||||
|
4. tables.css
|
||||||
|
5. layout.css
|
||||||
|
6. darkmode.css
|
||||||
|
7. responsive.css
|
||||||
|
8. utilities.css
|
||||||
|
9. smartapp.min.css (fallback)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📞 Support
|
||||||
|
|
||||||
|
For issues or questions:
|
||||||
|
1. Check the component library first
|
||||||
|
2. Review this style guide
|
||||||
|
3. Check Bootstrap 5 official documentation
|
||||||
|
4. Create an issue in the repository
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated:** 2026-07-05
|
||||||
|
**Version:** 5.5.0
|
||||||
|
**Status:** ✅ Complete & Ready for Use
|
||||||
@@ -0,0 +1,553 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-bs-theme="light">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Component Library | SmartAdmin Bootstrap 5</title>
|
||||||
|
<meta name="description" content="SmartAdmin Bootstrap 5 Component Library">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=5">
|
||||||
|
|
||||||
|
<link rel="icon" href="img/favicon-32x32.png" type="image/png" sizes="32x32">
|
||||||
|
|
||||||
|
<!-- SmartAdmin Bootstrap 5 - Modular CSS -->
|
||||||
|
<link rel="stylesheet" media="screen, print" href="css/base.css">
|
||||||
|
<link rel="stylesheet" media="screen, print" href="css/components.css">
|
||||||
|
<link rel="stylesheet" media="screen, print" href="css/forms.css">
|
||||||
|
<link rel="stylesheet" media="screen, print" href="css/tables.css">
|
||||||
|
<link rel="stylesheet" media="screen, print" href="css/layout.css">
|
||||||
|
<link rel="stylesheet" media="screen, print" href="css/darkmode.css">
|
||||||
|
<link rel="stylesheet" media="screen, print" href="css/responsive.css">
|
||||||
|
<link rel="stylesheet" media="screen, print" href="css/utilities.css">
|
||||||
|
|
||||||
|
<!-- Vendor CSS -->
|
||||||
|
<link rel="stylesheet" media="screen, print" href="plugins/waves/waves.min.css">
|
||||||
|
<link rel="stylesheet" media="screen, print" href="css/smartapp.min.css">
|
||||||
|
|
||||||
|
<!-- Icons -->
|
||||||
|
<link rel="stylesheet" media="screen, print" href="webfonts/smartadmin/sa-icons.css">
|
||||||
|
<link rel="stylesheet" media="screen, print" href="webfonts/fontawesome/fontawesome.css">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
padding: 2rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section {
|
||||||
|
margin-bottom: 4rem;
|
||||||
|
padding: 2rem;
|
||||||
|
border-bottom: 2px solid var(--bs-gray-200);
|
||||||
|
}
|
||||||
|
|
||||||
|
.section h2 {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
font-size: 1.75rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--bs-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.section h3 {
|
||||||
|
margin-top: 2rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.component-group {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||||
|
gap: 2rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.component-demo {
|
||||||
|
padding: 1.5rem;
|
||||||
|
background-color: var(--bs-gray-50);
|
||||||
|
border-radius: var(--bs-border-radius-lg);
|
||||||
|
border: 1px solid var(--bs-gray-200);
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-bs-theme="dark"] .component-demo {
|
||||||
|
background-color: var(--bs-gray-800);
|
||||||
|
border-color: var(--bs-gray-700);
|
||||||
|
}
|
||||||
|
|
||||||
|
.component-demo > * + * {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-label {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
font-weight: 600;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--bs-gray-600);
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-group {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 0.5rem;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-swatch {
|
||||||
|
display: inline-block;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: var(--bs-border-radius);
|
||||||
|
border: 1px solid var(--bs-gray-300);
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-palette {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
|
||||||
|
gap: 1rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-item {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-item strong {
|
||||||
|
display: block;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 1320px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
background: linear-gradient(135deg, var(--bs-primary) 0%, #1565c0 100%);
|
||||||
|
color: white;
|
||||||
|
padding: 3rem 2rem;
|
||||||
|
margin-bottom: 3rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 2.5rem;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
header p {
|
||||||
|
margin: 0.5rem 0 0 0;
|
||||||
|
font-size: 1.125rem;
|
||||||
|
opacity: 0.9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-toggle {
|
||||||
|
position: fixed;
|
||||||
|
top: 2rem;
|
||||||
|
right: 2rem;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-toggle .btn {
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
padding: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: var(--bs-box-shadow-lg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.component-group {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
font-size: 1.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- Theme Toggle -->
|
||||||
|
<div class="theme-toggle">
|
||||||
|
<button class="btn btn-primary" id="themeToggle" title="Toggle Dark Mode">
|
||||||
|
<i class="fa-solid fa-moon"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Header -->
|
||||||
|
<header>
|
||||||
|
<h1>SmartAdmin Bootstrap 5</h1>
|
||||||
|
<p>Component Library & Style Guide</p>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<!-- Colors Section -->
|
||||||
|
<section class="section">
|
||||||
|
<h2>🎨 Color Palette</h2>
|
||||||
|
|
||||||
|
<h3>Primary Colors</h3>
|
||||||
|
<div class="color-palette">
|
||||||
|
<div class="color-item">
|
||||||
|
<div class="color-swatch" style="background-color: var(--bs-primary);"></div>
|
||||||
|
<strong>Primary</strong>
|
||||||
|
<small>#2196f3</small>
|
||||||
|
</div>
|
||||||
|
<div class="color-item">
|
||||||
|
<div class="color-swatch" style="background-color: var(--bs-secondary);"></div>
|
||||||
|
<strong>Secondary</strong>
|
||||||
|
<small>#757575</small>
|
||||||
|
</div>
|
||||||
|
<div class="color-item">
|
||||||
|
<div class="color-swatch" style="background-color: var(--bs-success);"></div>
|
||||||
|
<strong>Success</strong>
|
||||||
|
<small>#4caf50</small>
|
||||||
|
</div>
|
||||||
|
<div class="color-item">
|
||||||
|
<div class="color-swatch" style="background-color: var(--bs-danger);"></div>
|
||||||
|
<strong>Danger</strong>
|
||||||
|
<small>#f44336</small>
|
||||||
|
</div>
|
||||||
|
<div class="color-item">
|
||||||
|
<div class="color-swatch" style="background-color: var(--bs-warning);"></div>
|
||||||
|
<strong>Warning</strong>
|
||||||
|
<small>#ff9800</small>
|
||||||
|
</div>
|
||||||
|
<div class="color-item">
|
||||||
|
<div class="color-swatch" style="background-color: var(--bs-info);"></div>
|
||||||
|
<strong>Info</strong>
|
||||||
|
<small>#00bcd4</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Buttons Section -->
|
||||||
|
<section class="section">
|
||||||
|
<h2>🔘 Buttons</h2>
|
||||||
|
|
||||||
|
<h3>Button Variants</h3>
|
||||||
|
<div class="component-group">
|
||||||
|
<div class="component-demo">
|
||||||
|
<div class="demo-label">Primary</div>
|
||||||
|
<button class="btn btn-primary">Primary Button</button>
|
||||||
|
<button class="btn btn-primary btn-sm">Small</button>
|
||||||
|
<button class="btn btn-primary btn-lg">Large</button>
|
||||||
|
</div>
|
||||||
|
<div class="component-demo">
|
||||||
|
<div class="demo-label">Success</div>
|
||||||
|
<button class="btn btn-success">Success Button</button>
|
||||||
|
<button class="btn btn-success btn-sm">Small</button>
|
||||||
|
<button class="btn btn-success" disabled>Disabled</button>
|
||||||
|
</div>
|
||||||
|
<div class="component-demo">
|
||||||
|
<div class="demo-label">Danger</div>
|
||||||
|
<button class="btn btn-danger">Danger Button</button>
|
||||||
|
<button class="btn btn-danger btn-sm">Small</button>
|
||||||
|
<button class="btn btn-danger" disabled>Disabled</button>
|
||||||
|
</div>
|
||||||
|
<div class="component-demo">
|
||||||
|
<div class="demo-label">Warning</div>
|
||||||
|
<button class="btn btn-warning">Warning Button</button>
|
||||||
|
<button class="btn btn-warning btn-sm">Small</button>
|
||||||
|
<button class="btn btn-warning" disabled>Disabled</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Button Group</h3>
|
||||||
|
<div class="component-demo">
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<button type="button" class="btn btn-primary">Left</button>
|
||||||
|
<button type="button" class="btn btn-primary">Middle</button>
|
||||||
|
<button type="button" class="btn btn-primary">Right</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Cards Section -->
|
||||||
|
<section class="section">
|
||||||
|
<h2>📇 Cards</h2>
|
||||||
|
<div class="component-group">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
Card Header
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title">Card Title</h5>
|
||||||
|
<p class="card-text">This is a sample card body with some content.</p>
|
||||||
|
<button class="btn btn-primary btn-sm">Learn More</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title">Simple Card</h5>
|
||||||
|
<p class="card-text">Card without header or footer.</p>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer">
|
||||||
|
Card Footer
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title">Card with Badge</h5>
|
||||||
|
<p class="card-text">
|
||||||
|
<span class="badge badge-primary">Primary</span>
|
||||||
|
<span class="badge badge-success">Success</span>
|
||||||
|
<span class="badge badge-danger">Danger</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Badges Section -->
|
||||||
|
<section class="section">
|
||||||
|
<h2>🏷️ Badges</h2>
|
||||||
|
<div class="component-group">
|
||||||
|
<div class="component-demo">
|
||||||
|
<div class="demo-label">Badge Variants</div>
|
||||||
|
<span class="badge badge-primary me-2">Primary</span>
|
||||||
|
<span class="badge badge-success me-2">Success</span>
|
||||||
|
<span class="badge badge-danger me-2">Danger</span>
|
||||||
|
<span class="badge badge-warning me-2">Warning</span>
|
||||||
|
<span class="badge badge-info">Info</span>
|
||||||
|
</div>
|
||||||
|
<div class="component-demo">
|
||||||
|
<div class="demo-label">Pill Badges</div>
|
||||||
|
<span class="badge badge-primary badge-pill me-2">Primary</span>
|
||||||
|
<span class="badge badge-success badge-pill me-2">Success</span>
|
||||||
|
<span class="badge badge-danger badge-pill">Danger</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Alerts Section -->
|
||||||
|
<section class="section">
|
||||||
|
<h2>⚠️ Alerts</h2>
|
||||||
|
<div class="component-group" style="grid-template-columns: 1fr;">
|
||||||
|
<div class="alert alert-primary">
|
||||||
|
<i class="fa-solid fa-info-circle me-2"></i>
|
||||||
|
<strong>Info Alert:</strong> This is an informational message.
|
||||||
|
</div>
|
||||||
|
<div class="alert alert-success">
|
||||||
|
<i class="fa-solid fa-check-circle me-2"></i>
|
||||||
|
<strong>Success Alert:</strong> Operation completed successfully!
|
||||||
|
</div>
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
<i class="fa-solid fa-exclamation-triangle me-2"></i>
|
||||||
|
<strong>Warning Alert:</strong> Please be careful with this action.
|
||||||
|
</div>
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
<i class="fa-solid fa-exclamation-circle me-2"></i>
|
||||||
|
<strong>Danger Alert:</strong> An error occurred, please try again.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Forms Section -->
|
||||||
|
<section class="section">
|
||||||
|
<h2>📝 Forms</h2>
|
||||||
|
|
||||||
|
<h3>Input Fields</h3>
|
||||||
|
<div class="component-demo" style="max-width: 400px;">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label required">Text Input</label>
|
||||||
|
<input type="text" class="form-control" placeholder="Enter text">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">Email Input</label>
|
||||||
|
<input type="email" class="form-control" placeholder="user@example.com">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">Password Input</label>
|
||||||
|
<input type="password" class="form-control" placeholder="••••••••">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">Select</label>
|
||||||
|
<select class="form-select">
|
||||||
|
<option>Choose option</option>
|
||||||
|
<option>Option 1</option>
|
||||||
|
<option>Option 2</option>
|
||||||
|
<option>Option 3</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">Textarea</label>
|
||||||
|
<textarea class="form-control" rows="3" placeholder="Enter your message..."></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Checkboxes & Radio</h3>
|
||||||
|
<div class="component-demo" style="max-width: 300px;">
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="checkbox" class="form-check-input" id="check1">
|
||||||
|
<label class="form-check-label" for="check1">Checkbox 1</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="checkbox" class="form-check-input" id="check2" checked>
|
||||||
|
<label class="form-check-label" for="check2">Checkbox 2 (Checked)</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="radio" class="form-check-input" name="radio" id="radio1" checked>
|
||||||
|
<label class="form-check-label" for="radio1">Radio 1</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="radio" class="form-check-input" name="radio" id="radio2">
|
||||||
|
<label class="form-check-label" for="radio2">Radio 2</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Form Validation</h3>
|
||||||
|
<div class="component-demo" style="max-width: 400px;">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">Valid Input</label>
|
||||||
|
<input type="text" class="form-control is-valid" value="Valid input">
|
||||||
|
<div class="valid-feedback">Looks good!</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label">Invalid Input</label>
|
||||||
|
<input type="text" class="form-control is-invalid" value="Invalid">
|
||||||
|
<div class="invalid-feedback">This field is required.</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Tables Section -->
|
||||||
|
<section class="section">
|
||||||
|
<h2>📊 Tables</h2>
|
||||||
|
<div class="component-demo">
|
||||||
|
<table class="table table-striped table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>ID</th>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Email</th>
|
||||||
|
<th>Status</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>#001</td>
|
||||||
|
<td>John Doe</td>
|
||||||
|
<td>john@example.com</td>
|
||||||
|
<td><span class="badge badge-success">Active</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>#002</td>
|
||||||
|
<td>Jane Smith</td>
|
||||||
|
<td>jane@example.com</td>
|
||||||
|
<td><span class="badge badge-success">Active</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>#003</td>
|
||||||
|
<td>Bob Johnson</td>
|
||||||
|
<td>bob@example.com</td>
|
||||||
|
<td><span class="badge badge-danger">Inactive</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Typography Section -->
|
||||||
|
<section class="section">
|
||||||
|
<h2>📝 Typography</h2>
|
||||||
|
|
||||||
|
<h3>Headings</h3>
|
||||||
|
<div class="component-demo">
|
||||||
|
<h1>Heading 1</h1>
|
||||||
|
<h2>Heading 2</h2>
|
||||||
|
<h3>Heading 3</h3>
|
||||||
|
<h4>Heading 4</h4>
|
||||||
|
<h5>Heading 5</h5>
|
||||||
|
<h6>Heading 6</h6>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Text Styles</h3>
|
||||||
|
<div class="component-demo">
|
||||||
|
<p><strong>Bold Text:</strong> Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
|
||||||
|
<p><em>Italic Text:</em> Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
|
||||||
|
<p><u>Underlined Text:</u> Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
|
||||||
|
<p><del>Deleted Text:</del> Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
|
||||||
|
<p><small>Small Text:</small> Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Utilities Section -->
|
||||||
|
<section class="section">
|
||||||
|
<h2>⚙️ Utilities</h2>
|
||||||
|
|
||||||
|
<h3>Text Alignment</h3>
|
||||||
|
<div class="component-demo">
|
||||||
|
<p class="text-start">Left aligned text</p>
|
||||||
|
<p class="text-center">Center aligned text</p>
|
||||||
|
<p class="text-end">Right aligned text</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Text Colors</h3>
|
||||||
|
<div class="component-demo">
|
||||||
|
<p class="text-primary">Primary text</p>
|
||||||
|
<p class="text-success">Success text</p>
|
||||||
|
<p class="text-danger">Danger text</p>
|
||||||
|
<p class="text-warning">Warning text</p>
|
||||||
|
<p class="text-muted">Muted text</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Background Colors</h3>
|
||||||
|
<div class="component-demo">
|
||||||
|
<div class="bg-primary text-white p-3 mb-2">Primary Background</div>
|
||||||
|
<div class="bg-success text-white p-3 mb-2">Success Background</div>
|
||||||
|
<div class="bg-danger text-white p-3 mb-2">Danger Background</div>
|
||||||
|
<div class="bg-warning text-white p-3 mb-2">Warning Background</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Theme Toggle
|
||||||
|
const themeToggle = document.getElementById('themeToggle');
|
||||||
|
const html = document.documentElement;
|
||||||
|
|
||||||
|
// Check saved preference
|
||||||
|
const savedTheme = localStorage.getItem('theme') || 'light';
|
||||||
|
html.setAttribute('data-bs-theme', savedTheme);
|
||||||
|
updateThemeIcon();
|
||||||
|
|
||||||
|
themeToggle.addEventListener('click', () => {
|
||||||
|
const currentTheme = html.getAttribute('data-bs-theme');
|
||||||
|
const newTheme = currentTheme === 'light' ? 'dark' : 'light';
|
||||||
|
html.setAttribute('data-bs-theme', newTheme);
|
||||||
|
localStorage.setItem('theme', newTheme);
|
||||||
|
updateThemeIcon();
|
||||||
|
});
|
||||||
|
|
||||||
|
function updateThemeIcon() {
|
||||||
|
const currentTheme = html.getAttribute('data-bs-theme');
|
||||||
|
const icon = themeToggle.querySelector('i');
|
||||||
|
if (currentTheme === 'dark') {
|
||||||
|
icon.classList.remove('fa-moon');
|
||||||
|
icon.classList.add('fa-sun');
|
||||||
|
themeToggle.classList.remove('btn-primary');
|
||||||
|
themeToggle.classList.add('btn-warning');
|
||||||
|
} else {
|
||||||
|
icon.classList.add('fa-moon');
|
||||||
|
icon.classList.remove('fa-sun');
|
||||||
|
themeToggle.classList.add('btn-primary');
|
||||||
|
themeToggle.classList.remove('btn-warning');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user