@thehammer/template-verification 0.2.22 → 0.2.23

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,7 +1,7 @@
1
- import { ref as F, watch as Y, defineComponent as M, openBlock as o, createElementBlock as c, normalizeClass as h, createCommentVNode as k, computed as i, createElementVNode as p, createVNode as T, createBlock as B, unref as f, Fragment as j, renderSlot as ie, withModifiers as W, withDirectives as oe, isRef as se, vModelCheckbox as ue, toDisplayString as $ } from "vue";
2
- import { DanxSkeleton as ce, useToast as de, DanxIcon as fe, gearIcon as ve, DanxBadge as pe, DanxProgressBar as me, DanxToastContainer as be } from "@thehammer/danx-ui";
3
- import { CodeViewer as ge } from "@thehammer/danx-ui/components/code-viewer";
4
- const R = "tv-chrome", he = "tv-editable", Z = "template-verification:enabled";
1
+ import { ref as F, watch as Y, defineComponent as M, openBlock as i, createElementBlock as u, normalizeClass as g, createCommentVNode as k, computed as o, createElementVNode as m, createVNode as T, createBlock as B, unref as f, Fragment as j, renderSlot as oe, toDisplayString as E, withModifiers as W, withDirectives as ie, isRef as se, vModelCheckbox as ue } from "vue";
2
+ import { DanxSkeleton as ce, useToast as de, DanxIcon as fe, gearIcon as ve, DanxBadge as pe, DanxProgressBar as me, DanxToastContainer as he } from "@thehammer/danx-ui";
3
+ import { CodeViewer as be } from "@thehammer/danx-ui/components/code-viewer";
4
+ const R = "tv-chrome", ge = "tv-editable", Z = "template-verification:enabled";
5
5
  let N = null;
