testio-tailwind 3.20.5 → 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.
Files changed (137) hide show
  1. package/AI_DESIGN_SYSTEM_REFERENCE.md +2407 -0
  2. package/package.json +2 -1
  3. package/src/_data/navigation.json +4 -0
  4. package/src/_includes/header.njk +8 -8
  5. package/src/_includes/page-with-sidebar.njk +10 -1
  6. package/src/assets/scripts/app.js +43 -0
  7. package/src/assets/stylesheets/app.css +2 -0
  8. package/src/assets/stylesheets/components/designsystem/designsystem-styles.css +4 -2
  9. package/src/assets/stylesheets/components/forms.css +19 -11
  10. package/src/assets/stylesheets/components/tables.css +4 -0
  11. package/src/assets/stylesheets/plugin_themes/flatpickr.css +86 -0
  12. package/src/pages/buttons/block.haml +1 -0
  13. package/src/pages/buttons/button_group.haml +1 -0
  14. package/src/pages/buttons/buttons-lg.haml +1 -0
  15. package/src/pages/buttons/buttons-round.haml +1 -0
  16. package/src/pages/buttons/buttons-sm.haml +1 -0
  17. package/src/pages/buttons/buttons-xl.haml +1 -0
  18. package/src/pages/buttons/buttons.haml +1 -0
  19. package/src/pages/buttons/buttons_input.haml +4 -0
  20. package/src/pages/buttons/dropdown-menu.haml +2 -11
  21. package/src/pages/buttons/square-buttons.haml +15 -0
  22. package/src/pages/components/alerts.haml +1 -0
  23. package/src/pages/components/banner_cards.haml +1 -0
  24. package/src/pages/components/card_badges.haml +8 -7
  25. package/src/pages/components/cards.haml +15 -22
  26. package/src/pages/components/cards_customer.haml +1 -0
  27. package/src/pages/components/cards_fixedwidth.haml +7 -0
  28. package/src/pages/components/cards_iconheader.haml +1 -0
  29. package/src/pages/components/cards_tester.haml +1 -0
  30. package/src/pages/components/descriptionlist.haml +12 -3
  31. package/src/pages/components/devices.haml +1 -0
  32. package/src/pages/components/drawer.haml +1 -0
  33. package/src/pages/components/drawer_filter.haml +1 -0
  34. package/src/pages/components/emptystate.haml +2 -0
  35. package/src/pages/{buttons → components}/info_popover.haml +2 -1
  36. package/src/pages/components/listitem_with_actionbar.haml +1 -0
  37. package/src/pages/components/listitem_with_footer.haml +1 -0
  38. package/src/pages/components/listitems.haml +1 -0
  39. package/src/pages/components/listitems_badge.haml +1 -0
  40. package/src/pages/components/listitems_collapsable.haml +1 -0
  41. package/src/pages/components/listitems_nested.haml +1 -0
  42. package/src/pages/components/listitems_selectable.haml +1 -0
  43. package/src/pages/components/loading_spinner.haml +1 -0
  44. package/src/pages/components/metasidebar.haml +1 -0
  45. package/src/pages/components/modal_details.haml +3 -1
  46. package/src/pages/components/notifications.haml +2 -1
  47. package/src/pages/components/user_item.haml +1 -0
  48. package/src/pages/forms/attachments.pug +71 -0
  49. package/src/pages/forms/checkboxes.haml +1 -0
  50. package/src/pages/forms/checkboxes_devices.haml +1 -0
  51. package/src/pages/forms/date-time.haml +24 -0
  52. package/src/pages/forms/dropzone.pug +38 -0
  53. package/src/pages/forms/flatpickr.haml +27 -0
  54. package/src/pages/forms/form-addon.haml +1 -0
  55. package/src/pages/forms/form-card.haml +1 -0
  56. package/src/pages/forms/form_grid.haml +1 -0
  57. package/src/pages/forms/form_hint.haml +1 -0
  58. package/src/pages/forms/forms.haml +1 -0
  59. package/src/pages/forms/radiobuttons.haml +1 -0
  60. package/src/pages/forms/rating_scale.haml +1 -0
  61. package/src/pages/forms/search.haml +1 -0
  62. package/src/pages/forms/selectable_token.haml +1 -0
  63. package/src/pages/forms/selectable_token_browsers.haml +1 -0
  64. package/src/pages/forms/selectable_token_lg.haml +1 -0
  65. package/src/pages/forms/selectable_token_xl.haml +1 -0
  66. package/src/pages/forms/textarea.haml +4 -0
  67. package/src/pages/forms/toggle-buttons.haml +1 -0
  68. package/src/pages/forms/toggle-switch.haml +1 -0
  69. package/src/pages/forms/trix_editor.pug +1 -0
  70. package/src/pages/icons/bug-icons.haml +1 -0
  71. package/src/pages/icons/index.njk +18 -14
  72. package/src/pages/icons/status-icons.haml +1 -0
  73. package/src/pages/layout/app_layout.haml +2 -0
  74. package/src/pages/layout/margins.haml +1 -0
  75. package/src/pages/layout/max_width.haml +2 -1
  76. package/src/pages/layout/paddings.haml +1 -0
  77. package/src/pages/layout/spacing.haml +1 -0
  78. package/src/pages/{examples → layouts}/agenticqa_splitview.haml +1 -1
  79. package/src/pages/layouts/layout-actionbar.haml +45 -0
  80. package/src/pages/{examples → layouts}/layout-basic.haml +3 -2
  81. package/src/pages/{examples → layouts}/layout-chat.haml +3 -2
  82. package/src/pages/{examples/layout-sidebar-actionbar-metasidebar.haml → layouts/layout-chatwindow.haml} +3 -2
  83. package/src/pages/{examples → layouts}/layout-customer.haml +3 -2
  84. package/src/pages/{examples → layouts}/layout-form-sidebar-actionbar-metasidebar.haml +5 -228
  85. package/src/pages/{examples → layouts}/layout-manager.haml +3 -2
  86. package/src/pages/{examples → layouts}/layout-metasidebar.haml +3 -2
  87. package/src/pages/{examples → layouts}/layout-sidebar.haml +3 -2
  88. package/src/pages/{examples → layouts}/layout-tester.haml +3 -2
  89. package/src/pages/{examples → layouts}/splitview-metasidebar.haml +3 -3
  90. package/src/pages/{examples → layouts}/splitview-testcases.haml +2 -2
  91. package/src/pages/{examples → layouts}/splitview.haml +3 -3
  92. package/src/pages/navigation/header-manager.haml +1 -0
  93. package/src/pages/navigation/header-tester.haml +1 -0
  94. package/src/pages/navigation/header.haml +1 -0
  95. package/src/pages/navigation/header_customer.haml +1 -0
  96. package/src/pages/navigation/header_tester_epam.haml +1 -0
  97. package/src/pages/navigation/product_dropdown.haml +2 -0
  98. package/src/pages/navigation/radio_tabs.haml +1 -0
  99. package/src/pages/navigation/sidebar-manager.haml +2 -1
  100. package/src/pages/navigation/sidebar-tester-elements.haml +1 -0
  101. package/src/pages/navigation/sidebar-tester-seatlimitation.haml +1 -1
  102. package/src/pages/navigation/sidebar-tester.haml +1 -1
  103. package/src/pages/navigation/sidebar.haml +1 -0
  104. package/src/pages/navigation/sidebar_collapsables.haml +1 -0
  105. package/src/pages/navigation/sidebar_customer.haml +1 -0
  106. package/src/pages/navigation/tabnavigation.haml +1 -0
  107. package/src/pages/navigation/tabnavigation_actions.haml +1 -0
  108. package/src/pages/navigation/tabnavigation_pills.haml +1 -0
  109. package/src/pages/navigation/tabnavigation_sm.haml +1 -0
  110. package/src/pages/navigation/test-header-tester.haml +2 -0
  111. package/src/pages/tables/index.njk +7 -0
  112. package/src/pages/tables/tables-cellstyle.haml +38 -0
  113. package/src/pages/tables/tables-grid.haml +31 -0
  114. package/src/pages/tables/tables.haml +16 -0
  115. package/src/pages/tables/tables_alternating.haml +27 -0
  116. package/src/pages/tables/tables_borders.haml +22 -0
  117. package/src/pages/tables/tables_cells.haml +50 -0
  118. package/src/pages/tables/tables_footer.haml +27 -0
  119. package/src/pages/tables/tables_formrow.haml +31 -0
  120. package/src/pages/tables/tables_header.haml +22 -0
  121. package/src/pages/{components → tables}/tables_linked.haml +11 -10
  122. package/src/pages/typography/link_with_icon.haml +10 -2
  123. package/src/pages/typography/linked_icon.haml +6 -0
  124. package/src/pages/typography/section_header.haml +1 -0
  125. package/src/pages/typography/section_header_actions.haml +1 -0
  126. package/src/pages/typography/text_with_icon.haml +3 -2
  127. package/utils/filters.js +161 -0
  128. package/CLAUDE_DESIGN_SYSTEM_REFERENCE.md +0 -1978
  129. package/src/pages/buttons/link-with-icon.haml +0 -13
  130. package/src/pages/components/tables-cellstyle.pug +0 -285
  131. package/src/pages/components/tables-grid.pug +0 -258
  132. package/src/pages/components/tables.haml +0 -57
  133. package/src/pages/components/tables_cells.pug +0 -57
  134. package/src/pages/components/tables_formrow.haml +0 -55
  135. package/src/pages/examples/layout-actionbar.haml +0 -268
  136. package/src/pages/examples/layout-sidebar-actionbar.haml +0 -308
  137. 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="#">&lt;</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="#">&gt;</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**