testio-tailwind 3.27.2 → 3.27.4

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.
@@ -0,0 +1,538 @@
1
+ # AgenticQA Components
2
+
3
+ Comprehensive component library specifically designed for the AgenticQA platform. These components provide AI-driven quality assurance workflow interfaces.
4
+
5
+ **Live Examples:** `http://localhost:8080/agenticqa/`
6
+
7
+ ---
8
+
9
+ ## AgenticQA Page Header
10
+
11
+ **Purpose:** Display session/test details with metadata and action buttons.
12
+
13
+ **Key Classes:**
14
+ - `.page-header` - Main container
15
+ - `.page-maincard` - Primary information card (use with `.p-card-padding`)
16
+ - `.page-session-title` - Large session title text
17
+ - `.page-meta-info` - Definition list for metadata
18
+ - `.page-actions` - Container for action buttons
19
+ - `.with-chart` - Modifier for charts display
20
+ - `.page-chart` - Chart container
21
+ - `.btn-main` - Main action button (primary CTA)
22
+
23
+ ```html
24
+ <div class="page-header">
25
+ <div class="card page-maincard p-card-padding">
26
+ <h1 class="text-card-header">Session details</h1>
27
+ <h2 class="page-session-title">Test Session title</h2>
28
+ <dl class="page-meta-info">
29
+ <dt class="label">Created on:</dt>
30
+ <dd>2025-07-23 10:45 AM</dd>
31
+ <dt class="label">Last test:</dt>
32
+ <dd>2025-07-23 10:45 AM</dd>
33
+ <dt class="label">ID:</dt>
34
+ <dd>321456987</dd>
35
+ <dt class="label">URL:</dt>
36
+ <dd><a class="label" href="">Test Suite name</a></dd>
37
+ <dt class="label">Status:</dt>
38
+ <dd class="text-white">Running</dd>
39
+ </dl>
40
+ </div>
41
+ <div class="page-actions">
42
+ <a class="btn btn-primary btn-main" href="">
43
+ <span class="icon icon-test-running-xl"></span>
44
+ Start test
45
+ </a>
46
+ </div>
47
+ </div>
48
+ ```
49
+
50
+ **With Chart:**
51
+ ```html
52
+ <div class="page-header with-chart">
53
+ <!-- ... main card ... -->
54
+ <div class="page-chart card p-card-padding">
55
+ <div class="echarts-container" id="echarts-testinator"></div>
56
+ </div>
57
+ <div class="page-actions">
58
+ <a class="btn btn-primary btn-main" href="">
59
+ <span class="icon icon-review-xl"></span>
60
+ Show report
61
+ </a>
62
+ </div>
63
+ </div>
64
+ ```
65
+
66
+ ---
67
+
68
+ ## AgenticQA Chat Components
69
+
70
+ **Purpose:** Conversational exchanges between users and the AI system.
71
+
72
+ **Key Classes:**
73
+ - `.list-chat-messages` - Container
74
+ - `.chat-message-item` - Individual message wrapper
75
+ - `.your-message` - User messages (right-aligned)
76
+ - `.chat-avatar` - User profile image
77
+ - `.chat-header` - Message header with title and timestamp
78
+ - `.chat-message` - Message body content
79
+ - `.collapsable` - Modifier for expandable messages
80
+ - `.chat-action-row` - Container for action buttons after messages
81
+
82
+ ### Standard Chat Messages (HAML)
83
+ ```haml
84
+ .list-chat-messages.full-width
85
+ .chat-message-item
86
+ %img.chat-avatar{src:"/assets/images/profilepic_testinator.png"}
87
+ .chat-header
88
+ %span.chat-title.label Justification
89
+ %span.label 5 mins ago
90
+ .chat-message
91
+ Here's a message with analysis...
92
+ .chat-message-item.your-message
93
+ %img.chat-avatar{src:"/assets/images/placeholders/profile_supergirl.png"}
94
+ .chat-header
95
+ %span.chat-title.label Your message
96
+ %span.label 5 mins ago
97
+ .chat-message
98
+ Here's your feedback...
99
+ .chat-action-row
100
+ %a.btn.btn-primary.rounded-full re-run check
101
+ %a.btn.btn-secondary.rounded-full update check
102
+ ```
103
+
104
+ ### Collapsable Chat Messages (HAML)
105
+ ```haml
106
+ .chat-message-item.collapsable
107
+ %img.chat-avatar{src:"/assets/images/profilepic_testinator.png"}
108
+ %details
109
+ %summary.chat-header
110
+ %span.chat-title.label Collapsable message
111
+ %span.label 5 mins ago
112
+ .chat-message
113
+ Here's a long message with extensive content...
114
+ ```
115
+
116
+ ### Chat History (HAML)
117
+ ```haml
118
+ .card.p-card-padding
119
+ %details.chat-history-collapsable
120
+ %summary.chat-history-header
121
+ .chat-history-title Show complete history
122
+ .list-chat-messages.full-width
123
+ .chat-message-item
124
+ %img.chat-avatar{src:"/assets/images/profilepic_testinator.png"}
125
+ .chat-header
126
+ %span.chat-title.label Justification
127
+ %span.label 5 mins ago
128
+ .chat-message
129
+ Historical message content...
130
+ ```
131
+
132
+ ### Chat Form (HAML)
133
+ ```haml
134
+ .chat-form-row
135
+ %form.chat-form
136
+ %h5.text-card-header.mb-xxs Re-Run this check
137
+ %p.font-light.mb-md Add additional instructions for re-running this check.
138
+ %textarea.form-control{placeholder:"Add your instructions or feedback"}
139
+ .form-actions
140
+ %a.btn.btn-primary.rounded-full
141
+ %span.icon.icon-sync.mr-icon-spacing
142
+ re-run check
143
+ %button.btn.btn-secondary.rounded-full Cancel
144
+ ```
145
+
146
+ ---
147
+
148
+ ## AgenticQA Status Stepper
149
+
150
+ **Key Classes:** `.status-stepper`, `.status-step`, `.completed`, `.active`, `.counter`, `.icon`
151
+
152
+ ```haml
153
+ .status-stepper
154
+ .status-step.completed
155
+ .icon.icon-check-thick-centered
156
+ 3 done
157
+ .status-step.active
158
+ .icon.icon-sync
159
+ Executing checks
160
+ .status-step
161
+ + 3 to do
162
+ ```
163
+
164
+ **With Counters:**
165
+ ```haml
166
+ .status-stepper
167
+ .status-step.completed
168
+ .counter 99
169
+ Completed
170
+ .status-step.active
171
+ .counter 99
172
+ Active
173
+ .status-step
174
+ .counter 99
175
+ Initial
176
+ ```
177
+
178
+ ---
179
+
180
+ ## AgenticQA Splitview Components
181
+
182
+ **Purpose:** Display grouped checks and individual test results in an expandable interface.
183
+
184
+ **Key Classes:**
185
+ - `.splitview-group` - Collapsable group container
186
+ - `.splitview-item` - Individual check item
187
+ - `.splitview-item-icon` - Status icon
188
+ - `.splitview-item-text` - Check description
189
+ - `.splitview-item-title` - URL or group title
190
+ - `.splitview-item-status` - Status label/icon
191
+ - `.splitview-group-status` - Group-level status stepper
192
+ - `.selected` - Modifier for selected item
193
+ - `.unread` - Modifier for unread items
194
+ - `.splitview-btn` - Show more button
195
+ - `.turbo-frame` - Turbo frame wrapper
196
+
197
+ **Status Icons:**
198
+ - `.icon-check-circle-filled.success` - Passed check
199
+ - `.icon-cross-circle-filled.danger` - Failed check
200
+ - `.icon-blocked.blocked` - Blocked/skipped check
201
+ - `.icon-sync.pending` - Pending/executing check
202
+ - `.icon-circle-empty` - Not started/placeholder
203
+
204
+ ```haml
205
+ %details.splitview-group
206
+ %summary.splitview-item.unread
207
+ .splitview-item-icon.icon.icon-circle-empty.text-chart-empty
208
+ .splitview-item-text
209
+ .splitview-item-title https://www.example.com/product
210
+ .splitview-item-status
211
+ .text-with-icon
212
+ .icon.icon-sync
213
+ executing checks
214
+ .splitview-group-status.status-stepper
215
+ .status-step.completed
216
+ .icon.icon-check-thick-centered
217
+ 3 done
218
+ .status-step.active
219
+ .icon.icon-sync
220
+ Executing checks
221
+ .status-step
222
+ + 3 to do
223
+ .splitview-item.selected
224
+ .splitview-item-icon.icon.icon-cross-circle-filled.danger
225
+ .splitview-item-text Check title
226
+ .splitview-item.unread
227
+ .splitview-item-icon.icon.icon-check-circle-filled.success
228
+ .splitview-item-text Check title
229
+ ```
230
+
231
+ **With Turbo Frames:**
232
+ ```haml
233
+ %details.splitview-group
234
+ %summary.splitview-item
235
+ .splitview-item-icon.icon.icon-circle-empty.text-chart-empty
236
+ .splitview-item-text
237
+ .splitview-item-title https://url.com
238
+ .splitview-group-status.status-stepper
239
+ .status-step.active
240
+ Pending start
241
+ .status-step
242
+ + 6 to do
243
+ %turbo-frame.turbo-wrapper
244
+ %a.splitview-item
245
+ .splitview-item-icon.icon.icon-check-circle-filled.success
246
+ .splitview-item-text Navigation Menu Hover
247
+ %turbo-frame.turbo-wrapper
248
+ %a.splitview-item
249
+ .splitview-item-icon.icon.icon-cross-circle-filled.danger
250
+ .splitview-item-text No Results Message
251
+ %btn.btn.splitview-btn Show 99 dismissed checks
252
+ ```
253
+
254
+ ---
255
+
256
+ ## AgenticQA List Items
257
+
258
+ **Purpose:** Detailed check results with expandable content and screenshots.
259
+
260
+ **Key Classes:**
261
+ - `.list-listitems` - Container
262
+ - `.listitem` - Individual item wrapper
263
+ - `.listitem-header` - Header with title and expand button
264
+ - `.listitem-badge` - Number/index badge
265
+ - `.listitem-title` - Item title
266
+ - `.listitem-actions` - Header actions
267
+ - `.collapse-btn` - Expand/collapse button
268
+ - `.listitem-content` - Expanded content
269
+ - `.listitem-subheadline` - Section subheading
270
+ - `.listitem-card` - Text content wrapper
271
+ - `.listitem-attachments` - Attachments container
272
+ - `.attachment` - Individual attachment
273
+ - `.attachment-thumb` - Attachment preview image
274
+
275
+ ```haml
276
+ .list-listitems
277
+ %details.listitem
278
+ %summary.listitem-header
279
+ .listitem-badge 1
280
+ .listitem-title List item collapsable
281
+ .listitem-actions
282
+ .btn.collapse-btn
283
+ .listitem-content
284
+ .listitem-subheadline Subheadline
285
+ .listitem-card
286
+ %p Here's a detailed message with findings and analysis...
287
+ .listitem-subheadline AI Screenshots
288
+ .listitem-attachments
289
+ .attachment
290
+ %a.attachment-thumb{href:"/assets/images/placeholders/bugdetails.png"}
291
+ %img{src:'/assets/images/placeholders/bugdetails.png', alt:'Bug details'}
292
+ .attachment
293
+ %a.attachment-thumb{href:"/assets/images/placeholders/screenshot.png"}
294
+ %img{src:'/assets/images/placeholders/screenshot.png', alt:'Screenshot'}
295
+ ```
296
+
297
+ ---
298
+
299
+ ## AgenticQA Tables
300
+
301
+ ### Grid Table (Read-Only)
302
+
303
+ **Key Classes:** `.table-grid`, `.table-rowgroups`, `.thead`, `.tbody`, `.tr`, `.th`, `.td`, `.checkbox-column`, `.action-column`, `.url-collapsable`
304
+
305
+ **Grid Configuration:**
306
+ ```
307
+ grid-template-columns: repeat(2, auto) repeat(2, minmax(12rem, 1fr)) repeat(5, auto);
308
+ ```
309
+
310
+ ```haml
311
+ .table-grid.table-rowgroups{style:"grid-template-columns: repeat(2, auto) repeat(2, minmax(12rem, 1fr)) repeat(5, auto);"}
312
+ .thead
313
+ .tr
314
+ .th
315
+ .form-check.sm
316
+ %input#check1sm{type:'checkbox'}
317
+ .th status
318
+ .th title
319
+ .th urls
320
+ .th check suite
321
+ .th results
322
+ .th executions
323
+ .th executed
324
+ .th
325
+ .tbody
326
+ .tr
327
+ .btn.btn-sm.btn-block.btn-subtile.mb-xxs.col-span-9
328
+ .icon.icon-plus.mr-icon-spacing
329
+ Add new check
330
+ .tr
331
+ .td.checkbox-column
332
+ .form-check.sm
333
+ %input#check1sm{type:'checkbox'}
334
+ .td status
335
+ .td
336
+ %a.white.font-normal{href:"#"} Short Title
337
+ .td
338
+ %details.url-collapsable
339
+ %summary
340
+ %p https://url.com
341
+ .trigger
342
+ .text-closed Show 3 more
343
+ .text-open Show less
344
+ %p https://url.com/1
345
+ %p https://url.com/2
346
+ .td
347
+ %a.white.font-normal{href:"#"} Check suite title
348
+ .td
349
+ .flex.flex-row
350
+ .text-with-icon.mr-sm
351
+ .icon.icon-check-circle-filled.text-success
352
+ 999
353
+ .text-with-icon.mr-sm
354
+ .icon.icon-cross-circle-filled.text-danger
355
+ 999
356
+ .text-with-icon
357
+ .icon.icon-blocked.text-blocked
358
+ 999
359
+ .td 6
360
+ .td 13h ago
361
+ .td.action-column
362
+ %a.btn.btn-square{href:'#'}
363
+ .icon.icon-pencil
364
+ %details.dropdown-actions.dropright
365
+ %summary
366
+ .btn.btn-square
367
+ .icon.icon-more
368
+ .popover-menu
369
+ %a.popover-action{href:'#'}
370
+ .icon.icon-pencil
371
+ Edit
372
+ %a.popover-action{href:'#'}
373
+ .icon.icon-copy
374
+ Duplicate
375
+ %a.popover-action{href:'#'}
376
+ .icon.icon-delete
377
+ Delete
378
+ ```
379
+
380
+ ### Form Row Table (Editable)
381
+
382
+ **Purpose:** Inline editing of check parameters.
383
+
384
+ **Key Classes:** `.formrow`, `.form-group`, `.formrow-actions`
385
+
386
+ ```haml
387
+ .table-grid.table-rowgroups{style:"grid-template-columns: repeat(3, auto) repeat(1, minmax(12rem, 1fr)) auto;"}
388
+ .thead
389
+ .tr
390
+ .th
391
+ .form-check.sm
392
+ %input{type:'checkbox'}
393
+ .th check title
394
+ .th page type
395
+ .th check description
396
+ .th
397
+ .tbody
398
+ %form.formrow.tr
399
+ .td.checkbox-column.row-span-4{class:"lg:row-span-1"}
400
+ .form-check.sm
401
+ %input{type:'checkbox', disabled:"true"}
402
+ .td.col-span-4{class:"lg:col-span-1"}
403
+ .label.mb-xxs{class:"lg:hidden"} Check title
404
+ %input.form-control{type:'text', placeholder:"An input field"}
405
+ .td.col-span-4{class:"lg:col-span-1"}
406
+ .label.mb-xxs{class:"lg:hidden"} Page type
407
+ %select.tom-select{placeholder: "Please select"}
408
+ %option{value: ""}
409
+ %option{value:"Option 1"} Option 1
410
+ .td.col-span-4{class:"lg:col-span-1"}
411
+ .label.mb-xxs{class:"lg:hidden"} Check description
412
+ %textarea.form-control{rows:'1', placeholder:"Textarea"}
413
+ .td.formrow-actions.col-span-4{class:"lg:col-span-1"}
414
+ %button.btn.btn-sm.btn-block.btn-primary Save changes
415
+ %button.btn.btn-sm.btn-block.btn-danger Discard
416
+ ```
417
+
418
+ ### URL Collapsable
419
+ ```haml
420
+ %details.url-collapsable
421
+ %summary
422
+ %p https://example.invalid/long/url/path
423
+ .trigger
424
+ .text-closed Show 6 more
425
+ .text-open Show less
426
+ %p https://example.invalid/path/1
427
+ %p https://example.invalid/path/2
428
+ ```
429
+
430
+ ---
431
+
432
+ ## AgenticQA Header
433
+
434
+ **Key Classes:**
435
+ - `.header.agenticqa` - AgenticQA header variant
436
+ - `.header-wrapper` - Header content wrapper
437
+ - `.navlinks` - Link group container
438
+ - `.navlink` - Navigation link
439
+ - `.header-dropdown` - Dropdown menu
440
+ - `.mobile-links` - Mobile menu container
441
+ - `.mobile-menu` - Mobile menu content
442
+ - `.mobile-menu-btn` - Mobile menu toggle
443
+ - `.user-menu` - User profile menu
444
+ - `.btn-profile` - Profile button
445
+ - `.user-profile` - Profile image
446
+ - `.user-details` - User info
447
+ - `.profile-role` - User role text
448
+ - `.profile-name` - User name text
449
+
450
+ ```haml
451
+ %nav.header.agenticqa
452
+ .header-wrapper
453
+ .navlinks.logo-wrapper
454
+ %a.navlink.header-logo{href:'#'}
455
+ .navlinks.left
456
+ %a.navlink.active{href:'#'} Navlink active
457
+ %a.navlink{href:'#'} Navlink
458
+ %details.header-dropdown
459
+ %summary.navlink Collapsable
460
+ .dropdown-menu
461
+ %a.navlink{href:'#'}
462
+ %span.icon.icon-user
463
+ Dropdown-item
464
+ %a.navlink{href:'#'}
465
+ %span.icon.icon-shutdown
466
+ Sign out
467
+ %details.mobile-links
468
+ %summary.mobile-menu-btn
469
+ .navlink
470
+ %span.sr-only Open main menu
471
+ %span.icon.icon-menu
472
+ .mobile-menu.sidebar
473
+ %a.navlink.active{href:'#'}
474
+ %span.navlink-badge.icon.icon-home
475
+ Navlink active
476
+ .navlinks.right
477
+ %details.header-dropdown.user-menu
478
+ %summary.btn-profile.navlink
479
+ %img.user-profile{src:'/assets/images/placeholders/profile_supergirl.png'}
480
+ .user-details
481
+ .profile-role Admin
482
+ .profile-name Anja Berger
483
+ .dropdown-menu.profile-dropdown
484
+ %a.dropdown-link{href:'#'}
485
+ %span.icon.icon-user
486
+ Your Profile
487
+ %a.dropdown-link{href:'#'}
488
+ %span.icon.icon-shutdown
489
+ Sign out
490
+ ```
491
+
492
+ ---
493
+
494
+ ## AgenticQA Layout Structure
495
+
496
+ All AgenticQA pages use a dark sidebar layout:
497
+
498
+ ```html
499
+ <body class="app-body">
500
+ <header class="header agenticqa">
501
+ <!-- AgenticQA navigation -->
502
+ </header>
503
+ <main class="main-content">
504
+ <div class="app-layout">
505
+ <aside class="sidebar dark">
506
+ <!-- Dark sidebar navigation -->
507
+ </aside>
508
+ <div class="content-area">
509
+ <!-- Main content area -->
510
+ </div>
511
+ </div>
512
+ </main>
513
+ </body>
514
+ ```
515
+
516
+ **Layout Classes:**
517
+ - `.page-with-sidebar-dark` - Dark sidebar layout (AgenticQA standard)
518
+ - `.page-with-sidebar-nocode` - Sidebar without code blocks
519
+ - `.page-with-sidebar` - Standard sidebar layout
520
+
521
+ ---
522
+
523
+ ## AgenticQA Asset References
524
+
525
+ - **Logo:** `/src/assets/images/logo_agenticqa/` (PNG + SVG, Purple/Teal variants)
526
+ - **Email templates:** `/src/assets/images/assets_agenticqa/`
527
+ - **Email styling:** `src/pages/agenticqa/email.njk`
528
+
529
+ ---
530
+
531
+ ## AgenticQA Best Practices
532
+
533
+ 1. **Chat** — Use collapsable messages for long content; always include timestamps and speaker identification
534
+ 2. **Status Tracking** — Use status stepper for overall progress; splitview for URL/page grouping
535
+ 3. **Tables** — Grid tables for read-only; form row tables for inline editing; status column first
536
+ 4. **List Items** — Collapsable structure with attachments/screenshots; consistent styling for findings
537
+ 5. **Navigation** — Include user profile top-right; support mobile menu; highlight active item
538
+ 6. **Dark Mode** — All AgenticQA components include dark mode; dark sidebar is the primary pattern
@@ -0,0 +1,111 @@
1
+ # Dark Mode
2
+
3
+ ---
4
+
5
+ ## Enabling Dark Mode
6
+
7
+ ```html
8
+ <body class="app-body dark">
9
+ <!-- All dark mode styles applied automatically -->
10
+ </body>
11
+ ```
12
+
13
+ ---
14
+
15
+ ## Dark Mode Layout Structure
16
+
17
+ ```html
18
+ <body class="app-body dark">
19
+ <header class="header"></header>
20
+ <main class="main-content centered">
21
+ <div class="centered-content">
22
+ <!-- Centered content with dark mode styling -->
23
+ </div>
24
+ </main>
25
+ <footer class="actionbar centered"></footer>
26
+ </body>
27
+ ```
28
+
29
+ ---
30
+
31
+ ## Dark Mode Color Palette
32
+
33
+ ```css
34
+ .dark {
35
+ /* Core Colors */
36
+ --color-appbody: #181818;
37
+ --color-appbody-textcolor: #f2f2f2;
38
+ --color-header: #1d1d1d;
39
+ --color-card: #1D1D1D;
40
+ --color-listitem: #262626;
41
+
42
+ /* Interactive Colors */
43
+ --color-primary: #78eac1;
44
+ --color-link: #8988eb;
45
+ --color-link-hover: #7954ff;
46
+
47
+ /* Status Colors */
48
+ --color-success: #33BA9E;
49
+ --color-danger: #FF3131;
50
+ --color-bordercolor: #2E2E2E;
51
+
52
+ /* Spacing & Style Adjustments */
53
+ --radius: 12px; /* Increased from 5px */
54
+ --spacing-grid-gutter: 40px; /* Increased from 20px */
55
+ --card-padding: 30px;
56
+ --fontsize-card-header: 1.125rem;
57
+ --font-size-label: 0.75rem;
58
+ }
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Using Dark Mode
64
+
65
+ ```html
66
+ <!-- Apply dark class to container -->
67
+ <div class="dark">
68
+ <div class="bg-appbody text-appbody-textcolor">
69
+ <div class="card p-card-padding">
70
+ <p>Content with dark mode styling</p>
71
+ </div>
72
+ </div>
73
+ </div>
74
+
75
+ <!-- Conditional dark mode classes -->
76
+ <div class="bg-card dark:bg-listitem">
77
+ <!-- Light mode: #e6e6e6, Dark mode: #262626 -->
78
+ </div>
79
+
80
+ <!-- Buttons work automatically in dark mode -->
81
+ <div class="dark">
82
+ <button class="btn btn-primary">Automatically styled for dark mode</button>
83
+ </div>
84
+ ```
85
+
86
+ ---
87
+
88
+ ## Dark Mode Differences from Light Mode
89
+
90
+ | Property | Light | Dark |
91
+ |---|---|---|
92
+ | Border radius | 5px | 12px |
93
+ | Grid gutters | 20px | 40px |
94
+ | Table cell padding | py-xs | py-md |
95
+ | Chat layout | 3 columns | 2 columns (actions hidden) |
96
+ | Link color | Petrol | Purple (#8988eb) |
97
+ | Link hover | — | Dark Purple (#7954ff) |
98
+ | Text color | System | Light gray (#f2f2f2) |
99
+ | Label font size | 0.8125rem | 0.75rem |
100
+ | Card headers | default | 1.125rem |
101
+
102
+ ---
103
+
104
+ ## Dark Mode Best Practices
105
+
106
+ 1. Always preview components with `.dark` class applied
107
+ 2. Test contrast ratios for accessibility compliance
108
+ 3. Use inverted button variants on dark backgrounds
109
+ 4. Use Tailwind's `dark:` prefix for conditional styles — e.g., `bg-white dark:bg-gray-800`
110
+ 5. Combine `dark:` prefix with CSS variables for consistency
111
+ 6. Centered dark mode layout is optimal for documentation/form interfaces