11<script setup lang="ts">
22import type { File , Task } from ' @vitest/runner'
3- import { useResizeObserver } from ' @vueuse/core'
43import { hideAllPoppers } from ' floating-vue'
54import { computed , ref } from ' vue'
65
@@ -28,6 +27,14 @@ const emit = defineEmits<{
2827}>()
2928
3029const includeTaskLocation = computed (() => config .value .includeTaskLocation )
30+ const slowTime = computed (() => {
31+ const threshold = config .value .slowTestThreshold
32+ if (typeof threshold === ' number' ) {
33+ return ` (>${threshold }ms) `
34+ }
35+
36+ return ' '
37+ })
3138
3239const searchBox = ref <HTMLInputElement | undefined >()
3340const selectProjectRef = ref <HTMLSelectElement | undefined >()
@@ -56,25 +63,10 @@ const {
5663 disableClearProjectSort,
5764 searchMatcher,
5865} = useSearch (searchBox , selectProjectRef , sortProjectRef )
59-
60- const filterClass = ref <string >(' grid-cols-2' )
61- const filterHeaderClass = ref <string >(' grid-col-span-2' )
62-
63- const testExplorerRef = ref <HTMLElement | undefined >()
64- useResizeObserver (() => testExplorerRef .value , ([{ contentRect }]) => {
65- if (contentRect .width < 420 ) {
66- filterClass .value = ' grid-cols-2'
67- filterHeaderClass .value = ' grid-col-span-2'
68- }
69- else {
70- filterClass .value = ' grid-cols-4'
71- filterHeaderClass .value = ' grid-col-span-4'
72- }
73- })
7466 </script >
7567
7668<template >
77- <div ref = " testExplorerRef " h =" full" flex =" ~ col" >
69+ <div h =" full" flex =" ~ col" >
7870 <div >
7971 <div p =" 2" h-10 flex =" ~ gap-2" items-center bg-header border =" b base" >
8072 <slot name =" header" :filtered-files =" isFiltered || isFilteredByStatus ? filteredFiles : undefined" />
@@ -222,18 +214,17 @@ useResizeObserver(() => testExplorerRef.value, ([{ contentRect }]) => {
222214 items-center
223215 bg-header
224216 border =" b-2 base"
225- grid =" ~ items-center gap-x-2 rows-[auto_auto]"
226- :class =" filterClass"
217+ flex =" ~ wrap gap-x-4 justify-between"
227218 >
228- <div :class = " filterHeaderClass " flex =" ~ gap-2 items-center" >
229- <div aria-hidden =" true" class =" i-carbon:filter" />
219+ <div min-w-full flex =" ~ gap-2 items-center" >
220+ <div aria-hidden =" true" class =" i-carbon:filter" flex-shrink-0 />
230221 <div flex-grow-1 text-sm >
231222 Filter
232223 </div >
233224 <IconButton
234225 v-tooltip.bottom =" 'Clear Filter'"
235226 :disabled =" disableFilter"
236- title =" Clear search "
227+ title =" Clear filter "
237228 icon =" i-carbon:filter-remove"
238229 @click.passive =" clearFilter(false)"
239230 />
@@ -242,24 +233,25 @@ useResizeObserver(() => testExplorerRef.value, ([{ contentRect }]) => {
242233 <FilterStatus v-model =" filter.success" label =" Pass" />
243234 <FilterStatus v-model =" filter.skipped" label =" Skip" />
244235 <FilterStatus v-model =" filter.onlyTests" label =" Only Tests" />
236+ <FilterStatus v-model =" filter.slow" :label =" `Slow${slowTime}`" />
245237 </div >
246238 </div >
247239 <div class =" scrolls" flex-auto py-1 @scroll.passive =" hideAllPoppers" >
248240 <ResultsPanel >
249241 <template v-if =" initialized " #summary >
250242 <div grid =" ~ items-center gap-x-1 cols-[auto_min-content_auto] rows-[min-content_min-content]" >
251- <span text-red5 >
243+ <span text-red-700 dark:text-red-500 >
252244 FAIL ({{ testsTotal.failed }})
253245 </span >
254246 <span >/</span >
255- <span text-yellow5 >
247+ <span text-yellow-700 dark:text-yellow-500 >
256248 RUNNING ({{ testsTotal.running }})
257249 </span >
258- <span text-green5 >
250+ <span text-green-700 dark:text-green-500 >
259251 PASS ({{ testsTotal.success }})
260252 </span >
261253 <span >/</span >
262- <span class =" text-purple5:50 " >
254+ <span class =" text-purple-700 dark:text-purple-400 " >
263255 SKIP ({{ filter.onlyTests ? testsTotal.skipped : '--' }})
264256 </span >
265257 </div >
@@ -343,6 +335,7 @@ useResizeObserver(() => testExplorerRef.value, ([{ contentRect }]) => {
343335 :project-name-color =" item.projectNameColor ?? ''"
344336 :state =" item.state"
345337 :duration =" item.duration"
338+ :slow =" item.slow === true"
346339 :opened =" item.expanded"
347340 :disable-task-location =" !includeTaskLocation"
348341 :class =" selectedTest === item.id || (!selectedTest && activeFileId === item.id) ? 'bg-active' : ''"
0 commit comments