@thehammer/template-verification 0.2.7 → 0.2.9

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