@thehammer/template-verification 0.2.5 → 0.2.7

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.
@@ -1,8 +1,8 @@
1
- import { ref as R, watch as pe, defineComponent as G, computed as d, openBlock as l, createElementBlock as i, normalizeClass as A, createElementVNode as r, toDisplayString as m, createCommentVNode as b, createBlock as U, unref as s, withCtx as I, createTextVNode as T, createVNode as D, Fragment as L, renderList as B, withKeys as Re, withModifiers as ne, renderSlot as Ae, withDirectives as Le, isRef as ye, vModelCheckbox as je } from "vue";
2
- import { DanxChip as Y, CodeViewer as be, useToast as ke, DanxDialog as ue, DanxProgressBar as $e, DanxAlert as he, DanxTabs as Ee, MarkdownEditor as ze, DanxFileViewer as _e, DanxButton as oe, DanxInput as Pe, DanxSkeleton as Se, DanxTooltip as Me, DanxIcon as Be, gearIcon as Fe, DanxBadge as qe, DanxToastContainer as Ye } from "@thehammer/danx-ui";
3
- const E = "tv-chrome", Ce = "template-verification:enabled";
4
- let se = null;
5
- function Je(e) {
1
+ import { ref as z, watch as ae, defineComponent as W, computed as v, openBlock as a, createElementBlock as s, normalizeClass as R, createElementVNode as o, toDisplayString as i, createCommentVNode as f, createBlock as T, unref as r, withCtx as q, createTextVNode as E, createVNode as D, Fragment as M, renderList as F, onBeforeUnmount as Ge, withKeys as Qe, withModifiers as ve, renderSlot as We, withDirectives as Xe, isRef as De, vModelCheckbox as Ze } from "vue";
2
+ import { DanxChip as K, CodeViewer as Ie, DanxFile as et, DanxButton as ie, DanxAccordion as Ae, DanxDialog as he, DanxFileViewer as tt, DanxAlert as ge, DanxTooltip as be, MarkdownEditor as at, useToast as Pe, DanxProgressBar as ze, DanxTabs as nt, DanxInput as lt, DanxSkeleton as Re, DanxIcon as st, gearIcon as ot, DanxBadge as it, DanxToastContainer as rt } from "@thehammer/danx-ui";
3
+ const Q = "tv-chrome", Ue = "template-verification:enabled";
4
+ let fe = null;
5
+ function ut(e) {
6
6
  var t;
7
7
  try {
8
8
  return ((t = globalThis.localStorage) == null ? void 0 : t.getItem(e)) ?? null;
@@ -10,22 +10,22 @@ function Je(e) {
10
10
  return null;
11
11
  }
12
12
  }
13
- function Ke(e, t) {
14
- var a;
13
+ function dt(e, t) {
14
+ var n;
15
15
  try {
16
- (a = globalThis.localStorage) == null || a.setItem(e, t);
16
+ (n = globalThis.localStorage) == null || n.setItem(e, t);
17
17
  } catch {
18
18
  }
19
19
  }
20
- function He(e) {
21
- const t = Je(Ce);
20
+ function ct(e) {
21
+ const t = ut(Ue);
22
22
  return t === null ? e : t === "true";
23
23
  }
24
- function Ve(e) {
25
- const t = R(He((e == null ? void 0 : e.defaultEnabled) ?? !1));
26
- return pe(
24
+ function je(e) {
25
+ const t = z(ct((e == null ? void 0 : e.defaultEnabled) ?? !1));
26
+ return ae(
27
27
  t,
28
- (a) => Ke(Ce, a ? "true" : "false")
28
+ (n) => dt(Ue, n ? "true" : "false")
29
29
  ), {
30
30
  enabled: t,
31
31
  data: (e == null ? void 0 : e.data) ?? {},
@@ -33,17 +33,17 @@ function Ve(e) {
33
33
  workflowInputId: e == null ? void 0 : e.workflowInputId,
34
34
  auditUrl: e == null ? void 0 : e.auditUrl,
35
35
  loading: (e == null ? void 0 : e.loading) ?? !1,
36
- comparisonOpen: R(!1)
36
+ comparisonOpen: z(!1)
37
37
  };
38
38
  }
39
- function De() {
40
- return se || (se = Ve()), se;
39
+ function Me() {
40
+ return fe || (fe = je()), fe;
41
41
  }
42
- function ha(e) {
43
- se = Ve(e);
42
+ function Pn(e) {
43
+ fe = je(e);
44
44
  }
45
- function ie() {
46
- const e = De();
45
+ function me() {
46
+ const e = Me();
47
47
  return {
48
48
  enabled: e.enabled,
49
49
  data: e.data,
@@ -56,141 +56,138 @@ function ie() {
56
56
  }
57
57
  };
58
58
  }
59
- function Ge() {
60
- return De().comparisonOpen;
59
+ function vt() {
60
+ return Me().comparisonOpen;
61
61
  }
62
- function me(e) {
62
+ function we(e) {
63
63
  return typeof e != "number" || Number.isNaN(e) ? "unverifiable" : e <= 2 ? "low" : e === 3 ? "medium" : "high";
64
64
  }
65
- const Qe = {
65
+ const ft = {
66
66
  high: "bg-green-50 text-green-700 ring-1 ring-inset ring-green-600/20",
67
67
  medium: "bg-yellow-50 text-yellow-700 ring-1 ring-inset ring-yellow-600/20",
68
68
  low: "bg-red-50 text-red-700 ring-1 ring-inset ring-red-600/20",
69
- unverifiable: "bg-gray-50 text-gray-500 ring-1 ring-inset ring-gray-400/20"
70
- }, re = {
69
+ unverifiable: "bg-gray-50 text-gray-500 ring-1 ring-inset ring-gray-400/20",
70
+ // Same red family as 'low' (color-family-per-status is load-bearing, see docblock
71
+ // above) but a visibly darker/more saturated shade so the two stay distinguishable.
72
+ failed: "bg-red-100 text-red-800 ring-1 ring-inset ring-red-700/30"
73
+ }, G = {
71
74
  high: "High",
72
75
  medium: "Medium",
73
76
  low: "Low",
74
- unverifiable: "Unverifiable"
75
- }, Oe = ["override", "extracted", "claim"];
76
- function ge(e) {
77
- return e ? e.resolved && e.resolved.source && e.resolved.source !== "none" ? e.resolved : We(e.candidates) : { value: null, source: "none" };
77
+ unverifiable: "Unverifiable",
78
+ failed: "Failed"
79
+ }, Be = ["override", "extracted", "claim"];
80
+ function _e(e) {
81
+ return e ? e.resolved && e.resolved.source && e.resolved.source !== "none" ? e.resolved : gt(e.candidates) : { value: null, source: "none" };
78
82
  }
79
- function We(e) {
83
+ function gt(e) {
80
84
  if (e)
81
- for (const t of Oe) {
82
- const a = e[t];
83
- if (a != null)
84
- return { value: a.value, source: t };
85
+ for (const t of Be) {
86
+ const n = e[t];
87
+ if (n != null)
88
+ return { value: n.value, source: t };
85
89
  }
86
90
  return { value: null, source: "none" };
87
91
  }
88
- function de(e) {
89
- var g, x;
90
- const t = (x = (g = e == null ? void 0 : e.candidates) == null ? void 0 : g.extracted) == null ? void 0 : x.reasoning;
91
- if (t == null) return null;
92
- const a = String(t).trim();
93
- return a === "" ? null : a;
94
- }
95
- function ce(e) {
96
- var g, x;
97
- const t = (x = (g = e == null ? void 0 : e.candidates) == null ? void 0 : g.extracted) == null ? void 0 : x.cited_text;
92
+ function pe(e) {
93
+ var _, h;
94
+ const t = (h = (_ = e == null ? void 0 : e.candidates) == null ? void 0 : _.extracted) == null ? void 0 : h.reasoning;
98
95
  if (t == null) return null;
99
- const a = String(t).trim();
100
- return a === "" ? null : a;
96
+ const n = String(t).trim();
97
+ return n === "" ? null : n;
101
98
  }
102
- function Ie(e) {
103
- return e ? typeof e.discrepancy == "boolean" ? e.discrepancy : Xe(e.candidates) : !1;
99
+ function Fe(e) {
100
+ return e ? typeof e.discrepancy == "boolean" ? e.discrepancy : mt(e.candidates) : !1;
104
101
  }
105
- function Xe(e) {
102
+ function mt(e) {
106
103
  if (!e) return !1;
107
- const t = Oe.map((a) => e[a]).filter((a) => a != null).map((a) => Ze(a.value));
104
+ const t = Be.map((n) => e[n]).filter((n) => n != null).map((n) => pt(n.value));
108
105
  return t.length < 2 ? !1 : new Set(t).size > 1;
109
106
  }
110
- function Ze(e) {
107
+ function pt(e) {
111
108
  return JSON.stringify(e ?? null);
112
109
  }
113
- const et = /* @__PURE__ */ new Set(["name", "type"]);
114
- function Te(e, t = "") {
115
- const a = [];
116
- return ve(e, t, a), a;
110
+ const xt = /* @__PURE__ */ new Set(["name", "type"]);
111
+ function ke(e, t = "") {
112
+ const n = [];
113
+ return xe(e, t, n), n;
117
114
  }
118
- function ve(e, t, a) {
115
+ function xe(e, t, n) {
119
116
  if (Array.isArray(e)) {
120
- e.forEach((o, c) => ve(o, `${t}[${c}]`, a));
117
+ e.forEach((g, u) => xe(g, `${t}[${u}]`, n));
121
118
  return;
122
119
  }
123
- if (!we(e)) return;
124
- const x = e.__meta ?? {};
125
- for (const [o, c] of Object.entries(e)) {
126
- if (o === "__meta") continue;
127
- const n = t ? `${t}.${o}` : o;
128
- if (Array.isArray(c) || we(c)) {
129
- ve(c, n, a);
120
+ if (!Oe(e)) return;
121
+ const h = e.__meta ?? {};
122
+ for (const [g, u] of Object.entries(e)) {
123
+ if (g === "__meta") continue;
124
+ const l = t ? `${t}.${g}` : g;
125
+ if (Array.isArray(u) || Oe(u)) {
126
+ xe(u, l, n);
130
127
  continue;
131
128
  }
132
- const w = x[o];
133
- !w && et.has(o) || a.push({
134
- path: n,
135
- label: o,
136
- meta: w ?? null,
137
- value: c,
138
- unanchored: !w
129
+ const k = h[g];
130
+ !k && xt.has(g) || n.push({
131
+ path: l,
132
+ label: g,
133
+ meta: k ?? null,
134
+ value: u,
135
+ unanchored: !k
139
136
  });
140
137
  }
141
138
  }
142
- function we(e) {
139
+ function Oe(e) {
143
140
  return typeof e == "object" && e !== null && !Array.isArray(e);
144
141
  }
145
- function Ue(e) {
146
- var a;
142
+ function Ye(e) {
143
+ var n;
147
144
  if (e.candidates.override) return !1;
148
- const t = (a = e.candidates.extracted) == null ? void 0 : a.confidence;
145
+ const t = (n = e.candidates.extracted) == null ? void 0 : n.confidence;
149
146
  return e.discrepancy || t == null || t <= 2;
150
147
  }
151
- function tt(e) {
152
- const t = Te(e).filter(
153
- (o) => o.meta !== null
154
- ), a = t.length;
155
- let g = 0, x = 0;
156
- for (const o of t) {
157
- if (o.meta.candidates.override) {
158
- g++;
148
+ function yt(e) {
149
+ const t = ke(e).filter(
150
+ (g) => g.meta !== null
151
+ ), n = t.length;
152
+ let _ = 0, h = 0;
153
+ for (const g of t) {
154
+ if (g.meta.candidates.override) {
155
+ _++;
159
156
  continue;
160
157
  }
161
- Ue(o.meta) && x++;
158
+ Ye(g.meta) && h++;
162
159
  }
163
160
  return {
164
- total: a,
165
- verified: g,
166
- needsReview: x,
167
- percent: a === 0 ? 100 : Math.round(g / a * 100)
161
+ total: n,
162
+ verified: _,
163
+ needsReview: h,
164
+ percent: n === 0 ? 100 : Math.round(_ / n * 100)
168
165
  };
169
166
  }
170
- function at(e, t, a) {
171
- var o;
172
- const g = (o = t.value) == null ? void 0 : o.anchor;
173
- if (!e.saveOverride || !g) return null;
174
- const x = e.saveOverride;
175
- return async (c, n) => {
176
- const w = await x({
167
+ function ht(e, t, n) {
168
+ var g;
169
+ const _ = (g = t.value) == null ? void 0 : g.anchor;
170
+ if (!e.saveOverride || !_) return null;
171
+ const h = e.saveOverride;
172
+ return async (u, l) => {
173
+ const k = await h({
177
174
  workflow_input_id: e.workflowInputId,
178
- object_ids: g.object_ids,
179
- field: g.field,
180
- field_path: g.field_path,
181
- value: c,
182
- source_choice: n
175
+ object_ids: _.object_ids,
176
+ field: _.field,
177
+ field_path: _.field_path,
178
+ value: u,
179
+ source_choice: l
183
180
  });
184
- return a(w), w;
181
+ return n(k), k;
185
182
  };
186
183
  }
187
- const lt = ["data-status", "title"], nt = {
184
+ const bt = ["data-status", "title"], wt = {
188
185
  class: "tv-confidence-glyph",
189
186
  "aria-hidden": "true"
190
- }, st = {
187
+ }, _t = {
191
188
  key: 0,
192
189
  class: "tv-confidence-label"
193
- }, fe = /* @__PURE__ */ G({
190
+ }, ye = /* @__PURE__ */ W({
194
191
  __name: "ConfidenceIcon",
195
192
  props: {
196
193
  confidence: {},
@@ -198,160 +195,232 @@ const lt = ["data-status", "title"], nt = {
198
195
  showLabel: { type: Boolean }
199
196
  },
200
197
  setup(e) {
201
- const t = e, a = d(
202
- () => t.status ?? me(t.confidence)
203
- ), g = {
198
+ const t = e, n = v(
199
+ () => t.status ?? we(t.confidence)
200
+ ), _ = {
204
201
  high: "✔",
205
202
  // check
206
203
  medium: "⚠",
207
204
  // warning triangle
208
205
  low: "✕",
209
206
  // x
210
- unverifiable: "?"
211
- }, x = d(() => g[a.value]), o = d(() => Qe[a.value]), c = d(() => re[a.value]);
212
- return (n, w) => (l(), i("span", {
213
- class: A(["tv-confidence-icon inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-semibold leading-none", o.value]),
214
- "data-status": a.value,
215
- title: c.value
207
+ unverifiable: "?",
208
+ failed: "⊗"
209
+ // circled x — distinct from low's plain x
210
+ }, h = v(() => _[n.value]), g = v(() => ft[n.value]), u = v(() => G[n.value]);
211
+ return (l, k) => (a(), s("span", {
212
+ class: R(["tv-confidence-icon inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[11px] font-semibold leading-none", g.value]),
213
+ "data-status": n.value,
214
+ title: u.value
216
215
  }, [
217
- r("span", nt, m(x.value), 1),
218
- e.showLabel ? (l(), i("span", st, m(c.value), 1)) : b("", !0)
219
- ], 10, lt));
216
+ o("span", wt, i(h.value), 1),
217
+ e.showLabel ? (a(), s("span", _t, i(u.value), 1)) : f("", !0)
218
+ ], 10, bt));
220
219
  }
221
220
  });
222
- async function rt(e, t) {
223
- const a = t.object_ids.at(-1), g = new URLSearchParams({
224
- object_id: String(a),
221
+ async function kt(e, t) {
222
+ const n = t.object_ids.at(-1), _ = new URLSearchParams({
223
+ object_id: String(n),
225
224
  field: t.field
226
- }), x = e.includes("?") ? "&" : "?", o = await fetch(`${e}${x}${g}`);
227
- if (!o.ok)
225
+ }), h = e.includes("?") ? "&" : "?", g = await fetch(`${e}${h}${_}`);
226
+ if (!g.ok)
228
227
  throw new Error(
229
- `data-point-audit ${o.status}: ${await o.text()}`
228
+ `data-point-audit ${g.status}: ${await g.text()}`
230
229
  );
231
- return (await o.json()).data ?? [];
230
+ return (await g.json()).data ?? [];
232
231
  }
233
- function Ne(e) {
234
- var a, g, x;
235
- if (!e || e.length === 0) return [];
236
- const t = /* @__PURE__ */ new Map();
237
- for (const o of e) {
238
- const c = it(o);
239
- let n = t.get(c);
240
- n || (n = {
241
- fileLabel: ot(o),
242
- fileUrl: o.file_url ?? ((a = o.file) == null ? void 0 : a.url),
243
- file: o.file,
244
- sources: []
245
- }, t.set(c, n)), !n.fileUrl && (o.file_url ?? ((g = o.file) == null ? void 0 : g.url)) && (n.fileUrl = o.file_url ?? ((x = o.file) == null ? void 0 : x.url)), !n.file && o.file && (n.file = o.file), n.sources.push(o);
232
+ const $t = "api_log", Ct = "user", St = "failed_file", Vt = {
233
+ pages: [],
234
+ documents: [],
235
+ apiLogIds: [],
236
+ unresolved: [],
237
+ pageCount: 0,
238
+ quoteCount: 0,
239
+ isEmpty: !0
240
+ };
241
+ function oe(e) {
242
+ var u;
243
+ if (!e || e.length === 0) return { ...Vt };
244
+ const t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), _ = [], h = [];
245
+ for (const l of e) {
246
+ if (l.source_type === St) {
247
+ h.push(l);
248
+ continue;
249
+ }
250
+ if (l.api_log_id !== void 0 && l.api_log_id !== null && (_.includes(l.api_log_id) || _.push(l.api_log_id)), l.source_type === $t || l.source_type === Ct || !Nt(l)) continue;
251
+ const k = qt(l);
252
+ let w = t.get(k);
253
+ w || (w = {
254
+ key: k,
255
+ pageNumber: re(l),
256
+ label: "",
257
+ documentName: null,
258
+ file: null,
259
+ url: null,
260
+ document: null,
261
+ quotes: [],
262
+ explanations: [],
263
+ sourceIds: []
264
+ }, t.set(k, w)), !w.file && l.file && (w.file = It(l)), w.url || (w.url = ((u = l.file) == null ? void 0 : u.url) ?? l.file_url ?? null), !w.document && l.original_file && (w.document = l.original_file), w.pageNumber === null && (w.pageNumber = re(l)), l.id !== void 0 && l.id !== null && w.sourceIds.push(l.id);
265
+ for (const N of l.texts ?? []) {
266
+ const I = String(N).trim();
267
+ I && !w.quotes.includes(I) && w.quotes.push(I);
268
+ }
269
+ if (l.explanation) {
270
+ const N = String(l.explanation).trim();
271
+ N && !w.explanations.includes(N) && w.explanations.push(N);
272
+ }
273
+ w.documentName || (w.documentName = Dt(l)), l.original_file && n.set(String(l.original_file.id), l.original_file);
246
274
  }
247
- return [...t.values()];
248
- }
249
- function it(e) {
250
- const t = e.file_name ?? e.file_id ?? e.stored_file_id ?? e.source_id ?? e.id;
251
- return t != null ? String(t) : "__unknown__";
275
+ const g = [...t.values()];
276
+ for (const l of g) l.label = Ot(l);
277
+ return g.sort(Et), {
278
+ pages: g,
279
+ documents: [...n.values()],
280
+ apiLogIds: _,
281
+ unresolved: h,
282
+ pageCount: g.length,
283
+ quoteCount: g.reduce((l, k) => l + k.quotes.length, 0),
284
+ isEmpty: g.length === 0 && h.length === 0
285
+ };
252
286
  }
253
- function ot(e) {
287
+ function Nt(e) {
254
288
  var t;
255
- return (t = e.file) != null && t.name ? e.file.name : e.file_name ? e.file_name : e.file_id !== void 0 && e.file_id !== null ? `File ${e.file_id}` : e.stored_file_id !== void 0 && e.stored_file_id !== null ? `File ${e.stored_file_id}` : e.source_type ? e.source_type : "Source";
289
+ return !!(e.file || e.file_url || e.file_name || e.file_id !== void 0 || e.stored_file_id !== void 0 || re(e) !== null || (((t = e.texts) == null ? void 0 : t.length) ?? 0) > 0);
256
290
  }
257
- function ut(e) {
291
+ function qt(e) {
292
+ var _;
293
+ const t = ((_ = e.file) == null ? void 0 : _.id) ?? e.stored_file_id ?? e.file_id ?? e.file_name, n = re(e);
294
+ return t != null ? n === null ? String(t) : `${t}#${n}` : n !== null ? `page-${n}` : `source-${e.id ?? "unknown"}`;
295
+ }
296
+ function re(e) {
258
297
  const t = e.page ?? e.page_number;
259
- return t != null ? `Page ${t}` : e.explanation ? String(e.explanation) : e.source_type ? String(e.source_type) : "Citation";
298
+ return t == null ? null : Number(t);
260
299
  }
261
- const dt = { class: "tv-audit-call rounded-lg border border-gray-200 shadow-sm" }, ct = { class: "tv-audit-call-header flex flex-wrap items-center gap-2 border-b border-gray-100 bg-gray-50 px-3 py-2" }, vt = {
300
+ function Dt(e) {
301
+ var t;
302
+ return ((t = e.original_file) == null ? void 0 : t.name) ?? e.file_name ?? null;
303
+ }
304
+ function It(e) {
305
+ const t = e.file, n = re(e);
306
+ return n === null || t.page_number != null ? t : { ...t, page_number: n };
307
+ }
308
+ function Ot(e) {
309
+ var t;
310
+ return e.pageNumber !== null ? `Page ${e.pageNumber}` : (t = e.file) != null && t.name ? e.file.name : e.documentName ? e.documentName : "Cited source";
311
+ }
312
+ function Et(e, t) {
313
+ return e.pageNumber === null && t.pageNumber === null ? 0 : e.pageNumber === null ? 1 : t.pageNumber === null ? -1 : e.pageNumber - t.pageNumber;
314
+ }
315
+ function $e(e) {
316
+ if (e.isEmpty) return "No citations recorded";
317
+ const t = [
318
+ `${e.pageCount} ${e.pageCount === 1 ? "page" : "pages"}`
319
+ ];
320
+ return e.quoteCount > 0 && t.push(
321
+ `${e.quoteCount} ${e.quoteCount === 1 ? "quote" : "quotes"}`
322
+ ), e.unresolved.length > 0 && t.push(`${e.unresolved.length} unresolved`), t.join(" · ");
323
+ }
324
+ function Ee(e) {
325
+ typeof window > "u" || !window.top || window.top === window || window.top.postMessage(
326
+ { source: "danxbot-template", type: "nested-viewer-active", active: e },
327
+ "*"
328
+ );
329
+ }
330
+ const Tt = { class: "tv-audit-call rounded-lg border border-gray-200 shadow-sm" }, Lt = { class: "tv-audit-call-header flex flex-wrap items-center gap-2 border-b border-gray-100 bg-gray-50 px-3 py-2" }, At = {
262
331
  key: 3,
263
332
  class: "font-mono text-[11px] text-gray-400"
264
- }, ft = {
333
+ }, Pt = {
265
334
  key: 4,
266
335
  class: "text-[11px] font-medium text-gray-500"
267
- }, pt = {
336
+ }, zt = {
268
337
  key: 5,
269
338
  class: "text-[11px] text-gray-400"
270
- }, mt = { class: "tv-audit-call-body flex flex-col gap-2 p-3" }, gt = /* @__PURE__ */ G({
339
+ }, Rt = { class: "tv-audit-call-body flex flex-col gap-2 p-3" }, Ut = /* @__PURE__ */ W({
271
340
  __name: "AuditCallCard",
272
341
  props: {
273
342
  call: {}
274
343
  },
275
344
  setup(e) {
276
- const t = e, a = d(() => {
277
- const n = t.call.status_code;
278
- return n == null ? "muted" : n >= 200 && n < 300 ? "success" : n >= 400 ? "danger" : "warning";
279
- }), g = d(() => {
280
- const n = t.call.run_time_ms;
281
- return n == null ? null : n >= 1e3 ? `${(n / 1e3).toFixed(1)}s` : `${n}ms`;
282
- }), x = d(() => {
345
+ const t = e, n = v(() => {
346
+ const l = t.call.status_code;
347
+ return l == null ? "muted" : l >= 200 && l < 300 ? "success" : l >= 400 ? "danger" : "warning";
348
+ }), _ = v(() => {
349
+ const l = t.call.run_time_ms;
350
+ return l == null ? null : l >= 1e3 ? `${(l / 1e3).toFixed(1)}s` : `${l}ms`;
351
+ }), h = v(() => {
283
352
  if (!t.call.started_at) return null;
284
- const n = new Date(t.call.started_at);
285
- return Number.isNaN(n.getTime()) ? t.call.started_at : n.toLocaleString();
286
- }), o = d(
353
+ const l = new Date(t.call.started_at);
354
+ return Number.isNaN(l.getTime()) ? t.call.started_at : l.toLocaleString();
355
+ }), g = v(
287
356
  () => JSON.stringify(t.call.request ?? null, null, 2)
288
- ), c = d(
357
+ ), u = v(
289
358
  () => JSON.stringify(t.call.response ?? null, null, 2)
290
359
  );
291
- return (n, w) => (l(), i("div", dt, [
292
- r("div", ct, [
293
- e.call.stage ? (l(), U(s(Y), {
360
+ return (l, k) => (a(), s("div", Tt, [
361
+ o("div", Lt, [
362
+ e.call.stage ? (a(), T(r(K), {
294
363
  key: 0,
295
364
  variant: "muted",
296
365
  size: "xxs",
297
366
  class: "tv-audit-stage"
298
367
  }, {
299
- default: I(() => [
300
- T(m(e.call.stage), 1)
368
+ default: q(() => [
369
+ E(i(e.call.stage), 1)
301
370
  ]),
302
371
  _: 1
303
- })) : b("", !0),
304
- e.call.model ? (l(), U(s(Y), {
372
+ })) : f("", !0),
373
+ e.call.model ? (a(), T(r(K), {
305
374
  key: 1,
306
375
  variant: "info",
307
376
  size: "xs",
308
377
  class: "tv-audit-model"
309
378
  }, {
310
- default: I(() => [
311
- T(m(e.call.model), 1)
379
+ default: q(() => [
380
+ E(i(e.call.model), 1)
312
381
  ]),
313
382
  _: 1
314
- })) : b("", !0),
315
- e.call.service ? (l(), U(s(Y), {
383
+ })) : f("", !0),
384
+ e.call.service ? (a(), T(r(K), {
316
385
  key: 2,
317
386
  variant: "muted",
318
387
  size: "xxs"
319
388
  }, {
320
- default: I(() => [
321
- T(m(e.call.service), 1)
389
+ default: q(() => [
390
+ E(i(e.call.service), 1)
322
391
  ]),
323
392
  _: 1
324
- })) : b("", !0),
325
- e.call.endpoint ? (l(), i("span", vt, m(e.call.endpoint), 1)) : b("", !0),
326
- w[0] || (w[0] = r("span", { class: "flex-1" }, null, -1)),
327
- D(s(Y), {
328
- variant: a.value,
393
+ })) : f("", !0),
394
+ e.call.endpoint ? (a(), s("span", At, i(e.call.endpoint), 1)) : f("", !0),
395
+ k[0] || (k[0] = o("span", { class: "flex-1" }, null, -1)),
396
+ D(r(K), {
397
+ variant: n.value,
329
398
  size: "xxs",
330
399
  class: "tv-audit-status"
331
400
  }, {
332
- default: I(() => [
333
- T(m(e.call.status_code ?? "…"), 1)
401
+ default: q(() => [
402
+ E(i(e.call.status_code ?? "…"), 1)
334
403
  ]),
335
404
  _: 1
336
405
  }, 8, ["variant"]),
337
- g.value ? (l(), i("span", ft, m(g.value), 1)) : b("", !0),
338
- x.value ? (l(), i("span", pt, m(x.value), 1)) : b("", !0)
406
+ _.value ? (a(), s("span", Pt, i(_.value), 1)) : f("", !0),
407
+ h.value ? (a(), s("span", zt, i(h.value), 1)) : f("", !0)
339
408
  ]),
340
- r("div", mt, [
341
- r("div", null, [
342
- w[1] || (w[1] = r("div", { class: "mb-1 text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Request ", -1)),
343
- D(s(be), {
344
- "model-value": o.value,
409
+ o("div", Rt, [
410
+ o("div", null, [
411
+ k[1] || (k[1] = o("div", { class: "mb-1 text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Request ", -1)),
412
+ D(r(Ie), {
413
+ "model-value": g.value,
345
414
  format: "json",
346
415
  collapsible: "",
347
416
  "default-collapsed": "",
348
417
  class: "tv-audit-request"
349
418
  }, null, 8, ["model-value"])
350
419
  ]),
351
- r("div", null, [
352
- w[2] || (w[2] = r("div", { class: "mb-1 text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Response ", -1)),
353
- D(s(be), {
354
- "model-value": c.value,
420
+ o("div", null, [
421
+ k[2] || (k[2] = o("div", { class: "mb-1 text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Response ", -1)),
422
+ D(r(Ie), {
423
+ "model-value": u.value,
355
424
  format: "json",
356
425
  collapsible: "",
357
426
  "default-collapsed": "",
@@ -361,46 +430,411 @@ const dt = { class: "tv-audit-call rounded-lg border border-gray-200 shadow-sm"
361
430
  ])
362
431
  ]));
363
432
  }
364
- }), xt = { class: "tv-modal flex h-full flex-col gap-4 overflow-y-auto p-1" }, yt = { class: "tv-modal-resolved flex flex-col gap-3 rounded-xl border border-gray-200 bg-gradient-to-br from-gray-50 to-white p-4 shadow-sm" }, bt = { class: "flex flex-wrap items-start justify-between gap-4" }, ht = { class: "min-w-0 flex-1" }, _t = { class: "tv-resolved-value mt-1 break-words font-mono text-xl font-semibold leading-snug text-gray-900" }, wt = { class: "mt-1 text-[11px] text-gray-400" }, kt = { class: "tv-resolved-source font-medium text-gray-500" }, $t = { class: "tv-confidence-meter w-56 shrink-0" }, St = { class: "mt-2" }, Ct = {
433
+ }), jt = {
434
+ key: 0,
435
+ class: "tv-citation-thumb shrink-0"
436
+ }, Mt = { class: "tv-citation-quotes flex min-w-0 flex-1 flex-col gap-2" }, Bt = {
437
+ key: 0,
438
+ class: "tv-quote-list flex flex-col gap-2"
439
+ }, Ft = { class: "tv-quote-index mr-1 not-italic text-[10px] font-semibold text-amber-600" }, Yt = {
365
440
  key: 1,
366
- class: "tv-confidence-value text-sm text-gray-400"
367
- }, Vt = {
441
+ class: "tv-quote-empty rounded-md border border-dashed border-gray-200 px-3 py-2 text-xs text-gray-400"
442
+ }, Kt = { class: "tv-citation-actions mt-1 flex flex-wrap items-center gap-2" }, Te = /* @__PURE__ */ W({
443
+ __name: "CitationPage",
444
+ props: {
445
+ page: {},
446
+ dense: { type: Boolean }
447
+ },
448
+ emits: ["view", "document"],
449
+ setup(e, { emit: t }) {
450
+ const n = t;
451
+ return (_, h) => (a(), s("div", {
452
+ class: R(["tv-citation-page flex gap-4", e.dense ? "tv-citation-page-dense" : ""])
453
+ }, [
454
+ e.page.file ? (a(), s("div", jt, [
455
+ D(r(et), {
456
+ file: e.page.file,
457
+ size: e.dense ? "md" : "lg",
458
+ fit: "cover",
459
+ downloadable: "",
460
+ class: "cursor-zoom-in",
461
+ onClick: h[0] || (h[0] = (g) => n("view"))
462
+ }, null, 8, ["file", "size"])
463
+ ])) : f("", !0),
464
+ o("div", Mt, [
465
+ e.page.quotes.length ? (a(), s("ol", Bt, [
466
+ (a(!0), s(M, null, F(e.page.quotes, (g, u) => (a(), s("li", {
467
+ key: u,
468
+ class: "tv-quote rounded-r-md border-l-[3px] border-amber-300 bg-amber-50/60 py-1.5 pl-3 pr-3 text-sm italic leading-relaxed text-gray-700"
469
+ }, [
470
+ o("span", Ft, i(u + 1), 1),
471
+ E("“" + i(g) + "” ", 1)
472
+ ]))), 128))
473
+ ])) : (a(), s("p", Yt, " This page was cited without a verbatim quote — the value was read from the page as a whole. ")),
474
+ (a(!0), s(M, null, F(e.page.explanations, (g, u) => (a(), s("p", {
475
+ key: `x${u}`,
476
+ class: "tv-citation-explanation text-xs text-gray-500"
477
+ }, i(g), 1))), 128)),
478
+ o("div", Kt, [
479
+ e.page.file ? (a(), T(r(ie), {
480
+ key: 0,
481
+ size: "xs",
482
+ variant: "info",
483
+ class: "tv-view-page",
484
+ onClick: h[1] || (h[1] = (g) => n("view"))
485
+ }, {
486
+ default: q(() => [...h[3] || (h[3] = [
487
+ E("View page full screen", -1)
488
+ ])]),
489
+ _: 1
490
+ })) : f("", !0),
491
+ e.page.document ? (a(), T(r(ie), {
492
+ key: 1,
493
+ size: "xs",
494
+ variant: "muted",
495
+ class: "tv-open-document",
496
+ onClick: h[2] || (h[2] = (g) => n("document"))
497
+ }, {
498
+ default: q(() => [
499
+ E("Open " + i(e.page.document.name), 1)
500
+ ]),
501
+ _: 1
502
+ })) : f("", !0)
503
+ ])
504
+ ])
505
+ ], 2));
506
+ }
507
+ }), Ht = { class: "tv-citation-list flex flex-col gap-2" }, Jt = {
508
+ key: 0,
509
+ class: "tv-citation-list-controls flex justify-end"
510
+ }, Gt = { class: "tv-citation-header flex min-w-0 flex-1 items-center gap-3 text-left" }, Qt = ["src", "alt"], Wt = { class: "flex min-w-0 flex-1 flex-col" }, Xt = { class: "flex flex-wrap items-center gap-2" }, Zt = { class: "tv-citation-page-label text-sm font-semibold text-gray-900" }, ea = {
511
+ key: 0,
512
+ class: "tv-citation-document-name truncate text-xs text-gray-400"
513
+ }, ta = {
514
+ key: 0,
515
+ class: "tv-citation-preview truncate text-xs italic text-gray-500"
516
+ }, aa = { class: "tv-citation-header mb-2 flex flex-wrap items-center gap-2" }, na = { class: "tv-citation-page-label text-sm font-semibold text-gray-900" }, la = {
368
517
  key: 0,
369
- class: "tv-tab-evidence flex min-h-0 flex-1 flex-col gap-4"
370
- }, Dt = {
518
+ class: "tv-citation-document-name text-xs text-gray-400"
519
+ }, sa = { class: "tv-page-dialog flex h-full min-h-0 flex-col gap-3 lg:flex-row" }, oa = {
371
520
  key: 0,
372
- class: "tv-reasoning-card rounded-lg border border-gray-200 p-3"
373
- }, Ot = {
521
+ class: "tv-page-dialog-quotes max-h-40 shrink-0 overflow-y-auto rounded-lg border border-gray-200 bg-gray-50 p-3 lg:max-h-none lg:w-80"
522
+ }, ia = { class: "mb-2 text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, ra = { class: "flex flex-col gap-1.5" }, ua = /* @__PURE__ */ W({
523
+ __name: "CitationPageList",
524
+ props: {
525
+ pages: {},
526
+ collapsible: { type: Boolean, default: !0 },
527
+ dense: { type: Boolean, default: !1 }
528
+ },
529
+ setup(e) {
530
+ const t = e, n = v(
531
+ () => t.pages.map((b) => ({ value: b.key, label: b.label }))
532
+ ), _ = z([]);
533
+ ae(
534
+ () => t.pages,
535
+ (b) => {
536
+ _.value = b.length ? [b[0].key] : [];
537
+ },
538
+ { immediate: !0 }
539
+ );
540
+ const h = v(
541
+ () => t.pages.length > 0 && _.value.length === t.pages.length
542
+ );
543
+ function g() {
544
+ _.value = h.value ? [] : t.pages.map((b) => b.key);
545
+ }
546
+ const u = v(
547
+ () => new Map(t.pages.map((b) => [b.key, b]))
548
+ );
549
+ function l(b) {
550
+ const O = b.quotes[0];
551
+ return O ? O.length > 96 ? `${O.slice(0, 96)}…` : O : "";
552
+ }
553
+ const k = v(
554
+ () => t.pages.map((b) => b.file).filter((b) => !!b)
555
+ ), w = z(null), N = z(!1), I = z(null), L = v({
556
+ get: () => w.value !== null,
557
+ set: (b) => {
558
+ b || (w.value = null, I.value = null, N.value = !1);
559
+ }
560
+ }), C = v(
561
+ () => N.value ? [] : k.value
562
+ ), d = v(() => {
563
+ if (N.value) return null;
564
+ const b = I.value ?? w.value;
565
+ return b ? t.pages.find(
566
+ (O) => O.file && String(O.file.id) === String(b.id)
567
+ ) ?? null : null;
568
+ }), m = v(() => {
569
+ if (!w.value) return "";
570
+ if (N.value) return w.value.name;
571
+ const b = d.value;
572
+ return b ? b.documentName ? `${b.label} · ${b.documentName}` : b.label : w.value.name;
573
+ });
574
+ function x(b) {
575
+ b.file && (N.value = !1, I.value = b.file, w.value = b.file);
576
+ }
577
+ function B(b) {
578
+ b.document && (N.value = !0, I.value = null, w.value = b.document);
579
+ }
580
+ return (b, O) => (a(), s("div", Ht, [
581
+ e.collapsible && e.pages.length > 1 ? (a(), s("div", Jt, [
582
+ D(r(ie), {
583
+ size: "xxs",
584
+ variant: "muted",
585
+ class: "tv-toggle-all-pages",
586
+ onClick: g
587
+ }, {
588
+ default: q(() => [
589
+ E(i(h.value ? "Collapse all" : "Expand all"), 1)
590
+ ]),
591
+ _: 1
592
+ })
593
+ ])) : f("", !0),
594
+ e.collapsible ? (a(), T(r(Ae), {
595
+ key: 1,
596
+ modelValue: _.value,
597
+ "onUpdate:modelValue": O[0] || (O[0] = (S) => _.value = S),
598
+ items: n.value,
599
+ multiple: "",
600
+ class: "tv-citation-accordion rounded-lg border border-gray-200"
601
+ }, {
602
+ header: q(({ item: S }) => {
603
+ var j, H, J, Y, X;
604
+ return [
605
+ o("span", Gt, [
606
+ (H = (j = u.value.get(S.value)) == null ? void 0 : j.file) != null && H.url ? (a(), s("img", {
607
+ key: 0,
608
+ src: u.value.get(S.value).file.url,
609
+ alt: u.value.get(S.value).label,
610
+ class: "tv-citation-header-thumb h-10 w-8 shrink-0 rounded border border-gray-200 object-cover",
611
+ loading: "lazy"
612
+ }, null, 8, Qt)) : f("", !0),
613
+ o("span", Wt, [
614
+ o("span", Xt, [
615
+ o("span", Zt, i((J = u.value.get(S.value)) == null ? void 0 : J.label), 1),
616
+ (Y = u.value.get(S.value)) != null && Y.documentName ? (a(), s("span", ea, i((X = u.value.get(S.value)) == null ? void 0 : X.documentName), 1)) : f("", !0),
617
+ D(r(K), {
618
+ variant: "warning",
619
+ size: "xxs",
620
+ class: "tv-citation-quote-count"
621
+ }, {
622
+ default: q(() => {
623
+ var y, V;
624
+ return [
625
+ E(i((y = u.value.get(S.value)) == null ? void 0 : y.quotes.length) + " " + i(((V = u.value.get(S.value)) == null ? void 0 : V.quotes.length) === 1 ? "quote" : "quotes"), 1)
626
+ ];
627
+ }),
628
+ _: 2
629
+ }, 1024)
630
+ ]),
631
+ l(u.value.get(S.value)) ? (a(), s("span", ta, "“" + i(l(u.value.get(S.value))) + "”", 1)) : f("", !0)
632
+ ])
633
+ ])
634
+ ];
635
+ }),
636
+ panel: q(({ item: S }) => [
637
+ D(Te, {
638
+ page: u.value.get(S.value),
639
+ dense: e.dense,
640
+ onView: (j) => x(u.value.get(S.value)),
641
+ onDocument: (j) => B(u.value.get(S.value))
642
+ }, null, 8, ["page", "dense", "onView", "onDocument"])
643
+ ]),
644
+ _: 1
645
+ }, 8, ["modelValue", "items"])) : (a(!0), s(M, { key: 2 }, F(e.pages, (S) => (a(), s("div", {
646
+ key: S.key,
647
+ class: "tv-citation-flat rounded-lg border border-gray-200 p-3"
648
+ }, [
649
+ o("div", aa, [
650
+ o("span", na, i(S.label), 1),
651
+ S.documentName ? (a(), s("span", la, i(S.documentName), 1)) : f("", !0),
652
+ D(r(K), {
653
+ variant: "warning",
654
+ size: "xxs",
655
+ class: "tv-citation-quote-count"
656
+ }, {
657
+ default: q(() => [
658
+ E(i(S.quotes.length) + " " + i(S.quotes.length === 1 ? "quote" : "quotes"), 1)
659
+ ]),
660
+ _: 2
661
+ }, 1024)
662
+ ]),
663
+ D(Te, {
664
+ page: S,
665
+ dense: e.dense,
666
+ onView: (j) => x(S),
667
+ onDocument: (j) => B(S)
668
+ }, null, 8, ["page", "dense", "onView", "onDocument"])
669
+ ]))), 128)),
670
+ w.value ? (a(), T(r(he), {
671
+ key: 3,
672
+ modelValue: L.value,
673
+ "onUpdate:modelValue": O[2] || (O[2] = (S) => L.value = S),
674
+ title: m.value,
675
+ width: 95,
676
+ height: 95,
677
+ "close-x": "",
678
+ class: R(r(Q))
679
+ }, {
680
+ default: q(() => {
681
+ var S;
682
+ return [
683
+ o("div", sa, [
684
+ D(r(tt), {
685
+ file: w.value,
686
+ "file-in-preview": I.value,
687
+ "onUpdate:fileInPreview": O[1] || (O[1] = (j) => I.value = j),
688
+ "related-files": C.value,
689
+ "layout-toggles": ["sidebar", "continuous"],
690
+ downloadable: "",
691
+ zoomable: "",
692
+ "zoom-controls": "",
693
+ "storage-key": "tv-page-viewer",
694
+ class: "tv-page-viewer min-h-[22rem] min-w-0 flex-1"
695
+ }, null, 8, ["file", "file-in-preview", "related-files"]),
696
+ (S = d.value) != null && S.quotes.length ? (a(), s("aside", oa, [
697
+ o("div", ia, " Quoted from " + i(d.value.label), 1),
698
+ o("ol", ra, [
699
+ (a(!0), s(M, null, F(d.value.quotes, (j, H) => (a(), s("li", {
700
+ key: H,
701
+ class: "tv-quote rounded-r-md border-l-[3px] border-amber-300 bg-amber-50/70 py-1.5 pl-3 pr-2 text-sm italic leading-relaxed text-gray-700"
702
+ }, " “" + i(j) + "” ", 1))), 128))
703
+ ])
704
+ ])) : f("", !0)
705
+ ])
706
+ ];
707
+ }),
708
+ _: 1
709
+ }, 8, ["modelValue", "title", "class"])) : f("", !0)
710
+ ]));
711
+ }
712
+ }), da = { class: "tv-evidence flex flex-col gap-4" }, ca = {
713
+ key: 1,
714
+ class: "tv-reasoning-card rounded-lg border border-gray-200 bg-white p-3"
715
+ }, va = { class: "mb-1 flex flex-wrap items-center justify-between gap-2" }, fa = { class: "tv-cited-sources flex min-w-0 flex-col gap-2" }, ga = { class: "flex flex-wrap items-baseline justify-between gap-2" }, ma = { class: "tv-citation-summary text-xs text-gray-500" }, pa = {
374
716
  key: 1,
375
- class: "tv-cited-text rounded-lg border-l-4 border-blue-200 bg-blue-50/50 px-4 py-3 text-sm italic leading-relaxed text-gray-700"
376
- }, It = {
717
+ class: "tv-no-source rounded-lg border border-dashed border-gray-200 p-6 text-center text-sm text-gray-400"
718
+ }, xa = {
377
719
  key: 2,
378
- class: "tv-evidence-viewer flex min-h-[24rem] flex-1 flex-col overflow-hidden rounded-lg border border-gray-200"
379
- }, Tt = {
720
+ class: "tv-llm-provenance text-xs text-gray-400"
721
+ }, ya = { class: "tv-llm-call-ids font-medium text-gray-500" }, Le = /* @__PURE__ */ W({
722
+ __name: "CitationEvidence",
723
+ props: {
724
+ evidence: {},
725
+ reasoning: { default: null },
726
+ basis: { default: null },
727
+ failed: { type: Boolean, default: !1 },
728
+ collapsible: { type: Boolean, default: !0 },
729
+ dense: { type: Boolean, default: !1 }
730
+ },
731
+ setup(e) {
732
+ return (t, n) => (a(), s("div", da, [
733
+ e.failed && e.reasoning ? (a(), T(r(ge), {
734
+ key: 0,
735
+ variant: "danger",
736
+ class: "tv-evidence-failed"
737
+ }, {
738
+ default: q(() => [
739
+ E(i(e.reasoning), 1)
740
+ ]),
741
+ _: 1
742
+ })) : e.reasoning ? (a(), s("section", ca, [
743
+ o("div", va, [
744
+ n[0] || (n[0] = o("div", { class: "text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Why this value ", -1)),
745
+ e.basis ? (a(), T(r(be), {
746
+ key: 0,
747
+ tooltip: e.basis === "inferred" ? "The value was derived from the quotes below — computed, reformatted, or reasoned — rather than appearing as-is." : "The stored value appears word-for-word inside the quotes below, checked against the source document at store time.",
748
+ placement: "top"
749
+ }, {
750
+ trigger: q(() => [
751
+ D(r(K), {
752
+ variant: e.basis === "inferred" ? "muted" : "success",
753
+ size: "xxs",
754
+ class: "tv-basis-chip"
755
+ }, {
756
+ default: q(() => [
757
+ E(i(e.basis === "inferred" ? "inferred from quotes" : "✔ verbatim quote"), 1)
758
+ ]),
759
+ _: 1
760
+ }, 8, ["variant"])
761
+ ]),
762
+ _: 1
763
+ }, 8, ["tooltip"])) : f("", !0)
764
+ ]),
765
+ D(r(at), {
766
+ "model-value": e.reasoning,
767
+ readonly: "",
768
+ "hide-footer": "",
769
+ class: "tv-reasoning"
770
+ }, null, 8, ["model-value"])
771
+ ])) : f("", !0),
772
+ o("section", fa, [
773
+ o("div", ga, [
774
+ n[1] || (n[1] = o("div", { class: "text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Cited sources ", -1)),
775
+ o("div", ma, i(r($e)(e.evidence)), 1)
776
+ ]),
777
+ e.evidence.pages.length ? (a(), T(ua, {
778
+ key: 0,
779
+ pages: e.evidence.pages,
780
+ collapsible: e.collapsible,
781
+ dense: e.dense
782
+ }, null, 8, ["pages", "collapsible", "dense"])) : e.evidence.unresolved.length ? f("", !0) : (a(), s("p", pa, " No source pages recorded for this data point ")),
783
+ e.evidence.unresolved.length ? (a(), T(r(ge), {
784
+ key: 2,
785
+ variant: "warning",
786
+ class: "tv-unresolved-citations"
787
+ }, {
788
+ default: q(() => [
789
+ E(i(e.evidence.unresolved.length) + " " + i(e.evidence.unresolved.length === 1 ? "citation" : "citations") + " could not be matched to a page in the source documents. The value was kept, but this part of its provenance is unverified. ", 1)
790
+ ]),
791
+ _: 1
792
+ })) : f("", !0)
793
+ ]),
794
+ e.evidence.apiLogIds.length ? (a(), s("p", xa, [
795
+ E(" Produced by " + i(e.evidence.apiLogIds.length === 1 ? "LLM call" : "LLM calls") + " ", 1),
796
+ o("span", ya, "#" + i(e.evidence.apiLogIds.join(", #")), 1),
797
+ n[2] || (n[2] = E(" — open the Audit trail tab for the full request and response. ", -1))
798
+ ])) : f("", !0)
799
+ ]));
800
+ }
801
+ }), ha = { class: "tv-modal flex h-full flex-col gap-4 overflow-y-auto p-1" }, ba = { class: "tv-modal-resolved flex flex-col gap-3 rounded-xl border border-gray-200 bg-gradient-to-br from-gray-50 to-white p-4 shadow-sm" }, wa = { class: "flex flex-wrap items-start justify-between gap-4" }, _a = { class: "min-w-0 flex-1" }, ka = { class: "tv-resolved-value mt-1 break-words font-mono text-xl font-semibold leading-snug text-gray-900" }, $a = { class: "mt-1 text-[11px] text-gray-400" }, Ca = { class: "tv-resolved-source font-medium text-gray-500" }, Sa = { class: "tv-confidence-meter w-56 shrink-0" }, Va = { class: "mt-2" }, Na = {
802
+ key: 1,
803
+ class: "tv-confidence-value text-sm text-gray-400"
804
+ }, qa = {
380
805
  key: 0,
381
- class: "tv-page-context border-t border-gray-100 bg-gray-50 px-3 py-2 text-xs text-gray-500"
382
- }, Ut = {
383
- key: 3,
384
- class: "tv-no-source rounded-lg border border-dashed border-gray-200 p-6 text-center text-sm text-gray-400"
385
- }, Nt = {
386
- key: 4,
387
- class: "tv-full-documents flex flex-wrap items-center gap-2"
388
- }, Rt = {
806
+ class: "tv-tab-evidence flex min-h-0 flex-1 flex-col"
807
+ }, Da = {
389
808
  key: 1,
390
809
  class: "tv-tab-candidates flex flex-col gap-3"
391
- }, At = { class: "flex flex-wrap items-center justify-between gap-3" }, Lt = { class: "min-w-0 flex-1" }, jt = { class: "flex items-center gap-2" }, Et = { class: "mt-2 break-words font-mono text-base text-gray-900" }, zt = { class: "mt-1 text-xs text-gray-400" }, Pt = {
810
+ }, Ia = { class: "flex flex-wrap items-center justify-between gap-3" }, Oa = { class: "min-w-0 flex-1" }, Ea = { class: "flex items-center gap-2" }, Ta = { class: "mt-2 break-words font-mono text-base text-gray-900" }, La = { class: "mt-1 text-xs text-gray-400" }, Aa = {
392
811
  key: 0,
393
812
  class: "tv-custom-entry flex items-center gap-2 rounded-lg border border-dashed border-gray-300 p-4"
394
- }, Mt = {
813
+ }, Pa = {
395
814
  key: 1,
396
815
  class: "tv-read-only text-center text-xs text-gray-400"
397
- }, Bt = {
816
+ }, za = {
398
817
  key: 2,
818
+ class: "tv-tab-history flex flex-col gap-4"
819
+ }, Ra = { class: "tv-history-current flex flex-col gap-2 rounded-xl border border-green-200 bg-green-50/40 p-4" }, Ua = { class: "flex flex-wrap items-center justify-between gap-3" }, ja = { class: "flex flex-wrap items-center gap-2" }, Ma = { class: "tv-history-current-value break-words font-mono text-base font-semibold text-gray-900" }, Ba = {
820
+ key: 0,
821
+ class: "tv-history-current-confidence text-xs font-medium text-gray-500"
822
+ }, Fa = {
823
+ key: 1,
824
+ class: "tv-history-current-confidence text-xs text-gray-400"
825
+ }, Ya = {
826
+ key: 0,
827
+ class: "tv-history-current-reasoning text-sm italic leading-relaxed text-gray-600"
828
+ }, Ka = { class: "tv-history-value min-w-0 break-words font-mono text-sm font-semibold text-gray-900" }, Ha = {
829
+ key: 2,
830
+ class: "tv-history-confidence text-xs text-gray-500"
831
+ }, Ja = { class: "tv-history-provenance text-xs text-gray-400" }, Ga = { class: "tv-history-timestamp ml-auto text-xs text-gray-400" }, Qa = {
832
+ key: 3,
399
833
  class: "tv-tab-audit flex flex-col gap-3"
400
- }, Ft = {
834
+ }, Wa = {
401
835
  key: 2,
402
836
  class: "tv-audit-empty rounded-lg border border-dashed border-gray-200 p-6 text-center text-sm text-gray-400"
403
- }, qt = /* @__PURE__ */ G({
837
+ }, Xa = /* @__PURE__ */ W({
404
838
  __name: "VerificationModal",
405
839
  props: {
406
840
  modelValue: { type: Boolean },
@@ -410,391 +844,445 @@ const dt = { class: "tv-audit-call rounded-lg border border-gray-200 shadow-sm"
410
844
  },
411
845
  emits: ["update:modelValue", "saved"],
412
846
  setup(e, { emit: t }) {
413
- const a = e, g = t, x = ie(), o = ke(), c = d({
414
- get: () => a.modelValue,
415
- set: (f) => g("update:modelValue", f)
416
- }), n = d(() => ge(a.meta)), w = d(() => a.meta.candidates.extracted), k = d(() => a.meta.candidates.claim), h = d(() => a.meta.candidates.override), y = d(() => {
417
- var f;
418
- return ((f = w.value) == null ? void 0 : f.confidence) ?? null;
419
- }), $ = d(() => me(y.value)), S = d(() => de(a.meta)), N = d(() => ce(a.meta)), O = d(() => {
420
- var f;
421
- return Ne((f = w.value) == null ? void 0 : f.sources);
422
- }), F = d(() => (a.meta.anchor.field_path || a.label || "Data point").split(".").map(
423
- (u) => u.replace(/\[\d+\]/g, "").replace(/_/g, " ").replace(/^\w/, (C) => C.toUpperCase())
424
- ).join(" › ")), Z = {
847
+ const n = e, _ = t, h = me(), g = Pe(), u = v({
848
+ get: () => n.modelValue,
849
+ set: (c) => _("update:modelValue", c)
850
+ }), l = v(() => _e(n.meta)), k = v(() => n.meta.candidates.extracted), w = v(() => n.meta.candidates.claim), N = v(() => n.meta.candidates.override), I = v(() => {
851
+ var c;
852
+ return ((c = k.value) == null ? void 0 : c.confidence) ?? null;
853
+ }), L = v(() => {
854
+ var c;
855
+ return ((c = k.value) == null ? void 0 : c.state) === "failed" ? "failed" : we(I.value);
856
+ }), C = v(() => pe(n.meta)), d = v(() => {
857
+ var c;
858
+ return oe((c = k.value) == null ? void 0 : c.sources);
859
+ }), m = v(
860
+ () => {
861
+ var c;
862
+ return ((c = k.value) == null ? void 0 : c.history) ?? [];
863
+ }
864
+ ), x = v(() => m.value.length > 0), B = v(() => (n.meta.anchor.field_path || n.label || "Data point").split(".").map(
865
+ (p) => p.replace(/\[\d+\]/g, "").replace(/_/g, " ").replace(/^\w/, (P) => P.toUpperCase())
866
+ ).join(" › ")), b = {
425
867
  high: "success",
426
868
  medium: "warning",
427
869
  low: "danger",
428
- unverifiable: "muted"
429
- }, z = R("evidence"), J = d(() => !!x.auditUrl), ee = d(() => {
430
- var u;
431
- const f = [
870
+ unverifiable: "muted",
871
+ failed: "danger"
872
+ }, O = z("evidence"), S = v(() => !!h.auditUrl), j = v(() => {
873
+ var p;
874
+ const c = [
432
875
  {
433
876
  value: "evidence",
434
- label: "Evidence",
435
- count: O.value.reduce((C, v) => C + v.sources.length, 0)
877
+ label: "Citations",
878
+ count: d.value.pageCount
436
879
  },
437
880
  {
438
881
  value: "candidates",
439
882
  label: "Candidates",
440
- count: _.value.length
883
+ count: H.value.length
441
884
  }
442
885
  ];
443
- return J.value && f.push({
886
+ return x.value && c.push({
887
+ value: "history",
888
+ label: "History",
889
+ count: m.value.length
890
+ }), S.value && c.push({
444
891
  value: "audit",
445
892
  label: "Audit trail",
446
- count: ((u = q.value) == null ? void 0 : u.length) ?? void 0
447
- }), f;
448
- }), P = d(
449
- () => O.value.map((f) => f.file).filter((f) => !!f)
450
- ), K = R(null), Q = d(() => {
451
- const f = K.value ?? P.value[0];
452
- if (!f) return null;
453
- const u = O.value.find(
454
- (v) => v.file && String(v.file.id) === String(f.id)
455
- );
456
- if (!u) return null;
457
- const C = u.sources.find((v) => v.explanation);
458
- return (C == null ? void 0 : C.explanation) ?? null;
459
- }), W = d(() => {
460
- const f = /* @__PURE__ */ new Map();
461
- for (const u of O.value)
462
- for (const C of u.sources) {
463
- const v = C.original_file;
464
- v && !f.has(String(v.id)) && f.set(String(v.id), v);
465
- }
466
- return [...f.values()];
467
- }), M = R(null), p = d({
468
- get: () => M.value !== null,
469
- set: (f) => {
470
- f || (M.value = null);
471
- }
472
- }), _ = d(() => {
473
- const f = [];
474
- return h.value && f.push({
893
+ count: ((p = ee.value) == null ? void 0 : p.length) ?? void 0
894
+ }), c;
895
+ });
896
+ ae(
897
+ u,
898
+ (c) => Ee(c),
899
+ { immediate: !0 }
900
+ ), Ge(() => Ee(!1));
901
+ const H = v(() => {
902
+ const c = [];
903
+ return N.value && c.push({
475
904
  key: "override",
476
905
  title: "Human override",
477
906
  variant: "success",
478
- value: h.value.value,
907
+ value: N.value.value,
479
908
  detail: [
480
- h.value.source_choice ? `basis: ${h.value.source_choice}` : null,
481
- h.value.set_at ? new Date(h.value.set_at).toLocaleString() : null
909
+ N.value.source_choice ? `basis: ${N.value.source_choice}` : null,
910
+ N.value.set_at ? new Date(N.value.set_at).toLocaleString() : null
482
911
  ].filter(Boolean).join(" · "),
483
- winner: n.value.source === "override"
484
- }), w.value && f.push({
912
+ winner: l.value.source === "override"
913
+ }), k.value && c.push({
485
914
  key: "extracted",
486
915
  title: "Extracted",
487
- variant: Z[$.value],
488
- value: w.value.value,
489
- detail: y.value != null ? `Confidence ${y.value}/5 · ${re[$.value]}` : "No confidence recorded",
490
- accept: a.save ? () => {
491
- var u;
492
- return H(X((u = w.value) == null ? void 0 : u.value), "extracted");
916
+ variant: b[L.value],
917
+ value: k.value.value,
918
+ detail: L.value === "failed" ? k.value.reasoning ? `${G.failed}: ${k.value.reasoning}` : G.failed : I.value != null ? `Confidence ${I.value}/5 · ${G[L.value]}` : "No confidence recorded",
919
+ accept: n.save ? () => {
920
+ var p;
921
+ return X(V((p = k.value) == null ? void 0 : p.value), "extracted");
493
922
  } : void 0,
494
- winner: n.value.source === "extracted"
495
- }), k.value && f.push({
923
+ winner: l.value.source === "extracted"
924
+ }), w.value && c.push({
496
925
  key: "claim",
497
926
  title: "Claim",
498
927
  variant: "info",
499
- value: k.value.value,
500
- detail: k.value.claim_set_label ?? "Reference output",
501
- accept: a.save ? () => {
502
- var u;
503
- return H(X((u = k.value) == null ? void 0 : u.value), "claim");
928
+ value: w.value.value,
929
+ detail: w.value.claim_set_label ?? "Reference output",
930
+ accept: n.save ? () => {
931
+ var p;
932
+ return X(V((p = w.value) == null ? void 0 : p.value), "claim");
504
933
  } : void 0,
505
- winner: n.value.source === "claim"
506
- }), f;
507
- }), V = R(""), j = R(!1);
508
- async function H(f, u) {
509
- if (!(!a.save || j.value)) {
510
- j.value = !0;
934
+ winner: l.value.source === "claim"
935
+ }), c;
936
+ }), J = z(""), Y = z(!1);
937
+ async function X(c, p) {
938
+ if (!(!n.save || Y.value)) {
939
+ Y.value = !0;
511
940
  try {
512
- const C = await a.save(f, u);
513
- g("saved", C), o.success(`Verified — ${F.value} locked in`);
514
- } catch (C) {
515
- console.error("template-verification: save failed", C), o.danger(`Could not save ${F.value} — try again`);
941
+ const P = await n.save(c, p);
942
+ _("saved", P), g.success(`Verified — ${B.value} locked in`);
943
+ } catch (P) {
944
+ console.error("template-verification: save failed", P), g.danger(`Could not save ${B.value} — try again`);
516
945
  } finally {
517
- j.value = !1;
946
+ Y.value = !1;
518
947
  }
519
948
  }
520
949
  }
521
- const te = () => H(V.value, "custom");
522
- function X(f) {
523
- return f == null ? null : String(f);
950
+ const y = () => X(J.value, "custom");
951
+ function V(c) {
952
+ return c == null ? null : String(c);
953
+ }
954
+ function A(c) {
955
+ return c == null ? "—" : String(c);
956
+ }
957
+ const Z = (c, p) => String(c.id ?? `attempt-${p}`), ue = v(
958
+ () => m.value.map((c, p) => ({
959
+ value: Z(c, p),
960
+ label: A(c.value)
961
+ }))
962
+ ), te = z([]);
963
+ ae(
964
+ m,
965
+ (c) => {
966
+ const p = c.findIndex(($) => $.is_chosen), P = p === -1 ? c.length - 1 : p;
967
+ te.value = P >= 0 ? [Z(c[P], P)] : [];
968
+ },
969
+ { immediate: !0 }
970
+ );
971
+ const U = v(
972
+ () => new Map(
973
+ m.value.map((c, p) => [Z(c, p), c])
974
+ )
975
+ );
976
+ function Ke(c) {
977
+ return c.created_at ? new Date(c.created_at).toLocaleString() : "—";
978
+ }
979
+ function He(c) {
980
+ return $e(oe(c.sources));
524
981
  }
525
- function xe(f) {
526
- return f == null ? "—" : String(f);
982
+ function Je(c) {
983
+ return c.is_chosen ? null : c.reasoning ?? null;
527
984
  }
528
- const q = R(null), ae = R(!1), le = R(null);
529
- return pe(
530
- [z, c],
531
- async ([f, u]) => {
532
- if (!(f !== "audit" || !u || q.value !== null || ae.value) && x.auditUrl) {
533
- ae.value = !0, le.value = null;
985
+ const ee = z(null), de = z(!1), ce = z(null);
986
+ return ae(
987
+ [O, u],
988
+ async ([c, p]) => {
989
+ if (!(c !== "audit" || !p || ee.value !== null || de.value) && h.auditUrl) {
990
+ de.value = !0, ce.value = null;
534
991
  try {
535
- q.value = await rt(
536
- x.auditUrl,
537
- a.meta.anchor
992
+ ee.value = await kt(
993
+ h.auditUrl,
994
+ n.meta.anchor
538
995
  );
539
- } catch (C) {
540
- le.value = C instanceof Error ? C.message : String(C);
996
+ } catch (P) {
997
+ ce.value = P instanceof Error ? P.message : String(P);
541
998
  } finally {
542
- ae.value = !1;
999
+ de.value = !1;
543
1000
  }
544
1001
  }
545
1002
  },
546
1003
  { immediate: !0 }
547
- ), (f, u) => (l(), i(L, null, [
548
- D(s(ue), {
549
- modelValue: c.value,
550
- "onUpdate:modelValue": u[3] || (u[3] = (C) => c.value = C),
551
- title: F.value,
552
- width: 90,
553
- height: 90,
554
- "close-x": "",
555
- class: A(s(E))
556
- }, {
557
- default: I(() => {
558
- var C;
559
- return [
560
- r("div", xt, [
561
- r("section", yt, [
562
- r("div", bt, [
563
- r("div", ht, [
564
- u[6] || (u[6] = r("div", { class: "text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Resolved value ", -1)),
565
- r("div", _t, m(xe(n.value.value)), 1),
566
- r("div", wt, [
567
- u[5] || (u[5] = T(" source of truth: ", -1)),
568
- r("span", kt, m(n.value.source), 1)
569
- ])
570
- ]),
571
- r("div", $t, [
572
- u[7] || (u[7] = r("div", { class: "text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Extraction confidence ", -1)),
573
- r("div", St, [
574
- y.value != null ? (l(), U(s($e), {
575
- key: 0,
576
- value: y.value,
577
- max: 5,
578
- size: "md",
579
- variant: Z[$.value],
580
- gradient: "",
581
- shimmer: "",
582
- "show-text": "",
583
- "text-position": "beside",
584
- label: `${y.value}/5`
585
- }, null, 8, ["value", "variant", "label"])) : (l(), i("div", Ct, " No confidence recorded "))
586
- ]),
587
- r("div", {
588
- class: A(["tv-confidence-label mt-1 text-right text-xs font-medium", {
589
- "text-green-600": $.value === "high",
590
- "text-yellow-600": $.value === "medium",
591
- "text-red-600": $.value === "low",
592
- "text-gray-400": $.value === "unverifiable"
593
- }])
594
- }, m(s(re)[$.value]), 3)
1004
+ ), (c, p) => (a(), T(r(he), {
1005
+ modelValue: u.value,
1006
+ "onUpdate:modelValue": p[3] || (p[3] = (P) => u.value = P),
1007
+ title: B.value,
1008
+ width: 90,
1009
+ height: 90,
1010
+ "close-x": "",
1011
+ class: R(r(Q))
1012
+ }, {
1013
+ default: q(() => {
1014
+ var P;
1015
+ return [
1016
+ o("div", ha, [
1017
+ o("section", ba, [
1018
+ o("div", wa, [
1019
+ o("div", _a, [
1020
+ p[5] || (p[5] = o("div", { class: "text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Resolved value ", -1)),
1021
+ o("div", ka, i(A(l.value.value)), 1),
1022
+ o("div", $a, [
1023
+ p[4] || (p[4] = E(" source of truth: ", -1)),
1024
+ o("span", Ca, i(l.value.source), 1)
595
1025
  ])
596
1026
  ]),
597
- e.meta.discrepancy ? (l(), U(s(he), {
598
- key: 0,
599
- variant: "warning",
600
- class: "tv-discrepancy"
601
- }, {
602
- default: I(() => [...u[8] || (u[8] = [
603
- T(" Sources disagree on this value — review the candidates and pick a winner. ", -1)
604
- ])]),
605
- _: 1
606
- })) : b("", !0)
607
- ]),
608
- D(s(Ee), {
609
- modelValue: z.value,
610
- "onUpdate:modelValue": u[0] || (u[0] = (v) => z.value = v),
611
- tabs: ee.value,
612
- class: "tv-modal-tabs"
613
- }, null, 8, ["modelValue", "tabs"]),
614
- z.value === "evidence" ? (l(), i("section", Vt, [
615
- S.value ? (l(), i("div", Dt, [
616
- u[9] || (u[9] = r("div", { class: "mb-1 text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Reasoning ", -1)),
617
- D(s(ze), {
618
- "model-value": S.value,
619
- readonly: "",
620
- class: "tv-reasoning"
621
- }, null, 8, ["model-value"])
622
- ])) : b("", !0),
623
- N.value ? (l(), i("blockquote", Ot, [
624
- T(" “" + m(N.value) + "” ", 1),
625
- D(s(Y), {
626
- variant: (C = w.value) != null && C.cited_text_verified ? "success" : "muted",
627
- size: "xxs",
628
- class: "tv-cited-verified ml-2 not-italic"
1027
+ o("div", Sa, [
1028
+ D(r(be), {
1029
+ tooltip: "How certain the AI was when it extracted this value — not whether the quotes in the Citations tab were checked against the source (that tab's own badge says so).",
1030
+ placement: "top"
629
1031
  }, {
630
- default: I(() => {
631
- var v;
632
- return [
633
- T(m((v = w.value) != null && v.cited_text_verified ? "✔ verified in source" : "unverified"), 1)
634
- ];
635
- }),
1032
+ trigger: q(() => [...p[6] || (p[6] = [
1033
+ o("div", { class: "w-fit text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Extraction confidence ", -1)
1034
+ ])]),
636
1035
  _: 1
637
- }, 8, ["variant"])
638
- ])) : b("", !0),
639
- P.value.length ? (l(), i("div", It, [
640
- D(s(_e), {
641
- file: P.value[0],
642
- "file-in-preview": K.value,
643
- "onUpdate:fileInPreview": u[1] || (u[1] = (v) => K.value = v),
644
- "related-files": P.value,
645
- "layout-toggles": ["sidebar", "continuous"],
646
- "default-sidebar": "",
647
- zoomable: "",
648
- "storage-key": "tv-evidence-viewer",
649
- class: "h-full min-h-0 flex-1"
650
- }, null, 8, ["file", "file-in-preview", "related-files"]),
651
- Q.value ? (l(), i("div", Tt, m(Q.value), 1)) : b("", !0)
652
- ])) : (l(), i("div", Ut, " No source pages recorded for this data point ")),
653
- W.value.length ? (l(), i("div", Nt, [
654
- u[10] || (u[10] = r("span", { class: "text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, "Full documents:", -1)),
655
- (l(!0), i(L, null, B(W.value, (v) => (l(), U(s(oe), {
656
- key: String(v.id),
657
- size: "sm",
658
- variant: "info",
659
- class: "tv-open-document",
660
- onClick: (xa) => M.value = v
661
- }, {
662
- default: I(() => [
663
- T(m(v.name), 1)
664
- ]),
665
- _: 2
666
- }, 1032, ["onClick"]))), 128))
667
- ])) : b("", !0)
668
- ])) : b("", !0),
669
- z.value === "candidates" ? (l(), i("section", Rt, [
670
- (l(!0), i(L, null, B(_.value, (v) => (l(), i("div", {
671
- key: v.key,
672
- class: A(["tv-candidate-row rounded-lg border p-4 transition-shadow", [
673
- v.winner ? "border-gray-300 bg-gray-50 shadow-sm" : "border-gray-200",
674
- e.meta.discrepancy && !v.winner ? "tv-candidate-disagrees border-amber-200" : ""
675
- ]])
676
- }, [
677
- r("div", At, [
678
- r("div", Lt, [
679
- r("div", jt, [
680
- D(s(Y), {
681
- variant: v.variant,
682
- size: "xs"
683
- }, {
684
- default: I(() => [
685
- T(m(v.title), 1)
686
- ]),
687
- _: 2
688
- }, 1032, ["variant"]),
689
- v.winner ? (l(), U(s(Y), {
690
- key: 0,
691
- variant: "success",
692
- size: "xxs",
693
- class: "tv-winner-chip"
694
- }, {
695
- default: I(() => [...u[11] || (u[11] = [
696
- T("current value", -1)
697
- ])]),
698
- _: 1
699
- })) : b("", !0)
700
- ]),
701
- r("div", Et, m(xe(v.value)), 1),
702
- r("div", zt, m(v.detail), 1)
703
- ]),
704
- v.accept && !v.winner ? (l(), U(s(oe), {
1036
+ }),
1037
+ o("div", Va, [
1038
+ I.value != null ? (a(), T(r(ze), {
705
1039
  key: 0,
706
- size: "sm",
707
- variant: v.variant,
708
- loading: j.value,
709
- class: A(`tv-accept-${v.key}`),
710
- onClick: v.accept
711
- }, {
712
- default: I(() => [...u[12] || (u[12] = [
713
- T("Accept this value", -1)
714
- ])]),
715
- _: 1
716
- }, 8, ["variant", "loading", "class", "onClick"])) : b("", !0)
717
- ])
718
- ], 2))), 128)),
719
- e.save ? (l(), i("div", Pt, [
720
- D(s(Pe), {
721
- modelValue: V.value,
722
- "onUpdate:modelValue": u[2] || (u[2] = (v) => V.value = v),
723
- size: "sm",
724
- class: "tv-custom-input flex-1",
725
- placeholder: "Type the correct value…",
726
- disabled: j.value
727
- }, null, 8, ["modelValue", "disabled"]),
728
- D(s(oe), {
729
- variant: "success",
1040
+ value: I.value,
1041
+ max: 5,
1042
+ size: "md",
1043
+ variant: b[L.value],
1044
+ gradient: "",
1045
+ shimmer: "",
1046
+ "show-text": "",
1047
+ "text-position": "beside",
1048
+ label: `${I.value}/5`
1049
+ }, null, 8, ["value", "variant", "label"])) : (a(), s("div", Na, " No confidence recorded "))
1050
+ ]),
1051
+ o("div", {
1052
+ class: R(["tv-confidence-label mt-1 text-right text-xs font-medium", {
1053
+ "text-green-600": L.value === "high",
1054
+ "text-yellow-600": L.value === "medium",
1055
+ "text-red-600": L.value === "low",
1056
+ "text-gray-400": L.value === "unverifiable",
1057
+ "text-red-800": L.value === "failed"
1058
+ }])
1059
+ }, i(r(G)[L.value]), 3)
1060
+ ])
1061
+ ]),
1062
+ e.meta.discrepancy ? (a(), T(r(ge), {
1063
+ key: 0,
1064
+ variant: "warning",
1065
+ class: "tv-discrepancy"
1066
+ }, {
1067
+ default: q(() => [...p[7] || (p[7] = [
1068
+ E(" Sources disagree on this value — review the candidates and pick a winner. ", -1)
1069
+ ])]),
1070
+ _: 1
1071
+ })) : f("", !0)
1072
+ ]),
1073
+ D(r(nt), {
1074
+ modelValue: O.value,
1075
+ "onUpdate:modelValue": p[0] || (p[0] = ($) => O.value = $),
1076
+ tabs: j.value,
1077
+ class: "tv-modal-tabs"
1078
+ }, null, 8, ["modelValue", "tabs"]),
1079
+ O.value === "evidence" ? (a(), s("section", qa, [
1080
+ D(Le, {
1081
+ evidence: d.value,
1082
+ reasoning: C.value,
1083
+ basis: (P = k.value) == null ? void 0 : P.basis,
1084
+ failed: L.value === "failed"
1085
+ }, null, 8, ["evidence", "reasoning", "basis", "failed"])
1086
+ ])) : f("", !0),
1087
+ O.value === "candidates" ? (a(), s("section", Da, [
1088
+ (a(!0), s(M, null, F(H.value, ($) => (a(), s("div", {
1089
+ key: $.key,
1090
+ class: R(["tv-candidate-row rounded-lg border p-4 transition-shadow", [
1091
+ $.winner ? "border-gray-300 bg-gray-50 shadow-sm" : "border-gray-200",
1092
+ e.meta.discrepancy && !$.winner ? "tv-candidate-disagrees border-amber-200" : ""
1093
+ ]])
1094
+ }, [
1095
+ o("div", Ia, [
1096
+ o("div", Oa, [
1097
+ o("div", Ea, [
1098
+ D(r(K), {
1099
+ variant: $.variant,
1100
+ size: "xs"
1101
+ }, {
1102
+ default: q(() => [
1103
+ E(i($.title), 1)
1104
+ ]),
1105
+ _: 2
1106
+ }, 1032, ["variant"]),
1107
+ $.winner ? (a(), T(r(K), {
1108
+ key: 0,
1109
+ variant: "success",
1110
+ size: "xxs",
1111
+ class: "tv-winner-chip"
1112
+ }, {
1113
+ default: q(() => [...p[8] || (p[8] = [
1114
+ E("current value", -1)
1115
+ ])]),
1116
+ _: 1
1117
+ })) : f("", !0)
1118
+ ]),
1119
+ o("div", Ta, i(A($.value)), 1),
1120
+ o("div", La, i($.detail), 1)
1121
+ ]),
1122
+ $.accept && !$.winner ? (a(), T(r(ie), {
1123
+ key: 0,
730
1124
  size: "sm",
731
- class: "tv-accept-custom",
732
- loading: j.value,
733
- disabled: !V.value,
734
- onClick: te
1125
+ variant: $.variant,
1126
+ loading: Y.value,
1127
+ class: R(`tv-accept-${$.key}`),
1128
+ onClick: $.accept
735
1129
  }, {
736
- default: I(() => [...u[13] || (u[13] = [
737
- T("Save custom value", -1)
1130
+ default: q(() => [...p[9] || (p[9] = [
1131
+ E("Accept this value", -1)
738
1132
  ])]),
739
1133
  _: 1
740
- }, 8, ["loading", "disabled"])
741
- ])) : (l(), i("div", Mt, " Read-only render — corrections are disabled here "))
742
- ])) : b("", !0),
743
- z.value === "audit" ? (l(), i("section", Bt, [
744
- ae.value ? (l(), i(L, { key: 0 }, B(2, (v) => D(s(Se), {
745
- key: v,
746
- shape: "rounded",
747
- class: "tv-audit-skeleton h-24 w-full"
748
- })), 64)) : le.value ? (l(), U(s(he), {
749
- key: 1,
750
- variant: "danger",
751
- class: "tv-audit-error"
1134
+ }, 8, ["variant", "loading", "class", "onClick"])) : f("", !0)
1135
+ ])
1136
+ ], 2))), 128)),
1137
+ e.save ? (a(), s("div", Aa, [
1138
+ D(r(lt), {
1139
+ modelValue: J.value,
1140
+ "onUpdate:modelValue": p[1] || (p[1] = ($) => J.value = $),
1141
+ size: "sm",
1142
+ class: "tv-custom-input flex-1",
1143
+ placeholder: "Type the correct value…",
1144
+ disabled: Y.value
1145
+ }, null, 8, ["modelValue", "disabled"]),
1146
+ D(r(ie), {
1147
+ variant: "success",
1148
+ size: "sm",
1149
+ class: "tv-accept-custom",
1150
+ loading: Y.value,
1151
+ disabled: !J.value,
1152
+ onClick: y
752
1153
  }, {
753
- default: I(() => [
754
- T(" Could not load the audit trail: " + m(le.value), 1)
755
- ]),
1154
+ default: q(() => [...p[10] || (p[10] = [
1155
+ E("Save custom value", -1)
1156
+ ])]),
756
1157
  _: 1
757
- })) : q.value && q.value.length === 0 ? (l(), i("div", Ft, " No LLM calls recorded for this data point ")) : q.value ? (l(!0), i(L, { key: 3 }, B(q.value, (v) => (l(), U(gt, {
758
- key: String(v.id),
759
- call: v
760
- }, null, 8, ["call"]))), 128)) : b("", !0)
761
- ])) : b("", !0)
762
- ])
763
- ];
764
- }),
765
- _: 1
766
- }, 8, ["modelValue", "title", "class"]),
767
- M.value ? (l(), U(s(ue), {
768
- key: 0,
769
- modelValue: p.value,
770
- "onUpdate:modelValue": u[4] || (u[4] = (C) => p.value = C),
771
- title: M.value.name,
772
- width: 90,
773
- height: 90,
774
- "close-x": "",
775
- class: A(s(E))
776
- }, {
777
- default: I(() => [
778
- D(s(_e), {
779
- file: M.value,
780
- downloadable: "",
781
- zoomable: "",
782
- class: "tv-document-viewer h-full"
783
- }, null, 8, ["file"])
784
- ]),
785
- _: 1
786
- }, 8, ["modelValue", "title", "class"])) : b("", !0)
787
- ], 64));
1158
+ }, 8, ["loading", "disabled"])
1159
+ ])) : (a(), s("div", Pa, " Read-only render — corrections are disabled here "))
1160
+ ])) : f("", !0),
1161
+ O.value === "history" ? (a(), s("section", za, [
1162
+ o("section", Ra, [
1163
+ o("div", Ua, [
1164
+ o("div", ja, [
1165
+ D(r(K), {
1166
+ variant: "success",
1167
+ size: "xxs"
1168
+ }, {
1169
+ default: q(() => [...p[11] || (p[11] = [
1170
+ E("current value", -1)
1171
+ ])]),
1172
+ _: 1
1173
+ }),
1174
+ o("span", Ma, i(A(l.value.value)), 1)
1175
+ ]),
1176
+ I.value != null ? (a(), s("span", Ba, "Confidence " + i(I.value) + "/5 · " + i(r(G)[L.value]), 1)) : (a(), s("span", Fa, i(r(G)[L.value]), 1))
1177
+ ]),
1178
+ C.value ? (a(), s("p", Ya, i(C.value), 1)) : f("", !0)
1179
+ ]),
1180
+ p[13] || (p[13] = o("div", { class: "flex flex-wrap items-baseline justify-between gap-2" }, [
1181
+ o("div", { class: "text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, " Every recorded attempt "),
1182
+ o("div", { class: "text-xs text-gray-400" }, "oldest first")
1183
+ ], -1)),
1184
+ D(r(Ae), {
1185
+ modelValue: te.value,
1186
+ "onUpdate:modelValue": p[2] || (p[2] = ($) => te.value = $),
1187
+ items: ue.value,
1188
+ multiple: "",
1189
+ class: "tv-history-accordion rounded-lg border border-gray-200"
1190
+ }, {
1191
+ header: q(({ item: $ }) => {
1192
+ var ne, le, se, Ce, Se, Ve, Ne;
1193
+ return [
1194
+ o("span", {
1195
+ class: R([
1196
+ "tv-history-row flex min-w-0 flex-1 flex-wrap items-center gap-2 text-left",
1197
+ (ne = U.value.get($.value)) != null && ne.is_chosen ? "tv-history-chosen" : ""
1198
+ ])
1199
+ }, [
1200
+ (le = U.value.get($.value)) != null && le.is_chosen ? (a(), T(r(K), {
1201
+ key: 0,
1202
+ variant: "success",
1203
+ size: "xxs",
1204
+ class: "tv-history-chosen-chip"
1205
+ }, {
1206
+ default: q(() => [...p[12] || (p[12] = [
1207
+ E("chosen", -1)
1208
+ ])]),
1209
+ _: 1
1210
+ })) : f("", !0),
1211
+ o("span", Ka, i(A((se = U.value.get($.value)) == null ? void 0 : se.value)), 1),
1212
+ (Ce = U.value.get($.value)) != null && Ce.state ? (a(), T(r(K), {
1213
+ key: 1,
1214
+ variant: ((Se = U.value.get($.value)) == null ? void 0 : Se.state) === "failed" ? "danger" : "muted",
1215
+ size: "xxs",
1216
+ class: "tv-history-state"
1217
+ }, {
1218
+ default: q(() => {
1219
+ var qe;
1220
+ return [
1221
+ E(i((qe = U.value.get($.value)) == null ? void 0 : qe.state), 1)
1222
+ ];
1223
+ }),
1224
+ _: 2
1225
+ }, 1032, ["variant"])) : f("", !0),
1226
+ ((Ve = U.value.get($.value)) == null ? void 0 : Ve.confidence) != null ? (a(), s("span", Ha, i((Ne = U.value.get($.value)) == null ? void 0 : Ne.confidence) + "/5", 1)) : f("", !0),
1227
+ o("span", Ja, i(He(
1228
+ U.value.get($.value)
1229
+ )), 1),
1230
+ o("span", Ga, i(Ke(U.value.get($.value))), 1)
1231
+ ], 2)
1232
+ ];
1233
+ }),
1234
+ panel: q(({ item: $ }) => {
1235
+ var ne, le, se;
1236
+ return [
1237
+ D(Le, {
1238
+ evidence: r(oe)(
1239
+ (ne = U.value.get($.value)) == null ? void 0 : ne.sources
1240
+ ),
1241
+ reasoning: Je(U.value.get($.value)),
1242
+ basis: (le = U.value.get($.value)) == null ? void 0 : le.basis,
1243
+ failed: ((se = U.value.get($.value)) == null ? void 0 : se.state) === "failed",
1244
+ collapsible: !1,
1245
+ dense: ""
1246
+ }, null, 8, ["evidence", "reasoning", "basis", "failed"])
1247
+ ];
1248
+ }),
1249
+ _: 1
1250
+ }, 8, ["modelValue", "items"])
1251
+ ])) : f("", !0),
1252
+ O.value === "audit" ? (a(), s("section", Qa, [
1253
+ de.value ? (a(), s(M, { key: 0 }, F(2, ($) => D(r(Re), {
1254
+ key: $,
1255
+ shape: "rounded",
1256
+ class: "tv-audit-skeleton h-24 w-full"
1257
+ })), 64)) : ce.value ? (a(), T(r(ge), {
1258
+ key: 1,
1259
+ variant: "danger",
1260
+ class: "tv-audit-error"
1261
+ }, {
1262
+ default: q(() => [
1263
+ E(" Could not load the audit trail: " + i(ce.value), 1)
1264
+ ]),
1265
+ _: 1
1266
+ })) : ee.value && ee.value.length === 0 ? (a(), s("div", Wa, " No LLM calls recorded for this data point ")) : ee.value ? (a(!0), s(M, { key: 3 }, F(ee.value, ($) => (a(), T(Ut, {
1267
+ key: String($.id),
1268
+ call: $
1269
+ }, null, 8, ["call"]))), 128)) : f("", !0)
1270
+ ])) : f("", !0)
1271
+ ])
1272
+ ];
1273
+ }),
1274
+ _: 1
1275
+ }, 8, ["modelValue", "title", "class"]));
788
1276
  }
789
- }), Yt = ["contenteditable", "data-editable"], Jt = {
1277
+ }), Za = ["contenteditable", "data-editable"], en = {
790
1278
  key: 1,
791
1279
  class: "tv-verified-chip inline-flex items-center gap-1 rounded-full bg-green-600 px-2 py-0.5 text-[11px] font-semibold leading-none text-white",
792
1280
  "data-status": "verified"
793
- }, Kt = {
1281
+ }, tn = {
794
1282
  key: 2,
795
1283
  class: "tv-discrepancy-indicator ml-0.5 text-amber-500",
796
1284
  "aria-label": "discrepancy"
797
- }, _a = /* @__PURE__ */ G({
1285
+ }, zn = /* @__PURE__ */ W({
798
1286
  __name: "VerifiedField",
799
1287
  props: {
800
1288
  source: {},
@@ -803,234 +1291,301 @@ const dt = { class: "tv-audit-call rounded-lg border border-gray-200 shadow-sm"
803
1291
  format: { type: Function }
804
1292
  },
805
1293
  setup(e) {
806
- const t = e, a = ie(), g = d(() => a.enabled.value), x = d(() => a.loading), o = R(null), c = d(() => {
807
- var p;
808
- return o.value ? o.value : t.source && t.field ? ((p = t.source.__meta) == null ? void 0 : p[t.field]) ?? null : null;
809
- }), n = d(() => ge(c.value)), w = d(() => {
1294
+ const t = e, n = me(), _ = v(() => n.enabled.value), h = v(() => n.loading), g = z(null), u = v(() => {
1295
+ var y;
1296
+ return g.value ? g.value : t.source && t.field ? ((y = t.source.__meta) == null ? void 0 : y[t.field]) ?? null : null;
1297
+ }), l = v(() => _e(u.value)), k = v(() => {
810
1298
  if (t.original !== void 0 && t.original !== null)
811
1299
  return t.original;
812
- if (c.value && n.value.value !== null && n.value.value !== void 0)
813
- return n.value.value;
1300
+ if (u.value && l.value.value !== null && l.value.value !== void 0)
1301
+ return l.value.value;
814
1302
  if (t.source && t.field) return t.source[t.field];
815
- }), k = d(() => {
816
- const p = w.value;
817
- return p == null ? "" : typeof t.format == "function" ? t.format(p) : String(p);
818
- }), h = d(
819
- () => {
820
- var p, _, V;
821
- return me((V = (_ = (p = c.value) == null ? void 0 : p.candidates) == null ? void 0 : _.extracted) == null ? void 0 : V.confidence);
822
- }
823
- ), y = d(() => Ie(c.value)), $ = d(() => {
824
- var p, _;
825
- return !!((_ = (p = c.value) == null ? void 0 : p.candidates) != null && _.override);
826
- }), S = d(() => {
827
- var _;
828
- const p = (_ = c.value) == null ? void 0 : _.candidates;
829
- return !!(p != null && p.override || p != null && p.extracted || p != null && p.claim);
830
- }), N = d(() => g.value), O = d(() => !!c.value), F = d(() => {
831
- const p = c.value;
832
- return N.value && !!p && Ue(p);
833
- }), Z = d(() => {
834
- var H, te, X;
835
- const p = (te = (H = c.value) == null ? void 0 : H.candidates) == null ? void 0 : te.extracted;
836
- if (!p) return "No verification data";
837
- const _ = [], V = re[h.value];
838
- _.push(
839
- p.confidence != null ? `${V} (${p.confidence}/5)` : V
1303
+ }), w = v(() => {
1304
+ const y = k.value;
1305
+ return y == null ? "" : typeof t.format == "function" ? t.format(y) : String(y);
1306
+ }), N = v(() => {
1307
+ var V, A;
1308
+ const y = (A = (V = u.value) == null ? void 0 : V.candidates) == null ? void 0 : A.extracted;
1309
+ return (y == null ? void 0 : y.state) === "failed" ? "failed" : we(y == null ? void 0 : y.confidence);
1310
+ }), I = v(() => Fe(u.value)), L = v(() => {
1311
+ var y, V;
1312
+ return !!((V = (y = u.value) == null ? void 0 : y.candidates) != null && V.override);
1313
+ }), C = v(() => {
1314
+ var V;
1315
+ const y = (V = u.value) == null ? void 0 : V.candidates;
1316
+ return !!(y != null && y.override || y != null && y.extracted || y != null && y.claim);
1317
+ }), d = v(() => _.value), m = v(() => !!u.value), x = v(() => {
1318
+ const y = u.value;
1319
+ return d.value && !!y && Ye(y);
1320
+ }), B = v(() => {
1321
+ var ue, te, U;
1322
+ const y = (te = (ue = u.value) == null ? void 0 : ue.candidates) == null ? void 0 : te.extracted;
1323
+ if (!y) return "No verification data";
1324
+ if (N.value === "failed")
1325
+ return y.reasoning ? `${G.failed}: ${y.reasoning}` : G.failed;
1326
+ const V = [], A = G[N.value];
1327
+ V.push(
1328
+ y.confidence != null ? `${A} (${y.confidence}/5)` : A
840
1329
  );
841
- const j = ((X = p.sources) == null ? void 0 : X.length) ?? 0;
842
- return j > 0 && _.push(`${j} source ${j === 1 ? "page" : "pages"}`), y.value && _.push("sources disagree"), _.join(" · ");
1330
+ const Z = ((U = y.sources) == null ? void 0 : U.length) ?? 0;
1331
+ return Z > 0 && V.push(`${Z} source ${Z === 1 ? "page" : "pages"}`), I.value && V.push("sources disagree"), V.join(" · ");
843
1332
  });
844
- function z(p) {
845
- var _;
846
- o.value = p, (_ = t.source) != null && _.__meta && t.field && (t.source.__meta[t.field] = p);
1333
+ function b(y) {
1334
+ var V;
1335
+ g.value = y, (V = t.source) != null && V.__meta && t.field && (t.source.__meta[t.field] = y);
847
1336
  }
848
- const J = d(() => at(a, c, z)), ee = d(() => !!J.value), P = R(!1), K = R(!1);
849
- function Q() {
850
- c.value && (P.value = !0);
1337
+ const O = v(() => ht(n, u, b)), S = v(() => !!O.value), j = z(!1), H = z(!1);
1338
+ function J() {
1339
+ u.value && (j.value = !0);
851
1340
  }
852
- const W = d(() => O.value);
853
- async function M(p) {
854
- K.value = !1;
855
- const V = (p.target.textContent ?? "").trim();
856
- !J.value || V === k.value || await J.value(V, "custom");
1341
+ const Y = v(() => m.value);
1342
+ async function X(y) {
1343
+ H.value = !1;
1344
+ const A = (y.target.textContent ?? "").trim();
1345
+ !O.value || A === w.value || await O.value(A, "custom");
857
1346
  }
858
- return (p, _) => (l(), i("span", {
859
- class: A(["tv-field inline-flex items-baseline gap-1", F.value ? "tv-needs-review" : ""])
1347
+ return (y, V) => (a(), s("span", {
1348
+ class: R(["tv-field inline-flex items-baseline gap-1", x.value ? "tv-needs-review" : ""])
860
1349
  }, [
861
- x.value ? (l(), U(s(Se), {
1350
+ h.value ? (a(), T(r(Re), {
862
1351
  key: 0,
863
1352
  shape: "rounded",
864
1353
  class: "tv-field-skeleton inline-block h-[1em] w-16 align-middle"
865
- })) : (l(), i(L, { key: 1 }, [
866
- r("span", {
867
- class: A([
1354
+ })) : (a(), s(M, { key: 1 }, [
1355
+ o("span", {
1356
+ class: R([
868
1357
  "tv-field-value",
869
- N.value && !S.value ? "tv-field-unverified cursor-pointer border-b border-dotted border-gray-300" : ""
1358
+ d.value && !C.value ? "tv-field-unverified cursor-pointer border-b border-dotted border-gray-300" : ""
870
1359
  ]),
871
- contenteditable: ee.value,
872
- "data-editable": ee.value ? "true" : "false",
873
- onFocus: _[0] || (_[0] = (V) => K.value = !0),
874
- onBlur: M,
875
- onKeydown: _[1] || (_[1] = Re(ne((V) => V.target.blur(), ["prevent"]), ["enter"])),
876
- onClick: _[2] || (_[2] = (V) => N.value && !S.value ? Q() : void 0)
1360
+ contenteditable: S.value,
1361
+ "data-editable": S.value ? "true" : "false",
1362
+ onFocus: V[0] || (V[0] = (A) => H.value = !0),
1363
+ onBlur: X,
1364
+ onKeydown: V[1] || (V[1] = Qe(ve((A) => A.target.blur(), ["prevent"]), ["enter"])),
1365
+ onClick: V[2] || (V[2] = (A) => d.value && !C.value ? J() : void 0)
877
1366
  }, [
878
- Ae(p.$slots, "default", {
879
- value: w.value,
880
- formatted: k.value
1367
+ We(y.$slots, "default", {
1368
+ value: k.value,
1369
+ formatted: w.value
881
1370
  }, () => [
882
- T(m(k.value), 1)
1371
+ E(i(w.value), 1)
883
1372
  ])
884
- ], 42, Yt),
885
- N.value ? (l(), U(s(Me), {
1373
+ ], 42, Za),
1374
+ d.value ? (a(), T(r(be), {
886
1375
  key: 0,
887
- tooltip: Z.value,
1376
+ tooltip: B.value,
888
1377
  placement: "top"
889
1378
  }, {
890
- trigger: I(() => [
891
- r("button", {
1379
+ trigger: q(() => [
1380
+ o("button", {
892
1381
  type: "button",
893
- class: A(["tv-overlay inline-flex items-center align-middle transition-transform duration-150", [s(E), W.value ? "cursor-pointer hover:scale-110" : "cursor-default"]]),
894
- onClick: _[3] || (_[3] = (V) => W.value ? Q() : void 0)
1382
+ class: R(["tv-overlay inline-flex items-center align-middle transition-transform duration-150", [r(Q), Y.value ? "cursor-pointer hover:scale-110" : "cursor-default"]]),
1383
+ onClick: V[3] || (V[3] = (A) => Y.value ? J() : void 0)
895
1384
  }, [
896
- $.value ? (l(), i("span", Jt, "✔")) : (l(), U(fe, {
1385
+ L.value ? (a(), s("span", en, "✔")) : (a(), T(ye, {
897
1386
  key: 0,
898
- status: h.value
1387
+ status: N.value
899
1388
  }, null, 8, ["status"])),
900
- y.value && !$.value ? (l(), i("span", Kt, "⚠")) : b("", !0)
1389
+ I.value && !L.value ? (a(), s("span", tn, "⚠")) : f("", !0)
901
1390
  ], 2)
902
1391
  ]),
903
1392
  _: 1
904
- }, 8, ["tooltip"])) : b("", !0),
905
- c.value ? (l(), U(qt, {
1393
+ }, 8, ["tooltip"])) : f("", !0),
1394
+ u.value ? (a(), T(Xa, {
906
1395
  key: 1,
907
- modelValue: P.value,
908
- "onUpdate:modelValue": _[4] || (_[4] = (V) => P.value = V),
909
- meta: c.value,
1396
+ modelValue: j.value,
1397
+ "onUpdate:modelValue": V[4] || (V[4] = (A) => j.value = A),
1398
+ meta: u.value,
910
1399
  label: e.field,
911
- save: J.value
912
- }, null, 8, ["modelValue", "meta", "label", "save"])) : b("", !0)
1400
+ save: O.value
1401
+ }, null, 8, ["modelValue", "meta", "label", "save"])) : f("", !0)
913
1402
  ], 64))
914
1403
  ], 2));
915
1404
  }
916
- }), Ht = { class: "tv-comparison-page flex flex-col gap-4" }, Gt = {
1405
+ }), an = { class: "tv-comparison-page flex flex-col gap-4" }, nn = {
917
1406
  key: 0,
918
1407
  class: "tv-comparison-empty text-gray-400"
919
- }, Qt = {
1408
+ }, ln = {
920
1409
  key: 1,
921
1410
  class: "tv-anchored-group flex flex-col gap-3"
922
- }, Wt = { class: "flex items-center gap-2" }, Xt = { class: "tv-datapoint-path font-mono text-xs text-gray-500" }, Zt = { class: "tv-datapoint-resolved font-medium" }, ea = {
1411
+ }, sn = { class: "flex items-center gap-2" }, on = { class: "tv-datapoint-path font-mono text-xs text-gray-500" }, rn = { class: "tv-datapoint-resolved font-medium" }, un = {
923
1412
  key: 0,
924
1413
  class: "tv-datapoint-discrepancy text-xs font-medium text-amber-600"
925
- }, ta = { class: "tv-datapoint-candidates ml-4 text-xs text-gray-600" }, aa = { class: "font-medium" }, la = {
1414
+ }, dn = { class: "tv-datapoint-candidates ml-4 text-xs text-gray-600" }, cn = { class: "font-medium" }, vn = {
926
1415
  key: 0,
927
1416
  class: "tv-datapoint-reasoning ml-4 text-xs italic text-gray-500"
928
- }, na = {
1417
+ }, fn = {
1418
+ key: 1,
1419
+ class: "tv-datapoint-sources ml-4 text-xs text-gray-500"
1420
+ }, gn = { class: "tv-datapoint-cited text-gray-400" }, mn = ["href"], pn = {
929
1421
  key: 1,
930
- class: "tv-datapoint-cited ml-4 text-xs text-gray-500"
931
- }, sa = { class: "tv-datapoint-sources ml-4 text-xs text-gray-500" }, ra = ["href"], ia = { key: 1 }, oa = { class: "ml-1" }, ua = {
1422
+ class: "tv-source-page-label"
1423
+ }, xn = {
1424
+ key: 2,
1425
+ class: "ml-1 text-gray-400"
1426
+ }, yn = { class: "tv-source-quotes ml-4" }, hn = {
1427
+ key: 2,
1428
+ class: "tv-datapoint-history ml-4 mt-1 text-xs text-gray-500"
1429
+ }, bn = {
1430
+ key: 0,
1431
+ class: "tv-history-chosen-mark"
1432
+ }, wn = { class: "tv-history-entry-value" }, _n = {
1433
+ key: 1,
1434
+ class: "ml-1"
1435
+ }, kn = {
1436
+ key: 2,
1437
+ class: "ml-1"
1438
+ }, $n = {
1439
+ key: 3,
1440
+ class: "ml-1"
1441
+ }, Cn = {
1442
+ key: 4,
1443
+ class: "ml-1 text-gray-400"
1444
+ }, Sn = {
932
1445
  key: 2,
933
1446
  class: "tv-unanchored-group flex flex-col gap-1"
934
- }, da = { class: "tv-datapoint-path font-mono text-xs text-gray-500" }, ca = { class: "tv-datapoint-value" }, va = /* @__PURE__ */ G({
1447
+ }, Vn = { class: "tv-datapoint-path font-mono text-xs text-gray-500" }, Nn = { class: "tv-datapoint-value" }, qn = /* @__PURE__ */ W({
935
1448
  __name: "ComparisonPage",
936
1449
  setup(e) {
937
- const t = ie(), a = d(() => Te(t.data)), g = d(() => a.value.filter((k) => !k.unanchored)), x = d(() => a.value.filter((k) => k.unanchored));
938
- function o(k) {
939
- const h = ge(k).value;
940
- return h == null ? "" : String(h);
1450
+ const t = me(), n = v(() => ke(t.data)), _ = v(() => n.value.filter((C) => !C.unanchored)), h = v(() => n.value.filter((C) => C.unanchored));
1451
+ function g(C) {
1452
+ const d = _e(C).value;
1453
+ return d == null ? "" : String(d);
941
1454
  }
942
- function c(k) {
943
- return k == null ? "" : String(k);
1455
+ function u(C) {
1456
+ return C == null ? "" : String(C);
944
1457
  }
945
- function n(k) {
946
- var h, y, $;
947
- return ($ = (y = (h = k.meta) == null ? void 0 : h.candidates) == null ? void 0 : y.extracted) == null ? void 0 : $.confidence;
1458
+ function l(C) {
1459
+ var d, m, x;
1460
+ return (x = (m = (d = C.meta) == null ? void 0 : d.candidates) == null ? void 0 : m.extracted) == null ? void 0 : x.confidence;
948
1461
  }
949
- function w(k) {
950
- var $;
951
- const h = ($ = k.meta) == null ? void 0 : $.candidates;
952
- if (!h) return [];
953
- const y = [];
954
- return h.override && y.push({ source: "override", value: h.override.value }), h.extracted && y.push({ source: "extracted", value: h.extracted.value }), h.claim && y.push({ source: "claim", value: h.claim.value }), y;
1462
+ function k(C) {
1463
+ var x;
1464
+ const d = (x = C.meta) == null ? void 0 : x.candidates;
1465
+ if (!d) return [];
1466
+ const m = [];
1467
+ return d.override && m.push({ source: "override", value: d.override.value }), d.extracted && m.push({ source: "extracted", value: d.extracted.value }), d.claim && m.push({ source: "claim", value: d.claim.value }), m;
955
1468
  }
956
- return (k, h) => (l(), i("div", Ht, [
957
- h[1] || (h[1] = r("h2", { class: "tv-comparison-title text-lg font-semibold" }, "Verification comparison", -1)),
958
- a.value.length === 0 ? (l(), i("p", Gt, " No data points to compare. ")) : b("", !0),
959
- g.value.length ? (l(), i("section", Qt, [
960
- (l(!0), i(L, null, B(g.value, (y) => {
961
- var $, S, N;
962
- return l(), i("div", {
963
- key: y.path,
964
- class: "tv-datapoint border-t border-gray-100 pt-2"
965
- }, [
966
- r("div", Wt, [
967
- r("span", Xt, m(y.path), 1),
968
- r("span", Zt, m(o(y.meta)), 1),
969
- D(fe, {
970
- confidence: n(y),
971
- "show-label": ""
972
- }, null, 8, ["confidence"]),
973
- s(Ie)(y.meta) ? (l(), i("span", ea, "⚠ discrepancy")) : b("", !0)
974
- ]),
975
- r("ul", ta, [
976
- (l(!0), i(L, null, B(w(y), (O) => (l(), i("li", {
977
- key: O.source,
978
- class: "tv-candidate"
979
- }, [
980
- r("span", aa, m(O.source) + ":", 1),
981
- T(" " + m(c(O.value)), 1)
982
- ]))), 128))
983
- ]),
984
- s(de)(y.meta) ? (l(), i("p", la, m(s(de)(y.meta)), 1)) : b("", !0),
985
- s(ce)(y.meta) ? (l(), i("p", na, " “" + m(s(ce)(y.meta)) + "” ", 1)) : b("", !0),
986
- r("ul", sa, [
987
- (l(!0), i(L, null, B(s(Ne)((N = (S = ($ = y.meta) == null ? void 0 : $.candidates) == null ? void 0 : S.extracted) == null ? void 0 : N.sources), (O, F) => (l(), i("li", {
988
- key: F,
989
- class: "tv-source-group"
990
- }, [
991
- O.fileUrl ? (l(), i("a", {
992
- key: 0,
993
- href: O.fileUrl,
994
- class: "tv-source-link text-blue-600 underline",
995
- target: "_blank",
996
- rel: "noopener"
997
- }, m(O.fileLabel), 9, ra)) : (l(), i("span", ia, m(O.fileLabel), 1)),
998
- r("span", oa, "(" + m(O.sources.map(s(ut)).join(", ")) + ")", 1)
999
- ]))), 128))
1000
- ])
1001
- ]);
1002
- }), 128))
1003
- ])) : b("", !0),
1004
- x.value.length ? (l(), i("section", ua, [
1005
- h[0] || (h[0] = r("h3", { class: "tv-unanchored-title text-sm font-semibold text-gray-500" }, " Unanchored / not from source ", -1)),
1006
- (l(!0), i(L, null, B(x.value, (y) => (l(), i("div", {
1007
- key: y.path,
1469
+ function w(C) {
1470
+ var d, m, x;
1471
+ return ((x = (m = (d = C.meta) == null ? void 0 : d.candidates) == null ? void 0 : m.extracted) == null ? void 0 : x.history) ?? [];
1472
+ }
1473
+ function N(C) {
1474
+ return C.created_at ? new Date(C.created_at).toLocaleString() : "";
1475
+ }
1476
+ function I(C) {
1477
+ var d, m, x;
1478
+ return oe((x = (m = (d = C.meta) == null ? void 0 : d.candidates) == null ? void 0 : m.extracted) == null ? void 0 : x.sources).pages;
1479
+ }
1480
+ function L(C) {
1481
+ var d, m, x;
1482
+ return $e(oe((x = (m = (d = C.meta) == null ? void 0 : d.candidates) == null ? void 0 : m.extracted) == null ? void 0 : x.sources));
1483
+ }
1484
+ return (C, d) => (a(), s("div", an, [
1485
+ d[1] || (d[1] = o("h2", { class: "tv-comparison-title text-lg font-semibold" }, "Verification comparison", -1)),
1486
+ n.value.length === 0 ? (a(), s("p", nn, " No data points to compare. ")) : f("", !0),
1487
+ _.value.length ? (a(), s("section", ln, [
1488
+ (a(!0), s(M, null, F(_.value, (m) => (a(), s("div", {
1489
+ key: m.path,
1490
+ class: "tv-datapoint border-t border-gray-100 pt-2"
1491
+ }, [
1492
+ o("div", sn, [
1493
+ o("span", on, i(m.path), 1),
1494
+ o("span", rn, i(g(m.meta)), 1),
1495
+ D(ye, {
1496
+ confidence: l(m),
1497
+ "show-label": ""
1498
+ }, null, 8, ["confidence"]),
1499
+ r(Fe)(m.meta) ? (a(), s("span", un, "⚠ discrepancy")) : f("", !0)
1500
+ ]),
1501
+ o("ul", dn, [
1502
+ (a(!0), s(M, null, F(k(m), (x) => (a(), s("li", {
1503
+ key: x.source,
1504
+ class: "tv-candidate"
1505
+ }, [
1506
+ o("span", cn, i(x.source) + ":", 1),
1507
+ E(" " + i(u(x.value)), 1)
1508
+ ]))), 128))
1509
+ ]),
1510
+ r(pe)(m.meta) ? (a(), s("p", vn, i(r(pe)(m.meta)), 1)) : f("", !0),
1511
+ I(m).length ? (a(), s("ul", fn, [
1512
+ o("li", gn, i(L(m)), 1),
1513
+ (a(!0), s(M, null, F(I(m), (x) => (a(), s("li", {
1514
+ key: x.key,
1515
+ class: "tv-source-page"
1516
+ }, [
1517
+ x.url ? (a(), s("a", {
1518
+ key: 0,
1519
+ href: x.url,
1520
+ class: "tv-source-link text-blue-600 underline",
1521
+ target: "_blank",
1522
+ rel: "noopener"
1523
+ }, i(x.label), 9, mn)) : (a(), s("span", pn, i(x.label), 1)),
1524
+ x.documentName ? (a(), s("span", xn, "· " + i(x.documentName), 1)) : f("", !0),
1525
+ o("ul", yn, [
1526
+ (a(!0), s(M, null, F(x.quotes, (B, b) => (a(), s("li", {
1527
+ key: b,
1528
+ class: "tv-source-quote italic"
1529
+ }, "“" + i(B) + "”", 1))), 128))
1530
+ ])
1531
+ ]))), 128))
1532
+ ])) : f("", !0),
1533
+ w(m).length ? (a(), s("ul", hn, [
1534
+ (a(!0), s(M, null, F(w(m), (x, B) => (a(), s("li", {
1535
+ key: x.id ?? B,
1536
+ class: R(["tv-history-entry", x.is_chosen ? "tv-history-entry-chosen font-medium text-green-700" : ""])
1537
+ }, [
1538
+ x.is_chosen ? (a(), s("span", bn, "✔ chosen · ")) : f("", !0),
1539
+ o("span", wn, i(u(x.value)), 1),
1540
+ x.state ? (a(), s("span", _n, "[" + i(x.state) + "]", 1)) : f("", !0),
1541
+ x.confidence != null ? (a(), s("span", kn, "· " + i(x.confidence) + "/5", 1)) : f("", !0),
1542
+ x.page != null ? (a(), s("span", $n, "· p" + i(x.page), 1)) : f("", !0),
1543
+ N(x) ? (a(), s("span", Cn, "· " + i(N(x)), 1)) : f("", !0)
1544
+ ], 2))), 128))
1545
+ ])) : f("", !0)
1546
+ ]))), 128))
1547
+ ])) : f("", !0),
1548
+ h.value.length ? (a(), s("section", Sn, [
1549
+ d[0] || (d[0] = o("h3", { class: "tv-unanchored-title text-sm font-semibold text-gray-500" }, " Unanchored / not from source ", -1)),
1550
+ (a(!0), s(M, null, F(h.value, (m) => (a(), s("div", {
1551
+ key: m.path,
1008
1552
  class: "tv-unanchored-datapoint flex items-center gap-2 text-sm"
1009
1553
  }, [
1010
- r("span", da, m(y.path), 1),
1011
- r("span", ca, m(c(y.value)), 1),
1012
- D(fe, { status: "unverifiable" })
1554
+ o("span", Vn, i(m.path), 1),
1555
+ o("span", Nn, i(u(m.value)), 1),
1556
+ D(ye, { status: "unverifiable" })
1013
1557
  ]))), 128))
1014
- ])) : b("", !0)
1558
+ ])) : f("", !0)
1015
1559
  ]));
1016
1560
  }
1017
- }), fa = { class: "tv-enable-toggle flex items-center justify-between text-sm font-medium text-gray-700" }, pa = { class: "tv-progress-block" }, ma = { class: "mb-1 flex items-baseline justify-between" }, ga = { class: "tv-progress-count text-xs font-semibold text-gray-600" }, wa = /* @__PURE__ */ G({
1561
+ }), Dn = { class: "tv-enable-toggle flex items-center justify-between text-sm font-medium text-gray-700" }, In = { class: "tv-progress-block" }, On = { class: "mb-1 flex items-baseline justify-between" }, En = { class: "tv-progress-count text-xs font-semibold text-gray-600" }, Tn = {
1562
+ key: 0,
1563
+ class: "tv-attempts-recorded mt-1 text-[11px] text-gray-400"
1564
+ }, Rn = /* @__PURE__ */ W({
1018
1565
  __name: "VerificationChrome",
1019
1566
  setup(e) {
1020
- const t = ie(), { enabled: a, openComparison: g } = t, x = Ge(), o = ke(), c = R(!1), n = d(() => tt(t.data)), w = R(!1);
1021
- pe(
1022
- () => n.value.percent,
1023
- ($) => {
1024
- $ === 100 && n.value.total > 0 && !w.value && (w.value = !0, o.success("All data points verified 🎯"));
1567
+ const t = me(), { enabled: n, openComparison: _ } = t, h = vt(), g = Pe(), u = z(!1), l = v(() => yt(t.data)), k = v(
1568
+ () => ke(t.data).reduce(
1569
+ (C, d) => {
1570
+ var m, x, B, b;
1571
+ return C + (((b = (B = (x = (m = d.meta) == null ? void 0 : m.candidates) == null ? void 0 : x.extracted) == null ? void 0 : B.history) == null ? void 0 : b.length) ?? 0);
1572
+ },
1573
+ 0
1574
+ )
1575
+ ), w = z(!1);
1576
+ ae(
1577
+ () => l.value.percent,
1578
+ (C) => {
1579
+ C === 100 && l.value.total > 0 && !w.value && (w.value = !0, g.success("All data points verified 🎯"));
1025
1580
  }
1026
1581
  );
1027
- let k = 0;
1028
- function h() {
1029
- const $ = document.querySelectorAll(".tv-needs-review");
1030
- if (!$.length) return;
1031
- k = k % $.length;
1032
- const S = $[k];
1033
- k++, S.scrollIntoView({ behavior: "smooth", block: "center" }), S.animate(
1582
+ let N = 0;
1583
+ function I() {
1584
+ const C = document.querySelectorAll(".tv-needs-review");
1585
+ if (!C.length) return;
1586
+ N = N % C.length;
1587
+ const d = C[N];
1588
+ N++, d.scrollIntoView({ behavior: "smooth", block: "center" }), d.animate(
1034
1589
  [
1035
1590
  { boxShadow: "0 0 0 0 rgba(245, 158, 11, 0.8)" },
1036
1591
  { boxShadow: "0 0 0 12px rgba(245, 158, 11, 0)" }
@@ -1038,116 +1593,119 @@ const dt = { class: "tv-audit-call rounded-lg border border-gray-200 shadow-sm"
1038
1593
  { duration: 900, iterations: 2 }
1039
1594
  );
1040
1595
  }
1041
- function y() {
1042
- g(), c.value = !1;
1596
+ function L() {
1597
+ _(), u.value = !1;
1043
1598
  }
1044
- return ($, S) => (l(), i(L, null, [
1045
- r("button", {
1599
+ return (C, d) => (a(), s(M, null, [
1600
+ o("button", {
1046
1601
  type: "button",
1047
- class: A(["tv-settings-button fixed bottom-4 right-4 z-50 flex h-11 w-11 items-center justify-center rounded-full bg-gray-900 text-white shadow-lg transition-transform hover:scale-105", s(E)]),
1602
+ class: R(["tv-settings-button fixed bottom-4 right-4 z-50 flex h-11 w-11 items-center justify-center rounded-full bg-gray-900 text-white shadow-lg transition-transform hover:scale-105", r(Q)]),
1048
1603
  title: "Verification",
1049
- onClick: S[0] || (S[0] = ne((N) => c.value = !c.value, ["stop"]))
1604
+ onClick: d[0] || (d[0] = ve((m) => u.value = !u.value, ["stop"]))
1050
1605
  }, [
1051
- D(s(Be), {
1052
- icon: s(Fe),
1606
+ D(r(st), {
1607
+ icon: r(ot),
1053
1608
  class: "h-5 w-5"
1054
1609
  }, null, 8, ["icon"]),
1055
- s(a) && n.value.needsReview > 0 ? (l(), U(s(qe), {
1610
+ r(n) && l.value.needsReview > 0 ? (a(), T(r(it), {
1056
1611
  key: 0,
1057
- value: n.value.needsReview,
1612
+ value: l.value.needsReview,
1058
1613
  variant: "warning",
1059
1614
  class: "tv-needs-review-badge absolute -right-1 -top-1"
1060
- }, null, 8, ["value"])) : b("", !0)
1615
+ }, null, 8, ["value"])) : f("", !0)
1061
1616
  ], 2),
1062
- c.value ? (l(), i("div", {
1617
+ u.value ? (a(), s("div", {
1063
1618
  key: 0,
1064
- class: A(["tv-settings-panel fixed bottom-20 right-4 z-50 flex w-72 flex-col gap-4 rounded-xl bg-white p-4 shadow-2xl ring-1 ring-gray-200", s(E)])
1619
+ class: R(["tv-settings-panel fixed bottom-20 right-4 z-50 flex w-72 flex-col gap-4 rounded-xl bg-white p-4 shadow-2xl ring-1 ring-gray-200", r(Q)])
1065
1620
  }, [
1066
- r("label", fa, [
1067
- S[3] || (S[3] = r("span", null, "Verification overlay", -1)),
1068
- Le(r("input", {
1069
- "onUpdate:modelValue": S[1] || (S[1] = (N) => ye(a) ? a.value = N : null),
1621
+ o("label", Dn, [
1622
+ d[3] || (d[3] = o("span", null, "Verification overlay", -1)),
1623
+ Xe(o("input", {
1624
+ "onUpdate:modelValue": d[1] || (d[1] = (m) => De(n) ? n.value = m : null),
1070
1625
  type: "checkbox",
1071
1626
  class: "tv-enable-checkbox h-4 w-4 accent-gray-900"
1072
1627
  }, null, 512), [
1073
- [je, s(a)]
1628
+ [Ze, r(n)]
1074
1629
  ])
1075
1630
  ]),
1076
- s(a) && n.value.total > 0 ? (l(), i(L, { key: 0 }, [
1077
- r("div", pa, [
1078
- r("div", ma, [
1079
- S[4] || (S[4] = r("span", { class: "text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, "Review progress", -1)),
1080
- r("span", ga, m(n.value.verified) + " / " + m(n.value.total), 1)
1631
+ r(n) && l.value.total > 0 ? (a(), s(M, { key: 0 }, [
1632
+ o("div", In, [
1633
+ o("div", On, [
1634
+ d[4] || (d[4] = o("span", { class: "text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, "Review progress", -1)),
1635
+ o("span", En, i(l.value.verified) + " / " + i(l.value.total), 1)
1081
1636
  ]),
1082
- D(s($e), {
1083
- value: n.value.verified,
1084
- max: n.value.total,
1637
+ D(r(ze), {
1638
+ value: l.value.verified,
1639
+ max: l.value.total,
1085
1640
  size: "md",
1086
- variant: n.value.percent === 100 ? "success" : "info",
1087
- striped: n.value.percent < 100,
1088
- "animate-stripes": n.value.percent < 100,
1089
- glow: n.value.percent === 100,
1641
+ variant: l.value.percent === 100 ? "success" : "info",
1642
+ striped: l.value.percent < 100,
1643
+ "animate-stripes": l.value.percent < 100,
1644
+ glow: l.value.percent === 100,
1090
1645
  gradient: ""
1091
- }, null, 8, ["value", "max", "variant", "striped", "animate-stripes", "glow"])
1646
+ }, null, 8, ["value", "max", "variant", "striped", "animate-stripes", "glow"]),
1647
+ k.value > 0 ? (a(), s("div", Tn, i(k.value) + " extraction attempt" + i(k.value === 1 ? "" : "s") + " recorded ", 1)) : f("", !0)
1092
1648
  ]),
1093
- n.value.needsReview > 0 ? (l(), i("button", {
1649
+ l.value.needsReview > 0 ? (a(), s("button", {
1094
1650
  key: 0,
1095
1651
  type: "button",
1096
- class: A(["tv-next-flagged flex items-center justify-between rounded-lg bg-amber-50 px-3 py-2 text-left text-xs font-medium text-amber-700 ring-1 ring-inset ring-amber-600/20 transition hover:bg-amber-100", s(E)]),
1097
- onClick: ne(h, ["stop"])
1652
+ class: R(["tv-next-flagged flex items-center justify-between rounded-lg bg-amber-50 px-3 py-2 text-left text-xs font-medium text-amber-700 ring-1 ring-inset ring-amber-600/20 transition hover:bg-amber-100", r(Q)]),
1653
+ onClick: ve(I, ["stop"])
1098
1654
  }, [
1099
- r("span", null, m(n.value.needsReview) + " need" + m(n.value.needsReview === 1 ? "s" : "") + " review", 1),
1100
- S[5] || (S[5] = r("span", { "aria-hidden": "true" }, "→", -1))
1101
- ], 2)) : b("", !0)
1102
- ], 64)) : b("", !0),
1103
- r("button", {
1655
+ o("span", null, i(l.value.needsReview) + " need" + i(l.value.needsReview === 1 ? "s" : "") + " review", 1),
1656
+ d[5] || (d[5] = o("span", { "aria-hidden": "true" }, "→", -1))
1657
+ ], 2)) : f("", !0)
1658
+ ], 64)) : f("", !0),
1659
+ o("button", {
1104
1660
  type: "button",
1105
- class: A(["tv-open-comparison rounded-lg border border-gray-200 px-3 py-2 text-sm font-medium text-gray-600 transition hover:bg-gray-50", s(E)]),
1106
- onClick: ne(y, ["stop"])
1661
+ class: R(["tv-open-comparison rounded-lg border border-gray-200 px-3 py-2 text-sm font-medium text-gray-600 transition hover:bg-gray-50", r(Q)]),
1662
+ onClick: ve(L, ["stop"])
1107
1663
  }, " Open comparison page ", 2)
1108
- ], 2)) : b("", !0),
1109
- D(s(ue), {
1110
- modelValue: s(x),
1111
- "onUpdate:modelValue": S[2] || (S[2] = (N) => ye(x) ? x.value = N : null),
1664
+ ], 2)) : f("", !0),
1665
+ D(r(he), {
1666
+ modelValue: r(h),
1667
+ "onUpdate:modelValue": d[2] || (d[2] = (m) => De(h) ? h.value = m : null),
1112
1668
  title: "Verification comparison",
1113
1669
  width: 80,
1114
1670
  "close-x": "",
1115
- class: A(s(E))
1671
+ class: R(r(Q))
1116
1672
  }, {
1117
- default: I(() => [
1118
- D(va)
1673
+ default: q(() => [
1674
+ D(qn)
1119
1675
  ]),
1120
1676
  _: 1
1121
1677
  }, 8, ["modelValue", "class"]),
1122
- D(s(Ye), {
1123
- class: A(s(E))
1678
+ D(r(rt), {
1679
+ class: R(r(Q))
1124
1680
  }, null, 8, ["class"])
1125
1681
  ], 64));
1126
1682
  }
1127
1683
  });
1128
1684
  export {
1129
- E as CHROME_CLASS,
1130
- va as ComparisonPage,
1131
- fe as ConfidenceIcon,
1132
- Ce as ENABLED_STORAGE_KEY,
1133
- Oe as RESOLUTION_PRIORITY,
1134
- Qe as STATUS_COLORS,
1135
- re as STATUS_LABELS,
1136
- wa as VerificationChrome,
1137
- qt as VerificationModal,
1138
- _a as VerifiedField,
1139
- me as bucketConfidence,
1140
- Xe as candidatesDisagree,
1141
- ce as citedTextOf,
1142
- tt as computeProgress,
1143
- rt as fetchDataPointAudit,
1144
- Ne as groupSources,
1145
- Ie as hasDiscrepancy,
1146
- ha as initVerification,
1147
- de as reasoningOf,
1148
- We as resolveCandidates,
1149
- ge as resolveDataPoint,
1150
- ut as sourceRowLabel,
1151
- ie as useVerification,
1152
- Te as walkDataPoints
1685
+ Q as CHROME_CLASS,
1686
+ Le as CitationEvidence,
1687
+ Te as CitationPage,
1688
+ ua as CitationPageList,
1689
+ qn as ComparisonPage,
1690
+ ye as ConfidenceIcon,
1691
+ Ue as ENABLED_STORAGE_KEY,
1692
+ Be as RESOLUTION_PRIORITY,
1693
+ ft as STATUS_COLORS,
1694
+ G as STATUS_LABELS,
1695
+ Rn as VerificationChrome,
1696
+ Xa as VerificationModal,
1697
+ zn as VerifiedField,
1698
+ we as bucketConfidence,
1699
+ mt as candidatesDisagree,
1700
+ oe as citationEvidence,
1701
+ $e as citationSummary,
1702
+ yt as computeProgress,
1703
+ kt as fetchDataPointAudit,
1704
+ Fe as hasDiscrepancy,
1705
+ Pn as initVerification,
1706
+ pe as reasoningOf,
1707
+ gt as resolveCandidates,
1708
+ _e as resolveDataPoint,
1709
+ me as useVerification,
1710
+ ke as walkDataPoints
1153
1711
  };