testio-tailwind 3.19.0 → 3.20.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/.nvmrc +1 -0
- package/CLAUDE_DESIGN_SYSTEM_REFERENCE.md +1978 -0
- package/package.json +1 -1
- package/src/_includes/page-with-sidebar-dark.njk +1 -1
- package/src/_includes/page-with-sidebar.njk +1 -1
- package/src/assets/fonts/testio.eot +0 -0
- package/src/assets/fonts/testio.svg +5 -2
- package/src/assets/fonts/testio.ttf +0 -0
- package/src/assets/fonts/testio.woff +0 -0
- package/src/assets/fonts/testio.woff2 +0 -0
- package/src/assets/stylesheets/app.css +1 -0
- package/src/assets/stylesheets/components/actionbar.css +4 -4
- package/src/assets/stylesheets/components/buttons.css +27 -18
- package/src/assets/stylesheets/components/checkboxes_radiobuttons.css +55 -37
- package/src/assets/stylesheets/components/designsystem/designsystem-styles.css +8 -0
- package/src/assets/stylesheets/components/drawer.css +9 -18
- package/src/assets/stylesheets/components/dropdown.css +2 -3
- package/src/assets/stylesheets/components/forms.css +6 -4
- package/src/assets/stylesheets/components/iconfont.css +20 -1
- package/src/assets/stylesheets/components/modals.css +9 -17
- package/src/assets/stylesheets/components/search.css +2 -2
- package/src/assets/stylesheets/components/tables.css +59 -5
- package/src/assets/stylesheets/components/typography.css +8 -0
- package/src/assets/stylesheets/components/url_collapsable.css +32 -0
- package/src/assets/stylesheets/plugin_themes/tom_select.css +6 -1
- package/src/assets/stylesheets/plugin_themes/trix_editor.css +1 -1
- package/src/assets/stylesheets/tailwind_theme_dark.css +2 -1
- package/src/pages/agenticqa/email.njk +1 -1
- package/src/pages/agenticqa/tables-formrow.haml +68 -0
- package/src/pages/agenticqa/tables-grid.haml +125 -0
- package/src/pages/agenticqa/url_collapsable.haml +17 -0
- package/src/pages/components/drawer_filter.haml +1 -1
- package/src/pages/components/modal_details.haml +8 -8
- package/src/pages/forms/radiobuttons.haml +32 -6
|
@@ -0,0 +1,1978 @@
|
|
|
1
|
+
# Test IO Tailwind Design System - Claude Reference Guide
|
|
2
|
+
|
|
3
|
+
**Version:** 3.12.0
|
|
4
|
+
**Framework:** Tailwind CSS 4.x
|
|
5
|
+
**Package:** `testio-tailwind`
|
|
6
|
+
**Last Updated:** October 2025
|
|
7
|
+
**Node Version:** v23.11.0
|
|
8
|
+
|
|
9
|
+
This document serves as a comprehensive reference for Claude AI to utilize the Test IO Tailwind design system when building pages and components in other projects.
|
|
10
|
+
|
|
11
|
+
## Recent Updates (October 2025)
|
|
12
|
+
|
|
13
|
+
- ✨ **Page Header Component**: New responsive layout component for dashboard and session pages with chart integration
|
|
14
|
+
- 🌙 **Dark Mode Tables**: Comprehensive dark theme support for all table variants
|
|
15
|
+
- 📐 **Updated Breakpoints**: Refined responsive breakpoints (lg: 70rem, xl: 90rem, 2xl: 100rem)
|
|
16
|
+
- 🎨 **Dark Theme Enhancements**: Border radius increased to 12px, larger grid gutters (40px) in dark mode
|
|
17
|
+
- 🔧 **Splitview Improvements**: Better alignment with page header grids, new status and button classes
|
|
18
|
+
- 💬 **Chat Components**: Full dark mode support with adjusted layouts
|
|
19
|
+
- 🔄 **Status Stepper**: New multi-step process visualization component for AgenticQA
|
|
20
|
+
- 🎯 **List Item Badge Fix**: Improved vertical centering for badges
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Table of Contents
|
|
25
|
+
1. [Installation & Setup](#installation--setup)
|
|
26
|
+
2. [Color System](#color-system)
|
|
27
|
+
3. [Typography](#typography)
|
|
28
|
+
4. [Spacing & Layout](#spacing--layout)
|
|
29
|
+
5. [Button Components](#button-components)
|
|
30
|
+
6. [Card Components](#card-components)
|
|
31
|
+
7. [Form Components](#form-components)
|
|
32
|
+
8. [Page Layout Components](#page-layout-components) ⭐ NEW
|
|
33
|
+
9. [Navigation Components](#navigation-components)
|
|
34
|
+
10. [Feedback Components](#feedback-components)
|
|
35
|
+
11. [Data Display Components](#data-display-components)
|
|
36
|
+
12. [Chat Components](#chat-components) ⭐ NEW
|
|
37
|
+
13. [Status & Progress Components](#status--progress-components) ⭐ NEW
|
|
38
|
+
14. [Dark Mode](#dark-mode)
|
|
39
|
+
15. [Utility Patterns](#utility-patterns)
|
|
40
|
+
16. [Best Practices for Claude](#best-practices-for-claude)
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Installation & Setup
|
|
45
|
+
|
|
46
|
+
### NPM Installation
|
|
47
|
+
```bash
|
|
48
|
+
npm install testio-tailwind
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### CSS Import
|
|
52
|
+
```css
|
|
53
|
+
@import 'testio-tailwind/dist/static/app.compiled.css';
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### JavaScript Import
|
|
57
|
+
```javascript
|
|
58
|
+
import 'testio-tailwind/dist/static/app.bundled.js';
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Color System
|
|
64
|
+
|
|
65
|
+
### Semantic Colors
|
|
66
|
+
Use these color utilities for consistent semantic meaning:
|
|
67
|
+
|
|
68
|
+
```html
|
|
69
|
+
<!-- Primary Actions -->
|
|
70
|
+
<div class="bg-primary text-white">Primary action</div>
|
|
71
|
+
<div class="bg-link text-white">Link color</div>
|
|
72
|
+
|
|
73
|
+
<!-- Status Colors -->
|
|
74
|
+
<div class="bg-success text-white">Success state</div>
|
|
75
|
+
<div class="bg-danger text-white">Error/danger state</div>
|
|
76
|
+
<div class="bg-info text-white">Information</div>
|
|
77
|
+
<div class="bg-blocked text-white">Warning/blocked</div>
|
|
78
|
+
<div class="bg-pending text-gray-darker">Pending state</div>
|
|
79
|
+
|
|
80
|
+
<!-- Functional Colors -->
|
|
81
|
+
<div class="bg-appbody text-appbody-textcolor">App background</div>
|
|
82
|
+
<div class="bg-card">Card background</div>
|
|
83
|
+
<div class="bg-header text-white">Header background</div>
|
|
84
|
+
<div class="bg-listitem">List item background</div>
|
|
85
|
+
<div class="border-bordercolor">Standard border</div>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Color Palette
|
|
89
|
+
|
|
90
|
+
**Grays:** `gray-100` through `gray-900`, plus `gray-lightest`, `gray-lighter`, `gray-light`, `gray-dark`, `gray-darker`, `gray-darkest`
|
|
91
|
+
|
|
92
|
+
**Brand Colors:**
|
|
93
|
+
- **Primary (Petrol):** `petrol` (#236a84 light, #78eac1 dark)
|
|
94
|
+
- **Success:** `green` (#8cbd24 light, #33BA9E dark)
|
|
95
|
+
- **Danger/Critical:** `red` (#ec0404 light, #FF3131 dark)
|
|
96
|
+
- **Warning:** `orange` (#f48d21)
|
|
97
|
+
- **Info:** `blue` (#326dd1)
|
|
98
|
+
- **Accent Colors:** `teal`, `purple`, `pink`, `yellow`
|
|
99
|
+
|
|
100
|
+
**Priority Levels:**
|
|
101
|
+
- `critical` - Red (#ec0404)
|
|
102
|
+
- `high` - Yellow (#d8ce0d)
|
|
103
|
+
- `low` - Gray (#9fa2a8)
|
|
104
|
+
|
|
105
|
+
**Issue Types:**
|
|
106
|
+
- `visual` - Orange (#f48d21)
|
|
107
|
+
- `content` - Blue (#326dd1)
|
|
108
|
+
- `usability` - Petrol dark (#263340)
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Typography
|
|
113
|
+
|
|
114
|
+
### Font Families
|
|
115
|
+
- **Body/Sans:** `font-sans` - Source Sans 3
|
|
116
|
+
- **Monospace:** `font-mono` - Source Code Pro
|
|
117
|
+
|
|
118
|
+
### Headings
|
|
119
|
+
Use semantic heading classes with proper visual hierarchy:
|
|
120
|
+
|
|
121
|
+
```html
|
|
122
|
+
<h1 class="text-heading-1 font-light">Main Title (2.25rem)</h1>
|
|
123
|
+
<h2 class="text-heading-2 font-light">Section Title (1.875rem)</h2>
|
|
124
|
+
<h3 class="text-heading-3 font-light">Subsection (1.563rem)</h3>
|
|
125
|
+
<h4 class="text-heading-4 font-light">Sub-heading (1.375rem)</h4>
|
|
126
|
+
<h5 class="text-heading-5 font-light">Minor heading (1.125rem)</h5>
|
|
127
|
+
<h6 class="text-heading-6 font-light">Smallest heading (1rem)</h6>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Display Text
|
|
131
|
+
For hero sections and large emphasis:
|
|
132
|
+
|
|
133
|
+
```html
|
|
134
|
+
<h1 class="text-display-1 font-extralight">Hero Text (3.25rem)</h1>
|
|
135
|
+
<h2 class="text-display-2 font-extralight">Large Display (3rem)</h2>
|
|
136
|
+
<h3 class="text-display-3 font-extralight">Medium Display (2.75rem)</h3>
|
|
137
|
+
<h4 class="text-display-4 font-extralight">Small Display (2.5rem)</h4>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Body Text Sizes
|
|
141
|
+
```html
|
|
142
|
+
<p class="text-base">Base text (0.875rem - default)</p>
|
|
143
|
+
<p class="text-lg">Large text (1.25rem)</p>
|
|
144
|
+
<p class="text-sm">Small text (0.813rem)</p>
|
|
145
|
+
<p class="text-xs">Extra small (0.6875rem)</p>
|
|
146
|
+
<p class="text-xxs">Tiny text (0.625rem)</p>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Labels & Special Text
|
|
150
|
+
```html
|
|
151
|
+
<label class="text-label">Form Label (0.8125rem, 0.75rem in dark)</label>
|
|
152
|
+
<label class="text-label-sm">Small Label (0.75rem)</label>
|
|
153
|
+
<h3 class="text-card-header">Card Header (1.125rem in dark)</h3>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Spacing & Layout
|
|
159
|
+
|
|
160
|
+
### Spacing Scale
|
|
161
|
+
The design system uses a custom spacing scale:
|
|
162
|
+
|
|
163
|
+
- `xxs` - 0.3125rem (5px)
|
|
164
|
+
- `xs` - 0.625rem (10px)
|
|
165
|
+
- `sm` - 0.9375rem (15px)
|
|
166
|
+
- `md` - 1.25rem (20px)
|
|
167
|
+
- `spacing` - 1.875rem (30px) - **base unit**
|
|
168
|
+
- `lg` - 3.125rem (50px)
|
|
169
|
+
- `xl` - 3.75rem (60px)
|
|
170
|
+
- `xxl` - 5.625rem (90px)
|
|
171
|
+
- `spacing-2xl` through `spacing-8xl` for larger gaps
|
|
172
|
+
|
|
173
|
+
### Common Spacing Patterns
|
|
174
|
+
```html
|
|
175
|
+
<!-- Padding -->
|
|
176
|
+
<div class="p-md">Standard padding (20px)</div>
|
|
177
|
+
<div class="p-card-padding">Card padding (30px)</div>
|
|
178
|
+
<div class="px-md py-sm">Mixed padding</div>
|
|
179
|
+
|
|
180
|
+
<!-- Margins -->
|
|
181
|
+
<div class="mb-spacing">Standard margin bottom (30px)</div>
|
|
182
|
+
<div class="mt-xxs">Tiny margin top (5px)</div>
|
|
183
|
+
|
|
184
|
+
<!-- Gaps (for flexbox/grid) -->
|
|
185
|
+
<div class="flex gap-xs">Flex with 10px gap</div>
|
|
186
|
+
<div class="grid gap-grid-gutter">Grid with gutter (20px light, 40px dark)</div>
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Breakpoints
|
|
190
|
+
```css
|
|
191
|
+
xs: 30rem (480px)
|
|
192
|
+
sm: 640px (default Tailwind)
|
|
193
|
+
md: 768px (default Tailwind)
|
|
194
|
+
lg: 70rem (1120px) ← Updated
|
|
195
|
+
xl: 90rem (1440px) ← Updated
|
|
196
|
+
2xl: 100rem (1600px) ← Updated
|
|
197
|
+
3xl: 1930px
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Responsive Patterns
|
|
201
|
+
```html
|
|
202
|
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-grid-gutter">
|
|
203
|
+
<!-- Responsive grid -->
|
|
204
|
+
</div>
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Button Components
|
|
210
|
+
|
|
211
|
+
### Basic Buttons
|
|
212
|
+
```html
|
|
213
|
+
<!-- Primary button -->
|
|
214
|
+
<button class="btn btn-primary">Primary Action</button>
|
|
215
|
+
|
|
216
|
+
<!-- Secondary (outline) button -->
|
|
217
|
+
<button class="btn btn-secondary">Secondary Action</button>
|
|
218
|
+
|
|
219
|
+
<!-- Ghost button (no border/background) -->
|
|
220
|
+
<button class="btn btn-ghost">Ghost Action</button>
|
|
221
|
+
|
|
222
|
+
<!-- Ghost inverted (white text) -->
|
|
223
|
+
<button class="btn btn-ghost-inverted">Ghost Inverted</button>
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Semantic Button Variants
|
|
227
|
+
```html
|
|
228
|
+
<button class="btn btn-success">Success Action</button>
|
|
229
|
+
<button class="btn btn-danger">Delete/Danger</button>
|
|
230
|
+
<button class="btn btn-warning">Warning Action</button>
|
|
231
|
+
<button class="btn btn-info">Info Action</button>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Button Sizes
|
|
235
|
+
```html
|
|
236
|
+
<!-- Small button -->
|
|
237
|
+
<button class="btn btn-sm btn-primary">Small</button>
|
|
238
|
+
|
|
239
|
+
<!-- Default button (h-btn = 2.5rem/40px) -->
|
|
240
|
+
<button class="btn btn-primary">Default</button>
|
|
241
|
+
|
|
242
|
+
<!-- Large square button (5.625rem) -->
|
|
243
|
+
<button class="btn btn-lg btn-primary">
|
|
244
|
+
<i class="icon icon-star"></i>
|
|
245
|
+
</button>
|
|
246
|
+
|
|
247
|
+
<!-- Extra large button with label (9.375rem) -->
|
|
248
|
+
<div class="btn-lg-wrapper">
|
|
249
|
+
<button class="btn btn-xl btn-primary">
|
|
250
|
+
<i class="icon icon-upload"></i>
|
|
251
|
+
Upload
|
|
252
|
+
</button>
|
|
253
|
+
<span class="btn-label">Upload files</span>
|
|
254
|
+
</div>
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Button Shapes
|
|
258
|
+
```html
|
|
259
|
+
<!-- Square icon button -->
|
|
260
|
+
<button class="btn btn-square btn-primary">
|
|
261
|
+
<i class="icon icon-search"></i>
|
|
262
|
+
</button>
|
|
263
|
+
|
|
264
|
+
<!-- Circle button -->
|
|
265
|
+
<button class="btn btn-circle btn-primary">
|
|
266
|
+
<i class="icon icon-add"></i>
|
|
267
|
+
</button>
|
|
268
|
+
|
|
269
|
+
<!-- Block button (full width) -->
|
|
270
|
+
<button class="btn btn-block btn-primary">Full Width</button>
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Button States
|
|
274
|
+
```html
|
|
275
|
+
<!-- Disabled button -->
|
|
276
|
+
<button class="btn btn-primary" disabled>Disabled</button>
|
|
277
|
+
|
|
278
|
+
<!-- Inverted button (white bg) -->
|
|
279
|
+
<button class="btn btn-primary-inverted">Inverted</button>
|
|
280
|
+
|
|
281
|
+
<!-- Dashed border button -->
|
|
282
|
+
<button class="btn btn-dashed">Add New</button>
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Buttons with Icons
|
|
286
|
+
```html
|
|
287
|
+
<button class="btn btn-primary">
|
|
288
|
+
<i class="icon icon-save mr-xs"></i>
|
|
289
|
+
Save Changes
|
|
290
|
+
</button>
|
|
291
|
+
|
|
292
|
+
<button class="btn btn-secondary">
|
|
293
|
+
<i class="icon icon-download mr-xs"></i>
|
|
294
|
+
Download
|
|
295
|
+
</button>
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Card Components
|
|
301
|
+
|
|
302
|
+
### Basic Card Structure
|
|
303
|
+
```html
|
|
304
|
+
<div class="card">
|
|
305
|
+
<div class="card-header">
|
|
306
|
+
<h3 class="card-title">Card Title</h3>
|
|
307
|
+
</div>
|
|
308
|
+
<div class="card-body">
|
|
309
|
+
<p>Card content goes here</p>
|
|
310
|
+
</div>
|
|
311
|
+
<div class="card-footer">
|
|
312
|
+
<button class="btn btn-primary">Action</button>
|
|
313
|
+
<button class="btn btn-secondary">Cancel</button>
|
|
314
|
+
</div>
|
|
315
|
+
</div>
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Card Sizes
|
|
319
|
+
```html
|
|
320
|
+
<!-- Small card (11.25rem on sm+ screens) -->
|
|
321
|
+
<div class="card card-sm">
|
|
322
|
+
<div class="card-header">
|
|
323
|
+
<h3 class="card-title">Small Card</h3>
|
|
324
|
+
</div>
|
|
325
|
+
<div class="card-body">Content</div>
|
|
326
|
+
</div>
|
|
327
|
+
|
|
328
|
+
<!-- Medium card (17.5rem) -->
|
|
329
|
+
<div class="card card-md">
|
|
330
|
+
<div class="card-header">
|
|
331
|
+
<h3 class="card-title">Medium Card</h3>
|
|
332
|
+
</div>
|
|
333
|
+
<div class="card-body">Content</div>
|
|
334
|
+
</div>
|
|
335
|
+
|
|
336
|
+
<!-- Large card (23.75rem) -->
|
|
337
|
+
<div class="card card-lg">
|
|
338
|
+
<div class="card-header">
|
|
339
|
+
<h3 class="card-title">Large Card</h3>
|
|
340
|
+
</div>
|
|
341
|
+
<div class="card-body">Content</div>
|
|
342
|
+
</div>
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Card Variants
|
|
346
|
+
```html
|
|
347
|
+
<!-- Highlighted card (info blue background) -->
|
|
348
|
+
<div class="card highlight">
|
|
349
|
+
<div class="card-header">
|
|
350
|
+
<h3 class="card-title">Featured Card</h3>
|
|
351
|
+
</div>
|
|
352
|
+
<div class="card-body">Important content</div>
|
|
353
|
+
</div>
|
|
354
|
+
|
|
355
|
+
<!-- Card with highlighted header only -->
|
|
356
|
+
<div class="card">
|
|
357
|
+
<div class="card-header highlight">
|
|
358
|
+
<h3 class="card-title">Highlighted Header</h3>
|
|
359
|
+
</div>
|
|
360
|
+
<div class="card-body">Regular content</div>
|
|
361
|
+
</div>
|
|
362
|
+
|
|
363
|
+
<!-- Card with image -->
|
|
364
|
+
<div class="card">
|
|
365
|
+
<img src="image.jpg" alt="Card image" class="card-image">
|
|
366
|
+
<div class="card-header">
|
|
367
|
+
<h3 class="card-title">Card with Image</h3>
|
|
368
|
+
</div>
|
|
369
|
+
<div class="card-body">Content</div>
|
|
370
|
+
</div>
|
|
371
|
+
|
|
372
|
+
<!-- Card with icon header -->
|
|
373
|
+
<div class="card">
|
|
374
|
+
<div class="card-icon-header">
|
|
375
|
+
<i class="icon icon-star"></i>
|
|
376
|
+
</div>
|
|
377
|
+
<div class="card-body">
|
|
378
|
+
<h3 class="card-title">Icon Card</h3>
|
|
379
|
+
<p>Content below icon</p>
|
|
380
|
+
</div>
|
|
381
|
+
</div>
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
### Card Layouts
|
|
385
|
+
```html
|
|
386
|
+
<!-- Grid of cards (responsive) -->
|
|
387
|
+
<div class="grid-cards">
|
|
388
|
+
<div class="card">...</div>
|
|
389
|
+
<div class="card">...</div>
|
|
390
|
+
<div class="card">...</div>
|
|
391
|
+
</div>
|
|
392
|
+
|
|
393
|
+
<!-- List of cards (horizontal wrap) -->
|
|
394
|
+
<div class="list-cards">
|
|
395
|
+
<div class="card card-sm">...</div>
|
|
396
|
+
<div class="card card-sm">...</div>
|
|
397
|
+
</div>
|
|
398
|
+
|
|
399
|
+
<!-- Achievements grid (6 columns on 2xl screens) -->
|
|
400
|
+
<div class="grid-cards-achievements">
|
|
401
|
+
<div class="card">...</div>
|
|
402
|
+
<div class="card">...</div>
|
|
403
|
+
</div>
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## Form Components
|
|
409
|
+
|
|
410
|
+
### Form Group Structure
|
|
411
|
+
```html
|
|
412
|
+
<div class="form-group">
|
|
413
|
+
<label class="form-label">Email Address</label>
|
|
414
|
+
<input type="email" class="form-control" placeholder="Enter email">
|
|
415
|
+
</div>
|
|
416
|
+
|
|
417
|
+
<!-- Optional field -->
|
|
418
|
+
<div class="form-group">
|
|
419
|
+
<label class="form-label optional">Phone Number</label>
|
|
420
|
+
<input type="tel" class="form-control">
|
|
421
|
+
</div>
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
### Form Inputs
|
|
425
|
+
```html
|
|
426
|
+
<!-- Text input -->
|
|
427
|
+
<input type="text" class="form-control" placeholder="Enter text">
|
|
428
|
+
|
|
429
|
+
<!-- Textarea -->
|
|
430
|
+
<textarea class="form-control" rows="4" placeholder="Enter description"></textarea>
|
|
431
|
+
|
|
432
|
+
<!-- Disabled input -->
|
|
433
|
+
<input type="text" class="form-control" disabled value="Read only">
|
|
434
|
+
|
|
435
|
+
<!-- With validation error -->
|
|
436
|
+
<div class="form-group">
|
|
437
|
+
<label class="form-label">Username</label>
|
|
438
|
+
<div class="field_with_errors">
|
|
439
|
+
<input type="text" class="form-control">
|
|
440
|
+
</div>
|
|
441
|
+
<div class="form-hint error">Username is required</div>
|
|
442
|
+
</div>
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### Form Hints
|
|
446
|
+
```html
|
|
447
|
+
<!-- Standard hint -->
|
|
448
|
+
<div class="form-hint">This field is optional</div>
|
|
449
|
+
|
|
450
|
+
<!-- Error hint -->
|
|
451
|
+
<div class="form-hint error">Please enter a valid email</div>
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### Select Inputs
|
|
455
|
+
```html
|
|
456
|
+
<!-- Standard select -->
|
|
457
|
+
<select class="form-control">
|
|
458
|
+
<option>Choose an option</option>
|
|
459
|
+
<option value="1">Option 1</option>
|
|
460
|
+
<option value="2">Option 2</option>
|
|
461
|
+
</select>
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
### Checkboxes and Radios
|
|
465
|
+
```html
|
|
466
|
+
<!-- Checkbox -->
|
|
467
|
+
<div class="form-check">
|
|
468
|
+
<input type="checkbox" id="check1" class="form-check-input">
|
|
469
|
+
<label for="check1" class="form-check-label">Accept terms</label>
|
|
470
|
+
</div>
|
|
471
|
+
|
|
472
|
+
<!-- Radio button -->
|
|
473
|
+
<div class="form-radio">
|
|
474
|
+
<input type="radio" id="radio1" name="option" class="form-radio-input">
|
|
475
|
+
<label for="radio1" class="form-radio-label">Option 1</label>
|
|
476
|
+
</div>
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### Toggle Switch
|
|
480
|
+
```html
|
|
481
|
+
<div class="toggle-switch">
|
|
482
|
+
<input type="checkbox" id="toggle1" class="toggle-input">
|
|
483
|
+
<label for="toggle1" class="toggle-label">Enable notifications</label>
|
|
484
|
+
</div>
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
### Form with Addon
|
|
488
|
+
```html
|
|
489
|
+
<div class="form-group with-addon">
|
|
490
|
+
<label class="form-label">Price</label>
|
|
491
|
+
<input type="number" class="form-control" placeholder="0.00">
|
|
492
|
+
<div class="form-addon">USD</div>
|
|
493
|
+
</div>
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
### Inverted Forms (for dark backgrounds)
|
|
497
|
+
```html
|
|
498
|
+
<div class="form-group inverted">
|
|
499
|
+
<label class="form-label">Email</label>
|
|
500
|
+
<input type="email" class="form-control" placeholder="Enter email">
|
|
501
|
+
<div class="form-hint">We'll never share your email</div>
|
|
502
|
+
</div>
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
---
|
|
506
|
+
|
|
507
|
+
## Page Layout Components
|
|
508
|
+
|
|
509
|
+
### Page Header Component ⭐ NEW
|
|
510
|
+
|
|
511
|
+
A responsive grid layout component for dashboard and session management pages.
|
|
512
|
+
|
|
513
|
+
#### Basic Page Header
|
|
514
|
+
```html
|
|
515
|
+
<div class="page-header">
|
|
516
|
+
<div class="card page-maincard p-card-padding">
|
|
517
|
+
<h1 class="text-card-header">Session Details</h1>
|
|
518
|
+
<h2 class="page-session-title">Test Session Title</h2>
|
|
519
|
+
|
|
520
|
+
<dl class="page-meta-info">
|
|
521
|
+
<dt class="label">Created on:</dt>
|
|
522
|
+
<dd>2025-10-21 10:45 AM</dd>
|
|
523
|
+
|
|
524
|
+
<dt class="label">Last test:</dt>
|
|
525
|
+
<dd>2025-10-21 11:30 AM</dd>
|
|
526
|
+
|
|
527
|
+
<dt class="label">ID:</dt>
|
|
528
|
+
<dd>321456987</dd>
|
|
529
|
+
|
|
530
|
+
<dt class="label">URL:</dt>
|
|
531
|
+
<dd class="row-testsuite">
|
|
532
|
+
<a href="#" class="label">Test Suite Name</a>
|
|
533
|
+
</dd>
|
|
534
|
+
|
|
535
|
+
<dt class="label">Status:</dt>
|
|
536
|
+
<dd class="text-white">Active</dd>
|
|
537
|
+
</dl>
|
|
538
|
+
</div>
|
|
539
|
+
|
|
540
|
+
<div class="page-actions">
|
|
541
|
+
<a href="#" class="btn btn-primary btn-main">
|
|
542
|
+
<span class="icon icon-test-running-xl"></span>
|
|
543
|
+
Start Test
|
|
544
|
+
</a>
|
|
545
|
+
</div>
|
|
546
|
+
</div>
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
**Responsive Grid Behavior:**
|
|
550
|
+
- **Mobile (default):** 1 column
|
|
551
|
+
- **sm:** 2 columns
|
|
552
|
+
- **md:** 3 columns
|
|
553
|
+
- **lg:** 4 columns
|
|
554
|
+
- **xl:** 5 columns
|
|
555
|
+
|
|
556
|
+
**Key Classes:**
|
|
557
|
+
- `.page-header` - Main grid container with responsive columns
|
|
558
|
+
- `.page-maincard` - Primary content card (spans 2-4 columns based on screen size)
|
|
559
|
+
- `.page-actions` - Action buttons column (vertical on md+, horizontal on mobile)
|
|
560
|
+
- `.page-session-title` - Session/test title with bottom margin
|
|
561
|
+
- `.page-meta-info` - Metadata grid (2 cols mobile, 6 cols xl)
|
|
562
|
+
- `.row-testsuite` - Special metadata row that spans 5 columns on xl
|
|
563
|
+
|
|
564
|
+
#### Page Header with Chart
|
|
565
|
+
```html
|
|
566
|
+
<div class="page-header with-chart">
|
|
567
|
+
<div class="card page-maincard p-card-padding">
|
|
568
|
+
<h1 class="text-card-header">Session Details</h1>
|
|
569
|
+
<h2 class="page-session-title">Test Session Title</h2>
|
|
570
|
+
<dl class="page-meta-info">
|
|
571
|
+
<dt class="label">Created on:</dt>
|
|
572
|
+
<dd>2025-10-21 10:45 AM</dd>
|
|
573
|
+
<dt class="label">Status:</dt>
|
|
574
|
+
<dd class="text-white">Running</dd>
|
|
575
|
+
</dl>
|
|
576
|
+
</div>
|
|
577
|
+
|
|
578
|
+
<div class="page-chart card p-card-padding">
|
|
579
|
+
<div class="echarts-container" id="chart"></div>
|
|
580
|
+
</div>
|
|
581
|
+
|
|
582
|
+
<div class="page-actions">
|
|
583
|
+
<a href="#" class="btn btn-primary btn-main">
|
|
584
|
+
<span class="icon icon-review-xl"></span>
|
|
585
|
+
Show Report
|
|
586
|
+
</a>
|
|
587
|
+
<a href="#" class="btn btn-secondary">Re-run All Checks</a>
|
|
588
|
+
</div>
|
|
589
|
+
</div>
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
**Layout with `.with-chart`:**
|
|
593
|
+
- Main card spans: md:1 col, lg:2 cols, xl:3 cols (reduced to fit chart)
|
|
594
|
+
- Chart card gets its own column
|
|
595
|
+
- Actions column spans: sm:2 cols, md:1 col
|
|
596
|
+
|
|
597
|
+
#### Page Header with Forms
|
|
598
|
+
```html
|
|
599
|
+
<div class="page-header">
|
|
600
|
+
<div class="card page-maincard p-card-padding">
|
|
601
|
+
<div class="form-grid">
|
|
602
|
+
<div class="form-group">
|
|
603
|
+
<label class="form-label">Test Name</label>
|
|
604
|
+
<input type="text" class="form-control" placeholder="Enter test name">
|
|
605
|
+
</div>
|
|
606
|
+
<div class="form-group">
|
|
607
|
+
<label class="form-label">URL for Testing</label>
|
|
608
|
+
<input type="url" class="form-control" placeholder="https://example.com">
|
|
609
|
+
</div>
|
|
610
|
+
<!-- More form groups -->
|
|
611
|
+
</div>
|
|
612
|
+
</div>
|
|
613
|
+
|
|
614
|
+
<div class="page-actions">
|
|
615
|
+
<a href="#" class="btn btn-primary btn-xl">
|
|
616
|
+
<span class="icon icon-test-running-xl"></span>
|
|
617
|
+
Save and Run Test
|
|
618
|
+
</a>
|
|
619
|
+
<a href="#" class="btn btn-secondary">Save Draft</a>
|
|
620
|
+
<a href="#" class="btn btn-secondary">Cancel</a>
|
|
621
|
+
</div>
|
|
622
|
+
</div>
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
**Action Buttons Behavior:**
|
|
626
|
+
- Horizontal layout on mobile with `ml-xxs` spacing (except first), `mr-xxs` spacing (except last)
|
|
627
|
+
- Vertical stack on md+ screens with `mb-xs` spacing (except last)
|
|
628
|
+
- Changed from `lg:flex-col` to `md:flex-col` for earlier responsive stacking
|
|
629
|
+
- `.btn-main` class for primary action (grows to fill available space, uses `md:flex-col`)
|
|
630
|
+
- `.btn-xl` icons are hidden below lg, shown on lg+ with `lg:block`, height changes to `md:h-btn-xl`
|
|
631
|
+
- Border color: `border-bordercolor`
|
|
632
|
+
- Actions column spans: `sm:col-span-2 md:col-span-1`
|
|
633
|
+
|
|
634
|
+
### Splitview Component ⭐ UPDATED
|
|
635
|
+
|
|
636
|
+
Two-pane layout for list and detail views with responsive behavior. Recently enhanced with status and button classes.
|
|
637
|
+
|
|
638
|
+
#### Basic Splitview
|
|
639
|
+
```html
|
|
640
|
+
<div class="splitview">
|
|
641
|
+
<div class="splitview-list">
|
|
642
|
+
<div class="list-item">
|
|
643
|
+
<h4 class="list-item-title">Item 1</h4>
|
|
644
|
+
<p class="list-item-description">Description</p>
|
|
645
|
+
</div>
|
|
646
|
+
</div>
|
|
647
|
+
<div class="splitview-detail">
|
|
648
|
+
<h2>Detail View</h2>
|
|
649
|
+
<p>Selected item details</p>
|
|
650
|
+
</div>
|
|
651
|
+
</div>
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
#### Splitview with Status Groups (NEW)
|
|
655
|
+
```html
|
|
656
|
+
<div class="splitview">
|
|
657
|
+
<div class="splitview-list">
|
|
658
|
+
<details class="splitview-group" open>
|
|
659
|
+
<summary class="splitview-group-header">
|
|
660
|
+
<h3 class="splitview-group-title">Test Group 1</h3>
|
|
661
|
+
<i class="icon icon-chevron-down"></i>
|
|
662
|
+
</summary>
|
|
663
|
+
|
|
664
|
+
<!-- Status stepper in group -->
|
|
665
|
+
<div class="splitview-group-status">
|
|
666
|
+
<div class="status-stepper">
|
|
667
|
+
<div class="status-step completed">
|
|
668
|
+
<i class="icon icon-check-thick-centered"></i>
|
|
669
|
+
3 done
|
|
670
|
+
</div>
|
|
671
|
+
<div class="status-step active">
|
|
672
|
+
<i class="icon icon-sync"></i>
|
|
673
|
+
Executing
|
|
674
|
+
</div>
|
|
675
|
+
<div class="status-step">
|
|
676
|
+
+ 3 to do
|
|
677
|
+
</div>
|
|
678
|
+
</div>
|
|
679
|
+
</div>
|
|
680
|
+
|
|
681
|
+
<!-- List items -->
|
|
682
|
+
<div class="list-item">...</div>
|
|
683
|
+
<div class="list-item">...</div>
|
|
684
|
+
|
|
685
|
+
<!-- Show dismissed button -->
|
|
686
|
+
<button class="splitview-btn">
|
|
687
|
+
Show 5 dismissed items
|
|
688
|
+
</button>
|
|
689
|
+
</details>
|
|
690
|
+
</div>
|
|
691
|
+
</div>
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
**New Splitview Classes:**
|
|
695
|
+
- `.splitview-group-status` - Status display area within groups (bg-listitem, border-bottom, padding)
|
|
696
|
+
- `.splitview-btn` - Full-width button for showing/hiding items (text-label-color, centered text)
|
|
697
|
+
- `.splitview-group .splitview-btn` - Button within groups (rounded bottom corners, bg-listitem)
|
|
698
|
+
|
|
699
|
+
**Splitview Group Status Styling:**
|
|
700
|
+
```css
|
|
701
|
+
.splitview-group-status {
|
|
702
|
+
padding-left: lg;
|
|
703
|
+
padding-right: md;
|
|
704
|
+
padding-top/bottom: xs;
|
|
705
|
+
background: listitem color;
|
|
706
|
+
border-bottom: 1px solid appbody;
|
|
707
|
+
}
|
|
708
|
+
```
|
|
709
|
+
|
|
710
|
+
---
|
|
711
|
+
|
|
712
|
+
## Navigation Components
|
|
713
|
+
|
|
714
|
+
### Header
|
|
715
|
+
```html
|
|
716
|
+
<header class="header">
|
|
717
|
+
<div class="header-logo">
|
|
718
|
+
<img src="logo.svg" alt="Logo">
|
|
719
|
+
</div>
|
|
720
|
+
<nav class="header-nav">
|
|
721
|
+
<a href="#" class="nav-link">Dashboard</a>
|
|
722
|
+
<a href="#" class="nav-link active">Projects</a>
|
|
723
|
+
<a href="#" class="nav-link">Settings</a>
|
|
724
|
+
</nav>
|
|
725
|
+
<div class="header-actions">
|
|
726
|
+
<button class="btn btn-sm btn-primary">New Project</button>
|
|
727
|
+
</div>
|
|
728
|
+
</header>
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
### Sidebar
|
|
732
|
+
```html
|
|
733
|
+
<aside class="sidebar">
|
|
734
|
+
<nav class="sidebar-nav">
|
|
735
|
+
<a href="#" class="sidebar-link active">
|
|
736
|
+
<i class="icon icon-home"></i>
|
|
737
|
+
Dashboard
|
|
738
|
+
</a>
|
|
739
|
+
<a href="#" class="sidebar-link">
|
|
740
|
+
<i class="icon icon-folder"></i>
|
|
741
|
+
Projects
|
|
742
|
+
</a>
|
|
743
|
+
<a href="#" class="sidebar-link">
|
|
744
|
+
<i class="icon icon-settings"></i>
|
|
745
|
+
Settings
|
|
746
|
+
</a>
|
|
747
|
+
</nav>
|
|
748
|
+
</aside>
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
### Tabs
|
|
752
|
+
```html
|
|
753
|
+
<div class="tabs">
|
|
754
|
+
<button class="tab tab-active">Overview</button>
|
|
755
|
+
<button class="tab">Details</button>
|
|
756
|
+
<button class="tab">Settings</button>
|
|
757
|
+
</div>
|
|
758
|
+
|
|
759
|
+
<div class="tab-content">
|
|
760
|
+
<div class="tab-pane active">Overview content</div>
|
|
761
|
+
<div class="tab-pane">Details content</div>
|
|
762
|
+
<div class="tab-pane">Settings content</div>
|
|
763
|
+
</div>
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
### Dropdown
|
|
767
|
+
```html
|
|
768
|
+
<div class="dropdown">
|
|
769
|
+
<button class="btn btn-secondary dropdown-toggle">
|
|
770
|
+
Actions
|
|
771
|
+
<i class="icon icon-chevron-down"></i>
|
|
772
|
+
</button>
|
|
773
|
+
<div class="dropdown-menu">
|
|
774
|
+
<a href="#" class="dropdown-item">Edit</a>
|
|
775
|
+
<a href="#" class="dropdown-item">Duplicate</a>
|
|
776
|
+
<div class="dropdown-divider"></div>
|
|
777
|
+
<a href="#" class="dropdown-item text-danger">Delete</a>
|
|
778
|
+
</div>
|
|
779
|
+
</div>
|
|
780
|
+
```
|
|
781
|
+
|
|
782
|
+
---
|
|
783
|
+
|
|
784
|
+
## Feedback Components
|
|
785
|
+
|
|
786
|
+
### Alerts
|
|
787
|
+
```html
|
|
788
|
+
<!-- Success alert -->
|
|
789
|
+
<div class="alert alert-success">
|
|
790
|
+
<i class="icon icon-check-circle"></i>
|
|
791
|
+
Changes saved successfully!
|
|
792
|
+
</div>
|
|
793
|
+
|
|
794
|
+
<!-- Error alert -->
|
|
795
|
+
<div class="alert alert-danger">
|
|
796
|
+
<i class="icon icon-exclamation-circle"></i>
|
|
797
|
+
An error occurred. Please try again.
|
|
798
|
+
</div>
|
|
799
|
+
|
|
800
|
+
<!-- Info alert -->
|
|
801
|
+
<div class="alert alert-info">
|
|
802
|
+
<i class="icon icon-info-circle"></i>
|
|
803
|
+
New features are available.
|
|
804
|
+
</div>
|
|
805
|
+
|
|
806
|
+
<!-- Warning alert -->
|
|
807
|
+
<div class="alert alert-warning">
|
|
808
|
+
<i class="icon icon-exclamation-triangle"></i>
|
|
809
|
+
Your trial expires in 3 days.
|
|
810
|
+
</div>
|
|
811
|
+
```
|
|
812
|
+
|
|
813
|
+
### Notifications
|
|
814
|
+
```html
|
|
815
|
+
<div class="notification notification-success">
|
|
816
|
+
<div class="notification-icon">
|
|
817
|
+
<i class="icon icon-check"></i>
|
|
818
|
+
</div>
|
|
819
|
+
<div class="notification-content">
|
|
820
|
+
<h4 class="notification-title">Success</h4>
|
|
821
|
+
<p class="notification-message">Your changes have been saved.</p>
|
|
822
|
+
</div>
|
|
823
|
+
<button class="notification-close">
|
|
824
|
+
<i class="icon icon-close"></i>
|
|
825
|
+
</button>
|
|
826
|
+
</div>
|
|
827
|
+
```
|
|
828
|
+
|
|
829
|
+
### Loading Spinner
|
|
830
|
+
```html
|
|
831
|
+
<div class="loading-spinner">
|
|
832
|
+
<div class="spinner"></div>
|
|
833
|
+
<p class="loading-text">Loading...</p>
|
|
834
|
+
</div>
|
|
835
|
+
```
|
|
836
|
+
|
|
837
|
+
### Empty State
|
|
838
|
+
```html
|
|
839
|
+
<div class="emptystate-message">
|
|
840
|
+
<i class="icon icon-inbox text-icon-xl"></i>
|
|
841
|
+
<h3 class="text-heading-4">No items found</h3>
|
|
842
|
+
<p class="text-sm text-gray-dark">Get started by creating your first item.</p>
|
|
843
|
+
<button class="btn btn-primary mt-md">Create Item</button>
|
|
844
|
+
</div>
|
|
845
|
+
```
|
|
846
|
+
|
|
847
|
+
### Progress Bar
|
|
848
|
+
```html
|
|
849
|
+
<!-- Thick progress bar -->
|
|
850
|
+
<div class="progress">
|
|
851
|
+
<div class="progress-bar" style="width: 75%">75%</div>
|
|
852
|
+
</div>
|
|
853
|
+
|
|
854
|
+
<!-- Thin progress bar -->
|
|
855
|
+
<div class="progress progress-thin">
|
|
856
|
+
<div class="progress-bar bg-success" style="width: 60%"></div>
|
|
857
|
+
</div>
|
|
858
|
+
```
|
|
859
|
+
|
|
860
|
+
### Badges
|
|
861
|
+
```html
|
|
862
|
+
<span class="badge badge-primary">New</span>
|
|
863
|
+
<span class="badge badge-success">Active</span>
|
|
864
|
+
<span class="badge badge-danger">Urgent</span>
|
|
865
|
+
<span class="badge badge-warning">Pending</span>
|
|
866
|
+
<span class="badge badge-info">Info</span>
|
|
867
|
+
```
|
|
868
|
+
|
|
869
|
+
### Tags
|
|
870
|
+
```html
|
|
871
|
+
<div class="tag">Design</div>
|
|
872
|
+
<div class="tag tag-success">Completed</div>
|
|
873
|
+
<div class="tag tag-danger">High Priority</div>
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
---
|
|
877
|
+
|
|
878
|
+
## Data Display Components
|
|
879
|
+
|
|
880
|
+
### Tables ⭐ UPDATED
|
|
881
|
+
|
|
882
|
+
The design system includes several table variants with comprehensive dark mode support.
|
|
883
|
+
|
|
884
|
+
#### Basic Table
|
|
885
|
+
```html
|
|
886
|
+
<table class="table">
|
|
887
|
+
<thead>
|
|
888
|
+
<tr>
|
|
889
|
+
<th>Name</th>
|
|
890
|
+
<th>Status</th>
|
|
891
|
+
<th>Actions</th>
|
|
892
|
+
</tr>
|
|
893
|
+
</thead>
|
|
894
|
+
<tbody>
|
|
895
|
+
<tr>
|
|
896
|
+
<td>John Doe</td>
|
|
897
|
+
<td>
|
|
898
|
+
<span class="badge badge-success">Active</span>
|
|
899
|
+
</td>
|
|
900
|
+
<td>
|
|
901
|
+
<button class="btn btn-sm btn-ghost">Edit</button>
|
|
902
|
+
</td>
|
|
903
|
+
</tr>
|
|
904
|
+
</tbody>
|
|
905
|
+
</table>
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
**Dark Mode Features:**
|
|
909
|
+
- Increased padding (`dark:py-md` on cells vs `py-xs` in light mode)
|
|
910
|
+
- Dark background on cells (`dark:bg-black` for td, `dark:bg-appbody` for th)
|
|
911
|
+
- Row borders (`dark:border-b-4 dark:border-appbody` instead of cell borders)
|
|
912
|
+
- Uppercase header text (`dark:uppercase`)
|
|
913
|
+
- No top/side borders in dark mode (`dark:border-0` on cells)
|
|
914
|
+
|
|
915
|
+
#### Table Variants
|
|
916
|
+
|
|
917
|
+
**Bordered Table:**
|
|
918
|
+
```html
|
|
919
|
+
<table class="table table-bordered">
|
|
920
|
+
<!-- Full borders around all cells -->
|
|
921
|
+
<!-- Dark mode: 2px border with appbody color -->
|
|
922
|
+
</table>
|
|
923
|
+
```
|
|
924
|
+
|
|
925
|
+
**Borderless Table:**
|
|
926
|
+
```html
|
|
927
|
+
<table class="table table-borderless">
|
|
928
|
+
<!-- No borders on any cells -->
|
|
929
|
+
</table>
|
|
930
|
+
```
|
|
931
|
+
|
|
932
|
+
**Small/Compact Table:**
|
|
933
|
+
```html
|
|
934
|
+
<table class="table table-sm">
|
|
935
|
+
<!-- Reduced padding (pr-spacing), more compact -->
|
|
936
|
+
</table>
|
|
937
|
+
```
|
|
938
|
+
|
|
939
|
+
**Standard Table (Key-Value Style):**
|
|
940
|
+
```html
|
|
941
|
+
<table class="table-standard">
|
|
942
|
+
<thead>
|
|
943
|
+
<tr>
|
|
944
|
+
<th>Property</th>
|
|
945
|
+
<th>Value</th>
|
|
946
|
+
</tr>
|
|
947
|
+
</thead>
|
|
948
|
+
<tbody>
|
|
949
|
+
<tr>
|
|
950
|
+
<td>Name</td>
|
|
951
|
+
<td>John Doe</td>
|
|
952
|
+
</tr>
|
|
953
|
+
<tr>
|
|
954
|
+
<td>Email</td>
|
|
955
|
+
<td>john@example.com</td>
|
|
956
|
+
</tr>
|
|
957
|
+
</tbody>
|
|
958
|
+
<tfoot>
|
|
959
|
+
<tr>
|
|
960
|
+
<td>Total</td>
|
|
961
|
+
<td>2 items</td>
|
|
962
|
+
</tr>
|
|
963
|
+
</tfoot>
|
|
964
|
+
</table>
|
|
965
|
+
```
|
|
966
|
+
- No wrapping by default (`md:whitespace-nowrap`)
|
|
967
|
+
- First column minimal width, last column fills space (`.cell-full-width` to override)
|
|
968
|
+
- Add `.wrap` or `.pre` to cells for text wrapping
|
|
969
|
+
|
|
970
|
+
#### Cell Style Table (Status Tracking)
|
|
971
|
+
```html
|
|
972
|
+
<table class="table-cellstyle">
|
|
973
|
+
<thead>
|
|
974
|
+
<tr>
|
|
975
|
+
<th class="completed">Feature A</th>
|
|
976
|
+
<th class="inprogress">Feature B</th>
|
|
977
|
+
<th class="missing">Feature C</th>
|
|
978
|
+
</tr>
|
|
979
|
+
</thead>
|
|
980
|
+
<tbody>
|
|
981
|
+
<tr>
|
|
982
|
+
<td class="completed">Implementation done</td>
|
|
983
|
+
<td class="inprogress">Working on it...</td>
|
|
984
|
+
<td class="missing">Not started</td>
|
|
985
|
+
</tr>
|
|
986
|
+
</tbody>
|
|
987
|
+
</table>
|
|
988
|
+
```
|
|
989
|
+
|
|
990
|
+
**Status Classes:**
|
|
991
|
+
- `.completed` - Green checkmark icon (after pseudo-element)
|
|
992
|
+
- `.inprogress` - Clock icon, gray background, italic text
|
|
993
|
+
- `.missing` - Exclamation icon (on th), transparent bg, italic disabled text (on td)
|
|
994
|
+
|
|
995
|
+
**Editable Cells:**
|
|
996
|
+
```html
|
|
997
|
+
<td class="cell-editable">
|
|
998
|
+
<a href="#edit" class="cell-content-editable">
|
|
999
|
+
Click to edit this content
|
|
1000
|
+
</a>
|
|
1001
|
+
</td>
|
|
1002
|
+
|
|
1003
|
+
<!-- Edit state (shown when editing) -->
|
|
1004
|
+
<td class="cell-editable">
|
|
1005
|
+
<div class="cell-edit-state">
|
|
1006
|
+
<form class="edit-form">
|
|
1007
|
+
<textarea>Content being edited</textarea>
|
|
1008
|
+
<div class="cell-actions">
|
|
1009
|
+
<button class="btn btn-success"><i class="icon icon-check"></i></button>
|
|
1010
|
+
<button class="btn btn-danger"><i class="icon icon-close"></i></button>
|
|
1011
|
+
</div>
|
|
1012
|
+
</form>
|
|
1013
|
+
</div>
|
|
1014
|
+
</td>
|
|
1015
|
+
```
|
|
1016
|
+
|
|
1017
|
+
**Selectable Cells:**
|
|
1018
|
+
```html
|
|
1019
|
+
<td class="cell-selectable completed">
|
|
1020
|
+
<input type="checkbox" id="cell1">
|
|
1021
|
+
<label for="cell1">Option text with completion status</label>
|
|
1022
|
+
</td>
|
|
1023
|
+
```
|
|
1024
|
+
- Checkbox appears on the left
|
|
1025
|
+
- Hover highlights the entire cell
|
|
1026
|
+
- Status icons (completed/inprogress) appear on the right
|
|
1027
|
+
- Selected state: primary background with white text
|
|
1028
|
+
|
|
1029
|
+
#### Grid Table (CSS Grid Layout)
|
|
1030
|
+
```html
|
|
1031
|
+
<table class="table-grid">
|
|
1032
|
+
<thead>
|
|
1033
|
+
<tr>
|
|
1034
|
+
<th>Col 1</th>
|
|
1035
|
+
<th>Col 2</th>
|
|
1036
|
+
<th>Col 3</th>
|
|
1037
|
+
</tr>
|
|
1038
|
+
</thead>
|
|
1039
|
+
<tbody>
|
|
1040
|
+
<tr>
|
|
1041
|
+
<td>Data 1</td>
|
|
1042
|
+
<td>Data 2</td>
|
|
1043
|
+
<td>Data 3</td>
|
|
1044
|
+
</tr>
|
|
1045
|
+
</tbody>
|
|
1046
|
+
</table>
|
|
1047
|
+
```
|
|
1048
|
+
- Uses CSS Grid (`display: grid; grid-flow-col`)
|
|
1049
|
+
- Better for complex responsive tables
|
|
1050
|
+
- `thead`, `tbody`, `tr` use `display: contents`
|
|
1051
|
+
|
|
1052
|
+
#### Table Cell Utilities
|
|
1053
|
+
```html
|
|
1054
|
+
<!-- Fixed width cell -->
|
|
1055
|
+
<td class="td-fixed-width">Limited to 150px</td>
|
|
1056
|
+
|
|
1057
|
+
<!-- Actions cell (right-aligned, constrained width) -->
|
|
1058
|
+
<td class="action-cell">
|
|
1059
|
+
<button class="btn btn-sm btn-ghost">Edit</button>
|
|
1060
|
+
<button class="btn btn-sm btn-ghost">Delete</button>
|
|
1061
|
+
</td>
|
|
1062
|
+
|
|
1063
|
+
<!-- Title cell (max 500px) -->
|
|
1064
|
+
<td class="title">Very long title that will be constrained</td>
|
|
1065
|
+
|
|
1066
|
+
<!-- Full width cell in table-standard -->
|
|
1067
|
+
<td class="cell-full-width">Takes all available space</td>
|
|
1068
|
+
|
|
1069
|
+
<!-- Text wrapping in table-standard -->
|
|
1070
|
+
<td class="wrap">This text will wrap normally</td>
|
|
1071
|
+
<td class="pre">This text preserves whitespace</td>
|
|
1072
|
+
```
|
|
1073
|
+
|
|
1074
|
+
#### Interactive Table Rows
|
|
1075
|
+
```html
|
|
1076
|
+
<!-- Hover to highlight entire row (blue background) -->
|
|
1077
|
+
<tr class="linked-row">
|
|
1078
|
+
<td>Click anywhere on this row</td>
|
|
1079
|
+
<td>More data</td>
|
|
1080
|
+
</tr>
|
|
1081
|
+
|
|
1082
|
+
<!-- Hover to highlight just this cell -->
|
|
1083
|
+
<td class="linked-cell">Click this specific cell</td>
|
|
1084
|
+
|
|
1085
|
+
<!-- Highlight parent row when child element is hovered -->
|
|
1086
|
+
<tr>
|
|
1087
|
+
<td>
|
|
1088
|
+
<a class="highlight-parent-row" href="#">Hover this link to highlight row</a>
|
|
1089
|
+
</td>
|
|
1090
|
+
<td>Other data</td>
|
|
1091
|
+
</tr>
|
|
1092
|
+
```
|
|
1093
|
+
|
|
1094
|
+
### List Items
|
|
1095
|
+
|
|
1096
|
+
#### Basic List
|
|
1097
|
+
```html
|
|
1098
|
+
<div class="lists">
|
|
1099
|
+
<div class="list-item">
|
|
1100
|
+
<div class="list-item-content">
|
|
1101
|
+
<h4 class="list-item-title">Item Title</h4>
|
|
1102
|
+
<p class="list-item-description">Item description text</p>
|
|
1103
|
+
</div>
|
|
1104
|
+
<div class="list-item-actions">
|
|
1105
|
+
<button class="btn btn-sm btn-ghost">View</button>
|
|
1106
|
+
</div>
|
|
1107
|
+
</div>
|
|
1108
|
+
</div>
|
|
1109
|
+
```
|
|
1110
|
+
|
|
1111
|
+
#### List Item with Badge ⭐ UPDATED
|
|
1112
|
+
```html
|
|
1113
|
+
<div class="list-item">
|
|
1114
|
+
<div class="listitem-badge">
|
|
1115
|
+
<i class="icon icon-check text-success"></i>
|
|
1116
|
+
</div>
|
|
1117
|
+
<div class="list-item-content">
|
|
1118
|
+
<h4 class="list-item-title">Completed Item</h4>
|
|
1119
|
+
<p class="list-item-description">This item has been completed</p>
|
|
1120
|
+
</div>
|
|
1121
|
+
</div>
|
|
1122
|
+
```
|
|
1123
|
+
|
|
1124
|
+
**Badge Styling (Updated):**
|
|
1125
|
+
- Changed from `items-start` to `items-center` for better vertical alignment
|
|
1126
|
+
- Changed from `p-xxs pt-xs` to `px-xxs py-xxs` for consistent padding
|
|
1127
|
+
- Width: `w-btn`, Background: `bg-black` (light), `bg-gray-750` (dark)
|
|
1128
|
+
- Text color: white, with bold font in dark mode
|
|
1129
|
+
- Rounded left corners (`rounded-l`)
|
|
1130
|
+
|
|
1131
|
+
### User Item
|
|
1132
|
+
```html
|
|
1133
|
+
<div class="user-item">
|
|
1134
|
+
<div class="user-item-avatar">
|
|
1135
|
+
<img src="avatar.jpg" alt="User">
|
|
1136
|
+
</div>
|
|
1137
|
+
<div class="user-item-info">
|
|
1138
|
+
<h4 class="user-item-name">Jane Smith</h4>
|
|
1139
|
+
<p class="user-item-email">jane@example.com</p>
|
|
1140
|
+
</div>
|
|
1141
|
+
<div class="user-item-actions">
|
|
1142
|
+
<button class="btn btn-sm btn-secondary">Message</button>
|
|
1143
|
+
</div>
|
|
1144
|
+
</div>
|
|
1145
|
+
```
|
|
1146
|
+
|
|
1147
|
+
### Task/Issue Item
|
|
1148
|
+
```html
|
|
1149
|
+
<div class="task-item">
|
|
1150
|
+
<div class="task-item-header">
|
|
1151
|
+
<h4 class="task-item-title">Fix login bug</h4>
|
|
1152
|
+
<span class="badge badge-danger">High</span>
|
|
1153
|
+
</div>
|
|
1154
|
+
<div class="task-item-body">
|
|
1155
|
+
<p class="task-item-description">Users unable to login with SSO</p>
|
|
1156
|
+
</div>
|
|
1157
|
+
<div class="task-item-footer">
|
|
1158
|
+
<span class="task-item-meta">Due: Oct 25, 2025</span>
|
|
1159
|
+
<span class="task-item-meta">Assigned to: John</span>
|
|
1160
|
+
</div>
|
|
1161
|
+
</div>
|
|
1162
|
+
```
|
|
1163
|
+
|
|
1164
|
+
---
|
|
1165
|
+
|
|
1166
|
+
## Chat Components ⭐ NEW
|
|
1167
|
+
|
|
1168
|
+
Comprehensive chat interface components with full dark mode support.
|
|
1169
|
+
|
|
1170
|
+
### Chat Message List
|
|
1171
|
+
```html
|
|
1172
|
+
<div class="list-chat-messages">
|
|
1173
|
+
<div class="chat-message-item">
|
|
1174
|
+
<img src="avatar.jpg" alt="User" class="chat-avatar">
|
|
1175
|
+
|
|
1176
|
+
<div class="chat-header">
|
|
1177
|
+
<span class="chat-title">
|
|
1178
|
+
<span class="chat-author">John Doe</span>
|
|
1179
|
+
</span>
|
|
1180
|
+
<span class="chat-time">2 hours ago</span>
|
|
1181
|
+
</div>
|
|
1182
|
+
|
|
1183
|
+
<div class="chat-message">
|
|
1184
|
+
<p>This is a chat message with some content.</p>
|
|
1185
|
+
</div>
|
|
1186
|
+
|
|
1187
|
+
<div class="chat-actions">
|
|
1188
|
+
<button class="btn btn-ghost btn-sm">
|
|
1189
|
+
<i class="icon icon-reply"></i>
|
|
1190
|
+
</button>
|
|
1191
|
+
</div>
|
|
1192
|
+
</div>
|
|
1193
|
+
</div>
|
|
1194
|
+
```
|
|
1195
|
+
|
|
1196
|
+
**Grid Layout:**
|
|
1197
|
+
- Uses CSS Grid with named areas: `chat-avatar`, `chat-header`, `chat-message`, `chat-actions`
|
|
1198
|
+
- Light mode: 3 columns (avatar, header/message, actions)
|
|
1199
|
+
- Dark mode: 2 columns (avatar, header/message) - actions are hidden
|
|
1200
|
+
|
|
1201
|
+
**Component Classes:**
|
|
1202
|
+
- `.list-chat-messages` - Container grid with gap-md
|
|
1203
|
+
- `.chat-message-item` - Individual message (max-w-capped by default)
|
|
1204
|
+
- `.chat-avatar` - Avatar image (w-spacing h-spacing, rounded-full, mr-xs light / mr-md dark)
|
|
1205
|
+
- `.chat-header` - Message header (text-label-color, dark: bg-listitem rounded-t)
|
|
1206
|
+
- `.chat-author` - Author name (ml-xxs font-semibold)
|
|
1207
|
+
- `.chat-message` - Message body (p-xs rounded bg-card, dark: full width, rounded-t-none)
|
|
1208
|
+
- `.chat-actions` - Action buttons column (hidden in dark mode via grid template)
|
|
1209
|
+
|
|
1210
|
+
### Full Width Chat
|
|
1211
|
+
```html
|
|
1212
|
+
<div class="list-chat-messages full-width">
|
|
1213
|
+
<!-- Messages span full container width (max-w-full) -->
|
|
1214
|
+
<div class="chat-message-item">...</div>
|
|
1215
|
+
</div>
|
|
1216
|
+
```
|
|
1217
|
+
|
|
1218
|
+
### Chat Message Variants
|
|
1219
|
+
|
|
1220
|
+
#### Announcement Message
|
|
1221
|
+
```html
|
|
1222
|
+
<div class="chat-message">
|
|
1223
|
+
<div class="message-banner announcement">
|
|
1224
|
+
System Announcement: Maintenance scheduled
|
|
1225
|
+
</div>
|
|
1226
|
+
<p>The system will be down for maintenance on Saturday.</p>
|
|
1227
|
+
</div>
|
|
1228
|
+
```
|
|
1229
|
+
- Blue banner at top of message (`bg-info text-white`)
|
|
1230
|
+
- Speaker icon before text
|
|
1231
|
+
- Border-bottom separator
|
|
1232
|
+
|
|
1233
|
+
#### Mentioned Message
|
|
1234
|
+
```html
|
|
1235
|
+
<div class="chat-message">
|
|
1236
|
+
<div class="message-banner mentioned">
|
|
1237
|
+
<span class="text-mentioned">@YourName</span> mentioned you
|
|
1238
|
+
</div>
|
|
1239
|
+
<p>Hey, can you take a look at this?</p>
|
|
1240
|
+
</div>
|
|
1241
|
+
```
|
|
1242
|
+
- Blue banner with @ icon
|
|
1243
|
+
- Bolded mention (`font-bold`)
|
|
1244
|
+
|
|
1245
|
+
### Dark Mode Chat Behavior
|
|
1246
|
+
|
|
1247
|
+
In dark mode (`.dark` class on parent):
|
|
1248
|
+
- Grid changes to 2 columns (actions hidden)
|
|
1249
|
+
- Chat header gets background (`bg-listitem`) and full rounded-top
|
|
1250
|
+
- Chat message background darker (`bg-listitem`) with no top border radius
|
|
1251
|
+
- Avatar margin increased to `mr-md`
|
|
1252
|
+
- Message full width (`dark:w-full`)
|
|
1253
|
+
|
|
1254
|
+
---
|
|
1255
|
+
|
|
1256
|
+
## Status & Progress Components ⭐ NEW
|
|
1257
|
+
|
|
1258
|
+
### Status Stepper
|
|
1259
|
+
|
|
1260
|
+
A horizontal stepper component for visualizing multi-step processes, particularly useful in AgenticQA workflows.
|
|
1261
|
+
|
|
1262
|
+
#### Icon-based Status Stepper
|
|
1263
|
+
```html
|
|
1264
|
+
<div class="status-stepper">
|
|
1265
|
+
<div class="status-step completed">
|
|
1266
|
+
<i class="icon icon-check-thick-centered"></i>
|
|
1267
|
+
3 done
|
|
1268
|
+
</div>
|
|
1269
|
+
<div class="status-step active">
|
|
1270
|
+
<i class="icon icon-sync"></i>
|
|
1271
|
+
Executing checks
|
|
1272
|
+
</div>
|
|
1273
|
+
<div class="status-step">
|
|
1274
|
+
+ 3 to do
|
|
1275
|
+
</div>
|
|
1276
|
+
</div>
|
|
1277
|
+
```
|
|
1278
|
+
|
|
1279
|
+
#### Counter-based Status Stepper
|
|
1280
|
+
```html
|
|
1281
|
+
<div class="status-stepper">
|
|
1282
|
+
<div class="status-step completed">
|
|
1283
|
+
<span class="counter">99</span>
|
|
1284
|
+
Completed
|
|
1285
|
+
</div>
|
|
1286
|
+
<div class="status-step active">
|
|
1287
|
+
<span class="counter">12</span>
|
|
1288
|
+
Active
|
|
1289
|
+
</div>
|
|
1290
|
+
<div class="status-step">
|
|
1291
|
+
<span class="counter">5</span>
|
|
1292
|
+
Pending
|
|
1293
|
+
</div>
|
|
1294
|
+
</div>
|
|
1295
|
+
```
|
|
1296
|
+
|
|
1297
|
+
**Component Classes:**
|
|
1298
|
+
- `.status-stepper` - Container (flex row, items-stretch, full width)
|
|
1299
|
+
- `.status-step` - Individual step (flex row, centered, rounded, px-md py-xs, bg-black)
|
|
1300
|
+
- `.status-step.active` - Active step (grow-1, white text, bg-gray-750)
|
|
1301
|
+
- `.status-step.completed` - Add for completed state (can combine with custom styling)
|
|
1302
|
+
- `.status-step .icon` - Icon within step (mr-xs, text-label-color)
|
|
1303
|
+
- `.status-step .counter` - Numeric counter (pr-xs, text-lg, font-bold, leading-none)
|
|
1304
|
+
|
|
1305
|
+
**Styling Details:**
|
|
1306
|
+
```css
|
|
1307
|
+
.status-stepper:
|
|
1308
|
+
- Full width flex container
|
|
1309
|
+
- Items stretch to fill height
|
|
1310
|
+
- Horizontal layout
|
|
1311
|
+
|
|
1312
|
+
.status-step:
|
|
1313
|
+
- Shrink: 0, Grow: 0 (except .active)
|
|
1314
|
+
- Margin-right: xs (except last)
|
|
1315
|
+
- Padding: md horizontal, xs vertical
|
|
1316
|
+
- Background: black, Text: label-color
|
|
1317
|
+
- Rounded corners
|
|
1318
|
+
- Leading: none
|
|
1319
|
+
|
|
1320
|
+
.status-step.active:
|
|
1321
|
+
- Grow: 1 (takes available space)
|
|
1322
|
+
- Text: white
|
|
1323
|
+
- Background: gray-750
|
|
1324
|
+
```
|
|
1325
|
+
|
|
1326
|
+
**Usage Tips:**
|
|
1327
|
+
- Use `.completed` class with success icons for finished steps
|
|
1328
|
+
- Use `.active` class for current step (automatically expands to fill space)
|
|
1329
|
+
- Default styling for pending/future steps
|
|
1330
|
+
- Works great within splitview groups (see `.splitview-group-status`)
|
|
1331
|
+
- Icons should use descriptive names like `icon-check-thick-centered`, `icon-sync`
|
|
1332
|
+
- Counter variant useful for showing numeric progress
|
|
1333
|
+
|
|
1334
|
+
**Common Patterns:**
|
|
1335
|
+
```html
|
|
1336
|
+
<!-- In a splitview group -->
|
|
1337
|
+
<div class="splitview-group-status">
|
|
1338
|
+
<div class="status-stepper">
|
|
1339
|
+
<!-- Steps here -->
|
|
1340
|
+
</div>
|
|
1341
|
+
</div>
|
|
1342
|
+
|
|
1343
|
+
<!-- As standalone progress indicator -->
|
|
1344
|
+
<div class="mb-md">
|
|
1345
|
+
<div class="status-stepper">
|
|
1346
|
+
<!-- Steps here -->
|
|
1347
|
+
</div>
|
|
1348
|
+
</div>
|
|
1349
|
+
```
|
|
1350
|
+
|
|
1351
|
+
---
|
|
1352
|
+
|
|
1353
|
+
## Dark Mode
|
|
1354
|
+
|
|
1355
|
+
The design system includes comprehensive dark mode support with customized theme variables.
|
|
1356
|
+
|
|
1357
|
+
### Dark Mode Color Palette
|
|
1358
|
+
```css
|
|
1359
|
+
/* Apply .dark class to enable dark mode */
|
|
1360
|
+
.dark {
|
|
1361
|
+
/* Core Colors */
|
|
1362
|
+
--color-appbody: #181818; /* Very dark gray background */
|
|
1363
|
+
--color-appbody-textcolor: #f2f2f2; /* Light gray text */
|
|
1364
|
+
--color-header: #1d1d1d;
|
|
1365
|
+
--color-card: #1D1D1D; /* Dark card background */
|
|
1366
|
+
--color-listitem: #262626; /* List item background */
|
|
1367
|
+
|
|
1368
|
+
/* Interactive Colors */
|
|
1369
|
+
--color-primary: #78eac1; /* Teal (was petrol) */
|
|
1370
|
+
--color-link: #8988eb; /* Purple links */
|
|
1371
|
+
--color-link-hover: #7954ff; /* Darker purple hover */
|
|
1372
|
+
|
|
1373
|
+
/* Status Colors */
|
|
1374
|
+
--color-success: #33BA9E; /* Teal success */
|
|
1375
|
+
--color-danger: #FF3131; /* Brighter red */
|
|
1376
|
+
--color-bordercolor: #2E2E2E; /* Dark borders */
|
|
1377
|
+
|
|
1378
|
+
/* Spacing & Style Adjustments */
|
|
1379
|
+
--radius: 12px; /* Increased from 5px */
|
|
1380
|
+
--spacing-grid-gutter: 40px; /* Increased from 20px */
|
|
1381
|
+
--card-padding: 30px;
|
|
1382
|
+
--fontsize-card-header: 1.125rem; /* Slightly larger */
|
|
1383
|
+
--font-size-label: 0.75rem; /* Smaller labels */
|
|
1384
|
+
}
|
|
1385
|
+
```
|
|
1386
|
+
|
|
1387
|
+
### Using Dark Mode
|
|
1388
|
+
```html
|
|
1389
|
+
<!-- Apply dark class to container -->
|
|
1390
|
+
<div class="dark">
|
|
1391
|
+
<!-- All children inherit dark mode styles -->
|
|
1392
|
+
<div class="bg-appbody text-appbody-textcolor">
|
|
1393
|
+
<div class="card p-card-padding">
|
|
1394
|
+
<!-- Card automatically has dark background (#1D1D1D) -->
|
|
1395
|
+
<!-- Border radius automatically 12px -->
|
|
1396
|
+
<p>Content with dark mode styling</p>
|
|
1397
|
+
</div>
|
|
1398
|
+
</div>
|
|
1399
|
+
</div>
|
|
1400
|
+
|
|
1401
|
+
<!-- Conditional dark mode classes on specific elements -->
|
|
1402
|
+
<div class="bg-card dark:bg-listitem">
|
|
1403
|
+
<!-- Light mode: #e6e6e6, Dark mode: #262626 -->
|
|
1404
|
+
</div>
|
|
1405
|
+
|
|
1406
|
+
<table class="table">
|
|
1407
|
+
<!-- Tables automatically apply comprehensive dark mode styles -->
|
|
1408
|
+
<!-- Increased padding, dark backgrounds, adjusted borders -->
|
|
1409
|
+
</table>
|
|
1410
|
+
```
|
|
1411
|
+
|
|
1412
|
+
### Components with Dark Mode Support
|
|
1413
|
+
|
|
1414
|
+
**Fully Optimized:**
|
|
1415
|
+
- ✅ **Tables:** Increased padding (`dark:py-md`), dark backgrounds, row borders instead of cell borders
|
|
1416
|
+
- ✅ **Chat Messages:** Adjusted grid layout, background colors, rounded corners
|
|
1417
|
+
- ✅ **Cards:** Dark backgrounds (`#1D1D1D`), larger border radius (12px)
|
|
1418
|
+
- ✅ **Forms:** Dark input backgrounds, adjusted borders and placeholders
|
|
1419
|
+
- ✅ **Navigation:** Dark sidebar and header variants
|
|
1420
|
+
- ✅ **Buttons:** Inverted color schemes for dark backgrounds
|
|
1421
|
+
|
|
1422
|
+
**Dark Mode Differences:**
|
|
1423
|
+
- Border radius: `5px` → `12px`
|
|
1424
|
+
- Grid gutters: `20px` → `40px`
|
|
1425
|
+
- Table cell padding: `py-xs` → `py-md`
|
|
1426
|
+
- Chat layout: 3 columns → 2 columns (actions hidden)
|
|
1427
|
+
- Link colors: Petrol → Purple, Hover: Blue → Dark Purple
|
|
1428
|
+
|
|
1429
|
+
### Testing Dark Mode
|
|
1430
|
+
|
|
1431
|
+
```html
|
|
1432
|
+
<!-- Toggle between light and dark -->
|
|
1433
|
+
<body class="bg-appbody text-appbody-textcolor">
|
|
1434
|
+
<!-- Light mode -->
|
|
1435
|
+
</body>
|
|
1436
|
+
|
|
1437
|
+
<body class="dark bg-appbody text-appbody-textcolor">
|
|
1438
|
+
<!-- Dark mode -->
|
|
1439
|
+
</body>
|
|
1440
|
+
```
|
|
1441
|
+
|
|
1442
|
+
---
|
|
1443
|
+
|
|
1444
|
+
## Utility Patterns
|
|
1445
|
+
|
|
1446
|
+
### Common Layout Patterns
|
|
1447
|
+
```html
|
|
1448
|
+
<!-- Centered container -->
|
|
1449
|
+
<div class="max-w-centered-content mx-auto">
|
|
1450
|
+
<!-- Content constrained to 1600px -->
|
|
1451
|
+
</div>
|
|
1452
|
+
|
|
1453
|
+
<!-- Capped content width (for readability) -->
|
|
1454
|
+
<div class="max-w-capped">
|
|
1455
|
+
<!-- Content constrained to 43.75rem (700px) -->
|
|
1456
|
+
</div>
|
|
1457
|
+
|
|
1458
|
+
<!-- Flex layout with gap -->
|
|
1459
|
+
<div class="flex items-center gap-xs">
|
|
1460
|
+
<i class="icon icon-user"></i>
|
|
1461
|
+
<span>User Name</span>
|
|
1462
|
+
</div>
|
|
1463
|
+
|
|
1464
|
+
<!-- Grid layout -->
|
|
1465
|
+
<div class="grid grid-cols-2 md:grid-cols-4 gap-grid-gutter">
|
|
1466
|
+
<div>Item 1</div>
|
|
1467
|
+
<div>Item 2</div>
|
|
1468
|
+
<div>Item 3</div>
|
|
1469
|
+
<div>Item 4</div>
|
|
1470
|
+
</div>
|
|
1471
|
+
```
|
|
1472
|
+
|
|
1473
|
+
### Icon Usage
|
|
1474
|
+
```html
|
|
1475
|
+
<!-- Standard icon (20px) -->
|
|
1476
|
+
<i class="icon icon-star"></i>
|
|
1477
|
+
|
|
1478
|
+
<!-- Icon sizes -->
|
|
1479
|
+
<i class="icon icon-star text-icon-xxxs"></i> <!-- 10px -->
|
|
1480
|
+
<i class="icon icon-star text-icon-xxs"></i> <!-- 0.625rem -->
|
|
1481
|
+
<i class="icon icon-star text-icon-xs"></i> <!-- 16px -->
|
|
1482
|
+
<i class="icon icon-star text-icon-sm"></i> <!-- 18px -->
|
|
1483
|
+
<i class="icon icon-star text-icon"></i> <!-- 20px - default -->
|
|
1484
|
+
<i class="icon icon-star text-icon-lg"></i> <!-- 40px -->
|
|
1485
|
+
<i class="icon icon-star text-icon-xl"></i> <!-- 60px -->
|
|
1486
|
+
<i class="icon icon-star text-icon-xxl"></i> <!-- 90px -->
|
|
1487
|
+
|
|
1488
|
+
<!-- Colored icons -->
|
|
1489
|
+
<i class="icon icon-check text-success"></i>
|
|
1490
|
+
<i class="icon icon-close text-danger"></i>
|
|
1491
|
+
<i class="icon icon-info text-info"></i>
|
|
1492
|
+
```
|
|
1493
|
+
|
|
1494
|
+
### Border Utilities
|
|
1495
|
+
```html
|
|
1496
|
+
<!-- Standard border -->
|
|
1497
|
+
<div class="border border-bordercolor rounded">Content</div>
|
|
1498
|
+
|
|
1499
|
+
<!-- Border widths -->
|
|
1500
|
+
<div class="border-1">1px border</div>
|
|
1501
|
+
<div class="border-2">2px border</div>
|
|
1502
|
+
<div class="border-4">4px border</div>
|
|
1503
|
+
<div class="border-6">6px border</div>
|
|
1504
|
+
<div class="border-10">10px border</div>
|
|
1505
|
+
|
|
1506
|
+
<!-- Border radius (5px light, 12px dark) -->
|
|
1507
|
+
<div class="rounded">Rounded corners</div>
|
|
1508
|
+
<div class="rounded-t">Top corners rounded</div>
|
|
1509
|
+
<div class="rounded-b">Bottom corners rounded</div>
|
|
1510
|
+
<div class="rounded-full">Fully rounded (circle/pill)</div>
|
|
1511
|
+
```
|
|
1512
|
+
|
|
1513
|
+
### Shadow
|
|
1514
|
+
```html
|
|
1515
|
+
<!-- Standard shadow -->
|
|
1516
|
+
<div class="shadow">
|
|
1517
|
+
<!-- 0 3px 6px 0 rgba(0, 0, 0, 0.2), 0 0px 0px 0 rgba(0, 0, 0, 0.05) -->
|
|
1518
|
+
</div>
|
|
1519
|
+
```
|
|
1520
|
+
|
|
1521
|
+
---
|
|
1522
|
+
|
|
1523
|
+
## Best Practices for Claude
|
|
1524
|
+
|
|
1525
|
+
### When Building Pages:
|
|
1526
|
+
|
|
1527
|
+
1. **Start with Layout Structure**
|
|
1528
|
+
- Use semantic HTML5 elements
|
|
1529
|
+
- Apply layout classes: `header`, `sidebar`, `main`, `section`
|
|
1530
|
+
- Use grid or flex utilities for responsive layouts
|
|
1531
|
+
- Consider using `.page-header` for dashboard pages
|
|
1532
|
+
|
|
1533
|
+
2. **Component Selection**
|
|
1534
|
+
- Choose the appropriate component variant for the use case
|
|
1535
|
+
- Use semantic button/alert types (primary, success, danger, etc.)
|
|
1536
|
+
- Apply consistent spacing using the spacing scale
|
|
1537
|
+
- Use `.page-header` with chart variant when displaying metrics
|
|
1538
|
+
|
|
1539
|
+
3. **Responsive Design**
|
|
1540
|
+
- Use responsive grid classes: `grid-cols-1 md:grid-cols-2 lg:grid-cols-3`
|
|
1541
|
+
- Apply responsive utilities: `hidden md:block`, `flex-col md:flex-row`
|
|
1542
|
+
- Consider mobile-first approach
|
|
1543
|
+
- Remember breakpoints: lg (70rem), xl (90rem), 2xl (100rem)
|
|
1544
|
+
|
|
1545
|
+
4. **Accessibility**
|
|
1546
|
+
- Include proper ARIA labels
|
|
1547
|
+
- Use semantic HTML elements
|
|
1548
|
+
- Ensure proper heading hierarchy
|
|
1549
|
+
- Include alt text for images
|
|
1550
|
+
- Use `<label>` elements with `for` attributes
|
|
1551
|
+
|
|
1552
|
+
5. **Color Usage**
|
|
1553
|
+
- Use semantic colors for consistent meaning
|
|
1554
|
+
- Apply `bg-card` for card backgrounds
|
|
1555
|
+
- Use `bg-listitem` for list item backgrounds
|
|
1556
|
+
- Use `border-bordercolor` for standard borders
|
|
1557
|
+
- Text color defaults are handled by parent classes
|
|
1558
|
+
- Remember colors change in dark mode (petrol → teal, red → brighter red)
|
|
1559
|
+
|
|
1560
|
+
6. **Typography**
|
|
1561
|
+
- Use heading classes (`text-heading-1` through `text-heading-6`)
|
|
1562
|
+
- Apply `font-light` for headings (weight: 300)
|
|
1563
|
+
- Use `text-label` for form labels
|
|
1564
|
+
- Default body text is `text-base` (0.875rem)
|
|
1565
|
+
- Card headers use `text-card-header` (1.125rem in dark mode)
|
|
1566
|
+
|
|
1567
|
+
7. **Spacing Consistency**
|
|
1568
|
+
- Use `gap-grid-gutter` for grid/flex gaps (20px light, 40px dark)
|
|
1569
|
+
- Apply `p-md` for standard padding (20px)
|
|
1570
|
+
- Use `p-card-padding` for card padding (30px)
|
|
1571
|
+
- Use `mb-spacing` for section spacing (30px)
|
|
1572
|
+
- Icons typically need `mr-xs` or `ml-xs` when next to text
|
|
1573
|
+
- Page headers use `gap-md xl:gap-grid-gutter`
|
|
1574
|
+
|
|
1575
|
+
8. **Dark Mode Considerations**
|
|
1576
|
+
- Border radius is larger in dark mode (12px vs 5px)
|
|
1577
|
+
- Grid gutters are larger in dark mode (40px vs 20px)
|
|
1578
|
+
- Tables have increased padding in dark mode (`dark:py-md`)
|
|
1579
|
+
- Chat layouts adjust grid template in dark mode (2 cols vs 3)
|
|
1580
|
+
- Always test components with `.dark` class applied to parent
|
|
1581
|
+
- Use `dark:` prefix for conditional dark mode styles
|
|
1582
|
+
|
|
1583
|
+
9. **Table Best Practices**
|
|
1584
|
+
- Use `.table` for standard data tables
|
|
1585
|
+
- Use `.table-standard` for key-value style tables
|
|
1586
|
+
- Use `.table-cellstyle` for status tracking tables
|
|
1587
|
+
- Use `.table-grid` for complex responsive layouts
|
|
1588
|
+
- Add status classes (`.completed`, `.inprogress`, `.missing`) for task tracking
|
|
1589
|
+
- Use `.action-cell` for right-aligned action buttons
|
|
1590
|
+
- Remember tables have comprehensive dark mode styles built-in
|
|
1591
|
+
|
|
1592
|
+
10. **Page Header Best Practices**
|
|
1593
|
+
- Use `.page-header` for dashboard/session pages
|
|
1594
|
+
- Main card should have `.page-maincard` and `p-card-padding`
|
|
1595
|
+
- Main card now uses `sm:col-span-2` for better small screen layout
|
|
1596
|
+
- Use `.page-meta-info` for metadata grid (automatically responsive)
|
|
1597
|
+
- Add `.with-chart` modifier when including charts
|
|
1598
|
+
- Actions go in `.page-actions` (vertical on **md+**, horizontal mobile)
|
|
1599
|
+
- Action stacking changed from `lg:` to `md:` breakpoint for earlier responsive behavior
|
|
1600
|
+
- Use `.btn-main` for primary action button (uses `md:flex-col`)
|
|
1601
|
+
- Special metadata that spans wide use `.row-testsuite`
|
|
1602
|
+
|
|
1603
|
+
11. **Status Stepper Best Practices** ⭐ NEW
|
|
1604
|
+
- Use `.status-stepper` for multi-step process visualization
|
|
1605
|
+
- Apply `.active` class to current step (will expand to fill space)
|
|
1606
|
+
- Use `.completed` class with success icons for finished steps
|
|
1607
|
+
- Default state (no class) for pending/future steps
|
|
1608
|
+
- Include `.icon` within steps for visual indicators
|
|
1609
|
+
- Use `.counter` for numeric progress indicators
|
|
1610
|
+
- Works well within `.splitview-group-status` containers
|
|
1611
|
+
- Keep step text concise (3-4 words max)
|
|
1612
|
+
|
|
1613
|
+
12. **Splitview Best Practices** ⭐ UPDATED
|
|
1614
|
+
- Use `.splitview-group-status` to show status within collapsible groups
|
|
1615
|
+
- Add `.splitview-btn` for show/hide toggle buttons
|
|
1616
|
+
- Status steppers fit naturally in `.splitview-group-status`
|
|
1617
|
+
- Buttons in groups automatically get rounded bottom corners
|
|
1618
|
+
- Use `bg-listitem` for consistent group backgrounds
|
|
1619
|
+
|
|
1620
|
+
### Example Page Structure:
|
|
1621
|
+
|
|
1622
|
+
```html
|
|
1623
|
+
<!DOCTYPE html>
|
|
1624
|
+
<html lang="en">
|
|
1625
|
+
<head>
|
|
1626
|
+
<meta charset="UTF-8">
|
|
1627
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
1628
|
+
<title>Test Dashboard</title>
|
|
1629
|
+
<link rel="stylesheet" href="app.compiled.css">
|
|
1630
|
+
</head>
|
|
1631
|
+
<body class="bg-appbody text-appbody-textcolor">
|
|
1632
|
+
|
|
1633
|
+
<!-- Page Header Component -->
|
|
1634
|
+
<div class="page-header with-chart">
|
|
1635
|
+
<div class="card page-maincard p-card-padding">
|
|
1636
|
+
<h1 class="text-card-header">Test Session Details</h1>
|
|
1637
|
+
<h2 class="page-session-title">Accessibility Audit - Homepage</h2>
|
|
1638
|
+
|
|
1639
|
+
<dl class="page-meta-info">
|
|
1640
|
+
<dt class="label">Created:</dt>
|
|
1641
|
+
<dd>Oct 21, 2025 10:00 AM</dd>
|
|
1642
|
+
|
|
1643
|
+
<dt class="label">Last Run:</dt>
|
|
1644
|
+
<dd>Oct 21, 2025 2:30 PM</dd>
|
|
1645
|
+
|
|
1646
|
+
<dt class="label">ID:</dt>
|
|
1647
|
+
<dd>987654321</dd>
|
|
1648
|
+
|
|
1649
|
+
<dt class="label">Test Suite:</dt>
|
|
1650
|
+
<dd class="row-testsuite">
|
|
1651
|
+
<a href="#" class="label">WCAG 2.1 Level AA</a>
|
|
1652
|
+
</dd>
|
|
1653
|
+
|
|
1654
|
+
<dt class="label">Status:</dt>
|
|
1655
|
+
<dd class="text-white">Completed</dd>
|
|
1656
|
+
</dl>
|
|
1657
|
+
</div>
|
|
1658
|
+
|
|
1659
|
+
<div class="page-chart card p-card-padding">
|
|
1660
|
+
<div class="echarts-container" id="results-chart"></div>
|
|
1661
|
+
</div>
|
|
1662
|
+
|
|
1663
|
+
<div class="page-actions">
|
|
1664
|
+
<a href="#" class="btn btn-primary btn-main">
|
|
1665
|
+
<span class="icon icon-review-xl"></span>
|
|
1666
|
+
View Full Report
|
|
1667
|
+
</a>
|
|
1668
|
+
<a href="#" class="btn btn-secondary">Re-run Tests</a>
|
|
1669
|
+
<a href="#" class="btn btn-secondary">Export Results</a>
|
|
1670
|
+
</div>
|
|
1671
|
+
</div>
|
|
1672
|
+
|
|
1673
|
+
<!-- Main Content -->
|
|
1674
|
+
<main class="p-md md:p-lg">
|
|
1675
|
+
<section class="mb-spacing">
|
|
1676
|
+
<h2 class="text-heading-3 font-light mb-md">Test Results</h2>
|
|
1677
|
+
|
|
1678
|
+
<table class="table">
|
|
1679
|
+
<thead>
|
|
1680
|
+
<tr>
|
|
1681
|
+
<th>Test Name</th>
|
|
1682
|
+
<th>Status</th>
|
|
1683
|
+
<th>Issues Found</th>
|
|
1684
|
+
<th class="action-cell">Actions</th>
|
|
1685
|
+
</tr>
|
|
1686
|
+
</thead>
|
|
1687
|
+
<tbody>
|
|
1688
|
+
<tr>
|
|
1689
|
+
<td>Color Contrast</td>
|
|
1690
|
+
<td><span class="badge badge-success">Passed</span></td>
|
|
1691
|
+
<td>0</td>
|
|
1692
|
+
<td class="action-cell">
|
|
1693
|
+
<button class="btn btn-sm btn-ghost">View</button>
|
|
1694
|
+
</td>
|
|
1695
|
+
</tr>
|
|
1696
|
+
<tr>
|
|
1697
|
+
<td>Keyboard Navigation</td>
|
|
1698
|
+
<td><span class="badge badge-danger">Failed</span></td>
|
|
1699
|
+
<td>3</td>
|
|
1700
|
+
<td class="action-cell">
|
|
1701
|
+
<button class="btn btn-sm btn-ghost">View</button>
|
|
1702
|
+
</td>
|
|
1703
|
+
</tr>
|
|
1704
|
+
</tbody>
|
|
1705
|
+
</table>
|
|
1706
|
+
</section>
|
|
1707
|
+
|
|
1708
|
+
<section>
|
|
1709
|
+
<h2 class="text-heading-3 font-light mb-md">Discussion</h2>
|
|
1710
|
+
|
|
1711
|
+
<div class="list-chat-messages">
|
|
1712
|
+
<div class="chat-message-item">
|
|
1713
|
+
<img src="/avatars/jane.jpg" alt="Jane" class="chat-avatar">
|
|
1714
|
+
|
|
1715
|
+
<div class="chat-header">
|
|
1716
|
+
<span class="chat-title">
|
|
1717
|
+
<span class="chat-author">Jane Smith</span>
|
|
1718
|
+
</span>
|
|
1719
|
+
<span>2 hours ago</span>
|
|
1720
|
+
</div>
|
|
1721
|
+
|
|
1722
|
+
<div class="chat-message">
|
|
1723
|
+
<p>Found some keyboard navigation issues on the main menu. Users can't tab through all the options.</p>
|
|
1724
|
+
</div>
|
|
1725
|
+
|
|
1726
|
+
<div class="chat-actions">
|
|
1727
|
+
<button class="btn btn-ghost btn-sm">
|
|
1728
|
+
<i class="icon icon-reply"></i>
|
|
1729
|
+
</button>
|
|
1730
|
+
</div>
|
|
1731
|
+
</div>
|
|
1732
|
+
</div>
|
|
1733
|
+
</section>
|
|
1734
|
+
</main>
|
|
1735
|
+
|
|
1736
|
+
<script src="app.bundled.js"></script>
|
|
1737
|
+
</body>
|
|
1738
|
+
</html>
|
|
1739
|
+
```
|
|
1740
|
+
|
|
1741
|
+
---
|
|
1742
|
+
|
|
1743
|
+
## Product-Specific Variants
|
|
1744
|
+
|
|
1745
|
+
The design system includes variants for different products:
|
|
1746
|
+
|
|
1747
|
+
### Customer Portal
|
|
1748
|
+
- Navigation: `customer_header`, `customer_sidebar`
|
|
1749
|
+
- Hover color: Teal (`navlink-customer-hover-color`)
|
|
1750
|
+
- Product cards: `customer_productcards`
|
|
1751
|
+
|
|
1752
|
+
### Tester Portal
|
|
1753
|
+
- Navigation: `tester_header`, `tester_sidebar`
|
|
1754
|
+
- Hover color: Purple (`navlink-tester-hover-color`)
|
|
1755
|
+
- Cards: `tester_cards`
|
|
1756
|
+
|
|
1757
|
+
### Manager Portal
|
|
1758
|
+
- Navigation: `manager_header`, `manager_sidebar`
|
|
1759
|
+
- Hover color: Teal on light background
|
|
1760
|
+
- Navigation on white background
|
|
1761
|
+
|
|
1762
|
+
### AgenticQA
|
|
1763
|
+
- Navigation: `agenticqa_header`, `agenticqa_sidebar`
|
|
1764
|
+
- Page headers: `agenticqa_pageheader`
|
|
1765
|
+
- Status visualization: `agenticqa_status_stepper`
|
|
1766
|
+
|
|
1767
|
+
---
|
|
1768
|
+
|
|
1769
|
+
## Additional Components Available
|
|
1770
|
+
|
|
1771
|
+
- **Modals/Drawers:** For overlays and side panels
|
|
1772
|
+
- **Popovers:** For contextual tooltips
|
|
1773
|
+
- **Radio Tabs:** For radio button styled as tabs
|
|
1774
|
+
- **Rating Scale:** For rating inputs
|
|
1775
|
+
- **Selectable Tokens:** For tag/token selection
|
|
1776
|
+
- **File Uploads:** Dropzone integration with styling
|
|
1777
|
+
- **Gallery:** Image grid layouts
|
|
1778
|
+
- **Metrics:** Metric display components
|
|
1779
|
+
- **Device Selector:** For device/platform selection
|
|
1780
|
+
|
|
1781
|
+
Refer to the live documentation site for visual examples of all components.
|
|
1782
|
+
|
|
1783
|
+
---
|
|
1784
|
+
|
|
1785
|
+
## JavaScript Features
|
|
1786
|
+
|
|
1787
|
+
The bundled JavaScript includes:
|
|
1788
|
+
|
|
1789
|
+
- **Tom-Select:** Enhanced multi-select dropdowns
|
|
1790
|
+
- **Select2:** Enhanced select inputs with search (custom "testio" theme)
|
|
1791
|
+
- **Autosize:** Auto-expanding textareas
|
|
1792
|
+
- **Dropzone:** Drag-and-drop file uploads with preview
|
|
1793
|
+
- **Trix:** Rich text editor with custom configuration
|
|
1794
|
+
- **ECharts:** Data visualization charts
|
|
1795
|
+
- Bar charts (vertical/horizontal)
|
|
1796
|
+
- Donut charts
|
|
1797
|
+
- Gauge charts
|
|
1798
|
+
- Area charts
|
|
1799
|
+
- Line charts
|
|
1800
|
+
- Custom theming with design system colors
|
|
1801
|
+
- Integration with page-header component
|
|
1802
|
+
|
|
1803
|
+
---
|
|
1804
|
+
|
|
1805
|
+
## Version & Support
|
|
1806
|
+
|
|
1807
|
+
**Current Version:** 3.12.0
|
|
1808
|
+
**Tailwind Version:** 4.1.11
|
|
1809
|
+
**Node Version:** v23.11.0 (specified in `.nvmrc`)
|
|
1810
|
+
|
|
1811
|
+
For updates and examples, refer to:
|
|
1812
|
+
- NPM: `npm install testio-tailwind@latest`
|
|
1813
|
+
- Documentation: Included in package under `/dist/`
|
|
1814
|
+
- Source: GitHub repository (test-IO/testio-tailwind)
|
|
1815
|
+
|
|
1816
|
+
---
|
|
1817
|
+
|
|
1818
|
+
## Quick Reference: Common Patterns
|
|
1819
|
+
|
|
1820
|
+
```html
|
|
1821
|
+
<!-- Page Header with Session Info -->
|
|
1822
|
+
<div class="page-header">
|
|
1823
|
+
<div class="card page-maincard p-card-padding">
|
|
1824
|
+
<h1 class="text-card-header">Session Details</h1>
|
|
1825
|
+
<h2 class="page-session-title">My Test Session</h2>
|
|
1826
|
+
<dl class="page-meta-info">
|
|
1827
|
+
<dt class="label">Created:</dt>
|
|
1828
|
+
<dd>Oct 21, 2025</dd>
|
|
1829
|
+
<dt class="label">Status:</dt>
|
|
1830
|
+
<dd class="text-white">Running</dd>
|
|
1831
|
+
</dl>
|
|
1832
|
+
</div>
|
|
1833
|
+
<div class="page-actions">
|
|
1834
|
+
<a href="#" class="btn btn-primary btn-main">
|
|
1835
|
+
<span class="icon icon-test-running-xl"></span>
|
|
1836
|
+
Start Test
|
|
1837
|
+
</a>
|
|
1838
|
+
</div>
|
|
1839
|
+
</div>
|
|
1840
|
+
|
|
1841
|
+
<!-- Form Layout -->
|
|
1842
|
+
<form class="space-y-md">
|
|
1843
|
+
<div class="form-group">
|
|
1844
|
+
<label class="form-label">Field Name</label>
|
|
1845
|
+
<input type="text" class="form-control" placeholder="Placeholder">
|
|
1846
|
+
<div class="form-hint">Helper text</div>
|
|
1847
|
+
</div>
|
|
1848
|
+
</form>
|
|
1849
|
+
|
|
1850
|
+
<!-- Responsive Card Grid -->
|
|
1851
|
+
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-grid-gutter">
|
|
1852
|
+
<!-- Cards here -->
|
|
1853
|
+
</div>
|
|
1854
|
+
|
|
1855
|
+
<!-- Dark Mode Data Table -->
|
|
1856
|
+
<table class="table">
|
|
1857
|
+
<thead>
|
|
1858
|
+
<tr>
|
|
1859
|
+
<th>Test Name</th>
|
|
1860
|
+
<th>Status</th>
|
|
1861
|
+
<th>Results</th>
|
|
1862
|
+
</tr>
|
|
1863
|
+
</thead>
|
|
1864
|
+
<tbody>
|
|
1865
|
+
<tr>
|
|
1866
|
+
<td>Login Flow</td>
|
|
1867
|
+
<td><span class="badge badge-success">Passed</span></td>
|
|
1868
|
+
<td class="action-cell">
|
|
1869
|
+
<button class="btn btn-sm btn-ghost">View</button>
|
|
1870
|
+
</td>
|
|
1871
|
+
</tr>
|
|
1872
|
+
</tbody>
|
|
1873
|
+
</table>
|
|
1874
|
+
|
|
1875
|
+
<!-- Chat Messages -->
|
|
1876
|
+
<div class="list-chat-messages">
|
|
1877
|
+
<div class="chat-message-item">
|
|
1878
|
+
<img src="avatar.jpg" class="chat-avatar" alt="User">
|
|
1879
|
+
<div class="chat-header">
|
|
1880
|
+
<span class="chat-author">Jane Doe</span>
|
|
1881
|
+
<span>10 mins ago</span>
|
|
1882
|
+
</div>
|
|
1883
|
+
<div class="chat-message">
|
|
1884
|
+
<p>Here's my feedback on the latest changes.</p>
|
|
1885
|
+
</div>
|
|
1886
|
+
</div>
|
|
1887
|
+
</div>
|
|
1888
|
+
|
|
1889
|
+
<!-- Action Bar -->
|
|
1890
|
+
<div class="flex items-center justify-end gap-xs bg-actionbar text-white p-md">
|
|
1891
|
+
<button class="btn btn-ghost-inverted">Cancel</button>
|
|
1892
|
+
<button class="btn btn-primary-inverted">Confirm</button>
|
|
1893
|
+
</div>
|
|
1894
|
+
|
|
1895
|
+
<!-- Empty State -->
|
|
1896
|
+
<div class="emptystate-message text-center py-xxl">
|
|
1897
|
+
<i class="icon icon-inbox text-icon-xxl text-gray-light mb-md"></i>
|
|
1898
|
+
<h3 class="text-heading-4 mb-xs">No Items Yet</h3>
|
|
1899
|
+
<p class="text-sm text-gray-dark mb-md">Get started by creating your first item</p>
|
|
1900
|
+
<button class="btn btn-primary">Create Item</button>
|
|
1901
|
+
</div>
|
|
1902
|
+
|
|
1903
|
+
<!-- Status Stepper (NEW) -->
|
|
1904
|
+
<div class="status-stepper">
|
|
1905
|
+
<div class="status-step completed">
|
|
1906
|
+
<i class="icon icon-check-thick-centered"></i>
|
|
1907
|
+
3 done
|
|
1908
|
+
</div>
|
|
1909
|
+
<div class="status-step active">
|
|
1910
|
+
<i class="icon icon-sync"></i>
|
|
1911
|
+
Executing checks
|
|
1912
|
+
</div>
|
|
1913
|
+
<div class="status-step">
|
|
1914
|
+
+ 3 to do
|
|
1915
|
+
</div>
|
|
1916
|
+
</div>
|
|
1917
|
+
|
|
1918
|
+
<!-- Splitview with Status (NEW) -->
|
|
1919
|
+
<details class="splitview-group" open>
|
|
1920
|
+
<summary>Test Group</summary>
|
|
1921
|
+
<div class="splitview-group-status">
|
|
1922
|
+
<div class="status-stepper">
|
|
1923
|
+
<div class="status-step completed">Done</div>
|
|
1924
|
+
<div class="status-step active">In Progress</div>
|
|
1925
|
+
<div class="status-step">Pending</div>
|
|
1926
|
+
</div>
|
|
1927
|
+
</div>
|
|
1928
|
+
<button class="splitview-btn">Show 5 dismissed items</button>
|
|
1929
|
+
</details>
|
|
1930
|
+
```
|
|
1931
|
+
|
|
1932
|
+
---
|
|
1933
|
+
|
|
1934
|
+
## Design System Change Log
|
|
1935
|
+
|
|
1936
|
+
### Version 3.12.0 - October 21, 2025
|
|
1937
|
+
|
|
1938
|
+
**New Components:**
|
|
1939
|
+
- Status Stepper component for multi-step process visualization
|
|
1940
|
+
- Splitview status groups with `.splitview-group-status`
|
|
1941
|
+
- Splitview buttons with `.splitview-btn`
|
|
1942
|
+
|
|
1943
|
+
**Enhancements:**
|
|
1944
|
+
- Page header responsive improvements (added `sm:col-span-2` to main card)
|
|
1945
|
+
- Page actions now stack at md breakpoint instead of lg (`lg:flex-col` → `md:flex-col`)
|
|
1946
|
+
- Better button icon visibility (changed breakpoint from lg to md for some instances)
|
|
1947
|
+
- List item badge vertical alignment fix (`items-start` → `items-center`)
|
|
1948
|
+
- List item badge padding consistency (`p-xxs pt-xs` → `px-xxs py-xxs`)
|
|
1949
|
+
- Splitview integration with status tracking
|
|
1950
|
+
- Node version specified in `.nvmrc` (v23.11.0)
|
|
1951
|
+
|
|
1952
|
+
### Version 3.11.0 - October 20, 2025
|
|
1953
|
+
|
|
1954
|
+
**New Components:**
|
|
1955
|
+
- Page Header component with responsive grid layout
|
|
1956
|
+
- Chart integration capability in page headers
|
|
1957
|
+
- Form grid layouts within page headers
|
|
1958
|
+
- Comprehensive chat message components
|
|
1959
|
+
|
|
1960
|
+
**Enhancements:**
|
|
1961
|
+
- Dark mode support for all table variants with increased padding
|
|
1962
|
+
- Updated breakpoints: lg (70rem), xl (90rem), 2xl (100rem)
|
|
1963
|
+
- Increased border radius in dark mode: 5px → 12px
|
|
1964
|
+
- Larger grid gutters in dark mode: 20px → 40px
|
|
1965
|
+
- Improved chat component dark mode layouts (3 col → 2 col)
|
|
1966
|
+
- Better splitview alignment with page header grids
|
|
1967
|
+
- Table cell style improvements (editable, selectable cells)
|
|
1968
|
+
- Grid table layout for complex responsive tables
|
|
1969
|
+
|
|
1970
|
+
**Bug Fixes:**
|
|
1971
|
+
- Button XL responsive behavior in page headers
|
|
1972
|
+
- Forms gap spacing consistency
|
|
1973
|
+
- Chat avatar spacing in dark mode
|
|
1974
|
+
- Table border styling in dark mode
|
|
1975
|
+
|
|
1976
|
+
---
|
|
1977
|
+
|
|
1978
|
+
**END OF REFERENCE GUIDE**
|