11<script  setup lang="ts">
22import  { ofetch  } from  " ofetch" 
33import  type  { SelectButtonPassThroughMethodOptions  } from  " primevue" 
4- import  { URL_MERGE_DIFF , MergeKaniColumns , multiSort , type  VecMergeHashKaniList , FILTERS , ProofKind , optionsProofKind  } from  " ~/shared/utils/kani" 
4+ import  { URL_MERGE_DIFF , MergeKaniColumns , multiSort , type  VecMergeHashKaniList , type   MergeHashKaniList ,  FILTERS , ProofKind , optionsProofKind  } from  " ~/shared/utils/kani" 
55import  { useDarkStore , useStyleStore  } from  " ~/stores/style" 
66
77//  Compute absolute scrollHeight for DataTable.
@@ -79,6 +79,15 @@ watch([selectedMods, selectedProofKind], ([mods, proofs]) => {
7979  data .value  =  v ; 
8080}); 
8181
82+ const =  ref (false );
83+ const =  ref <MergeHashKaniList  |  null >(null );
84+ watch (selectedHarness , val  =>  {
85+   if  (val  ===  null ) { visible .value  =  false ; return  } 
86+ 
87+   visible .value  =  true ; 
88+ }); 
89+ 
90+ 
8291//  Set title
8392useHead ({ title: " Verify Rust Std - Kani" 
8493script >
@@ -88,7 +97,8 @@ useHead({ title: "Verify Rust Std - Kani" });
8897  <DataTable  :value =" data" paginator  :rows =" 5" :rowsPerPageOptions =" [5, 10, 20, 50]" sortMode =" multiple" removableSort 
8998    v-model:multi-sort-meta =" multiSort" stripedRows  :tableStyle =" { width: `${Math.round(viewportWidth - 10)}px` }" 
9099    tableClass =" p-1" :scrollHeight =" `${Math.round(viewportHeight * 0.78)}px`" v-model:filters =" filters" 
91-     :globalFilterFields =" FILTERS.fields" @value-change =" valueChange" 
100+     :globalFilterFields =" FILTERS.fields" @value-change =" valueChange" selectionMode =" single" 
101+     v-model:selection =" selectedHarness" 
92102
93103    <template  #header >
94104      <div  class =" flex justify-between items-center" 
@@ -150,6 +160,38 @@ useHead({ title: "Verify Rust Std - Kani" });
150160      </div >
151161    </template >
152162  </DataTable >
163+ 
164+ 
165+   <Dialog  v-model:visible =" visible" modal  header =" Kani Harness" :style =" { width: '75%' }" 
166+     <div  class =" grid grid-cols-2 gap-4 justify-center" 
167+       <div >
168+         <Card  class =" border border-sky-300" 
169+           <template  #content >
170+             <div > Harness Name:
171+               <Tag  severity =" info" :value =" selectedHarness?.harness" 
172+             </div >
173+             <div > Harness File: {{ selectedHarness?.file }}</div >
174+             <div > Harness Hash: {{ selectedHarness?.hash }}</div >
175+             <div > Proof Kind: {{ selectedHarness?.proof_kind }}</div >
176+             <div > Total Properties: {{ selectedHarness?.props }}</div >
177+             <div > Execution Time: {{ selectedHarness?.time }}ms</div >
178+           </template >
179+         </Card >
180+       </div >
181+ 
182+       <div >
183+         <Card  class =" border border-sky-300" 
184+           <template  #content >
185+             <div > Verified Function:
186+               <Tag  severity =" info" :value =" selectedHarness?.func.name" 
187+             </div >
188+             <div > Function File: {{ selectedHarness?.func.file }}</div >
189+             <div > Safeness: {{ selectedHarness?.func.safe }}</div >
190+           </template >
191+         </Card >
192+       </div >
193+     </div >
194+   </Dialog >
153195</template >
154196
155197<style  lang="css" scoped>
0 commit comments