|
92 | 92 | $: visibleResultFiles = filterResultFiles(selectedResultGroup?.files || [], fileFilterMode); |
93 | 93 | $: resultSummary = summarizeResultGroup(selectedResultGroup); |
94 | 94 | $: maxVerdictCount = Math.max(...resultSummary.verdictGroups.map((group) => group.count), 1); |
95 | | - $: totalOutcomeCount = Math.max(resultSummary.okCount + resultSummary.failedVerdictCount, 1); |
| 95 | + $: totalVerdictOutcomeCount = resultSummary.okCount + resultSummary.failedVerdictCount; |
| 96 | + $: totalOutcomeCount = Math.max(totalVerdictOutcomeCount, 1); |
96 | 97 | $: showingReport = selectedResultFile !== null; |
97 | 98 | </script> |
98 | 99 |
|
|
149 | 150 | class="source-item result-file-item" |
150 | 151 | on:click={() => selectResultGroup(resultGroup)} |
151 | 152 | > |
152 | | - <span>{resultGroup.name}</span> |
| 153 | + <span class="result-list-icon result-list-icon-folder" aria-hidden="true"></span> |
| 154 | + <span class="result-item-label">{resultGroup.name}</span> |
153 | 155 | </button> |
154 | 156 | {/each} |
155 | 157 | {:else if resultsData?.groups?.length > 0} |
|
166 | 168 | disabled={!selectedResultGroup} |
167 | 169 | on:click={openDeleteGroupDialog} |
168 | 170 | > |
| 171 | + <span class="result-delete-icon" aria-hidden="true"></span> |
169 | 172 | Delete Output Folder |
170 | 173 | </button> |
171 | 174 | </div> |
|
196 | 199 | title={resultFile.name} |
197 | 200 | on:click={() => loadResultFile(resultFile)} |
198 | 201 | > |
199 | | - <span>{formatResultFileLabel(resultFile.name)}</span> |
| 202 | + <span class="result-list-icon result-list-icon-file" aria-hidden="true"></span> |
| 203 | + <span class="result-item-label">{formatResultFileLabel(resultFile.name)}</span> |
200 | 204 | </button> |
201 | 205 | {/each} |
202 | 206 | {:else if selectedResultGroup} |
|
212 | 216 | disabled={!selectedResultFile} |
213 | 217 | on:click={openDeleteFileDialog} |
214 | 218 | > |
| 219 | + <span class="result-delete-icon" aria-hidden="true"></span> |
215 | 220 | Delete File |
216 | 221 | </button> |
217 | 222 | </div> |
|
242 | 247 | <section class="results-summary-dashboard"> |
243 | 248 | <section class="results-summary-card"> |
244 | 249 | <div class="verdict-summary-grid"> |
245 | | - <div class="verdict-summary-header-inline"> |
246 | | - <span class="eyebrow">Verdict Outcomes</span> |
247 | | - <div class="verdict-summary-totals"> |
248 | | - <span class="verdict-total verdict-total-ok">{resultSummary.okCount} OK</span> |
249 | | - <span class="verdict-total verdict-total-failed">{resultSummary.failedVerdictCount} FAILED</span> |
| 250 | + <div class="results-summary-hero"> |
| 251 | + <article class="results-summary-total-card"> |
| 252 | + <span class="results-summary-icon">Summary</span> |
| 253 | + <div> |
| 254 | + <strong>{totalVerdictOutcomeCount}</strong> |
| 255 | + <span>Total Outcomes</span> |
| 256 | + </div> |
| 257 | + </article> |
| 258 | + <article class="verdict-total verdict-total-ok"> |
| 259 | + <strong>{resultSummary.okCount} OK</strong> |
| 260 | + <span>{((resultSummary.okCount / totalOutcomeCount) * 100).toFixed(1)}%</span> |
| 261 | + </article> |
| 262 | + <article class="verdict-total verdict-total-failed"> |
| 263 | + <strong>{resultSummary.failedVerdictCount} FAILED</strong> |
| 264 | + <span>{((resultSummary.failedVerdictCount / totalOutcomeCount) * 100).toFixed(1)}%</span> |
| 265 | + </article> |
| 266 | + <div class="verdict-outcome-track" aria-hidden="true"> |
| 267 | + <div |
| 268 | + class="verdict-outcome-segment verdict-outcome-segment-ok" |
| 269 | + style={`width: ${(resultSummary.okCount / totalOutcomeCount) * 100}%`} |
| 270 | + ></div> |
| 271 | + <div |
| 272 | + class="verdict-outcome-segment verdict-outcome-segment-failed" |
| 273 | + style={`width: ${(resultSummary.failedVerdictCount / totalOutcomeCount) * 100}%`} |
| 274 | + ></div> |
250 | 275 | </div> |
251 | 276 | </div> |
252 | 277 |
|
253 | | - <div class="verdict-outcome-track" aria-hidden="true"> |
254 | | - <div |
255 | | - class="verdict-outcome-segment verdict-outcome-segment-ok" |
256 | | - style={`width: ${(resultSummary.okCount / totalOutcomeCount) * 100}%`} |
257 | | - ></div> |
258 | | - <div |
259 | | - class="verdict-outcome-segment verdict-outcome-segment-failed" |
260 | | - style={`width: ${(resultSummary.failedVerdictCount / totalOutcomeCount) * 100}%`} |
261 | | - ></div> |
| 278 | + <div class="verdict-summary-header-inline"> |
| 279 | + <span class="eyebrow">Verdict Outcomes</span> |
262 | 280 | </div> |
263 | 281 |
|
264 | 282 | {#if resultSummary.verdictGroups.length > 0} |
265 | 283 | <div class="verdict-types-scroll"> |
266 | 284 | {#each resultSummary.verdictGroups as verdictGroup} |
267 | 285 | <article class="verdict-type-row"> |
| 286 | + <span class="verdict-type-icon" style={`background: ${verdictGroup.color};`}>!</span> |
268 | 287 | <div class="verdict-summary-copy"> |
269 | 288 | <span class="verdict-summary-label">{verdictGroup.label}</span> |
270 | | - <strong>{verdictGroup.count}</strong> |
271 | 289 | </div> |
272 | 290 | <div class="verdict-summary-bar-track"> |
273 | 291 | <div |
274 | 292 | class="verdict-summary-bar" |
275 | 293 | style={`width: ${(verdictGroup.count / maxVerdictCount) * 100}%; background: linear-gradient(90deg, ${verdictGroup.color}, ${verdictGroup.color});`} |
276 | 294 | ></div> |
277 | 295 | </div> |
| 296 | + <strong class="verdict-type-count">{verdictGroup.count}</strong> |
| 297 | + <span class="verdict-type-percent">{((verdictGroup.count / totalOutcomeCount) * 100).toFixed(1)}%</span> |
278 | 298 | </article> |
279 | 299 | {/each} |
280 | 300 | </div> |
|
283 | 303 | {/if} |
284 | 304 | </div> |
285 | 305 | </section> |
286 | | - <section class="results-run-metadata"> |
287 | | - <article> |
288 | | - <span class="eyebrow">Selected Run</span> |
289 | | - <strong>{selectedResultGroup.name}</strong> |
290 | | - </article> |
291 | | - <article> |
292 | | - <span class="eyebrow">Generated Verdict Files</span> |
293 | | - <strong>{selectedResultGroup.files?.length || 0}</strong> |
294 | | - </article> |
295 | | - <article> |
296 | | - <span class="eyebrow">Sequences</span> |
297 | | - <strong>{selectedResultGroup.totalSequenceCount || selectedResultGroup.files?.length || 0}</strong> |
298 | | - </article> |
299 | | - </section> |
300 | 306 | </section> |
301 | 307 | {:else} |
302 | 308 | <div class="composition-modal-empty results-empty-state"> |
|
0 commit comments