testio-tailwind 3.21.0 → 3.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI_DESIGN_SYSTEM_REFERENCE.md +2407 -0
- package/package.json +1 -1
- package/src/_data/navigation.json +4 -0
- package/src/_includes/header.njk +8 -8
- package/src/_includes/page-with-sidebar.njk +10 -1
- package/src/assets/scripts/app.js +27 -0
- package/src/assets/stylesheets/components/designsystem/designsystem-styles.css +4 -2
- package/src/assets/stylesheets/components/tables.css +4 -0
- package/src/pages/buttons/block.haml +1 -0
- package/src/pages/buttons/button_group.haml +1 -0
- package/src/pages/buttons/buttons-lg.haml +1 -0
- package/src/pages/buttons/buttons-round.haml +1 -0
- package/src/pages/buttons/buttons-sm.haml +1 -0
- package/src/pages/buttons/buttons-xl.haml +1 -0
- package/src/pages/buttons/buttons.haml +1 -0
- package/src/pages/buttons/buttons_input.haml +4 -0
- package/src/pages/buttons/dropdown-menu.haml +2 -11
- package/src/pages/buttons/square-buttons.haml +15 -0
- package/src/pages/components/alerts.haml +1 -0
- package/src/pages/components/banner_cards.haml +1 -0
- package/src/pages/components/card_badges.haml +8 -7
- package/src/pages/components/cards.haml +15 -22
- package/src/pages/components/cards_customer.haml +1 -0
- package/src/pages/components/cards_fixedwidth.haml +7 -0
- package/src/pages/components/cards_iconheader.haml +1 -0
- package/src/pages/components/cards_tester.haml +1 -0
- package/src/pages/components/descriptionlist.haml +12 -3
- package/src/pages/components/devices.haml +1 -0
- package/src/pages/components/drawer.haml +1 -0
- package/src/pages/components/drawer_filter.haml +1 -0
- package/src/pages/components/emptystate.haml +2 -0
- package/src/pages/{buttons → components}/info_popover.haml +2 -1
- package/src/pages/components/listitem_with_actionbar.haml +1 -0
- package/src/pages/components/listitem_with_footer.haml +1 -0
- package/src/pages/components/listitems.haml +1 -0
- package/src/pages/components/listitems_badge.haml +1 -0
- package/src/pages/components/listitems_collapsable.haml +1 -0
- package/src/pages/components/listitems_nested.haml +1 -0
- package/src/pages/components/listitems_selectable.haml +1 -0
- package/src/pages/components/loading_spinner.haml +1 -0
- package/src/pages/components/metasidebar.haml +1 -0
- package/src/pages/components/modal_details.haml +3 -1
- package/src/pages/components/notifications.haml +2 -1
- package/src/pages/components/user_item.haml +1 -0
- package/src/pages/forms/attachments.pug +71 -0
- package/src/pages/forms/checkboxes.haml +1 -0
- package/src/pages/forms/checkboxes_devices.haml +1 -0
- package/src/pages/forms/date-time.haml +1 -0
- package/src/pages/forms/dropzone.pug +38 -0
- package/src/pages/forms/flatpickr.haml +1 -1
- package/src/pages/forms/form-addon.haml +1 -0
- package/src/pages/forms/form-card.haml +1 -0
- package/src/pages/forms/form_grid.haml +1 -0
- package/src/pages/forms/form_hint.haml +1 -0
- package/src/pages/forms/forms.haml +1 -0
- package/src/pages/forms/radiobuttons.haml +1 -0
- package/src/pages/forms/rating_scale.haml +1 -0
- package/src/pages/forms/search.haml +1 -0
- package/src/pages/forms/selectable_token.haml +1 -0
- package/src/pages/forms/selectable_token_browsers.haml +1 -0
- package/src/pages/forms/selectable_token_lg.haml +1 -0
- package/src/pages/forms/selectable_token_xl.haml +1 -0
- package/src/pages/forms/textarea.haml +4 -0
- package/src/pages/forms/toggle-buttons.haml +1 -0
- package/src/pages/forms/toggle-switch.haml +1 -0
- package/src/pages/forms/trix_editor.pug +1 -0
- package/src/pages/icons/bug-icons.haml +1 -0
- package/src/pages/icons/index.njk +18 -14
- package/src/pages/icons/status-icons.haml +1 -0
- package/src/pages/layout/app_layout.haml +2 -0
- package/src/pages/layout/margins.haml +1 -0
- package/src/pages/layout/max_width.haml +2 -1
- package/src/pages/layout/paddings.haml +1 -0
- package/src/pages/layout/spacing.haml +1 -0
- package/src/pages/{examples → layouts}/agenticqa_splitview.haml +1 -1
- package/src/pages/layouts/layout-actionbar.haml +45 -0
- package/src/pages/{examples → layouts}/layout-basic.haml +3 -2
- package/src/pages/{examples → layouts}/layout-chat.haml +3 -2
- package/src/pages/{examples/layout-sidebar-actionbar-metasidebar.haml → layouts/layout-chatwindow.haml} +3 -2
- package/src/pages/{examples → layouts}/layout-customer.haml +3 -2
- package/src/pages/{examples → layouts}/layout-form-sidebar-actionbar-metasidebar.haml +5 -228
- package/src/pages/{examples → layouts}/layout-manager.haml +3 -2
- package/src/pages/{examples → layouts}/layout-metasidebar.haml +3 -2
- package/src/pages/{examples → layouts}/layout-sidebar.haml +3 -2
- package/src/pages/{examples → layouts}/layout-tester.haml +3 -2
- package/src/pages/{examples → layouts}/splitview-metasidebar.haml +3 -3
- package/src/pages/{examples → layouts}/splitview-testcases.haml +2 -2
- package/src/pages/{examples → layouts}/splitview.haml +3 -3
- package/src/pages/navigation/header-manager.haml +1 -0
- package/src/pages/navigation/header-tester.haml +1 -0
- package/src/pages/navigation/header.haml +1 -0
- package/src/pages/navigation/header_customer.haml +1 -0
- package/src/pages/navigation/header_tester_epam.haml +1 -0
- package/src/pages/navigation/product_dropdown.haml +2 -0
- package/src/pages/navigation/radio_tabs.haml +1 -0
- package/src/pages/navigation/sidebar-manager.haml +2 -1
- package/src/pages/navigation/sidebar-tester-elements.haml +1 -0
- package/src/pages/navigation/sidebar-tester-seatlimitation.haml +1 -1
- package/src/pages/navigation/sidebar-tester.haml +1 -1
- package/src/pages/navigation/sidebar.haml +1 -0
- package/src/pages/navigation/sidebar_collapsables.haml +1 -0
- package/src/pages/navigation/sidebar_customer.haml +1 -0
- package/src/pages/navigation/tabnavigation.haml +1 -0
- package/src/pages/navigation/tabnavigation_actions.haml +1 -0
- package/src/pages/navigation/tabnavigation_pills.haml +1 -0
- package/src/pages/navigation/tabnavigation_sm.haml +1 -0
- package/src/pages/navigation/test-header-tester.haml +2 -0
- package/src/pages/tables/index.njk +7 -0
- package/src/pages/tables/tables-cellstyle.haml +38 -0
- package/src/pages/tables/tables-grid.haml +31 -0
- package/src/pages/tables/tables.haml +16 -0
- package/src/pages/tables/tables_alternating.haml +27 -0
- package/src/pages/tables/tables_borders.haml +22 -0
- package/src/pages/tables/tables_cells.haml +50 -0
- package/src/pages/tables/tables_footer.haml +27 -0
- package/src/pages/tables/tables_formrow.haml +31 -0
- package/src/pages/tables/tables_header.haml +22 -0
- package/src/pages/{components → tables}/tables_linked.haml +11 -10
- package/src/pages/typography/link_with_icon.haml +10 -2
- package/src/pages/typography/linked_icon.haml +6 -0
- package/src/pages/typography/section_header.haml +1 -0
- package/src/pages/typography/section_header_actions.haml +1 -0
- package/src/pages/typography/text_with_icon.haml +3 -2
- package/utils/filters.js +161 -0
- package/CLAUDE_DESIGN_SYSTEM_REFERENCE.md +0 -1978
- package/src/pages/buttons/link-with-icon.haml +0 -13
- package/src/pages/components/tables-cellstyle.pug +0 -285
- package/src/pages/components/tables-grid.pug +0 -258
- package/src/pages/components/tables.haml +0 -57
- package/src/pages/components/tables_cells.pug +0 -57
- package/src/pages/components/tables_formrow.haml +0 -55
- package/src/pages/examples/layout-actionbar.haml +0 -268
- package/src/pages/examples/layout-sidebar-actionbar.haml +0 -308
- package/src/pages/forms/uploads.pug +0 -101
|
@@ -0,0 +1,2407 @@
|
|
|
1
|
+
# Test IO Tailwind Design System - AI Reference Guide
|
|
2
|
+
|
|
3
|
+
**Version:** 3.22.0
|
|
4
|
+
**Framework:** Tailwind CSS 4.x
|
|
5
|
+
**Package:** `testio-tailwind`
|
|
6
|
+
**Last Updated:** January 2026
|
|
7
|
+
**Node Version:** v23.11.0
|
|
8
|
+
|
|
9
|
+
This document serves as a comprehensive reference for AI Agents to utilize the Test IO Tailwind design system when building pages and components in other projects.
|
|
10
|
+
|
|
11
|
+
## Recent Updates (January 2026)
|
|
12
|
+
|
|
13
|
+
- ✨ **HAML Preview**: New HAML preview functionality for live component viewing
|
|
14
|
+
- ✨ **HAML Converter**: Added HAML conversion utility for template processing
|
|
15
|
+
- ✨ **AI Documentation**: Comprehensive AI documentation across all component pages
|
|
16
|
+
- ✨ **Date & Time Picker**: Flatpickr integration for date and time selection
|
|
17
|
+
- 📊 **Tables Reorganization**: Tables moved to dedicated `/pages/tables/` section
|
|
18
|
+
- 🎨 **Table Striped Style**: Fixed table alternating row styling with proper dark mode support
|
|
19
|
+
- 📝 **Component Descriptions**: All component pages now include descriptions and use cases
|
|
20
|
+
- 🎯 **Button Documentation**: Updated button pages with detailed descriptions
|
|
21
|
+
- 🔄 **Drawer Fixes**: Improved drawer footer padding and responsive behavior
|
|
22
|
+
- 🛡️ **Security Updates**: Addressed npm vulnerabilities
|
|
23
|
+
- 🔧 **Splitview Improvements**: Fixed splitview details close button and responsive behavior
|
|
24
|
+
- 🏷️ **Image Tags**: Added support for image tagging in components
|
|
25
|
+
- 🔧 **HAML Conversion**: Tables documentation files converted to HAML format
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Table of Contents
|
|
30
|
+
1. [Installation & Setup](#installation--setup)
|
|
31
|
+
2. [Component Library Structure](#component-library-structure)
|
|
32
|
+
3. [Color System](#color-system)
|
|
33
|
+
4. [Typography](#typography)
|
|
34
|
+
5. [Spacing & Layout](#spacing--layout)
|
|
35
|
+
6. [Button Components](#button-components)
|
|
36
|
+
7. [Card Components](#card-components)
|
|
37
|
+
8. [Form Components](#form-components)
|
|
38
|
+
9. [Overlay Components (Modal & Drawer)](#overlay-components-modal--drawer)
|
|
39
|
+
10. [Page Layout Components](#page-layout-components)
|
|
40
|
+
11. [Navigation Components](#navigation-components)
|
|
41
|
+
12. [Feedback Components](#feedback-components)
|
|
42
|
+
13. [Data Display Components](#data-display-components)
|
|
43
|
+
14. [List Components](#list-components)
|
|
44
|
+
15. [Splitview Components](#splitview-components)
|
|
45
|
+
16. [Chat Components](#chat-components)
|
|
46
|
+
17. [Chart Components](#chart-components)
|
|
47
|
+
18. [Status & Progress Components](#status--progress-components)
|
|
48
|
+
19. [Utility Components](#utility-components)
|
|
49
|
+
20. [AgenticQA Components](#agenticqa-components)
|
|
50
|
+
21. [Dark Mode](#dark-mode)
|
|
51
|
+
22. [Best Practices for AI Agents](#best-practices-for-ai-agents)
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Installation & Setup
|
|
56
|
+
|
|
57
|
+
### NPM Installation
|
|
58
|
+
```bash
|
|
59
|
+
npm install testio-tailwind
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### CSS Import
|
|
63
|
+
```css
|
|
64
|
+
@import 'testio-tailwind/dist/static/app.compiled.css';
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### JavaScript Import
|
|
68
|
+
```javascript
|
|
69
|
+
import 'testio-tailwind/dist/static/app.bundled.js';
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Component Library Structure
|
|
75
|
+
|
|
76
|
+
The design system includes a comprehensive component library organized by category. All components are documented with live examples in the `src/pages/` directory.
|
|
77
|
+
|
|
78
|
+
### Directory Organization
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
src/pages/
|
|
82
|
+
├── agenticqa/ # AgenticQA-specific components
|
|
83
|
+
│ ├── assets.haml
|
|
84
|
+
│ ├── chat_*.haml # Chat variants
|
|
85
|
+
│ ├── header.haml
|
|
86
|
+
│ ├── listitem.haml
|
|
87
|
+
│ ├── pageheader.haml
|
|
88
|
+
│ ├── splitview_items.haml
|
|
89
|
+
│ ├── status_stepper.haml
|
|
90
|
+
│ └── tables-*.haml
|
|
91
|
+
├── buttons/ # Button components and variants
|
|
92
|
+
│ ├── buttons.haml # Standard buttons
|
|
93
|
+
│ ├── buttons-sm.haml # Small buttons
|
|
94
|
+
│ ├── buttons-lg.haml # Large buttons
|
|
95
|
+
│ ├── buttons-xl.haml # Extra large buttons
|
|
96
|
+
│ ├── buttons-round.haml
|
|
97
|
+
│ ├── square-buttons.haml
|
|
98
|
+
│ ├── block.haml
|
|
99
|
+
│ ├── button_group.haml
|
|
100
|
+
│ ├── buttons_input.haml
|
|
101
|
+
│ └── dropdown-menu.haml
|
|
102
|
+
├── charts/ # ECharts data visualization
|
|
103
|
+
│ ├── area.haml
|
|
104
|
+
│ ├── bar_horizontal.haml
|
|
105
|
+
│ ├── bar_vertical.haml
|
|
106
|
+
│ ├── colors.haml
|
|
107
|
+
│ ├── donut.haml
|
|
108
|
+
│ ├── gauge.haml
|
|
109
|
+
│ ├── legend.haml
|
|
110
|
+
│ └── line.haml
|
|
111
|
+
├── components/ # UI components
|
|
112
|
+
│ ├── alerts.haml
|
|
113
|
+
│ ├── cards.haml
|
|
114
|
+
│ ├── cards_*.haml # Card variants
|
|
115
|
+
│ ├── chat_window.haml
|
|
116
|
+
│ ├── drawer.haml
|
|
117
|
+
│ ├── drawer_filter.haml
|
|
118
|
+
│ ├── emptystate.haml
|
|
119
|
+
│ ├── info_popover.haml
|
|
120
|
+
│ ├── listitems.haml
|
|
121
|
+
│ ├── listitems_*.haml # List item variants
|
|
122
|
+
│ ├── loading_spinner.haml
|
|
123
|
+
│ ├── modal_details.haml
|
|
124
|
+
│ ├── notifications.haml
|
|
125
|
+
│ ├── pagination.haml
|
|
126
|
+
│ ├── progress.haml
|
|
127
|
+
│ ├── splitview_*.haml
|
|
128
|
+
│ └── tags.haml
|
|
129
|
+
├── forms/ # Form components
|
|
130
|
+
│ ├── forms.haml # Basic inputs
|
|
131
|
+
│ ├── checkboxes.haml
|
|
132
|
+
│ ├── radiobuttons.haml
|
|
133
|
+
│ ├── toggle-switch.haml
|
|
134
|
+
│ ├── toggle-buttons.haml
|
|
135
|
+
│ ├── select2.haml
|
|
136
|
+
│ ├── tomselect.haml
|
|
137
|
+
│ ├── flatpickr.haml # Date/time picker
|
|
138
|
+
│ ├── date-time.haml
|
|
139
|
+
│ ├── textarea.haml
|
|
140
|
+
│ ├── rating_scale.haml
|
|
141
|
+
│ ├── selectable_token.haml
|
|
142
|
+
│ └── form_grid.haml
|
|
143
|
+
├── layout/ # Layout utilities
|
|
144
|
+
│ ├── app_layout.haml
|
|
145
|
+
│ ├── spacing.haml
|
|
146
|
+
│ ├── paddings.haml
|
|
147
|
+
│ ├── margins.haml
|
|
148
|
+
│ └── max_width.haml
|
|
149
|
+
├── navigation/ # Navigation components
|
|
150
|
+
│ ├── header.haml
|
|
151
|
+
│ ├── header_*.haml # Portal-specific headers
|
|
152
|
+
│ ├── sidebar.haml
|
|
153
|
+
│ ├── sidebar_*.haml # Portal-specific sidebars
|
|
154
|
+
│ ├── tabnavigation.haml
|
|
155
|
+
│ ├── tabnavigation_*.haml
|
|
156
|
+
│ └── radio_tabs.haml
|
|
157
|
+
├── tables/ # Table components
|
|
158
|
+
│ ├── tables.haml
|
|
159
|
+
│ ├── tables_alternating.haml
|
|
160
|
+
│ ├── tables_borders.haml
|
|
161
|
+
│ ├── tables_cells.haml
|
|
162
|
+
│ ├── tables_footer.haml
|
|
163
|
+
│ ├── tables_header.haml
|
|
164
|
+
│ ├── tables_linked.haml
|
|
165
|
+
│ ├── tables-cellstyle.haml
|
|
166
|
+
│ └── tables-grid.haml
|
|
167
|
+
└── typography/ # Typography examples
|
|
168
|
+
├── headings.haml
|
|
169
|
+
├── section_header.haml
|
|
170
|
+
└── text_with_icon.haml
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### How to Use Components
|
|
174
|
+
|
|
175
|
+
#### 1. **View Live Examples**
|
|
176
|
+
All components have live documentation available at the local development server:
|
|
177
|
+
```bash
|
|
178
|
+
npm start
|
|
179
|
+
# Visit: http://localhost:8080/buttons/
|
|
180
|
+
# Visit: http://localhost:8080/components/
|
|
181
|
+
# Visit: http://localhost:8080/forms/
|
|
182
|
+
# Visit: http://localhost:8080/tables/
|
|
183
|
+
# Visit: http://localhost:8080/charts/
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
#### 2. **HAML to HTML Reference**
|
|
187
|
+
|
|
188
|
+
```haml
|
|
189
|
+
<!-- HAML -->
|
|
190
|
+
%button.btn.btn-primary{type:'submit', disabled:''}
|
|
191
|
+
%i.icon.icon-save.mr-xs
|
|
192
|
+
Save Changes
|
|
193
|
+
|
|
194
|
+
<!-- Renders as -->
|
|
195
|
+
<button class="btn btn-primary" type="submit" disabled="">
|
|
196
|
+
<i class="icon icon-save mr-xs"></i>
|
|
197
|
+
Save Changes
|
|
198
|
+
</button>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**HAML Attribute Format:**
|
|
202
|
+
- Use curly braces for attributes: `{key:'value'}`
|
|
203
|
+
- Boolean attributes: `{checked:''}` or `{disabled:''}`
|
|
204
|
+
- Multiple attributes: `{type:'checkbox', id:'check1'}`
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Color System
|
|
209
|
+
|
|
210
|
+
### Semantic Colors
|
|
211
|
+
Use these color utilities for consistent semantic meaning:
|
|
212
|
+
|
|
213
|
+
```html
|
|
214
|
+
<!-- Primary Actions -->
|
|
215
|
+
<div class="bg-primary text-white">Primary action</div>
|
|
216
|
+
<div class="bg-link text-white">Link color</div>
|
|
217
|
+
|
|
218
|
+
<!-- Status Colors -->
|
|
219
|
+
<div class="bg-success text-white">Success state</div>
|
|
220
|
+
<div class="bg-danger text-white">Error/danger state</div>
|
|
221
|
+
<div class="bg-info text-white">Information</div>
|
|
222
|
+
<div class="bg-blocked text-white">Warning/blocked</div>
|
|
223
|
+
<div class="bg-pending text-gray-darker">Pending state</div>
|
|
224
|
+
|
|
225
|
+
<!-- Functional Colors -->
|
|
226
|
+
<div class="bg-appbody text-appbody-textcolor">App background</div>
|
|
227
|
+
<div class="bg-card">Card background</div>
|
|
228
|
+
<div class="bg-header text-white">Header background</div>
|
|
229
|
+
<div class="bg-listitem">List item background</div>
|
|
230
|
+
<div class="bg-actionbar">Action bar (dark)</div>
|
|
231
|
+
<div class="border-bordercolor">Standard border</div>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Color Palette
|
|
235
|
+
|
|
236
|
+
**Grays:** `gray-100` through `gray-900`, plus `gray-lightest`, `gray-lighter`, `gray-light`, `gray-dark`, `gray-darker`, `gray-darkest`
|
|
237
|
+
|
|
238
|
+
**Brand Colors:**
|
|
239
|
+
- **Primary (Petrol):** `petrol` (#236a84 light, #78eac1 dark)
|
|
240
|
+
- **Success:** `green` (#8cbd24 light, #33BA9E dark)
|
|
241
|
+
- **Danger/Critical:** `red` (#ec0404 light, #FF3131 dark)
|
|
242
|
+
- **Warning:** `orange` (#f48d21)
|
|
243
|
+
- **Info:** `blue` (#326dd1)
|
|
244
|
+
- **Accent Colors:** `teal`, `purple`, `pink`, `yellow`
|
|
245
|
+
|
|
246
|
+
**Priority Levels:**
|
|
247
|
+
- `critical` - Red (#FF3131)
|
|
248
|
+
- `high` - Yellow (#d8ce0d)
|
|
249
|
+
- `low` - Gray (#9fa2a8)
|
|
250
|
+
|
|
251
|
+
**Issue Types:**
|
|
252
|
+
- `visual` - Orange (#f48d21)
|
|
253
|
+
- `content` - Blue (#326dd1)
|
|
254
|
+
- `usability` - Petrol dark (#263340)
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Typography
|
|
259
|
+
|
|
260
|
+
### Font Families
|
|
261
|
+
- **Body/Sans:** `font-sans` - Source Sans 3
|
|
262
|
+
- **Monospace:** `font-mono` - Source Code Pro
|
|
263
|
+
|
|
264
|
+
### Headings
|
|
265
|
+
```html
|
|
266
|
+
<h1 class="text-heading-1 font-light">Main Title (2.25rem)</h1>
|
|
267
|
+
<h2 class="text-heading-2 font-light">Section Title (1.875rem)</h2>
|
|
268
|
+
<h3 class="text-heading-3 font-light">Subsection (1.563rem)</h3>
|
|
269
|
+
<h4 class="text-heading-4 font-light">Sub-heading (1.375rem)</h4>
|
|
270
|
+
<h5 class="text-heading-5 font-light">Minor heading (1.125rem)</h5>
|
|
271
|
+
<h6 class="text-heading-6 font-light">Smallest heading (1rem)</h6>
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Display Text
|
|
275
|
+
```html
|
|
276
|
+
<h1 class="text-display-1 font-extralight">Hero Text (3.25rem)</h1>
|
|
277
|
+
<h2 class="text-display-2 font-extralight">Large Display (3rem)</h2>
|
|
278
|
+
<h3 class="text-display-3 font-extralight">Medium Display (2.75rem)</h3>
|
|
279
|
+
<h4 class="text-display-4 font-extralight">Small Display (2.5rem)</h4>
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Body Text Sizes
|
|
283
|
+
```html
|
|
284
|
+
<p class="text-base">Base text (0.875rem - default)</p>
|
|
285
|
+
<p class="text-lg">Large text (1.25rem)</p>
|
|
286
|
+
<p class="text-sm">Small text (0.813rem)</p>
|
|
287
|
+
<p class="text-xs">Extra small (0.6875rem)</p>
|
|
288
|
+
<p class="text-xxs">Tiny text (0.625rem)</p>
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Labels & Special Text
|
|
292
|
+
```html
|
|
293
|
+
<label class="text-label">Form Label (0.8125rem, 0.75rem in dark)</label>
|
|
294
|
+
<label class="text-label-sm">Small Label (0.75rem)</label>
|
|
295
|
+
<h3 class="text-card-header">Card Header (1.125rem in dark)</h3>
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Spacing & Layout
|
|
301
|
+
|
|
302
|
+
### Spacing Scale
|
|
303
|
+
- `xxs` - 0.3125rem (5px)
|
|
304
|
+
- `xs` - 0.625rem (10px)
|
|
305
|
+
- `sm` - 0.9375rem (15px)
|
|
306
|
+
- `md` - 1.25rem (20px)
|
|
307
|
+
- `spacing` - 1.875rem (30px) - **base unit**
|
|
308
|
+
- `lg` - 3.125rem (50px)
|
|
309
|
+
- `xl` - 3.75rem (60px)
|
|
310
|
+
- `xxl` - 5.625rem (90px)
|
|
311
|
+
|
|
312
|
+
### Common Spacing Patterns
|
|
313
|
+
```html
|
|
314
|
+
<!-- Padding -->
|
|
315
|
+
<div class="p-md">Standard padding (20px)</div>
|
|
316
|
+
<div class="p-card-padding">Card padding (30px)</div>
|
|
317
|
+
<div class="px-md py-sm">Mixed padding</div>
|
|
318
|
+
|
|
319
|
+
<!-- Margins -->
|
|
320
|
+
<div class="mb-spacing">Standard margin bottom (30px)</div>
|
|
321
|
+
<div class="mt-xxs">Tiny margin top (5px)</div>
|
|
322
|
+
<div class="mb-heading">Bottom margin for headings</div>
|
|
323
|
+
|
|
324
|
+
<!-- Gaps (for flexbox/grid) -->
|
|
325
|
+
<div class="flex gap-xs">Flex with 10px gap</div>
|
|
326
|
+
<div class="grid gap-grid-gutter">Grid with gutter (20px light, 40px dark)</div>
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### Breakpoints
|
|
330
|
+
```css
|
|
331
|
+
xs: 30rem (480px)
|
|
332
|
+
sm: 640px (default Tailwind)
|
|
333
|
+
md: 768px (default Tailwind)
|
|
334
|
+
lg: 70rem (1120px)
|
|
335
|
+
xl: 90rem (1440px)
|
|
336
|
+
2xl: 100rem (1600px)
|
|
337
|
+
3xl: 1930px
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## Button Components
|
|
343
|
+
|
|
344
|
+
### Basic Buttons
|
|
345
|
+
```html
|
|
346
|
+
<!-- Primary button -->
|
|
347
|
+
<button class="btn btn-primary">Primary Action</button>
|
|
348
|
+
|
|
349
|
+
<!-- Secondary (outline) button -->
|
|
350
|
+
<button class="btn btn-secondary">Secondary Action</button>
|
|
351
|
+
|
|
352
|
+
<!-- Ghost button (no border/background) -->
|
|
353
|
+
<button class="btn btn-ghost">Ghost Action</button>
|
|
354
|
+
|
|
355
|
+
<!-- Link button (text style) -->
|
|
356
|
+
<button class="btn btn-link">Link Style</button>
|
|
357
|
+
|
|
358
|
+
<!-- Dashed border button -->
|
|
359
|
+
<button class="btn btn-dashed">Add New</button>
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### Semantic Button Variants
|
|
363
|
+
```html
|
|
364
|
+
<button class="btn btn-success">Success Action</button>
|
|
365
|
+
<button class="btn btn-danger">Delete/Danger</button>
|
|
366
|
+
<button class="btn btn-warning">Warning Action</button>
|
|
367
|
+
<button class="btn btn-info">Info Action</button>
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Button Sizes
|
|
371
|
+
```html
|
|
372
|
+
<!-- Small button -->
|
|
373
|
+
<button class="btn btn-sm btn-primary">Small</button>
|
|
374
|
+
|
|
375
|
+
<!-- Default button (h-btn = 2.5rem/40px) -->
|
|
376
|
+
<button class="btn btn-primary">Default</button>
|
|
377
|
+
|
|
378
|
+
<!-- Large button (for icon buttons) -->
|
|
379
|
+
<button class="btn btn-lg btn-primary">
|
|
380
|
+
<i class="icon icon-star"></i>
|
|
381
|
+
</button>
|
|
382
|
+
|
|
383
|
+
<!-- Extra large button with label -->
|
|
384
|
+
<button class="btn btn-xl btn-primary">
|
|
385
|
+
<i class="icon icon-upload"></i>
|
|
386
|
+
Upload
|
|
387
|
+
</button>
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Button Shapes
|
|
391
|
+
```html
|
|
392
|
+
<!-- Square icon button -->
|
|
393
|
+
<button class="btn btn-square btn-primary">
|
|
394
|
+
<i class="icon icon-search"></i>
|
|
395
|
+
</button>
|
|
396
|
+
|
|
397
|
+
<!-- Circle button -->
|
|
398
|
+
<button class="btn btn-circle btn-primary">
|
|
399
|
+
<i class="icon icon-add"></i>
|
|
400
|
+
</button>
|
|
401
|
+
|
|
402
|
+
<!-- Block button (full width) -->
|
|
403
|
+
<button class="btn btn-block btn-primary">Full Width</button>
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Inverted Buttons (for dark backgrounds)
|
|
407
|
+
```html
|
|
408
|
+
<div class="bg-actionbar p-md">
|
|
409
|
+
<button class="btn btn-primary-inverted">Primary Inverted</button>
|
|
410
|
+
<button class="btn btn-inverted">Inverted</button>
|
|
411
|
+
<button class="btn btn-secondary-inverted">Secondary Inverted</button>
|
|
412
|
+
<button class="btn btn-outline-primary-inverted">Outline Primary Inverted</button>
|
|
413
|
+
<button class="btn btn-ghost-inverted">Ghost Inverted</button>
|
|
414
|
+
</div>
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### Buttons with Icons
|
|
418
|
+
```html
|
|
419
|
+
<button class="btn btn-primary">
|
|
420
|
+
<i class="icon icon-save mr-icon-spacing"></i>
|
|
421
|
+
Save Changes
|
|
422
|
+
</button>
|
|
423
|
+
|
|
424
|
+
<button class="btn btn-secondary">
|
|
425
|
+
<i class="icon icon-download mr-icon-spacing"></i>
|
|
426
|
+
Download
|
|
427
|
+
</button>
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### Dropdown Menu Button
|
|
431
|
+
```html
|
|
432
|
+
<details class="dropdown-actions">
|
|
433
|
+
<summary>
|
|
434
|
+
<div class="btn btn-square btn-primary">
|
|
435
|
+
<span class="icon icon-more"></span>
|
|
436
|
+
</div>
|
|
437
|
+
</summary>
|
|
438
|
+
<div class="popover-menu">
|
|
439
|
+
<a class="popover-action" href="#">
|
|
440
|
+
<span class="icon icon-pencil"></span>
|
|
441
|
+
Edit
|
|
442
|
+
</a>
|
|
443
|
+
<a class="popover-action" href="#">
|
|
444
|
+
<span class="icon icon-duplicate"></span>
|
|
445
|
+
Duplicate
|
|
446
|
+
</a>
|
|
447
|
+
<a class="popover-action" href="#">
|
|
448
|
+
<span class="icon icon-remove"></span>
|
|
449
|
+
Delete
|
|
450
|
+
</a>
|
|
451
|
+
</div>
|
|
452
|
+
</details>
|
|
453
|
+
|
|
454
|
+
<!-- Direction variants -->
|
|
455
|
+
<details class="dropdown-actions dropright"><!-- Opens to right --></details>
|
|
456
|
+
<details class="dropdown-actions dropup dropright"><!-- Opens up and right --></details>
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### Button Groups
|
|
460
|
+
```html
|
|
461
|
+
<div class="btn-group">
|
|
462
|
+
<button class="btn btn-primary">Left</button>
|
|
463
|
+
<button class="btn btn-primary">Center</button>
|
|
464
|
+
<button class="btn btn-primary">Right</button>
|
|
465
|
+
</div>
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
## Card Components
|
|
471
|
+
|
|
472
|
+
### Basic Card Structure
|
|
473
|
+
```html
|
|
474
|
+
<div class="card">
|
|
475
|
+
<div class="card-header">
|
|
476
|
+
<h3 class="card-title">Card Title</h3>
|
|
477
|
+
</div>
|
|
478
|
+
<div class="card-body">
|
|
479
|
+
<p>Card content goes here</p>
|
|
480
|
+
</div>
|
|
481
|
+
<div class="card-footer">
|
|
482
|
+
<button class="btn btn-primary btn-block">Action</button>
|
|
483
|
+
<button class="btn btn-secondary btn-block">Cancel</button>
|
|
484
|
+
</div>
|
|
485
|
+
</div>
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
### Card Sizes
|
|
489
|
+
```html
|
|
490
|
+
<!-- Small card (11.25rem on sm+ screens) -->
|
|
491
|
+
<div class="card card-sm">...</div>
|
|
492
|
+
|
|
493
|
+
<!-- Medium card (17.5rem) -->
|
|
494
|
+
<div class="card card-md">...</div>
|
|
495
|
+
|
|
496
|
+
<!-- Large card (23.75rem) -->
|
|
497
|
+
<div class="card card-lg">...</div>
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### Card Variants
|
|
501
|
+
```html
|
|
502
|
+
<!-- Highlighted card (info blue background) -->
|
|
503
|
+
<div class="card highlight">...</div>
|
|
504
|
+
|
|
505
|
+
<!-- Card with highlighted header only -->
|
|
506
|
+
<div class="card">
|
|
507
|
+
<div class="card-header highlight">
|
|
508
|
+
<h3 class="card-title">Highlighted Header</h3>
|
|
509
|
+
</div>
|
|
510
|
+
<div class="card-body">Regular content</div>
|
|
511
|
+
</div>
|
|
512
|
+
|
|
513
|
+
<!-- Card with image -->
|
|
514
|
+
<div class="card">
|
|
515
|
+
<img src="image.jpg" alt="Card image" class="card-image">
|
|
516
|
+
<div class="card-header">
|
|
517
|
+
<h3 class="card-title">Card with Image</h3>
|
|
518
|
+
</div>
|
|
519
|
+
<div class="card-body">Content</div>
|
|
520
|
+
</div>
|
|
521
|
+
|
|
522
|
+
<!-- Card with icon header -->
|
|
523
|
+
<div class="card">
|
|
524
|
+
<div class="card-icon-header">
|
|
525
|
+
<i class="icon icon-star"></i>
|
|
526
|
+
</div>
|
|
527
|
+
<div class="card-body">
|
|
528
|
+
<h3 class="card-title">Icon Card</h3>
|
|
529
|
+
<p>Content below icon</p>
|
|
530
|
+
</div>
|
|
531
|
+
</div>
|
|
532
|
+
|
|
533
|
+
<!-- Centered card content -->
|
|
534
|
+
<div class="card text-center">...</div>
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### Card with Info Popover
|
|
538
|
+
```html
|
|
539
|
+
<div class="card">
|
|
540
|
+
<details class="popover-wrapper dropright card-info-popover">
|
|
541
|
+
<summary>
|
|
542
|
+
<div class="btn btn-sm btn-square">
|
|
543
|
+
<div class="icon icon-info"></div>
|
|
544
|
+
</div>
|
|
545
|
+
</summary>
|
|
546
|
+
<div class="popover-menu info">
|
|
547
|
+
<div class="popover-title">Popover title</div>
|
|
548
|
+
<div class="popover-content">Popover content...</div>
|
|
549
|
+
</div>
|
|
550
|
+
</details>
|
|
551
|
+
<div class="card-header">
|
|
552
|
+
<h3 class="card-title">Card with info popover</h3>
|
|
553
|
+
</div>
|
|
554
|
+
<div class="card-body">Content</div>
|
|
555
|
+
</div>
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
### Card Layouts
|
|
559
|
+
```html
|
|
560
|
+
<!-- Grid of cards (responsive) -->
|
|
561
|
+
<div class="grid-cards">
|
|
562
|
+
<div class="card">...</div>
|
|
563
|
+
<div class="card">...</div>
|
|
564
|
+
<div class="card">...</div>
|
|
565
|
+
</div>
|
|
566
|
+
|
|
567
|
+
<!-- List of cards (horizontal wrap) -->
|
|
568
|
+
<div class="list-cards">
|
|
569
|
+
<div class="card card-sm">...</div>
|
|
570
|
+
<div class="card card-sm">...</div>
|
|
571
|
+
</div>
|
|
572
|
+
|
|
573
|
+
<!-- Achievements grid (6 columns on 2xl screens) -->
|
|
574
|
+
<div class="grid-cards-achievements">
|
|
575
|
+
<div class="card">...</div>
|
|
576
|
+
</div>
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
---
|
|
580
|
+
|
|
581
|
+
## Form Components
|
|
582
|
+
|
|
583
|
+
### Form Group Structure
|
|
584
|
+
```html
|
|
585
|
+
<div class="form-group">
|
|
586
|
+
<label class="form-label">Email Address</label>
|
|
587
|
+
<input type="email" class="form-control" placeholder="Enter email">
|
|
588
|
+
</div>
|
|
589
|
+
|
|
590
|
+
<!-- Optional field -->
|
|
591
|
+
<div class="form-group">
|
|
592
|
+
<label class="form-label optional">Phone Number</label>
|
|
593
|
+
<input type="tel" class="form-control">
|
|
594
|
+
</div>
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
### Form Inputs
|
|
598
|
+
```html
|
|
599
|
+
<!-- Text input -->
|
|
600
|
+
<input type="text" class="form-control" placeholder="Enter text">
|
|
601
|
+
|
|
602
|
+
<!-- Textarea -->
|
|
603
|
+
<textarea class="form-control" rows="4" placeholder="Enter description"></textarea>
|
|
604
|
+
|
|
605
|
+
<!-- Disabled input -->
|
|
606
|
+
<input type="text" class="form-control" disabled value="Read only">
|
|
607
|
+
|
|
608
|
+
<!-- With validation error -->
|
|
609
|
+
<div class="form-group">
|
|
610
|
+
<label class="form-label">Username</label>
|
|
611
|
+
<div class="field_with_errors">
|
|
612
|
+
<input type="text" class="form-control">
|
|
613
|
+
</div>
|
|
614
|
+
<div class="form-hint error">Username is required</div>
|
|
615
|
+
</div>
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
### Form Hints
|
|
619
|
+
```html
|
|
620
|
+
<!-- Standard hint -->
|
|
621
|
+
<div class="form-hint">This field is optional</div>
|
|
622
|
+
|
|
623
|
+
<!-- Error hint -->
|
|
624
|
+
<div class="form-hint error">Please enter a valid email</div>
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
### Form Grid Layout
|
|
628
|
+
```html
|
|
629
|
+
<!-- Standard form grid -->
|
|
630
|
+
<div class="form-grid">
|
|
631
|
+
<div class="form-group">...</div>
|
|
632
|
+
<div class="form-group">...</div>
|
|
633
|
+
</div>
|
|
634
|
+
|
|
635
|
+
<!-- Single column form grid -->
|
|
636
|
+
<div class="form-grid single">
|
|
637
|
+
<div class="form-group">...</div>
|
|
638
|
+
</div>
|
|
639
|
+
|
|
640
|
+
<!-- Narrow single column -->
|
|
641
|
+
<div class="form-grid single narrow">
|
|
642
|
+
<div class="form-group">...</div>
|
|
643
|
+
</div>
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
### Checkboxes
|
|
647
|
+
```html
|
|
648
|
+
<!-- Default checkbox -->
|
|
649
|
+
<div class="form-check">
|
|
650
|
+
<input id="check1" type="checkbox">
|
|
651
|
+
<label for="check1">Checkbox</label>
|
|
652
|
+
</div>
|
|
653
|
+
|
|
654
|
+
<!-- Checked checkbox -->
|
|
655
|
+
<div class="form-check">
|
|
656
|
+
<input id="check2" type="checkbox" checked="true">
|
|
657
|
+
<label for="check2">Checked</label>
|
|
658
|
+
</div>
|
|
659
|
+
|
|
660
|
+
<!-- Small checkbox -->
|
|
661
|
+
<div class="form-check sm">
|
|
662
|
+
<input id="check3" type="checkbox">
|
|
663
|
+
<label for="check3">Checkbox SM</label>
|
|
664
|
+
</div>
|
|
665
|
+
|
|
666
|
+
<!-- Disabled checkbox -->
|
|
667
|
+
<div class="form-check disabled">
|
|
668
|
+
<input id="check4" type="checkbox" disabled="true">
|
|
669
|
+
<label for="check4">Disabled</label>
|
|
670
|
+
</div>
|
|
671
|
+
|
|
672
|
+
<!-- With error state -->
|
|
673
|
+
<div class="form-check">
|
|
674
|
+
<div class="field_with_errors">
|
|
675
|
+
<input id="check5" type="checkbox">
|
|
676
|
+
</div>
|
|
677
|
+
<label for="check5">Checkbox with error</label>
|
|
678
|
+
</div>
|
|
679
|
+
|
|
680
|
+
<!-- Inverted (for dark backgrounds) -->
|
|
681
|
+
<div class="form-check inverted">
|
|
682
|
+
<input id="check6" type="checkbox">
|
|
683
|
+
<label for="check6">Inverted</label>
|
|
684
|
+
</div>
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
### Radio Buttons
|
|
688
|
+
```html
|
|
689
|
+
<!-- Radio group -->
|
|
690
|
+
<div class="form-radio">
|
|
691
|
+
<input id="radio1" type="radio" name="radio-group" value="1" checked="true">
|
|
692
|
+
<label for="radio1">Option 1</label>
|
|
693
|
+
</div>
|
|
694
|
+
<div class="form-radio">
|
|
695
|
+
<input id="radio2" type="radio" name="radio-group" value="2">
|
|
696
|
+
<label for="radio2">Option 2</label>
|
|
697
|
+
</div>
|
|
698
|
+
<div class="form-radio">
|
|
699
|
+
<input id="radio3" type="radio" name="radio-group" value="3">
|
|
700
|
+
<label for="radio3">Option 3</label>
|
|
701
|
+
</div>
|
|
702
|
+
|
|
703
|
+
<!-- Small radio -->
|
|
704
|
+
<div class="form-radio sm">
|
|
705
|
+
<input id="radio4" type="radio" name="radio-sm" value="1">
|
|
706
|
+
<label for="radio4">SM Option 1</label>
|
|
707
|
+
</div>
|
|
708
|
+
|
|
709
|
+
<!-- Disabled radio -->
|
|
710
|
+
<div class="form-radio disabled">
|
|
711
|
+
<input id="radio5" type="radio" name="radio-group" value="4" disabled="true">
|
|
712
|
+
<label for="radio5">Disabled</label>
|
|
713
|
+
</div>
|
|
714
|
+
|
|
715
|
+
<!-- Inverted (for dark backgrounds) -->
|
|
716
|
+
<div class="form-radio inverted">
|
|
717
|
+
<input id="radio6" type="radio" name="radio-inv" value="1">
|
|
718
|
+
<label for="radio6">Inverted Option</label>
|
|
719
|
+
</div>
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
### Toggle Switch
|
|
723
|
+
```html
|
|
724
|
+
<!-- Toggle switch -->
|
|
725
|
+
<div class="form-toggle">
|
|
726
|
+
<label class="toggle-switch" for="toggle1">
|
|
727
|
+
<input id="toggle1" type="checkbox">
|
|
728
|
+
<span class="slider"></span>
|
|
729
|
+
</label>
|
|
730
|
+
<label class="toggle-switch-label" for="toggle1">Toggle Switch</label>
|
|
731
|
+
</div>
|
|
732
|
+
|
|
733
|
+
<!-- Active toggle -->
|
|
734
|
+
<div class="form-toggle">
|
|
735
|
+
<label class="toggle-switch" for="toggle2">
|
|
736
|
+
<input id="toggle2" type="checkbox" checked="true">
|
|
737
|
+
<span class="slider"></span>
|
|
738
|
+
</label>
|
|
739
|
+
<label class="toggle-switch-label" for="toggle2">Active Toggle</label>
|
|
740
|
+
</div>
|
|
741
|
+
|
|
742
|
+
<!-- Small toggle -->
|
|
743
|
+
<div class="form-toggle sm">
|
|
744
|
+
<label class="toggle-switch" for="toggle3">
|
|
745
|
+
<input id="toggle3" type="checkbox">
|
|
746
|
+
<span class="slider"></span>
|
|
747
|
+
</label>
|
|
748
|
+
<label class="toggle-switch-label" for="toggle3">Toggle SM</label>
|
|
749
|
+
</div>
|
|
750
|
+
|
|
751
|
+
<!-- Disabled toggle -->
|
|
752
|
+
<div class="form-toggle">
|
|
753
|
+
<label class="toggle-switch disabled" for="toggle4">
|
|
754
|
+
<input id="toggle4" type="checkbox" disabled="disabled">
|
|
755
|
+
<span class="slider"></span>
|
|
756
|
+
</label>
|
|
757
|
+
<label class="toggle-switch-label" for="toggle4">Disabled</label>
|
|
758
|
+
</div>
|
|
759
|
+
```
|
|
760
|
+
|
|
761
|
+
### Select Inputs
|
|
762
|
+
|
|
763
|
+
#### Native Select
|
|
764
|
+
```html
|
|
765
|
+
<select class="form-control">
|
|
766
|
+
<option>Choose an option</option>
|
|
767
|
+
<option value="1">Option 1</option>
|
|
768
|
+
<option value="2">Option 2</option>
|
|
769
|
+
</select>
|
|
770
|
+
```
|
|
771
|
+
|
|
772
|
+
#### Select2 Enhanced Select
|
|
773
|
+
```html
|
|
774
|
+
<div class="form-group form-select">
|
|
775
|
+
<label class="form-label">Select</label>
|
|
776
|
+
<select class="select2" placeholder="Please select">
|
|
777
|
+
<option value="Option 1">Option 1</option>
|
|
778
|
+
<option value="Option 2">Option 2</option>
|
|
779
|
+
<option value="Option 3">Option 3</option>
|
|
780
|
+
</select>
|
|
781
|
+
</div>
|
|
782
|
+
|
|
783
|
+
<!-- Multi-select -->
|
|
784
|
+
<div class="form-group multi-select">
|
|
785
|
+
<label class="form-label">Select multiple</label>
|
|
786
|
+
<select class="select2" multiple="true" placeholder="Please select">
|
|
787
|
+
<option>Option 1</option>
|
|
788
|
+
<option>Option 2</option>
|
|
789
|
+
<option>Option 3</option>
|
|
790
|
+
</select>
|
|
791
|
+
</div>
|
|
792
|
+
|
|
793
|
+
<!-- With optgroup -->
|
|
794
|
+
<div class="form-group form-select">
|
|
795
|
+
<label class="form-label">Optgroup select</label>
|
|
796
|
+
<select class="select2" placeholder="Please select">
|
|
797
|
+
<optgroup label="Category Label">
|
|
798
|
+
<option>Option 1</option>
|
|
799
|
+
<option>Option 2</option>
|
|
800
|
+
</optgroup>
|
|
801
|
+
</select>
|
|
802
|
+
</div>
|
|
803
|
+
```
|
|
804
|
+
|
|
805
|
+
#### Tom Select Enhanced Select
|
|
806
|
+
```html
|
|
807
|
+
<div class="form-group form-select">
|
|
808
|
+
<label class="form-label">Select</label>
|
|
809
|
+
<select class="tom-select" placeholder="Please select">
|
|
810
|
+
<option value=""></option>
|
|
811
|
+
<option value="Option 1">Option 1</option>
|
|
812
|
+
<option value="Option 2">Option 2</option>
|
|
813
|
+
</select>
|
|
814
|
+
</div>
|
|
815
|
+
|
|
816
|
+
<!-- Multi-select -->
|
|
817
|
+
<div class="form-group multi-select">
|
|
818
|
+
<label class="form-label">Select multiple</label>
|
|
819
|
+
<select class="tom-select-multi" multiple="true" placeholder="Please select">
|
|
820
|
+
<option>Option 1</option>
|
|
821
|
+
<option>Option 2</option>
|
|
822
|
+
</select>
|
|
823
|
+
</div>
|
|
824
|
+
```
|
|
825
|
+
|
|
826
|
+
### Date & Time Picker (Flatpickr)
|
|
827
|
+
```html
|
|
828
|
+
<!-- Date picker -->
|
|
829
|
+
<div class="form-group">
|
|
830
|
+
<label class="form-label">Select Date</label>
|
|
831
|
+
<div class="form-date">
|
|
832
|
+
<input class="form-control flatpickr" type="date" placeholder="Choose a date">
|
|
833
|
+
</div>
|
|
834
|
+
</div>
|
|
835
|
+
|
|
836
|
+
<!-- Date and time picker -->
|
|
837
|
+
<div class="form-group">
|
|
838
|
+
<label class="form-label">Select Date & Time</label>
|
|
839
|
+
<div class="form-date">
|
|
840
|
+
<input class="form-control flatpickr-time" type="datetime-local" placeholder="Choose date and time">
|
|
841
|
+
</div>
|
|
842
|
+
</div>
|
|
843
|
+
```
|
|
844
|
+
|
|
845
|
+
### Selectable Tokens
|
|
846
|
+
```html
|
|
847
|
+
<ul class="list-inline flex">
|
|
848
|
+
<li class="selectable-token">
|
|
849
|
+
<input id="token1" type="checkbox" checked="true">
|
|
850
|
+
<label for="token1">
|
|
851
|
+
<span class="icon icon-chrome mr-icon-spacing"></span>
|
|
852
|
+
Selectable token
|
|
853
|
+
</label>
|
|
854
|
+
</li>
|
|
855
|
+
<li class="selectable-token">
|
|
856
|
+
<input id="token2" type="checkbox">
|
|
857
|
+
<label for="token2">
|
|
858
|
+
<span class="icon icon-firefox mr-icon-spacing"></span>
|
|
859
|
+
Another token
|
|
860
|
+
</label>
|
|
861
|
+
</li>
|
|
862
|
+
<li class="selectable-token disabled">
|
|
863
|
+
<input id="token3" type="checkbox" disabled="true">
|
|
864
|
+
<label for="token3">Disabled token</label>
|
|
865
|
+
</li>
|
|
866
|
+
</ul>
|
|
867
|
+
|
|
868
|
+
<!-- Inverted (for dark backgrounds) -->
|
|
869
|
+
<li class="selectable-token inverted">...</li>
|
|
870
|
+
```
|
|
871
|
+
|
|
872
|
+
### Rating Scale
|
|
873
|
+
```html
|
|
874
|
+
<div class="rating-scale">
|
|
875
|
+
<!-- Rating scale component -->
|
|
876
|
+
</div>
|
|
877
|
+
```
|
|
878
|
+
|
|
879
|
+
### Form with Addon
|
|
880
|
+
```html
|
|
881
|
+
<div class="form-group with-addon">
|
|
882
|
+
<label class="form-label">Price</label>
|
|
883
|
+
<input type="number" class="form-control" placeholder="0.00">
|
|
884
|
+
<div class="form-addon">USD</div>
|
|
885
|
+
</div>
|
|
886
|
+
```
|
|
887
|
+
|
|
888
|
+
### Inverted Forms (for dark backgrounds)
|
|
889
|
+
```html
|
|
890
|
+
<div class="form-group inverted">
|
|
891
|
+
<label class="form-label">Email</label>
|
|
892
|
+
<input type="email" class="form-control" placeholder="Enter email">
|
|
893
|
+
<div class="form-hint">We'll never share your email</div>
|
|
894
|
+
</div>
|
|
895
|
+
```
|
|
896
|
+
|
|
897
|
+
---
|
|
898
|
+
|
|
899
|
+
## Overlay Components (Modal & Drawer)
|
|
900
|
+
|
|
901
|
+
### Modal Component
|
|
902
|
+
|
|
903
|
+
Modals are used to display content in a layer above the main content. They can contain forms, confirmations, and other interactive content.
|
|
904
|
+
|
|
905
|
+
#### Basic Modal
|
|
906
|
+
```html
|
|
907
|
+
<details class="modal-wrapper">
|
|
908
|
+
<summary class="modal-trigger">
|
|
909
|
+
<div class="btn btn-primary">Open modal</div>
|
|
910
|
+
</summary>
|
|
911
|
+
<div class="modal-container">
|
|
912
|
+
<div class="modal">
|
|
913
|
+
<div class="modal-header">
|
|
914
|
+
<h2 class="modal-title">Modal Title</h2>
|
|
915
|
+
<div class="btn btn-square close-btn">
|
|
916
|
+
<div class="icon icon-cross"></div>
|
|
917
|
+
</div>
|
|
918
|
+
</div>
|
|
919
|
+
<div class="modal-content">
|
|
920
|
+
<p>Modal content goes here...</p>
|
|
921
|
+
<div class="form-grid">
|
|
922
|
+
<div class="form-group">
|
|
923
|
+
<label class="form-label">Input</label>
|
|
924
|
+
<input class="form-control" type="text" placeholder="">
|
|
925
|
+
</div>
|
|
926
|
+
</div>
|
|
927
|
+
</div>
|
|
928
|
+
<div class="modal-footer">
|
|
929
|
+
<a class="btn btn-primary" href="">Primary</a>
|
|
930
|
+
<a class="btn btn-secondary close-btn" href="">Close</a>
|
|
931
|
+
</div>
|
|
932
|
+
</div>
|
|
933
|
+
</div>
|
|
934
|
+
</details>
|
|
935
|
+
```
|
|
936
|
+
|
|
937
|
+
#### Modal Sizes
|
|
938
|
+
```html
|
|
939
|
+
<!-- Large modal -->
|
|
940
|
+
<div class="modal modal-lg">...</div>
|
|
941
|
+
|
|
942
|
+
<!-- Small modal (confirmation dialog) -->
|
|
943
|
+
<div class="modal modal-sm">...</div>
|
|
944
|
+
```
|
|
945
|
+
|
|
946
|
+
#### Modal with Disabled Background Close
|
|
947
|
+
```html
|
|
948
|
+
<!-- Prevents closing when clicking outside the modal -->
|
|
949
|
+
<details class="modal-wrapper fade-close-disabled">
|
|
950
|
+
<summary class="modal-trigger">
|
|
951
|
+
<div class="btn btn-primary">Open modal</div>
|
|
952
|
+
</summary>
|
|
953
|
+
<div class="modal-container">
|
|
954
|
+
<div class="modal">...</div>
|
|
955
|
+
</div>
|
|
956
|
+
</details>
|
|
957
|
+
```
|
|
958
|
+
|
|
959
|
+
### Drawer Component
|
|
960
|
+
|
|
961
|
+
Drawers are side panels that slide in from the edge of the screen. They're an alternative to modals for displaying additional content.
|
|
962
|
+
|
|
963
|
+
#### Basic Drawer
|
|
964
|
+
```html
|
|
965
|
+
<details class="drawer-wrapper">
|
|
966
|
+
<summary class="drawer-trigger">
|
|
967
|
+
<div class="btn btn-primary">Open Drawer</div>
|
|
968
|
+
</summary>
|
|
969
|
+
<div class="drawer">
|
|
970
|
+
<div class="drawer-header">
|
|
971
|
+
<div class="drawer-title">Drawer title</div>
|
|
972
|
+
</div>
|
|
973
|
+
<div class="drawer-content">
|
|
974
|
+
<p>Drawer content goes here...</p>
|
|
975
|
+
</div>
|
|
976
|
+
<div class="drawer-footer">
|
|
977
|
+
<div class="btn btn-primary">Primary</div>
|
|
978
|
+
<div class="btn btn-secondary">Secondary</div>
|
|
979
|
+
</div>
|
|
980
|
+
</div>
|
|
981
|
+
</details>
|
|
982
|
+
```
|
|
983
|
+
|
|
984
|
+
#### Drawer with Close Button
|
|
985
|
+
```html
|
|
986
|
+
<details class="drawer-wrapper">
|
|
987
|
+
<summary class="drawer-trigger">
|
|
988
|
+
<div class="btn btn-primary">Open Drawer</div>
|
|
989
|
+
<button class="btn btn-square close-btn">
|
|
990
|
+
<div class="icon icon-cross"></div>
|
|
991
|
+
</button>
|
|
992
|
+
</summary>
|
|
993
|
+
<div class="drawer">
|
|
994
|
+
<!-- Drawer content -->
|
|
995
|
+
<div class="drawer-footer">
|
|
996
|
+
<div class="btn btn-primary">Primary</div>
|
|
997
|
+
<div class="btn btn-secondary close-btn">Close</div>
|
|
998
|
+
</div>
|
|
999
|
+
</div>
|
|
1000
|
+
</details>
|
|
1001
|
+
```
|
|
1002
|
+
|
|
1003
|
+
#### Filter Drawer
|
|
1004
|
+
```html
|
|
1005
|
+
<details class="drawer-wrapper">
|
|
1006
|
+
<summary class="drawer-trigger">
|
|
1007
|
+
<div class="btn btn-secondary">
|
|
1008
|
+
<span class="icon icon-filter mr-icon-spacing"></span>
|
|
1009
|
+
Filter
|
|
1010
|
+
</div>
|
|
1011
|
+
</summary>
|
|
1012
|
+
<div class="drawer drawer-filter">
|
|
1013
|
+
<!-- Filter form content -->
|
|
1014
|
+
</div>
|
|
1015
|
+
</details>
|
|
1016
|
+
```
|
|
1017
|
+
|
|
1018
|
+
---
|
|
1019
|
+
|
|
1020
|
+
## Page Layout Components
|
|
1021
|
+
|
|
1022
|
+
### Page Header Component
|
|
1023
|
+
|
|
1024
|
+
A responsive grid layout component for dashboard and session management pages.
|
|
1025
|
+
|
|
1026
|
+
#### Basic Page Header
|
|
1027
|
+
```html
|
|
1028
|
+
<div class="page-header">
|
|
1029
|
+
<div class="card page-maincard p-card-padding">
|
|
1030
|
+
<h1 class="text-card-header">Session Details</h1>
|
|
1031
|
+
<h2 class="page-session-title">Test Session Title</h2>
|
|
1032
|
+
|
|
1033
|
+
<dl class="page-meta-info">
|
|
1034
|
+
<dt class="label">Created on:</dt>
|
|
1035
|
+
<dd>2025-10-21 10:45 AM</dd>
|
|
1036
|
+
|
|
1037
|
+
<dt class="label">Last test:</dt>
|
|
1038
|
+
<dd>2025-10-21 11:30 AM</dd>
|
|
1039
|
+
|
|
1040
|
+
<dt class="label">ID:</dt>
|
|
1041
|
+
<dd>321456987</dd>
|
|
1042
|
+
|
|
1043
|
+
<dt class="label">URL:</dt>
|
|
1044
|
+
<dd class="row-testsuite">
|
|
1045
|
+
<a href="#" class="label">Test Suite Name</a>
|
|
1046
|
+
</dd>
|
|
1047
|
+
|
|
1048
|
+
<dt class="label">Status:</dt>
|
|
1049
|
+
<dd class="text-white">Active</dd>
|
|
1050
|
+
</dl>
|
|
1051
|
+
</div>
|
|
1052
|
+
|
|
1053
|
+
<div class="page-actions">
|
|
1054
|
+
<a href="#" class="btn btn-primary btn-main">
|
|
1055
|
+
<span class="icon icon-test-running-xl"></span>
|
|
1056
|
+
Start Test
|
|
1057
|
+
</a>
|
|
1058
|
+
</div>
|
|
1059
|
+
</div>
|
|
1060
|
+
```
|
|
1061
|
+
|
|
1062
|
+
#### Page Header with Chart
|
|
1063
|
+
```html
|
|
1064
|
+
<div class="page-header with-chart">
|
|
1065
|
+
<div class="card page-maincard p-card-padding">
|
|
1066
|
+
<!-- Main card content -->
|
|
1067
|
+
</div>
|
|
1068
|
+
|
|
1069
|
+
<div class="page-chart card p-card-padding">
|
|
1070
|
+
<div class="echarts-container" id="chart"></div>
|
|
1071
|
+
</div>
|
|
1072
|
+
|
|
1073
|
+
<div class="page-actions">
|
|
1074
|
+
<a href="#" class="btn btn-primary btn-main">
|
|
1075
|
+
<span class="icon icon-review-xl"></span>
|
|
1076
|
+
Show Report
|
|
1077
|
+
</a>
|
|
1078
|
+
<a href="#" class="btn btn-secondary">Re-run All Checks</a>
|
|
1079
|
+
</div>
|
|
1080
|
+
</div>
|
|
1081
|
+
```
|
|
1082
|
+
|
|
1083
|
+
#### Page Header with Forms
|
|
1084
|
+
```html
|
|
1085
|
+
<div class="page-header">
|
|
1086
|
+
<div class="card page-maincard p-card-padding">
|
|
1087
|
+
<div class="form-grid">
|
|
1088
|
+
<div class="form-group">
|
|
1089
|
+
<label class="form-label">Test Name</label>
|
|
1090
|
+
<input type="text" class="form-control" placeholder="Enter test name">
|
|
1091
|
+
</div>
|
|
1092
|
+
<div class="form-group">
|
|
1093
|
+
<label class="form-label">URL for Testing</label>
|
|
1094
|
+
<input type="url" class="form-control" placeholder="https://example.com">
|
|
1095
|
+
</div>
|
|
1096
|
+
</div>
|
|
1097
|
+
</div>
|
|
1098
|
+
|
|
1099
|
+
<div class="page-actions">
|
|
1100
|
+
<a href="#" class="btn btn-primary btn-xl">
|
|
1101
|
+
<span class="icon icon-test-running-xl"></span>
|
|
1102
|
+
Save and Run Test
|
|
1103
|
+
</a>
|
|
1104
|
+
<a href="#" class="btn btn-secondary">Save Draft</a>
|
|
1105
|
+
<a href="#" class="btn btn-secondary">Cancel</a>
|
|
1106
|
+
</div>
|
|
1107
|
+
</div>
|
|
1108
|
+
```
|
|
1109
|
+
|
|
1110
|
+
**Key Classes:**
|
|
1111
|
+
- `.page-header` - Main grid container with responsive columns
|
|
1112
|
+
- `.page-maincard` - Primary content card (spans 2-4 columns based on screen size)
|
|
1113
|
+
- `.page-actions` - Action buttons column (vertical on md+, horizontal on mobile)
|
|
1114
|
+
- `.page-session-title` - Session/test title with bottom margin
|
|
1115
|
+
- `.page-meta-info` - Metadata grid (2 cols mobile, 6 cols xl)
|
|
1116
|
+
- `.row-testsuite` - Special metadata row that spans 5 columns on xl
|
|
1117
|
+
- `.with-chart` - Modifier for including chart column
|
|
1118
|
+
- `.btn-main` - Primary action button that grows to fill available space
|
|
1119
|
+
|
|
1120
|
+
---
|
|
1121
|
+
|
|
1122
|
+
## Navigation Components
|
|
1123
|
+
|
|
1124
|
+
### Header Navigation
|
|
1125
|
+
```html
|
|
1126
|
+
<header class="header">
|
|
1127
|
+
<div class="header-logo">
|
|
1128
|
+
<img src="logo.svg" alt="Logo">
|
|
1129
|
+
</div>
|
|
1130
|
+
<nav class="header-nav">
|
|
1131
|
+
<a href="#" class="nav-link">Dashboard</a>
|
|
1132
|
+
<a href="#" class="nav-link active">Projects</a>
|
|
1133
|
+
<a href="#" class="nav-link">Settings</a>
|
|
1134
|
+
</nav>
|
|
1135
|
+
<div class="header-actions">
|
|
1136
|
+
<button class="btn btn-sm btn-primary">New Project</button>
|
|
1137
|
+
</div>
|
|
1138
|
+
</header>
|
|
1139
|
+
```
|
|
1140
|
+
|
|
1141
|
+
### Sidebar Navigation
|
|
1142
|
+
```html
|
|
1143
|
+
<aside class="sidebar">
|
|
1144
|
+
<nav class="sidebar-nav">
|
|
1145
|
+
<a href="#" class="sidebar-link active">
|
|
1146
|
+
<i class="icon icon-home"></i>
|
|
1147
|
+
Dashboard
|
|
1148
|
+
</a>
|
|
1149
|
+
<a href="#" class="sidebar-link">
|
|
1150
|
+
<i class="icon icon-folder"></i>
|
|
1151
|
+
Projects
|
|
1152
|
+
</a>
|
|
1153
|
+
<a href="#" class="sidebar-link">
|
|
1154
|
+
<i class="icon icon-settings"></i>
|
|
1155
|
+
Settings
|
|
1156
|
+
</a>
|
|
1157
|
+
</nav>
|
|
1158
|
+
</aside>
|
|
1159
|
+
```
|
|
1160
|
+
|
|
1161
|
+
### Tab Navigation
|
|
1162
|
+
```html
|
|
1163
|
+
<nav class="nav-tabs">
|
|
1164
|
+
<div class="navlink active" href="">Navlink active</div>
|
|
1165
|
+
<div class="navlink" href="">Navlink</div>
|
|
1166
|
+
<div class="navlink" href="">Navlink</div>
|
|
1167
|
+
<div class="navlink" href="">
|
|
1168
|
+
Counter
|
|
1169
|
+
<div class="counter">99</div>
|
|
1170
|
+
</div>
|
|
1171
|
+
<div class="navlink disabled" href="">Disabled</div>
|
|
1172
|
+
</nav>
|
|
1173
|
+
```
|
|
1174
|
+
|
|
1175
|
+
### Tab Navigation Variants
|
|
1176
|
+
```html
|
|
1177
|
+
<!-- Pills style -->
|
|
1178
|
+
<nav class="nav-tabs pills">...</nav>
|
|
1179
|
+
|
|
1180
|
+
<!-- Small tabs -->
|
|
1181
|
+
<nav class="nav-tabs sm">...</nav>
|
|
1182
|
+
|
|
1183
|
+
<!-- Tabs with actions -->
|
|
1184
|
+
<nav class="nav-tabs with-actions">
|
|
1185
|
+
<div class="navlink active">Tab 1</div>
|
|
1186
|
+
<div class="navlink">Tab 2</div>
|
|
1187
|
+
<div class="tab-actions">
|
|
1188
|
+
<button class="btn btn-sm btn-primary">Action</button>
|
|
1189
|
+
</div>
|
|
1190
|
+
</nav>
|
|
1191
|
+
```
|
|
1192
|
+
|
|
1193
|
+
### Radio Tabs
|
|
1194
|
+
```html
|
|
1195
|
+
<div class="radio-tabs">
|
|
1196
|
+
<input type="radio" id="tab1" name="tabs" checked>
|
|
1197
|
+
<label for="tab1">Tab 1</label>
|
|
1198
|
+
<input type="radio" id="tab2" name="tabs">
|
|
1199
|
+
<label for="tab2">Tab 2</label>
|
|
1200
|
+
</div>
|
|
1201
|
+
```
|
|
1202
|
+
|
|
1203
|
+
### Product-Specific Headers
|
|
1204
|
+
```html
|
|
1205
|
+
<!-- Customer portal header -->
|
|
1206
|
+
<header class="header customer_header">...</header>
|
|
1207
|
+
|
|
1208
|
+
<!-- Tester portal header -->
|
|
1209
|
+
<header class="header tester_header">...</header>
|
|
1210
|
+
|
|
1211
|
+
<!-- Manager portal header -->
|
|
1212
|
+
<header class="header manager_header">...</header>
|
|
1213
|
+
|
|
1214
|
+
<!-- AgenticQA header -->
|
|
1215
|
+
<header class="header agenticqa_header">...</header>
|
|
1216
|
+
```
|
|
1217
|
+
|
|
1218
|
+
---
|
|
1219
|
+
|
|
1220
|
+
## Feedback Components
|
|
1221
|
+
|
|
1222
|
+
### Alerts
|
|
1223
|
+
|
|
1224
|
+
Alerts notify users about important information or actions that require their attention.
|
|
1225
|
+
|
|
1226
|
+
```html
|
|
1227
|
+
<!-- Default alert -->
|
|
1228
|
+
<div class="alert">
|
|
1229
|
+
<div class="alert-message">Alert message</div>
|
|
1230
|
+
<button class="close">
|
|
1231
|
+
<div class="icon icon-cross"></div>
|
|
1232
|
+
</button>
|
|
1233
|
+
</div>
|
|
1234
|
+
|
|
1235
|
+
<!-- Alert with button -->
|
|
1236
|
+
<div class="alert">
|
|
1237
|
+
<div class="alert-message">
|
|
1238
|
+
Alert with a button
|
|
1239
|
+
<button class="btn btn-white">Alert action</button>
|
|
1240
|
+
</div>
|
|
1241
|
+
<button class="close">
|
|
1242
|
+
<div class="icon icon-cross"></div>
|
|
1243
|
+
</button>
|
|
1244
|
+
</div>
|
|
1245
|
+
|
|
1246
|
+
<!-- Info alert -->
|
|
1247
|
+
<div class="alert alert-info">
|
|
1248
|
+
<div class="alert-message">Info Alert</div>
|
|
1249
|
+
<button class="close">
|
|
1250
|
+
<div class="icon icon-cross"></div>
|
|
1251
|
+
</button>
|
|
1252
|
+
</div>
|
|
1253
|
+
|
|
1254
|
+
<!-- Success alert -->
|
|
1255
|
+
<div class="alert alert-success">
|
|
1256
|
+
<div class="alert-message">Success Alert</div>
|
|
1257
|
+
<button class="close">
|
|
1258
|
+
<div class="icon icon-cross"></div>
|
|
1259
|
+
</button>
|
|
1260
|
+
</div>
|
|
1261
|
+
|
|
1262
|
+
<!-- Warning alert -->
|
|
1263
|
+
<div class="alert alert-warning">
|
|
1264
|
+
<div class="alert-message">Warning Alert</div>
|
|
1265
|
+
<button class="close">
|
|
1266
|
+
<div class="icon icon-cross"></div>
|
|
1267
|
+
</button>
|
|
1268
|
+
</div>
|
|
1269
|
+
|
|
1270
|
+
<!-- Error alert -->
|
|
1271
|
+
<div class="alert alert-error">
|
|
1272
|
+
<div class="alert-message">Error Alert</div>
|
|
1273
|
+
<button class="close">
|
|
1274
|
+
<div class="icon icon-cross"></div>
|
|
1275
|
+
</button>
|
|
1276
|
+
</div>
|
|
1277
|
+
```
|
|
1278
|
+
|
|
1279
|
+
### Notifications
|
|
1280
|
+
|
|
1281
|
+
Notifications inform users about important updates. They can replace alerts and support various styles.
|
|
1282
|
+
|
|
1283
|
+
```html
|
|
1284
|
+
<!-- Notification container -->
|
|
1285
|
+
<div class="notification-container">
|
|
1286
|
+
<!-- Basic notification -->
|
|
1287
|
+
<a class="notification" href="">
|
|
1288
|
+
<div class="notification-title">Linked Info Notification</div>
|
|
1289
|
+
<div class="notification-content">
|
|
1290
|
+
<div class="notification-message">You have 60 min left to finish this task.</div>
|
|
1291
|
+
</div>
|
|
1292
|
+
<button class="btn btn-close">
|
|
1293
|
+
<span class="icon icon-cross"></span>
|
|
1294
|
+
</button>
|
|
1295
|
+
</a>
|
|
1296
|
+
|
|
1297
|
+
<!-- Notification with icon -->
|
|
1298
|
+
<a class="notification" href="">
|
|
1299
|
+
<div class="notification-badge">
|
|
1300
|
+
<div class="icon icon-bug-fix-confirmation-lg"></div>
|
|
1301
|
+
</div>
|
|
1302
|
+
<div class="notification-content">
|
|
1303
|
+
<div class="notification-title">Notification with icon</div>
|
|
1304
|
+
<div class="notification-message">Message content...</div>
|
|
1305
|
+
</div>
|
|
1306
|
+
<button class="btn btn-close">
|
|
1307
|
+
<span class="icon icon-cross"></span>
|
|
1308
|
+
</button>
|
|
1309
|
+
</a>
|
|
1310
|
+
|
|
1311
|
+
<!-- Success notification -->
|
|
1312
|
+
<a class="notification success" href="">...</a>
|
|
1313
|
+
|
|
1314
|
+
<!-- Warning notification -->
|
|
1315
|
+
<a class="notification warning" href="">...</a>
|
|
1316
|
+
|
|
1317
|
+
<!-- Error notification -->
|
|
1318
|
+
<a class="notification error" href="">...</a>
|
|
1319
|
+
|
|
1320
|
+
<!-- Notification with badge image -->
|
|
1321
|
+
<a class="notification badges" href="">
|
|
1322
|
+
<div class="notification-badge">
|
|
1323
|
+
<img src="/assets/images/badge.svg">
|
|
1324
|
+
</div>
|
|
1325
|
+
<div class="notification-title">New badge received</div>
|
|
1326
|
+
<div class="notification-content">Badge description</div>
|
|
1327
|
+
<button class="btn btn-close">
|
|
1328
|
+
<span class="icon icon-cross"></span>
|
|
1329
|
+
</button>
|
|
1330
|
+
</a>
|
|
1331
|
+
|
|
1332
|
+
<!-- Notification with dedicated button -->
|
|
1333
|
+
<div class="notification">
|
|
1334
|
+
<div class="notification-title">Notification with button</div>
|
|
1335
|
+
<div class="notification-content">
|
|
1336
|
+
<div class="notification-message">Message content...</div>
|
|
1337
|
+
<a class="btn btn-sm btn-inverted" href="">Go to page</a>
|
|
1338
|
+
</div>
|
|
1339
|
+
<button class="btn btn-close">
|
|
1340
|
+
<span class="icon icon-cross"></span>
|
|
1341
|
+
</button>
|
|
1342
|
+
</div>
|
|
1343
|
+
</div>
|
|
1344
|
+
```
|
|
1345
|
+
|
|
1346
|
+
### Progress Bars
|
|
1347
|
+
|
|
1348
|
+
```html
|
|
1349
|
+
<!-- Default progress bar -->
|
|
1350
|
+
<progress class="progress" value="32" max="100">32%</progress>
|
|
1351
|
+
|
|
1352
|
+
<!-- Success progress bar -->
|
|
1353
|
+
<progress class="progress progress-bar-success" value="32" max="100">32%</progress>
|
|
1354
|
+
|
|
1355
|
+
<!-- Danger progress bar -->
|
|
1356
|
+
<progress class="progress progress-bar-danger" value="32" max="100">32%</progress>
|
|
1357
|
+
|
|
1358
|
+
<!-- Test progress (special styling) -->
|
|
1359
|
+
<progress class="progress test-progress" value="32" max="100">32%</progress>
|
|
1360
|
+
|
|
1361
|
+
<!-- Thick progress bar -->
|
|
1362
|
+
<progress class="progress thick" value="32" max="100">32%</progress>
|
|
1363
|
+
```
|
|
1364
|
+
|
|
1365
|
+
### Loading Spinner
|
|
1366
|
+
```html
|
|
1367
|
+
<div class="loading-spinner">
|
|
1368
|
+
<div class="spinner"></div>
|
|
1369
|
+
<p class="loading-text">Loading...</p>
|
|
1370
|
+
</div>
|
|
1371
|
+
```
|
|
1372
|
+
|
|
1373
|
+
### Empty State
|
|
1374
|
+
|
|
1375
|
+
Empty state messages inform users when there is no data to display.
|
|
1376
|
+
|
|
1377
|
+
```html
|
|
1378
|
+
<!-- Default empty state -->
|
|
1379
|
+
<div class="empty-state-message">
|
|
1380
|
+
No items here yet.
|
|
1381
|
+
</div>
|
|
1382
|
+
|
|
1383
|
+
<!-- Search empty state -->
|
|
1384
|
+
<div class="empty-state-message search">
|
|
1385
|
+
No search results found.
|
|
1386
|
+
</div>
|
|
1387
|
+
|
|
1388
|
+
<!-- Sad empty state -->
|
|
1389
|
+
<div class="empty-state-message sad">
|
|
1390
|
+
Something went wrong.
|
|
1391
|
+
</div>
|
|
1392
|
+
|
|
1393
|
+
<!-- Smiling empty state -->
|
|
1394
|
+
<div class="empty-state-message smile">
|
|
1395
|
+
All caught up!
|
|
1396
|
+
</div>
|
|
1397
|
+
|
|
1398
|
+
<!-- Deceased empty state -->
|
|
1399
|
+
<div class="empty-state-message deceased">
|
|
1400
|
+
This item has been archived.
|
|
1401
|
+
</div>
|
|
1402
|
+
|
|
1403
|
+
<!-- Chat empty state -->
|
|
1404
|
+
<div class="empty-state-message chat">
|
|
1405
|
+
No messages yet.
|
|
1406
|
+
</div>
|
|
1407
|
+
|
|
1408
|
+
<!-- Bell empty state -->
|
|
1409
|
+
<div class="empty-state-message bell">
|
|
1410
|
+
No notifications.
|
|
1411
|
+
</div>
|
|
1412
|
+
|
|
1413
|
+
<!-- Horizontal empty state -->
|
|
1414
|
+
<div class="empty-state-message horizontal">
|
|
1415
|
+
Horizontal layout message.
|
|
1416
|
+
</div>
|
|
1417
|
+
```
|
|
1418
|
+
|
|
1419
|
+
---
|
|
1420
|
+
|
|
1421
|
+
## Data Display Components
|
|
1422
|
+
|
|
1423
|
+
### Tables
|
|
1424
|
+
|
|
1425
|
+
The design system includes several table variants with comprehensive dark mode support.
|
|
1426
|
+
|
|
1427
|
+
#### Basic Table
|
|
1428
|
+
```html
|
|
1429
|
+
<table class="table">
|
|
1430
|
+
<thead>
|
|
1431
|
+
<tr>
|
|
1432
|
+
<th>Name</th>
|
|
1433
|
+
<th>Status</th>
|
|
1434
|
+
<th>Actions</th>
|
|
1435
|
+
</tr>
|
|
1436
|
+
</thead>
|
|
1437
|
+
<tbody>
|
|
1438
|
+
<tr>
|
|
1439
|
+
<td>John Doe</td>
|
|
1440
|
+
<td>
|
|
1441
|
+
<span class="badge badge-success">Active</span>
|
|
1442
|
+
</td>
|
|
1443
|
+
<td>
|
|
1444
|
+
<button class="btn btn-sm btn-ghost">Edit</button>
|
|
1445
|
+
</td>
|
|
1446
|
+
</tr>
|
|
1447
|
+
</tbody>
|
|
1448
|
+
</table>
|
|
1449
|
+
```
|
|
1450
|
+
|
|
1451
|
+
#### Table Variants
|
|
1452
|
+
```html
|
|
1453
|
+
<!-- Bordered table -->
|
|
1454
|
+
<table class="table table-bordered">...</table>
|
|
1455
|
+
|
|
1456
|
+
<!-- Borderless table -->
|
|
1457
|
+
<table class="table table-borderless">...</table>
|
|
1458
|
+
|
|
1459
|
+
<!-- Striped/alternating rows -->
|
|
1460
|
+
<table class="table table-striped">...</table>
|
|
1461
|
+
|
|
1462
|
+
<!-- Compact table -->
|
|
1463
|
+
<table class="table table-sm">...</table>
|
|
1464
|
+
|
|
1465
|
+
<!-- Standard table (key-value style) -->
|
|
1466
|
+
<table class="table-standard">
|
|
1467
|
+
<tbody>
|
|
1468
|
+
<tr>
|
|
1469
|
+
<td>Property</td>
|
|
1470
|
+
<td>Value</td>
|
|
1471
|
+
</tr>
|
|
1472
|
+
</tbody>
|
|
1473
|
+
</table>
|
|
1474
|
+
```
|
|
1475
|
+
|
|
1476
|
+
#### Cell Style Table (Status Tracking)
|
|
1477
|
+
```html
|
|
1478
|
+
<table class="table-cellstyle">
|
|
1479
|
+
<thead>
|
|
1480
|
+
<tr>
|
|
1481
|
+
<th class="completed">Feature A</th>
|
|
1482
|
+
<th class="inprogress">Feature B</th>
|
|
1483
|
+
<th class="missing">Feature C</th>
|
|
1484
|
+
</tr>
|
|
1485
|
+
</thead>
|
|
1486
|
+
<tbody>
|
|
1487
|
+
<tr>
|
|
1488
|
+
<td class="completed">Implementation done</td>
|
|
1489
|
+
<td class="inprogress">Working on it...</td>
|
|
1490
|
+
<td class="missing">Not started</td>
|
|
1491
|
+
</tr>
|
|
1492
|
+
</tbody>
|
|
1493
|
+
</table>
|
|
1494
|
+
```
|
|
1495
|
+
|
|
1496
|
+
**Status Classes:**
|
|
1497
|
+
- `.completed` - Green checkmark icon
|
|
1498
|
+
- `.inprogress` - Clock icon, gray background, italic text
|
|
1499
|
+
- `.missing` - Exclamation icon, transparent bg, disabled text
|
|
1500
|
+
|
|
1501
|
+
#### Table Cell Utilities
|
|
1502
|
+
```html
|
|
1503
|
+
<!-- Fixed width cell -->
|
|
1504
|
+
<td class="td-fixed-width">Limited to 150px</td>
|
|
1505
|
+
|
|
1506
|
+
<!-- Actions cell (right-aligned) -->
|
|
1507
|
+
<td class="action-cell">
|
|
1508
|
+
<button class="btn btn-sm btn-ghost">Edit</button>
|
|
1509
|
+
</td>
|
|
1510
|
+
|
|
1511
|
+
<!-- Title cell (max 500px) -->
|
|
1512
|
+
<td class="title">Long title...</td>
|
|
1513
|
+
|
|
1514
|
+
<!-- Full width cell -->
|
|
1515
|
+
<td class="cell-full-width">Takes all space</td>
|
|
1516
|
+
|
|
1517
|
+
<!-- Text wrapping -->
|
|
1518
|
+
<td class="wrap">This text will wrap</td>
|
|
1519
|
+
<td class="pre">Preserves whitespace</td>
|
|
1520
|
+
```
|
|
1521
|
+
|
|
1522
|
+
#### Interactive Table Rows
|
|
1523
|
+
```html
|
|
1524
|
+
<!-- Hover to highlight row -->
|
|
1525
|
+
<tr class="linked-row">...</tr>
|
|
1526
|
+
|
|
1527
|
+
<!-- Hover to highlight cell -->
|
|
1528
|
+
<td class="linked-cell">...</td>
|
|
1529
|
+
|
|
1530
|
+
<!-- Highlight parent row on child hover -->
|
|
1531
|
+
<tr>
|
|
1532
|
+
<td>
|
|
1533
|
+
<a class="highlight-parent-row" href="#">Link</a>
|
|
1534
|
+
</td>
|
|
1535
|
+
</tr>
|
|
1536
|
+
```
|
|
1537
|
+
|
|
1538
|
+
---
|
|
1539
|
+
|
|
1540
|
+
## List Components
|
|
1541
|
+
|
|
1542
|
+
### Basic List Items
|
|
1543
|
+
|
|
1544
|
+
```html
|
|
1545
|
+
<div class="list-listitems">
|
|
1546
|
+
<div class="listitem">
|
|
1547
|
+
<div class="listitem-title">List item title</div>
|
|
1548
|
+
</div>
|
|
1549
|
+
|
|
1550
|
+
<!-- List item with badge -->
|
|
1551
|
+
<div class="listitem">
|
|
1552
|
+
<div class="listitem-badge">
|
|
1553
|
+
<div class="icon icon-feature"></div>
|
|
1554
|
+
</div>
|
|
1555
|
+
<div class="listitem-title">
|
|
1556
|
+
List-item title
|
|
1557
|
+
<div class="listitem-label">Label</div>
|
|
1558
|
+
</div>
|
|
1559
|
+
<div class="listitem-metrics">
|
|
1560
|
+
<div class="listitem-metric">
|
|
1561
|
+
<div class="icon icon-critical"></div>
|
|
1562
|
+
99
|
|
1563
|
+
</div>
|
|
1564
|
+
<div class="listitem-metric">
|
|
1565
|
+
<div class="icon icon-high"></div>
|
|
1566
|
+
99
|
|
1567
|
+
</div>
|
|
1568
|
+
</div>
|
|
1569
|
+
</div>
|
|
1570
|
+
|
|
1571
|
+
<!-- List item with actions -->
|
|
1572
|
+
<div class="listitem">
|
|
1573
|
+
<div class="listitem-title">List-item with action</div>
|
|
1574
|
+
<div class="listitem-actions">
|
|
1575
|
+
<a class="btn btn-primary">Action</a>
|
|
1576
|
+
</div>
|
|
1577
|
+
</div>
|
|
1578
|
+
|
|
1579
|
+
<!-- Linked list item -->
|
|
1580
|
+
<a class="listitem" href="#">
|
|
1581
|
+
<div class="listitem-title">
|
|
1582
|
+
<span class="icon icon-user-story mr-icon-spacing"></span>
|
|
1583
|
+
Linked list item
|
|
1584
|
+
</div>
|
|
1585
|
+
</a>
|
|
1586
|
+
</div>
|
|
1587
|
+
```
|
|
1588
|
+
|
|
1589
|
+
### List Item Variants
|
|
1590
|
+
|
|
1591
|
+
```html
|
|
1592
|
+
<!-- With action bar -->
|
|
1593
|
+
<div class="listitem with-actionbar">...</div>
|
|
1594
|
+
|
|
1595
|
+
<!-- With footer -->
|
|
1596
|
+
<div class="listitem with-footer">
|
|
1597
|
+
<div class="listitem-title">Title</div>
|
|
1598
|
+
<div class="listitem-footer">Footer content</div>
|
|
1599
|
+
</div>
|
|
1600
|
+
|
|
1601
|
+
<!-- Collapsable list item -->
|
|
1602
|
+
<details class="listitem collapsable">
|
|
1603
|
+
<summary class="listitem-header">
|
|
1604
|
+
<div class="listitem-title">Collapsable Title</div>
|
|
1605
|
+
<div class="btn collapse-btn"></div>
|
|
1606
|
+
</summary>
|
|
1607
|
+
<div class="listitem-content">Hidden content</div>
|
|
1608
|
+
</details>
|
|
1609
|
+
|
|
1610
|
+
<!-- Nested list items -->
|
|
1611
|
+
<div class="listitem nested">
|
|
1612
|
+
<div class="listitem-title">Parent</div>
|
|
1613
|
+
<div class="list-listitems nested">
|
|
1614
|
+
<div class="listitem">Child 1</div>
|
|
1615
|
+
<div class="listitem">Child 2</div>
|
|
1616
|
+
</div>
|
|
1617
|
+
</div>
|
|
1618
|
+
|
|
1619
|
+
<!-- Selectable list item -->
|
|
1620
|
+
<div class="listitem selectable">
|
|
1621
|
+
<input type="checkbox" id="select1">
|
|
1622
|
+
<label for="select1">
|
|
1623
|
+
<div class="listitem-title">Selectable Item</div>
|
|
1624
|
+
</label>
|
|
1625
|
+
</div>
|
|
1626
|
+
|
|
1627
|
+
<!-- White background list item -->
|
|
1628
|
+
<div class="listitem white">...</div>
|
|
1629
|
+
```
|
|
1630
|
+
|
|
1631
|
+
### User Item
|
|
1632
|
+
```html
|
|
1633
|
+
<div class="user-item">
|
|
1634
|
+
<div class="user-item-avatar">
|
|
1635
|
+
<img src="avatar.jpg" alt="User">
|
|
1636
|
+
</div>
|
|
1637
|
+
<div class="user-item-info">
|
|
1638
|
+
<h4 class="user-item-name">Jane Smith</h4>
|
|
1639
|
+
<p class="user-item-email">jane@example.com</p>
|
|
1640
|
+
</div>
|
|
1641
|
+
<div class="user-item-actions">
|
|
1642
|
+
<button class="btn btn-sm btn-secondary">Message</button>
|
|
1643
|
+
</div>
|
|
1644
|
+
</div>
|
|
1645
|
+
```
|
|
1646
|
+
|
|
1647
|
+
### Task/Issue Item
|
|
1648
|
+
```html
|
|
1649
|
+
<div class="task-item">
|
|
1650
|
+
<div class="task-item-header">
|
|
1651
|
+
<h4 class="task-item-title">Fix login bug</h4>
|
|
1652
|
+
<span class="badge badge-danger">High</span>
|
|
1653
|
+
</div>
|
|
1654
|
+
<div class="task-item-body">
|
|
1655
|
+
<p class="task-item-description">Description</p>
|
|
1656
|
+
</div>
|
|
1657
|
+
<div class="task-item-footer">
|
|
1658
|
+
<span class="task-item-meta">Due: Oct 25, 2025</span>
|
|
1659
|
+
</div>
|
|
1660
|
+
</div>
|
|
1661
|
+
```
|
|
1662
|
+
|
|
1663
|
+
---
|
|
1664
|
+
|
|
1665
|
+
## Splitview Components
|
|
1666
|
+
|
|
1667
|
+
Two-pane layout for list and detail views with responsive behavior.
|
|
1668
|
+
|
|
1669
|
+
### Basic Splitview
|
|
1670
|
+
```html
|
|
1671
|
+
<div class="splitview">
|
|
1672
|
+
<div class="splitview-list">
|
|
1673
|
+
<div class="splitview-item">
|
|
1674
|
+
<div class="splitview-item-title">Item 1</div>
|
|
1675
|
+
</div>
|
|
1676
|
+
</div>
|
|
1677
|
+
<div class="splitview-detail">
|
|
1678
|
+
<h2>Detail View</h2>
|
|
1679
|
+
<p>Selected item details</p>
|
|
1680
|
+
</div>
|
|
1681
|
+
</div>
|
|
1682
|
+
```
|
|
1683
|
+
|
|
1684
|
+
### Splitview List Header
|
|
1685
|
+
```html
|
|
1686
|
+
<div class="splitview-list-header">
|
|
1687
|
+
<div class="form-check sm">
|
|
1688
|
+
<input type="checkbox">
|
|
1689
|
+
</div>
|
|
1690
|
+
<h3 class="splitview-list-header-title">18 Bugs</h3>
|
|
1691
|
+
<div class="splitview-list-header-actions">
|
|
1692
|
+
<details class="dropdown-actions dropright">
|
|
1693
|
+
<summary>
|
|
1694
|
+
<a class="link-with-icon" href="">
|
|
1695
|
+
<div class="icon icon-sort-descending"></div>
|
|
1696
|
+
Severity (desc)
|
|
1697
|
+
</a>
|
|
1698
|
+
</summary>
|
|
1699
|
+
<div class="popover-menu">
|
|
1700
|
+
<a class="popover-action" href="#">Sort option 1</a>
|
|
1701
|
+
<a class="popover-action" href="#">Sort option 2</a>
|
|
1702
|
+
</div>
|
|
1703
|
+
</details>
|
|
1704
|
+
<a class="linked-icon" href="">
|
|
1705
|
+
<div class="icon icon-filter"></div>
|
|
1706
|
+
</a>
|
|
1707
|
+
<a class="linked-icon" href="">
|
|
1708
|
+
<div class="icon icon-search"></div>
|
|
1709
|
+
</a>
|
|
1710
|
+
</div>
|
|
1711
|
+
</div>
|
|
1712
|
+
```
|
|
1713
|
+
|
|
1714
|
+
### Splitview Item
|
|
1715
|
+
```html
|
|
1716
|
+
<div class="splitview-list">
|
|
1717
|
+
<div class="splitview-item">
|
|
1718
|
+
<div class="splitview-item-checkbox form-check sm">
|
|
1719
|
+
<input type="checkbox">
|
|
1720
|
+
</div>
|
|
1721
|
+
<div class="splitview-item-icon icon icon-critical"></div>
|
|
1722
|
+
<div class="splitview-item-text">
|
|
1723
|
+
<div class="splitview-item-title">Item title</div>
|
|
1724
|
+
<div class="splitview-item-metainfo">
|
|
1725
|
+
#123321321 | Product Detail Page
|
|
1726
|
+
</div>
|
|
1727
|
+
</div>
|
|
1728
|
+
<div class="splitview-item-status">
|
|
1729
|
+
<div class="status-icon status-submitted"></div>
|
|
1730
|
+
<div class="status-icon status-manager-approved"></div>
|
|
1731
|
+
</div>
|
|
1732
|
+
</div>
|
|
1733
|
+
|
|
1734
|
+
<!-- Selected state -->
|
|
1735
|
+
<div class="splitview-item selected">...</div>
|
|
1736
|
+
</div>
|
|
1737
|
+
```
|
|
1738
|
+
|
|
1739
|
+
### Splitview with Status Groups
|
|
1740
|
+
```html
|
|
1741
|
+
<div class="splitview">
|
|
1742
|
+
<div class="splitview-list">
|
|
1743
|
+
<details class="splitview-group" open>
|
|
1744
|
+
<summary class="splitview-group-header">
|
|
1745
|
+
<h3 class="splitview-group-title">Test Group 1</h3>
|
|
1746
|
+
<i class="icon icon-chevron-down"></i>
|
|
1747
|
+
</summary>
|
|
1748
|
+
|
|
1749
|
+
<div class="splitview-group-status">
|
|
1750
|
+
<div class="status-stepper">
|
|
1751
|
+
<div class="status-step completed">
|
|
1752
|
+
<i class="icon icon-check-thick-centered"></i>
|
|
1753
|
+
3 done
|
|
1754
|
+
</div>
|
|
1755
|
+
<div class="status-step active">
|
|
1756
|
+
<i class="icon icon-sync"></i>
|
|
1757
|
+
Executing
|
|
1758
|
+
</div>
|
|
1759
|
+
<div class="status-step">
|
|
1760
|
+
+ 3 to do
|
|
1761
|
+
</div>
|
|
1762
|
+
</div>
|
|
1763
|
+
</div>
|
|
1764
|
+
|
|
1765
|
+
<div class="splitview-item">...</div>
|
|
1766
|
+
<div class="splitview-item">...</div>
|
|
1767
|
+
|
|
1768
|
+
<button class="splitview-btn">
|
|
1769
|
+
Show 5 dismissed items
|
|
1770
|
+
</button>
|
|
1771
|
+
</details>
|
|
1772
|
+
</div>
|
|
1773
|
+
</div>
|
|
1774
|
+
```
|
|
1775
|
+
|
|
1776
|
+
### Collapsable Splitview Item
|
|
1777
|
+
```html
|
|
1778
|
+
<details class="splitview-item collapsable">
|
|
1779
|
+
<summary class="splitview-item-header">
|
|
1780
|
+
<div class="splitview-item-title">Collapsable Item</div>
|
|
1781
|
+
<div class="btn collapse-btn"></div>
|
|
1782
|
+
</summary>
|
|
1783
|
+
<div class="splitview-item-content">
|
|
1784
|
+
Expanded content
|
|
1785
|
+
</div>
|
|
1786
|
+
</details>
|
|
1787
|
+
```
|
|
1788
|
+
|
|
1789
|
+
---
|
|
1790
|
+
|
|
1791
|
+
## Chat Components
|
|
1792
|
+
|
|
1793
|
+
Comprehensive chat interface components with full dark mode support.
|
|
1794
|
+
|
|
1795
|
+
### Chat Message List
|
|
1796
|
+
```html
|
|
1797
|
+
<div class="list-chat-messages">
|
|
1798
|
+
<div class="chat-message-item">
|
|
1799
|
+
<img src="avatar.jpg" alt="User" class="chat-avatar">
|
|
1800
|
+
|
|
1801
|
+
<div class="chat-header">
|
|
1802
|
+
<span class="chat-title">
|
|
1803
|
+
<span class="chat-author">John Doe</span>
|
|
1804
|
+
</span>
|
|
1805
|
+
<span class="chat-time">2 hours ago</span>
|
|
1806
|
+
</div>
|
|
1807
|
+
|
|
1808
|
+
<div class="chat-message">
|
|
1809
|
+
<p>This is a chat message with some content.</p>
|
|
1810
|
+
</div>
|
|
1811
|
+
|
|
1812
|
+
<div class="chat-actions">
|
|
1813
|
+
<button class="btn btn-ghost btn-sm">
|
|
1814
|
+
<i class="icon icon-reply"></i>
|
|
1815
|
+
</button>
|
|
1816
|
+
</div>
|
|
1817
|
+
</div>
|
|
1818
|
+
</div>
|
|
1819
|
+
```
|
|
1820
|
+
|
|
1821
|
+
### Full Width Chat
|
|
1822
|
+
```html
|
|
1823
|
+
<div class="list-chat-messages full-width">
|
|
1824
|
+
<div class="chat-message-item">...</div>
|
|
1825
|
+
</div>
|
|
1826
|
+
```
|
|
1827
|
+
|
|
1828
|
+
### Chat Message Variants
|
|
1829
|
+
|
|
1830
|
+
```html
|
|
1831
|
+
<!-- Announcement message -->
|
|
1832
|
+
<div class="chat-message">
|
|
1833
|
+
<div class="message-banner announcement">
|
|
1834
|
+
System Announcement: Maintenance scheduled
|
|
1835
|
+
</div>
|
|
1836
|
+
<p>The system will be down for maintenance on Saturday.</p>
|
|
1837
|
+
</div>
|
|
1838
|
+
|
|
1839
|
+
<!-- Mentioned message -->
|
|
1840
|
+
<div class="chat-message">
|
|
1841
|
+
<div class="message-banner mentioned">
|
|
1842
|
+
<span class="text-mentioned">@YourName</span> mentioned you
|
|
1843
|
+
</div>
|
|
1844
|
+
<p>Hey, can you take a look at this?</p>
|
|
1845
|
+
</div>
|
|
1846
|
+
```
|
|
1847
|
+
|
|
1848
|
+
### Chat Window Component
|
|
1849
|
+
```html
|
|
1850
|
+
<div class="chat-window">
|
|
1851
|
+
<div class="chat-window-header">
|
|
1852
|
+
<h3>Chat</h3>
|
|
1853
|
+
</div>
|
|
1854
|
+
<div class="chat-window-messages">
|
|
1855
|
+
<div class="list-chat-messages">
|
|
1856
|
+
<!-- Messages -->
|
|
1857
|
+
</div>
|
|
1858
|
+
</div>
|
|
1859
|
+
<div class="chat-window-input">
|
|
1860
|
+
<textarea class="form-control" placeholder="Type a message..."></textarea>
|
|
1861
|
+
<button class="btn btn-primary">Send</button>
|
|
1862
|
+
</div>
|
|
1863
|
+
</div>
|
|
1864
|
+
```
|
|
1865
|
+
|
|
1866
|
+
---
|
|
1867
|
+
|
|
1868
|
+
## Chart Components
|
|
1869
|
+
|
|
1870
|
+
The design system integrates ECharts for data visualization with design system colors.
|
|
1871
|
+
|
|
1872
|
+
### Chart Container
|
|
1873
|
+
```html
|
|
1874
|
+
<div class="echarts-container" id="my-chart"></div>
|
|
1875
|
+
```
|
|
1876
|
+
|
|
1877
|
+
### Chart Types
|
|
1878
|
+
|
|
1879
|
+
#### Horizontal Bar Chart
|
|
1880
|
+
```javascript
|
|
1881
|
+
import { createChartHorizontal } from './modules/echarts_horizontal';
|
|
1882
|
+
|
|
1883
|
+
createChartHorizontal(
|
|
1884
|
+
"element-id", // Target element ID
|
|
1885
|
+
dataArray, // Data labels array
|
|
1886
|
+
seriesArray, // Series configuration
|
|
1887
|
+
showLegend, // Boolean: show legend
|
|
1888
|
+
labelColor, // Color for labels
|
|
1889
|
+
valueColor // Color for values
|
|
1890
|
+
);
|
|
1891
|
+
```
|
|
1892
|
+
|
|
1893
|
+
#### Donut Chart
|
|
1894
|
+
```javascript
|
|
1895
|
+
import { createChartDonut } from './modules/echarts_donut';
|
|
1896
|
+
|
|
1897
|
+
createChartDonut(
|
|
1898
|
+
"element-id", // Target element ID
|
|
1899
|
+
dataArray, // Data array with values
|
|
1900
|
+
valueText, // Center value text
|
|
1901
|
+
labelText, // Center label text
|
|
1902
|
+
showLegend, // Boolean: show legend
|
|
1903
|
+
labelColor, // Color for labels
|
|
1904
|
+
valueColor // Color for values
|
|
1905
|
+
);
|
|
1906
|
+
```
|
|
1907
|
+
|
|
1908
|
+
#### Vertical Bar Chart
|
|
1909
|
+
```javascript
|
|
1910
|
+
import { createChartVertical } from './modules/echarts_vertical';
|
|
1911
|
+
```
|
|
1912
|
+
|
|
1913
|
+
#### Line Chart
|
|
1914
|
+
```javascript
|
|
1915
|
+
import { createChartLine } from './modules/echarts_line';
|
|
1916
|
+
```
|
|
1917
|
+
|
|
1918
|
+
#### Area Chart
|
|
1919
|
+
```javascript
|
|
1920
|
+
import { createChartArea } from './modules/echarts_area';
|
|
1921
|
+
```
|
|
1922
|
+
|
|
1923
|
+
#### Gauge Chart
|
|
1924
|
+
```javascript
|
|
1925
|
+
import { createChartGauge } from './modules/echarts_gauge';
|
|
1926
|
+
```
|
|
1927
|
+
|
|
1928
|
+
### Chart Colors
|
|
1929
|
+
```javascript
|
|
1930
|
+
// Available chart colors
|
|
1931
|
+
export const colorCritical = '#FF3131';
|
|
1932
|
+
export const colorHigh = '#d8ce0d';
|
|
1933
|
+
export const colorLow = '#9fa2a8';
|
|
1934
|
+
export const colorVisual = '#f48d21';
|
|
1935
|
+
export const colorContent = '#326dd1';
|
|
1936
|
+
export const colorUX = '#263340';
|
|
1937
|
+
export const colorSuccess = '#8cbd24';
|
|
1938
|
+
export const colorDanger = '#FF3131';
|
|
1939
|
+
export const colorNeutral = '#e6e6e6';
|
|
1940
|
+
export const colorInfo = '#326dd1';
|
|
1941
|
+
export const colorBlueLight = '#21bef4';
|
|
1942
|
+
```
|
|
1943
|
+
|
|
1944
|
+
### Chart Data Examples
|
|
1945
|
+
```javascript
|
|
1946
|
+
// Bug distribution data
|
|
1947
|
+
export let dataBugs = [
|
|
1948
|
+
{ value: 79, name: 'Critical', itemStyle: {color: colorCritical}},
|
|
1949
|
+
{ value: 37, name: 'High', itemStyle: {color: colorHigh}},
|
|
1950
|
+
{ value: 19, name: 'Low', itemStyle: {color: colorLow}},
|
|
1951
|
+
];
|
|
1952
|
+
|
|
1953
|
+
// Test case status
|
|
1954
|
+
export let dataTestCases = [
|
|
1955
|
+
{ value: 50, name: 'Passed', itemStyle: {color: colorSuccess}},
|
|
1956
|
+
{ value: 23, name: 'Failed', itemStyle: {color: colorDanger}},
|
|
1957
|
+
{ value: 27, name: 'Open', itemStyle: {color: colorNeutral}},
|
|
1958
|
+
];
|
|
1959
|
+
```
|
|
1960
|
+
|
|
1961
|
+
---
|
|
1962
|
+
|
|
1963
|
+
## Status & Progress Components
|
|
1964
|
+
|
|
1965
|
+
### Status Stepper
|
|
1966
|
+
|
|
1967
|
+
A horizontal stepper component for visualizing multi-step processes.
|
|
1968
|
+
|
|
1969
|
+
#### Icon-based Status Stepper
|
|
1970
|
+
```html
|
|
1971
|
+
<div class="status-stepper">
|
|
1972
|
+
<div class="status-step completed">
|
|
1973
|
+
<div class="icon icon-check-thick-centered"></div>
|
|
1974
|
+
3 done
|
|
1975
|
+
</div>
|
|
1976
|
+
<div class="status-step active">
|
|
1977
|
+
<div class="icon icon-sync"></div>
|
|
1978
|
+
Executing checks
|
|
1979
|
+
</div>
|
|
1980
|
+
<div class="status-step">
|
|
1981
|
+
+ 3 to do
|
|
1982
|
+
</div>
|
|
1983
|
+
</div>
|
|
1984
|
+
```
|
|
1985
|
+
|
|
1986
|
+
#### Counter-based Status Stepper
|
|
1987
|
+
```html
|
|
1988
|
+
<div class="status-stepper">
|
|
1989
|
+
<div class="status-step completed">
|
|
1990
|
+
<div class="counter">99</div>
|
|
1991
|
+
Completed
|
|
1992
|
+
</div>
|
|
1993
|
+
<div class="status-step active">
|
|
1994
|
+
<div class="counter">12</div>
|
|
1995
|
+
Active
|
|
1996
|
+
</div>
|
|
1997
|
+
<div class="status-step">
|
|
1998
|
+
<div class="counter">5</div>
|
|
1999
|
+
Pending
|
|
2000
|
+
</div>
|
|
2001
|
+
</div>
|
|
2002
|
+
```
|
|
2003
|
+
|
|
2004
|
+
**Component Classes:**
|
|
2005
|
+
- `.status-stepper` - Container (flex row, items-stretch, full width)
|
|
2006
|
+
- `.status-step` - Individual step (flex row, centered, rounded, px-md py-xs, bg-black)
|
|
2007
|
+
- `.status-step.active` - Active step (grow-1, white text, bg-gray-750)
|
|
2008
|
+
- `.status-step.completed` - Completed state (can combine with custom styling)
|
|
2009
|
+
- `.status-step .icon` - Icon within step (mr-xs, text-label-color)
|
|
2010
|
+
- `.status-step .counter` - Numeric counter (pr-xs, text-lg, font-bold)
|
|
2011
|
+
|
|
2012
|
+
---
|
|
2013
|
+
|
|
2014
|
+
## Utility Components
|
|
2015
|
+
|
|
2016
|
+
### Tags
|
|
2017
|
+
```html
|
|
2018
|
+
<div class="list-tags">
|
|
2019
|
+
<!-- Basic tag -->
|
|
2020
|
+
<div class="tag">Tag</div>
|
|
2021
|
+
|
|
2022
|
+
<!-- Small tag -->
|
|
2023
|
+
<div class="tag sm">Tag sm</div>
|
|
2024
|
+
|
|
2025
|
+
<!-- Focus group tag -->
|
|
2026
|
+
<div class="tag focus-group">Focus-group</div>
|
|
2027
|
+
|
|
2028
|
+
<!-- Verified tag -->
|
|
2029
|
+
<div class="tag teamleader-verified">
|
|
2030
|
+
<div class="icon icon-verify-check mr-xxs"></div>
|
|
2031
|
+
TL
|
|
2032
|
+
</div>
|
|
2033
|
+
|
|
2034
|
+
<!-- Status tags -->
|
|
2035
|
+
<div class="tag success">
|
|
2036
|
+
<div class="icon icon-check-circle"></div>
|
|
2037
|
+
Success
|
|
2038
|
+
</div>
|
|
2039
|
+
<div class="tag danger">
|
|
2040
|
+
<div class="icon icon-cross-circle"></div>
|
|
2041
|
+
Danger
|
|
2042
|
+
</div>
|
|
2043
|
+
<div class="tag pending">
|
|
2044
|
+
<div class="icon icon-sync"></div>
|
|
2045
|
+
Pending
|
|
2046
|
+
</div>
|
|
2047
|
+
</div>
|
|
2048
|
+
```
|
|
2049
|
+
|
|
2050
|
+
### Tag with Popover
|
|
2051
|
+
```html
|
|
2052
|
+
<details class="popover-wrapper">
|
|
2053
|
+
<summary>
|
|
2054
|
+
<div class="tag popover-tag">
|
|
2055
|
+
<div class="icon icon-clock"></div>
|
|
2056
|
+
Popover-tag
|
|
2057
|
+
</div>
|
|
2058
|
+
</summary>
|
|
2059
|
+
<div class="popover-menu info">
|
|
2060
|
+
<div class="popover-title">Popover title</div>
|
|
2061
|
+
<div class="popover-content">Content...</div>
|
|
2062
|
+
<div class="popover-actions">
|
|
2063
|
+
<div class="btn btn-sm btn-inverted">Action</div>
|
|
2064
|
+
</div>
|
|
2065
|
+
</div>
|
|
2066
|
+
</details>
|
|
2067
|
+
|
|
2068
|
+
<!-- Light popover tag -->
|
|
2069
|
+
<div class="tag popover-tag light">...</div>
|
|
2070
|
+
|
|
2071
|
+
<!-- Colored popover tags -->
|
|
2072
|
+
<div class="tag popover-tag bg-info text-white">...</div>
|
|
2073
|
+
<div class="tag popover-tag bg-black text-white">...</div>
|
|
2074
|
+
<div class="tag popover-tag bg-danger text-white">...</div>
|
|
2075
|
+
```
|
|
2076
|
+
|
|
2077
|
+
### Info Popover
|
|
2078
|
+
```html
|
|
2079
|
+
<details class="popover-wrapper">
|
|
2080
|
+
<summary>
|
|
2081
|
+
<div class="btn btn-sm btn-square">
|
|
2082
|
+
<div class="icon icon-info"></div>
|
|
2083
|
+
</div>
|
|
2084
|
+
</summary>
|
|
2085
|
+
<div class="popover-menu info">
|
|
2086
|
+
<div class="popover-title">Popover title</div>
|
|
2087
|
+
<div class="popover-content">Popover content...</div>
|
|
2088
|
+
<div class="text-with-icon mt-xs">
|
|
2089
|
+
<div class="icon icon-lock text-disabled mr-icon-spacing"></div>
|
|
2090
|
+
<div class="text-sm">0/100 Completed</div>
|
|
2091
|
+
</div>
|
|
2092
|
+
<div class="text-with-icon mt-xs">
|
|
2093
|
+
<div class="icon icon-unlock text-success mr-icon-spacing"></div>
|
|
2094
|
+
<div class="text-sm">50/50 Done</div>
|
|
2095
|
+
</div>
|
|
2096
|
+
<div class="popover-actions">
|
|
2097
|
+
<div class="btn btn-sm btn-inverted">Action</div>
|
|
2098
|
+
</div>
|
|
2099
|
+
</div>
|
|
2100
|
+
</details>
|
|
2101
|
+
```
|
|
2102
|
+
|
|
2103
|
+
### Pagination
|
|
2104
|
+
```html
|
|
2105
|
+
<nav class="pagy-bootstrap nav">
|
|
2106
|
+
<ul class="pagination">
|
|
2107
|
+
<li class="page-item prev">
|
|
2108
|
+
<a class="page-link" href="#"><</a>
|
|
2109
|
+
</li>
|
|
2110
|
+
<li class="page-item">
|
|
2111
|
+
<a class="page-link" href="#">1</a>
|
|
2112
|
+
</li>
|
|
2113
|
+
<li class="page-item active">
|
|
2114
|
+
<a class="page-link" href="#">2</a>
|
|
2115
|
+
</li>
|
|
2116
|
+
<li class="page-item">
|
|
2117
|
+
<a class="page-link" href="#">3</a>
|
|
2118
|
+
</li>
|
|
2119
|
+
<li class="page-item next disabled">
|
|
2120
|
+
<a class="page-link" href="#">></a>
|
|
2121
|
+
</li>
|
|
2122
|
+
</ul>
|
|
2123
|
+
</nav>
|
|
2124
|
+
```
|
|
2125
|
+
|
|
2126
|
+
### Badges
|
|
2127
|
+
```html
|
|
2128
|
+
<span class="badge badge-primary">New</span>
|
|
2129
|
+
<span class="badge badge-success">Active</span>
|
|
2130
|
+
<span class="badge badge-danger">Urgent</span>
|
|
2131
|
+
<span class="badge badge-warning">Pending</span>
|
|
2132
|
+
<span class="badge badge-info">Info</span>
|
|
2133
|
+
```
|
|
2134
|
+
|
|
2135
|
+
### Icon Sizes
|
|
2136
|
+
```html
|
|
2137
|
+
<i class="icon icon-star text-icon-xxxs"></i> <!-- 10px -->
|
|
2138
|
+
<i class="icon icon-star text-icon-xxs"></i> <!-- 0.625rem -->
|
|
2139
|
+
<i class="icon icon-star text-icon-xs"></i> <!-- 16px -->
|
|
2140
|
+
<i class="icon icon-star text-icon-sm"></i> <!-- 18px -->
|
|
2141
|
+
<i class="icon icon-star text-icon"></i> <!-- 20px - default -->
|
|
2142
|
+
<i class="icon icon-star text-icon-lg"></i> <!-- 40px -->
|
|
2143
|
+
<i class="icon icon-star text-icon-xl"></i> <!-- 60px -->
|
|
2144
|
+
<i class="icon icon-star text-icon-xxl"></i> <!-- 90px -->
|
|
2145
|
+
```
|
|
2146
|
+
|
|
2147
|
+
### Text with Icon
|
|
2148
|
+
```html
|
|
2149
|
+
<div class="text-with-icon">
|
|
2150
|
+
<div class="icon icon-check text-success mr-icon-spacing"></div>
|
|
2151
|
+
<span>Text with icon</span>
|
|
2152
|
+
</div>
|
|
2153
|
+
|
|
2154
|
+
<div class="link-with-icon">
|
|
2155
|
+
<div class="icon icon-external-link mr-icon-spacing"></div>
|
|
2156
|
+
<a href="#">Link with icon</a>
|
|
2157
|
+
</div>
|
|
2158
|
+
```
|
|
2159
|
+
|
|
2160
|
+
### Description List
|
|
2161
|
+
```html
|
|
2162
|
+
<dl class="description-list">
|
|
2163
|
+
<dt>Term</dt>
|
|
2164
|
+
<dd>Definition</dd>
|
|
2165
|
+
<dt>Another term</dt>
|
|
2166
|
+
<dd>Another definition</dd>
|
|
2167
|
+
</dl>
|
|
2168
|
+
|
|
2169
|
+
<!-- Inline description list -->
|
|
2170
|
+
<dl class="list-inline">
|
|
2171
|
+
<dt>Property</dt>
|
|
2172
|
+
<dd>Value</dd>
|
|
2173
|
+
</dl>
|
|
2174
|
+
```
|
|
2175
|
+
|
|
2176
|
+
---
|
|
2177
|
+
|
|
2178
|
+
## AgenticQA Components
|
|
2179
|
+
|
|
2180
|
+
Product-specific components for the AgenticQA platform.
|
|
2181
|
+
|
|
2182
|
+
### AgenticQA Page Header
|
|
2183
|
+
```html
|
|
2184
|
+
<div class="page-header">
|
|
2185
|
+
<div class="card page-maincard p-card-padding">
|
|
2186
|
+
<h1 class="text-card-header">Session details</h1>
|
|
2187
|
+
<h2 class="page-session-title">Test Session title</h2>
|
|
2188
|
+
<dl class="page-meta-info">
|
|
2189
|
+
<dt class="label">Created on:</dt>
|
|
2190
|
+
<dd>2025-07-23 19:11</dd>
|
|
2191
|
+
<dt class="label">Status:</dt>
|
|
2192
|
+
<dd class="text-white">Running</dd>
|
|
2193
|
+
</dl>
|
|
2194
|
+
</div>
|
|
2195
|
+
<div class="page-actions">
|
|
2196
|
+
<a class="btn btn-primary btn-main" href="">
|
|
2197
|
+
<span class="icon icon-test-running-xl"></span>
|
|
2198
|
+
Start test
|
|
2199
|
+
</a>
|
|
2200
|
+
</div>
|
|
2201
|
+
</div>
|
|
2202
|
+
```
|
|
2203
|
+
|
|
2204
|
+
### AgenticQA Status Stepper
|
|
2205
|
+
```html
|
|
2206
|
+
<div class="status-stepper">
|
|
2207
|
+
<div class="status-step completed">
|
|
2208
|
+
<div class="icon icon-check-thick-centered"></div>
|
|
2209
|
+
3 done
|
|
2210
|
+
</div>
|
|
2211
|
+
<div class="status-step active">
|
|
2212
|
+
<div class="icon icon-sync"></div>
|
|
2213
|
+
Executing checks
|
|
2214
|
+
</div>
|
|
2215
|
+
<div class="status-step">
|
|
2216
|
+
+ 3 to do
|
|
2217
|
+
</div>
|
|
2218
|
+
</div>
|
|
2219
|
+
```
|
|
2220
|
+
|
|
2221
|
+
### AgenticQA List Item
|
|
2222
|
+
```html
|
|
2223
|
+
<div class="listitem agenticqa">
|
|
2224
|
+
<!-- AgenticQA-specific list item styling -->
|
|
2225
|
+
</div>
|
|
2226
|
+
```
|
|
2227
|
+
|
|
2228
|
+
### AgenticQA Header
|
|
2229
|
+
```html
|
|
2230
|
+
<header class="header agenticqa_header">
|
|
2231
|
+
<!-- AgenticQA navigation -->
|
|
2232
|
+
</header>
|
|
2233
|
+
```
|
|
2234
|
+
|
|
2235
|
+
---
|
|
2236
|
+
|
|
2237
|
+
## Dark Mode
|
|
2238
|
+
|
|
2239
|
+
The design system includes comprehensive dark mode support with customized theme variables.
|
|
2240
|
+
|
|
2241
|
+
### Dark Mode Color Palette
|
|
2242
|
+
```css
|
|
2243
|
+
.dark {
|
|
2244
|
+
/* Core Colors */
|
|
2245
|
+
--color-appbody: #181818;
|
|
2246
|
+
--color-appbody-textcolor: #f2f2f2;
|
|
2247
|
+
--color-header: #1d1d1d;
|
|
2248
|
+
--color-card: #1D1D1D;
|
|
2249
|
+
--color-listitem: #262626;
|
|
2250
|
+
|
|
2251
|
+
/* Interactive Colors */
|
|
2252
|
+
--color-primary: #78eac1;
|
|
2253
|
+
--color-link: #8988eb;
|
|
2254
|
+
--color-link-hover: #7954ff;
|
|
2255
|
+
|
|
2256
|
+
/* Status Colors */
|
|
2257
|
+
--color-success: #33BA9E;
|
|
2258
|
+
--color-danger: #FF3131;
|
|
2259
|
+
--color-bordercolor: #2E2E2E;
|
|
2260
|
+
|
|
2261
|
+
/* Spacing & Style Adjustments */
|
|
2262
|
+
--radius: 12px; /* Increased from 5px */
|
|
2263
|
+
--spacing-grid-gutter: 40px; /* Increased from 20px */
|
|
2264
|
+
--card-padding: 30px;
|
|
2265
|
+
--fontsize-card-header: 1.125rem;
|
|
2266
|
+
--font-size-label: 0.75rem;
|
|
2267
|
+
}
|
|
2268
|
+
```
|
|
2269
|
+
|
|
2270
|
+
### Using Dark Mode
|
|
2271
|
+
```html
|
|
2272
|
+
<!-- Apply dark class to container -->
|
|
2273
|
+
<div class="dark">
|
|
2274
|
+
<div class="bg-appbody text-appbody-textcolor">
|
|
2275
|
+
<div class="card p-card-padding">
|
|
2276
|
+
<p>Content with dark mode styling</p>
|
|
2277
|
+
</div>
|
|
2278
|
+
</div>
|
|
2279
|
+
</div>
|
|
2280
|
+
|
|
2281
|
+
<!-- Conditional dark mode classes -->
|
|
2282
|
+
<div class="bg-card dark:bg-listitem">
|
|
2283
|
+
<!-- Light mode: #e6e6e6, Dark mode: #262626 -->
|
|
2284
|
+
</div>
|
|
2285
|
+
```
|
|
2286
|
+
|
|
2287
|
+
### Dark Mode Differences
|
|
2288
|
+
- Border radius: `5px` → `12px`
|
|
2289
|
+
- Grid gutters: `20px` → `40px`
|
|
2290
|
+
- Table cell padding: `py-xs` → `py-md`
|
|
2291
|
+
- Chat layout: 3 columns → 2 columns (actions hidden)
|
|
2292
|
+
- Link colors: Petrol → Purple, Hover: Blue → Dark Purple
|
|
2293
|
+
|
|
2294
|
+
---
|
|
2295
|
+
|
|
2296
|
+
## Best Practices for AI Agents
|
|
2297
|
+
|
|
2298
|
+
### When Building Pages:
|
|
2299
|
+
|
|
2300
|
+
1. **Start with Layout Structure**
|
|
2301
|
+
- Use semantic HTML5 elements
|
|
2302
|
+
- Apply layout classes: `header`, `sidebar`, `main`, `section`
|
|
2303
|
+
- Use grid or flex utilities for responsive layouts
|
|
2304
|
+
- Consider using `.page-header` for dashboard pages
|
|
2305
|
+
|
|
2306
|
+
2. **Component Selection**
|
|
2307
|
+
- Choose the appropriate component variant for the use case
|
|
2308
|
+
- Use semantic button/alert types (primary, success, danger, etc.)
|
|
2309
|
+
- Apply consistent spacing using the spacing scale
|
|
2310
|
+
|
|
2311
|
+
3. **Responsive Design**
|
|
2312
|
+
- Use responsive grid classes: `grid-cols-1 md:grid-cols-2 lg:grid-cols-3`
|
|
2313
|
+
- Apply responsive utilities: `hidden md:block`, `flex-col md:flex-row`
|
|
2314
|
+
- Consider mobile-first approach
|
|
2315
|
+
|
|
2316
|
+
4. **Accessibility**
|
|
2317
|
+
- Include proper ARIA labels
|
|
2318
|
+
- Use semantic HTML elements
|
|
2319
|
+
- Ensure proper heading hierarchy
|
|
2320
|
+
- Include alt text for images
|
|
2321
|
+
- Use `<label>` elements with `for` attributes
|
|
2322
|
+
|
|
2323
|
+
5. **Dark Mode Considerations**
|
|
2324
|
+
- Always test components with `.dark` class applied
|
|
2325
|
+
- Border radius is larger in dark mode (12px vs 5px)
|
|
2326
|
+
- Grid gutters are larger in dark mode (40px vs 20px)
|
|
2327
|
+
- Use `dark:` prefix for conditional dark mode styles
|
|
2328
|
+
|
|
2329
|
+
6. **Form Best Practices**
|
|
2330
|
+
- Use `.form-grid` for form layouts
|
|
2331
|
+
- Apply `.form-group` wrapper around each field
|
|
2332
|
+
- Use `.form-hint` for helper text
|
|
2333
|
+
- Use `.field_with_errors` for validation states
|
|
2334
|
+
|
|
2335
|
+
7. **Table Best Practices**
|
|
2336
|
+
- Use `.table` for standard data tables
|
|
2337
|
+
- Use `.table-standard` for key-value style tables
|
|
2338
|
+
- Use `.table-cellstyle` for status tracking tables
|
|
2339
|
+
- Use `.action-cell` for right-aligned action buttons
|
|
2340
|
+
|
|
2341
|
+
8. **Page Header Best Practices**
|
|
2342
|
+
- Use `.page-header` for dashboard/session pages
|
|
2343
|
+
- Main card should have `.page-maincard` and `p-card-padding`
|
|
2344
|
+
- Add `.with-chart` modifier when including charts
|
|
2345
|
+
- Actions go in `.page-actions`
|
|
2346
|
+
|
|
2347
|
+
---
|
|
2348
|
+
|
|
2349
|
+
## Change Log
|
|
2350
|
+
|
|
2351
|
+
### Version 3.22.0 - January 2026
|
|
2352
|
+
|
|
2353
|
+
**New Features:**
|
|
2354
|
+
- HAML Preview functionality for live component viewing
|
|
2355
|
+
- HAML Converter utility for template processing
|
|
2356
|
+
- Comprehensive AI documentation across all component pages
|
|
2357
|
+
|
|
2358
|
+
**Enhancements:**
|
|
2359
|
+
- All component pages now include descriptions and use cases
|
|
2360
|
+
- Enhanced form component documentation (checkboxes, radios, toggles)
|
|
2361
|
+
- Improved layout documentation with examples
|
|
2362
|
+
- Typography pages updated with link and icon examples
|
|
2363
|
+
|
|
2364
|
+
**Documentation:**
|
|
2365
|
+
- Added descriptions to all forms pages
|
|
2366
|
+
- Updated textarea documentation
|
|
2367
|
+
- Enhanced typography component examples
|
|
2368
|
+
|
|
2369
|
+
### Version 3.13.1 - January 21, 2026
|
|
2370
|
+
|
|
2371
|
+
**Documentation Updates:**
|
|
2372
|
+
- Converted table example files from Pug to HAML format
|
|
2373
|
+
- Standardized HAML attribute syntax across all table examples
|
|
2374
|
+
|
|
2375
|
+
### Version 3.13.0 - January 20, 2026
|
|
2376
|
+
|
|
2377
|
+
**New Components:**
|
|
2378
|
+
- Date & Time Picker (Flatpickr integration)
|
|
2379
|
+
- Enhanced table variants with striped/alternating row styles
|
|
2380
|
+
|
|
2381
|
+
**Reorganization:**
|
|
2382
|
+
- Tables section moved to dedicated `/pages/tables/` directory
|
|
2383
|
+
- Improved table documentation
|
|
2384
|
+
|
|
2385
|
+
**Enhancements:**
|
|
2386
|
+
- Fixed table striped row styling
|
|
2387
|
+
- Improved drawer footer padding
|
|
2388
|
+
- Better splitview details close button
|
|
2389
|
+
- Added image tagging capability
|
|
2390
|
+
|
|
2391
|
+
---
|
|
2392
|
+
|
|
2393
|
+
## Version & Support
|
|
2394
|
+
|
|
2395
|
+
**Current Version:** 3.22.0
|
|
2396
|
+
**Tailwind Version:** 4.1.11
|
|
2397
|
+
**Node Version:** v23.11.0
|
|
2398
|
+
**Template Language:** HAML (primary) and Pug formats supported
|
|
2399
|
+
|
|
2400
|
+
For updates and examples, refer to:
|
|
2401
|
+
- NPM: `npm install testio-tailwind@latest`
|
|
2402
|
+
- Documentation: Included in package under `/dist/`
|
|
2403
|
+
- Source: GitHub repository (test-IO/testio-tailwind)
|
|
2404
|
+
|
|
2405
|
+
---
|
|
2406
|
+
|
|
2407
|
+
**END OF REFERENCE GUIDE**
|