6
6
  function we(e) {
7
7
  var t;
@@ -37,7 +37,7 @@ function ee(e) {
37
37
  function _e() {
38
38
  return N || (N = ee()), N;
39
39
  }
40
- function ut(e) {
40
+ function ct(e) {
41
41
  N = ee(e);
42
42
  }
43
43
  function te() {
@@ -147,7 +147,7 @@ function U(e, t, n) {
147
147
  return;
148
148
  }
149
149
  if (!X(e)) return;
150
- const m = e.__meta ?? {};
150
+ const h = e.__meta ?? {};
151
151
  for (const [r, v] of Object.entries(e)) {
152
152
  if (r === "__meta") continue;
153
153
  const w = t ? `${t}.${r}` : r;
@@ -155,13 +155,13 @@ function U(e, t, n) {
155
155
  U(v, w, n);
156
156
  continue;
157
157
  }
158
- const b = m[r];
159
- !b && ze.has(r) || n.push({
158
+ const p = h[r];
159
+ !p && ze.has(r) || n.push({
160
160
  path: w,
161
161
  label: r,
162
- meta: b ?? null,
162
+ meta: p ?? null,
163
163
  value: v,
164
- unanchored: !b
164
+ unanchored: !p
165
165
  });
166
166
  }
167
167
  }
@@ -178,18 +178,18 @@ function Ue(e) {
178
178
  const t = re(e).filter(
179
179
  (r) => r.meta !== null
180
180
  ), n = t.length;
181
- let d = 0, m = 0;
181
+ let d = 0, h = 0;
182
182
  for (const r of t) {
183
183
  if (r.meta.candidates.override) {
184
184
  d++;
185
185
  continue;
186
186
  }
187
- ae(r.meta) && m++;
187
+ ae(r.meta) && h++;
188
188
  }
189
189
  return {
190
190
  total: n,
191
191
  verified: d,
192
- needsReview: m,
192
+ needsReview: h,
193
193
  percent: n === 0 ? 100 : Math.round(d / n * 100)
194
194
  };
195
195
  }
@@ -206,15 +206,15 @@ const Ye = ["data-level"], qe = /* @__PURE__ */ M({
206
206
  4: "w-4/5 bg-(--confidence-4)",
207
207
  5: "w-full bg-(--confidence-5)"
208
208
  };
209
- return (d, m) => (o(), c("span", {
210
- class: h(["tv-confidence-bar flex h-[3px] w-[19px] shrink-0 overflow-hidden rounded-full", t.level === null ? "border border-dotted border-(--confidence-none)" : ""]),
209
+ return (d, h) => (i(), u("span", {
210
+ class: g(["tv-confidence-bar flex h-[3px] w-[19px] shrink-0 overflow-hidden rounded-full", t.level === null ? "border border-dotted border-(--confidence-none)" : ""]),
211
211
  "data-theme": "light",
212
212
  "data-level": t.level ?? "none",
213
213
  "aria-hidden": "true"
214
214
  }, [
215
- t.level !== null ? (o(), c("span", {
215
+ t.level !== null ? (i(), u("span", {
216
216
  key: 0,
217
- class: h(["tv-confidence-fill h-full rounded-full", n[t.level]])
217
+ class: g(["tv-confidence-fill h-full rounded-full", n[t.level]])
218
218
  }, null, 2)) : k("", !0)
219
219
  ], 10, Ye));
220
220
  }
@@ -224,17 +224,17 @@ const Ye = ["data-level"], qe = /* @__PURE__ */ M({
224
224
  state: {}
225
225
  },
226
226
  setup(e) {
227
- const t = e, n = i(() => z(t.state)), d = i(
227
+ const t = e, n = o(() => z(t.state)), d = o(
228
228
  () => t.state === "failed" || t.state === "unrated" ? null : t.state
229
229
  );
230
- return (m, r) => t.state === "failed" ? (o(), c("span", {
230
+ return (h, r) => t.state === "failed" ? (i(), u("span", {
231
231
  key: 0,
232
232
  class: "tv-confidence-icon inline-flex items-center rounded-full bg-red-100 px-2 py-0.5 text-[11px] font-semibold leading-none text-red-800 ring-1 ring-inset ring-red-700/30",
233
233
  "data-status": "failed",
234
234
  title: n.value
235
235
  }, [...r[0] || (r[0] = [
236
- p("span", { "aria-hidden": "true" }, "⊗", -1)
237
- ])], 8, Ge)) : (o(), c("span", {
236
+ m("span", { "aria-hidden": "true" }, "⊗", -1)
237
+ ])], 8, Ge)) : (i(), u("span", {
238
238
  key: 1,
239
239
  class: "tv-confidence-icon inline-flex items-center rounded-full bg-white px-1.5 py-1.5 ring-1 ring-inset ring-gray-300",
240
240
  "data-status": String(t.state),
@@ -244,74 +244,78 @@ const Ye = ["data-level"], qe = /* @__PURE__ */ M({
244
244
  ], 8, He));
245
245
  }
246
246
  }), Ke = {
247
+ key: 0,
248
+ class: "tv-field-placeholder"
249
+ }, Qe = {
247
250
  key: 0,
248
251
  class: "tv-mark-anchor"
249
- }, Qe = ["aria-label", "title"], We = {
252
+ }, We = ["aria-label", "title"], Xe = {
250
253
  key: 1,
251
254
  class: "tv-verified-chip tv-audit-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",
252
255
  "data-status": "audited"
253
- }, Xe = {
256
+ }, Ze = {
254
257
  key: 2,
255
258
  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",
256
259
  "data-status": "verified"
257
- }, Ze = {
260
+ }, et = {
258
261
  key: 3,
259
262
  class: "tv-verified-chip tv-verified-chip-empty inline-flex items-center gap-1 rounded-full border-2 border-dashed border-green-600 bg-transparent px-2 py-0.5 text-[11px] font-semibold leading-none text-green-600",
260
263
  "data-status": "verified-empty"
261
- }, et = {
264
+ }, tt = {
262
265
  key: 5,
263
266
  class: "tv-correction-indicator ml-0.5 text-blue-500",
264
267
  "aria-hidden": !0
265
- }, ct = /* @__PURE__ */ M({
268
+ }, dt = /* @__PURE__ */ M({
266
269
  __name: "VerifiedField",
267
270
  props: {
268
271
  source: {},
269
272
  field: {},
270
273
  original: {},
271
- format: { type: Function }
274
+ format: { type: Function },
275
+ placeholder: {}
272
276
  },
273
277
  setup(e) {
274
- const t = e, n = te(), d = i(() => n.enabled.value), m = i(() => n.loading), r = i(() => {
278
+ const t = e, n = te(), d = o(() => n.enabled.value), h = o(() => n.loading), r = o(() => {
275
279
  var a;
276
280
  return t.source && t.field ? ((a = t.source.__meta) == null ? void 0 : a[t.field]) ?? null : null;
277
- }), v = i(() => Re(r.value)), w = i(() => {
281
+ }), v = o(() => Re(r.value)), w = o(() => {
278
282
  if (t.original !== void 0 && t.original !== null)
279
283
  return t.original;
280
284
  if (r.value && v.value.value !== null && v.value.value !== void 0)
281
285
  return v.value.value;
282
286
  if (t.source && t.field) return t.source[t.field];
283
- }), b = i(() => {
287
+ }), p = o(() => {
284
288
  const a = w.value;
285
289
  return a == null ? "" : typeof t.format == "function" ? t.format(a) : String(a);
286
- }), D = i(() => {
287
- var l, u;
288
- const a = (u = (l = r.value) == null ? void 0 : l.candidates) == null ? void 0 : u.extracted;
290
+ }), D = o(() => {
291
+ var l, c;
292
+ const a = (c = (l = r.value) == null ? void 0 : l.candidates) == null ? void 0 : c.extracted;
289
293
  return Ce(a == null ? void 0 : a.confidence, (a == null ? void 0 : a.state) === "failed");
290
- }), g = i(() => De(r.value)), s = i(() => Ve(r.value)), y = i(() => !g.value && Ne(r.value)), x = i(() => {
294
+ }), b = o(() => De(r.value)), s = o(() => Ve(r.value)), y = o(() => !b.value && Ne(r.value)), x = o(() => {
291
295
  var a, l;
292
296
  return !!((l = (a = r.value) == null ? void 0 : a.candidates) != null && l.override);
293
- }), L = i(() => {
294
- var a, l, u;
295
- return ((u = (l = (a = r.value) == null ? void 0 : a.candidates) == null ? void 0 : l.extracted) == null ? void 0 : u.source) ?? null;
296
- }), E = i(() => !x.value && L.value === "audit"), S = i(() => {
297
- var a, l, u;
298
- return x.value ? ((u = (l = (a = r.value) == null ? void 0 : a.candidates) == null ? void 0 : l.override) == null ? void 0 : u.value) === null ? "confirmed-empty" : "confirmed" : "unverified";
299
- }), C = i(() => d.value), O = i(() => {
297
+ }), L = o(() => {
298
+ var a, l, c;
299
+ return ((c = (l = (a = r.value) == null ? void 0 : a.candidates) == null ? void 0 : l.extracted) == null ? void 0 : c.source) ?? null;
300
+ }), C = o(() => !x.value && L.value === "audit"), S = o(() => {
301
+ var a, l, c;
302
+ return x.value ? ((c = (l = (a = r.value) == null ? void 0 : a.candidates) == null ? void 0 : l.override) == null ? void 0 : c.value) === null ? "confirmed-empty" : "confirmed" : "unverified";
303
+ }), $ = o(() => d.value), O = o(() => {
300
304
  const a = r.value;
301
- return C.value && !!a && ae(a);
302
- }), A = i(() => {
305
+ return $.value && !!a && ae(a);
306
+ }), A = o(() => {
303
307
  var a;
304
- return C.value && !!((a = r.value) != null && a.anchor);
305
- }), q = i(() => {
308
+ return $.value && !!((a = r.value) != null && a.anchor);
309
+ }), q = o(() => {
306
310
  var J, K, Q;
307
311
  const a = t.field ?? "This value", l = A.value ? " — open in the review panel" : " — no place to record a correction";
308
312
  if (S.value === "confirmed-empty")
309
313
  return `${a}: a person confirmed this field is genuinely blank${l}`;
310
314
  if (x.value) return `${a}: verified by a person${l}`;
311
- const u = (K = (J = r.value) == null ? void 0 : J.candidates) == null ? void 0 : K.extracted, I = D.value, _ = [], V = typeof I == "number" ? `${z(I)} (${I}/5)` : z(I);
312
- _.push(E.value ? `Verified by audit — ${V}` : V);
313
- const P = (u == null ? void 0 : u.sources_count) ?? ((Q = u == null ? void 0 : u.sources) == null ? void 0 : Q.length) ?? 0;
314
- return P > 0 && _.push(`${P} cited ${P === 1 ? "page" : "pages"}`), g.value ? _.push(s.value ? "source document conflict" : "sources disagree") : y.value && _.push("value corrected"), `${a}: ${_.join(", ")}${l}`;
315
+ const c = (K = (J = r.value) == null ? void 0 : J.candidates) == null ? void 0 : K.extracted, I = D.value, _ = [], V = typeof I == "number" ? `${z(I)} (${I}/5)` : z(I);
316
+ _.push(C.value ? `Verified by audit — ${V}` : V);
317
+ const P = (c == null ? void 0 : c.sources_count) ?? ((Q = c == null ? void 0 : c.sources) == null ? void 0 : Q.length) ?? 0;
318
+ return P > 0 && _.push(`${P} cited ${P === 1 ? "page" : "pages"}`), b.value ? _.push(s.value ? "source document conflict" : "sources disagree") : y.value && _.push("value corrected"), `${a}: ${_.join(", ")}${l}`;
315
319
  });
316
320
  function G() {
317
321
  var l;
@@ -320,7 +324,7 @@ const Ye = ["data-level"], qe = /* @__PURE__ */ M({
320
324
  anchor: a,
321
325
  workflowInputId: n.workflowInputId,
322
326
  label: t.field ?? null,
323
- value: b.value
327
+ value: p.value
324
328
  });
325
329
  }
326
330
  function le() {
@@ -332,14 +336,14 @@ const Ye = ["data-level"], qe = /* @__PURE__ */ M({
332
336
  const H = F(null);
333
337
  return Y(
334
338
  H,
335
- (a, l, u) => {
339
+ (a, l, c) => {
336
340
  if (!a || typeof MutationObserver > "u") return;
337
341
  const I = () => {
338
342
  a.querySelectorAll(".dx-language-badge-container").forEach((V) => V.remove());
339
343
  };
340
344
  I();
341
345
  const _ = new MutationObserver(I);
342
- _.observe(a, { childList: !0, subtree: !0 }), u(() => _.disconnect());
346
+ _.observe(a, { childList: !0, subtree: !0 }), c(() => _.disconnect());
343
347
  },
344
348
  // `flush: "sync"` — a template ref is populated by Vue's own patch process,
345
349
  // and the DEFAULT ("pre") flush timing runs a watcher reacting to that
@@ -349,29 +353,30 @@ const Ye = ["data-level"], qe = /* @__PURE__ */ M({
349
353
  // conceivably a synchronous export/print path) must never observe the
350
354
  // badge even for one tick, so this cannot wait for the async scheduler.
351
355
  { immediate: !0, flush: "sync" }
352
- ), (a, l) => (o(), c("span", {
353
- class: h(["tv-field", O.value ? "tv-needs-review" : ""])
356
+ ), (a, l) => (i(), u("span", {
357
+ class: g(["tv-field", O.value ? "tv-needs-review" : ""])
354
358
  }, [
355
- m.value ? (o(), B(f(ce), {
359
+ h.value ? (i(), B(f(ce), {
356
360
  key: 0,
357
361
  shape: "rounded",
358
362
  class: "tv-field-skeleton inline-block h-[1em] w-16 align-middle"
359
- })) : (o(), c(j, { key: 1 }, [
360
- p("span", {
361
- class: h(["tv-field-value", A.value ? f(he) : ""]),
363
+ })) : (i(), u(j, { key: 1 }, [
364
+ m("span", {
365
+ class: g(["tv-field-value", A.value ? f(ge) : ""]),
362
366
  onClick: le
363
367
  }, [
364
- ie(a.$slots, "default", {
368
+ oe(a.$slots, "default", {
365
369
  value: w.value,
366
- formatted: b.value
370
+ formatted: p.value
367
371
  }, () => [
368
- p("span", {
372
+ !p.value && e.placeholder ? (i(), u("em", Ke, E(e.placeholder), 1)) : (i(), u("span", {
373
+ key: 1,
369
374
  ref_key: "markdownFallbackRef",
370
375
  ref: H,
371
376
  class: "tv-markdown-fallback-wrap"
372
377
  }, [
373
- T(f(ge), {
374
- "model-value": b.value,
378
+ T(f(be), {
379
+ "model-value": p.value,
375
380
  format: "markdown",
376
381
  theme: "light",
377
382
  "can-edit": !1,
@@ -379,59 +384,59 @@ const Ye = ["data-level"], qe = /* @__PURE__ */ M({
379
384
  "hide-footer": "",
380
385
  class: "tv-markdown-fallback"
381
386
  }, null, 8, ["model-value"])
382
- ], 512)
387
+ ], 512))
383
388
  ])
384
389
  ], 2),
385
- C.value ? (o(), c("span", Ke, [
386
- p("button", {
390
+ $.value ? (i(), u("span", Qe, [
391
+ m("button", {
387
392
  type: "button",
388
- class: h(["tv-overlay", [f(R), A.value ? "cursor-pointer" : "cursor-default"]]),
393
+ class: g(["tv-overlay", [f(R), A.value ? "cursor-pointer" : "cursor-default"]]),
389
394
  "aria-label": q.value,
390
395
  title: q.value,
391
- onClick: l[0] || (l[0] = (u) => A.value ? G() : void 0)
396
+ onClick: l[0] || (l[0] = (c) => A.value ? G() : void 0)
392
397
  }, [
393
- S.value === "unverified" && !E.value ? (o(), B(Je, {
398
+ S.value === "unverified" && !C.value ? (i(), B(Je, {
394
399
  key: 0,
395
400
  state: D.value
396
- }, null, 8, ["state"])) : S.value === "unverified" && E.value ? (o(), c("span", We, "A")) : S.value === "confirmed" ? (o(), c("span", Xe, "✔")) : (o(), c("span", Ze, "✔")),
397
- g.value && !x.value ? (o(), c("span", {
401
+ }, null, 8, ["state"])) : S.value === "unverified" && C.value ? (i(), u("span", Xe, "A")) : S.value === "confirmed" ? (i(), u("span", Ze, "✔")) : (i(), u("span", et, "✔")),
402
+ b.value && !x.value ? (i(), u("span", {
398
403
  key: 4,
399
- class: h(["tv-discrepancy-indicator ml-0.5 text-amber-500", s.value ? "tv-source-discrepancy-indicator" : ""]),
404
+ class: g(["tv-discrepancy-indicator ml-0.5 text-amber-500", s.value ? "tv-source-discrepancy-indicator" : ""]),
400
405
  "aria-hidden": !0
401
- }, "⚠", 2)) : y.value && !x.value ? (o(), c("span", et, "✎")) : k("", !0)
402
- ], 10, Qe)
406
+ }, "⚠", 2)) : y.value && !x.value ? (i(), u("span", tt, "✎")) : k("", !0)
407
+ ], 10, We)
403
408
  ])) : k("", !0)
404
409
  ], 64))
405
410
  ], 2));
406
411
  }
407
- }), tt = { class: "tv-enable-toggle flex items-center justify-between text-sm font-medium text-gray-700" }, nt = { class: "tv-progress-block" }, rt = { class: "mb-1 flex items-baseline justify-between" }, at = { class: "tv-progress-count text-xs font-semibold text-gray-600" }, lt = {
412
+ }), nt = { class: "tv-enable-toggle flex items-center justify-between text-sm font-medium text-gray-700" }, rt = { class: "tv-progress-block" }, at = { class: "mb-1 flex items-baseline justify-between" }, lt = { class: "tv-progress-count text-xs font-semibold text-gray-600" }, ot = {
408
413
  key: 0,
409
414
  class: "tv-attempts-recorded mt-1 text-[11px] text-gray-400"
410
- }, dt = /* @__PURE__ */ M({
415
+ }, ft = /* @__PURE__ */ M({
411
416
  __name: "VerificationChrome",
412
417
  setup(e) {
413
- const t = te(), { enabled: n } = t, d = de(), m = F(!1), r = i(() => Ue(t.data)), v = i(
418
+ const t = te(), { enabled: n } = t, d = de(), h = F(!1), r = o(() => Ue(t.data)), v = o(
414
419
  () => re(t.data).reduce(
415
- (g, s) => {
416
- var y, x, L, E, S, C, O;
417
- return g + (((L = (x = (y = s.meta) == null ? void 0 : y.candidates) == null ? void 0 : x.extracted) == null ? void 0 : L.history_count) ?? ((O = (C = (S = (E = s.meta) == null ? void 0 : E.candidates) == null ? void 0 : S.extracted) == null ? void 0 : C.history) == null ? void 0 : O.length) ?? 0);
420
+ (b, s) => {
421
+ var y, x, L, C, S, $, O;
422
+ return b + (((L = (x = (y = s.meta) == null ? void 0 : y.candidates) == null ? void 0 : x.extracted) == null ? void 0 : L.history_count) ?? ((O = ($ = (S = (C = s.meta) == null ? void 0 : C.candidates) == null ? void 0 : S.extracted) == null ? void 0 : $.history) == null ? void 0 : O.length) ?? 0);
418
423
  },
419
424
  0
420
425
  )
421
426
  ), w = F(!1);
422
427
  Y(
423
428
  () => r.value.percent,
424
- (g) => {
425
- g === 100 && r.value.total > 0 && !w.value && (w.value = !0, d.success("All data points verified 🎯"));
429
+ (b) => {
430
+ b === 100 && r.value.total > 0 && !w.value && (w.value = !0, d.success("All data points verified 🎯"));
426
431
  }
427
432
  );
428
- let b = 0;
433
+ let p = 0;
429
434
  function D() {
430
- const g = document.querySelectorAll(".tv-needs-review");
431
- if (!g.length) return;
432
- b = b % g.length;
433
- const s = g[b];
434
- b++, s.scrollIntoView({ behavior: "smooth", block: "center" }), s.animate(
435
+ const b = document.querySelectorAll(".tv-needs-review");
436
+ if (!b.length) return;
437
+ p = p % b.length;
438
+ const s = b[p];
439
+ p++, s.scrollIntoView({ behavior: "smooth", block: "center" }), s.animate(
435
440
  [
436
441
  { boxShadow: "0 0 0 0 rgba(245, 158, 11, 0.8)" },
437
442
  { boxShadow: "0 0 0 12px rgba(245, 158, 11, 0)" }
@@ -439,31 +444,31 @@ const Ye = ["data-level"], qe = /* @__PURE__ */ M({
439
444
  { duration: 900, iterations: 2 }
440
445
  );
441
446
  }
442
- return (g, s) => (o(), c(j, null, [
443
- p("button", {
447
+ return (b, s) => (i(), u(j, null, [
448
+ m("button", {
444
449
  type: "button",
445
- class: h(["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(R)]),
450
+ class: g(["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(R)]),
446
451
  title: "Verification",
447
- onClick: s[0] || (s[0] = W((y) => m.value = !m.value, ["stop"]))
452
+ onClick: s[0] || (s[0] = W((y) => h.value = !h.value, ["stop"]))
448
453
  }, [
449
454
  T(f(fe), {
450
455
  icon: f(ve),
451
456
  class: "h-5 w-5"
452
457
  }, null, 8, ["icon"]),
453
- f(n) && r.value.needsReview > 0 ? (o(), B(f(pe), {
458
+ f(n) && r.value.needsReview > 0 ? (i(), B(f(pe), {
454
459
  key: 0,
455
460
  value: r.value.needsReview,
456
461
  variant: "warning",
457
462
  class: "tv-needs-review-badge absolute -right-1 -top-1"
458
463
  }, null, 8, ["value"])) : k("", !0)
459
464
  ], 2),
460
- m.value ? (o(), c("div", {
465
+ h.value ? (i(), u("div", {
461
466
  key: 0,
462
- class: h(["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(R)])
467
+ class: g(["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(R)])
463
468
  }, [
464
- p("label", tt, [
465
- s[2] || (s[2] = p("span", null, "Verification overlay", -1)),
466
- oe(p("input", {
469
+ m("label", nt, [
470
+ s[2] || (s[2] = m("span", null, "Verification overlay", -1)),
471
+ ie(m("input", {
467
472
  "onUpdate:modelValue": s[1] || (s[1] = (y) => se(n) ? n.value = y : null),
468
473
  type: "checkbox",
469
474
  class: "tv-enable-checkbox h-4 w-4 accent-gray-900"
@@ -471,11 +476,11 @@ const Ye = ["data-level"], qe = /* @__PURE__ */ M({
471
476
  [ue, f(n)]
472
477
  ])
473
478
  ]),
474
- f(n) && r.value.total > 0 ? (o(), c(j, { key: 0 }, [
475
- p("div", nt, [
476
- p("div", rt, [
477
- s[3] || (s[3] = p("span", { class: "text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, "Review progress", -1)),
478
- p("span", at, $(r.value.verified) + " / " + $(r.value.total), 1)
479
+ f(n) && r.value.total > 0 ? (i(), u(j, { key: 0 }, [
480
+ m("div", rt, [
481
+ m("div", at, [
482
+ s[3] || (s[3] = m("span", { class: "text-[11px] font-semibold uppercase tracking-wider text-gray-400" }, "Review progress", -1)),
483
+ m("span", lt, E(r.value.verified) + " / " + E(r.value.total), 1)
479
484
  ]),
480
485
  T(f(me), {
481
486
  value: r.value.verified,
@@ -487,21 +492,21 @@ const Ye = ["data-level"], qe = /* @__PURE__ */ M({
487
492
  glow: r.value.percent === 100,
488
493
  gradient: ""
489
494
  }, null, 8, ["value", "max", "variant", "striped", "animate-stripes", "glow"]),
490
- v.value > 0 ? (o(), c("div", lt, $(v.value) + " extraction attempt" + $(v.value === 1 ? "" : "s") + " recorded ", 1)) : k("", !0)
495
+ v.value > 0 ? (i(), u("div", ot, E(v.value) + " extraction attempt" + E(v.value === 1 ? "" : "s") + " recorded ", 1)) : k("", !0)
491
496
  ]),
492
- r.value.needsReview > 0 ? (o(), c("button", {
497
+ r.value.needsReview > 0 ? (i(), u("button", {
493
498
  key: 0,
494
499
  type: "button",
495
- class: h(["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(R)]),
500
+ class: g(["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(R)]),
496
501
  onClick: W(D, ["stop"])
497
502
  }, [
498
- p("span", null, $(r.value.needsReview) + " need" + $(r.value.needsReview === 1 ? "s" : "") + " review", 1),
499
- s[4] || (s[4] = p("span", { "aria-hidden": "true" }, "→", -1))
503
+ m("span", null, E(r.value.needsReview) + " need" + E(r.value.needsReview === 1 ? "s" : "") + " review", 1),
504
+ s[4] || (s[4] = m("span", { "aria-hidden": "true" }, "→", -1))
500
505
  ], 2)) : k("", !0)
501
506
  ], 64)) : k("", !0)
502
507
  ], 2)) : k("", !0),
503
- T(f(be), {
504
- class: h(f(R))
508
+ T(f(he), {
509
+ class: g(f(R))
505
510
  }, null, 8, ["class"])
506
511
  ], 64));
507
512
  }
@@ -511,20 +516,20 @@ export {
511
516
  Ie as CONFIDENCE_SCALE,
512
517
  Je as ConfidenceIcon,
513
518
  Pe as DATA_POINT_ACTIVATED,
514
- he as EDITABLE_CLASS,
519
+ ge as EDITABLE_CLASS,
515
520
  Z as ENABLED_STORAGE_KEY,
516
521
  ne as RESOLUTION_PRIORITY,
517
522
  Fe as TEMPLATE_MESSAGE_SOURCE,
518
523
  Me as TEMPLATE_PROTOCOL_VERSION,
519
- dt as VerificationChrome,
520
- ct as VerifiedField,
524
+ ft as VerificationChrome,
525
+ dt as VerifiedField,
521
526
  Le as candidatesDisagree,
522
527
  Ue as computeProgress,
523
528
  z as confidenceStateLabel,
524
529
  Ce as confidenceStateOf,
525
530
  Be as embedderOrigin,
526
531
  De as hasDiscrepancy,
527
- ut as initVerification,
532
+ ct as initVerification,
528
533
  je as notifyDataPointActivated,
529
534
  Ee as ratingLevel,
530
535
  Te as resolveCandidates,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thehammer/template-verification",
3
- "version": "0.2.22",
3
+ "version": "0.2.23",
4
4
  "description": "Read-write verification overlay for rendered template apps — per-data-point confidence, discrepancy, 3-source resolution (override > extracted > claim), inline edit, and a recursive comparison page. Consumes the host's __meta sidecar; fetches nothing.",
5
5
  "license": "MIT",
6
6
  "type": "module",