From 1038868cea4f168fae7269221e4540f168d38df2 Mon Sep 17 00:00:00 2001 From: Omer Celik Date: Mon, 27 Jul 2026 12:39:16 +0300 Subject: [PATCH 1/3] =?UTF-8?q?test(ui):=20close=20the=20coverage=20gaps?= =?UTF-8?q?=20=E2=80=94=20and=20the=20deadline=20lie=20one=20of=20them=20w?= =?UTF-8?q?as=20hiding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Measured instead of guessed: `vitest --coverage` over kit and console, then every uncovered branch read and judged. Most were real behaviour nobody had exercised. The bug: `deadlineVerdict` judged a LIVE run only on its prediction, so a run still going an hour past its deadline reported "on track" — the one thing that is certainly false. It now judges the clock first (and takes `now`, so the verdict is testable instead of reading the wall clock behind the caller's back). Newly covered, all of it behaviour an operator depends on: - the "did not reach the server" path in bulk, campaign and archival — a verb whose fate is UNKNOWN must never read as applied, - the kit's unexpected-status copy (`unexpected 503`), which says something different from "never left the browser", - KeysetTable's stale-load guard: a superseded page must not overwrite the newer one, - a decided bulk batch's evidence (who, when, why), an empty definition, a lifted hold, a campaign with no window, a notification's tenant and correlation id, - switching fleet closes the run that belonged to the other one; a paused job offers resume and posts the frozen route, - id encoding for keys with slashes and spaces, and `rerun`'s route + its throw on an unexpected status. The notification panel now RE-READS the open row by id (evidence moves: Requested → Sent/Failed), which also gave the contract's by-id route its first exercise. A coverage floor now runs in CI on every PR (kit 95/90, console 97/85), because these gaps were branches nobody thought to exercise — a number is the only thing that notices that happening again. kit 63 tests, console 101. Co-Authored-By: Claude Opus 5 --- docs/rfc/goldpath-console.md | 4 +- ui/console/coverage/ArchivalPanel.tsx.html | 1258 +++++++++++ ui/console/coverage/BulkPanel.tsx.html | 1159 ++++++++++ ui/console/coverage/CampaignPanel.tsx.html | 1468 +++++++++++++ ui/console/coverage/Console.tsx.html | 409 ++++ .../coverage/NotificationPanel.tsx.html | 1027 +++++++++ ui/console/coverage/RunConsole.tsx.html | 787 +++++++ ui/console/coverage/adminClient.ts.html | 1909 +++++++++++++++++ ui/console/coverage/base.css | 224 ++ ui/console/coverage/block-navigation.js | 87 + ui/console/coverage/clover.xml | 1704 +++++++++++++++ ui/console/coverage/coverage-final.json | 8 + ui/console/coverage/favicon.png | Bin 0 -> 445 bytes ui/console/coverage/index.html | 206 ++ ui/console/coverage/prettify.css | 1 + ui/console/coverage/prettify.js | 2 + ui/console/coverage/sort-arrow-sprite.png | Bin 0 -> 138 bytes ui/console/coverage/sorter.js | 210 ++ ui/console/package.json | 13 +- ui/console/pnpm-lock.yaml | 414 ++++ ui/console/src/ArchivalPanel.test.tsx | 41 + ui/console/src/BulkPanel.test.tsx | 36 + ui/console/src/CampaignPanel.test.tsx | 22 + ui/console/src/NotificationPanel.test.tsx | 36 +- ui/console/src/NotificationPanel.tsx | 27 +- ui/console/src/RunConsole.test.tsx | 42 + ui/console/src/adminClient.test.ts | 37 + ui/console/vitest.config.ts | 7 + ui/kit/coverage/base.css | 224 ++ ui/kit/coverage/block-navigation.js | 87 + ui/kit/coverage/clover.xml | 464 ++++ ui/kit/coverage/coverage-final.json | 11 + ui/kit/coverage/favicon.png | Bin 0 -> 445 bytes ui/kit/coverage/index.html | 131 ++ ui/kit/coverage/prettify.css | 1 + ui/kit/coverage/prettify.js | 2 + ui/kit/coverage/sort-arrow-sprite.png | Bin 0 -> 138 bytes ui/kit/coverage/sorter.js | 210 ++ ui/kit/coverage/src/adminResult.ts.html | 166 ++ .../coverage/src/components/AppShell.tsx.html | 487 +++++ .../src/components/AuditBlock.tsx.html | 343 +++ .../coverage/src/components/Banner.tsx.html | 208 ++ .../src/components/KeysetTable.tsx.html | 475 ++++ .../src/components/RunProgress.tsx.html | 478 +++++ .../src/components/StateBadge.tsx.html | 190 ++ .../src/components/VerbButton.tsx.html | 439 ++++ ui/kit/coverage/src/components/index.html | 206 ++ ui/kit/coverage/src/duration.ts.html | 133 ++ ui/kit/coverage/src/index.html | 146 ++ ui/kit/coverage/src/status.ts.html | 217 ++ ui/kit/package.json | 3 +- ui/kit/pnpm-lock.yaml | 414 ++++ ui/kit/src/components/AppShell.test.tsx | 23 + ui/kit/src/components/KeysetTable.test.tsx | 49 + ui/kit/src/components/RunProgress.test.tsx | 51 +- ui/kit/src/components/RunProgress.tsx | 14 +- ui/kit/src/components/VerbButton.test.tsx | 17 + ui/kit/vitest.config.ts | 7 + 58 files changed, 16310 insertions(+), 24 deletions(-) create mode 100644 ui/console/coverage/ArchivalPanel.tsx.html create mode 100644 ui/console/coverage/BulkPanel.tsx.html create mode 100644 ui/console/coverage/CampaignPanel.tsx.html create mode 100644 ui/console/coverage/Console.tsx.html create mode 100644 ui/console/coverage/NotificationPanel.tsx.html create mode 100644 ui/console/coverage/RunConsole.tsx.html create mode 100644 ui/console/coverage/adminClient.ts.html create mode 100644 ui/console/coverage/base.css create mode 100644 ui/console/coverage/block-navigation.js create mode 100644 ui/console/coverage/clover.xml create mode 100644 ui/console/coverage/coverage-final.json create mode 100644 ui/console/coverage/favicon.png create mode 100644 ui/console/coverage/index.html create mode 100644 ui/console/coverage/prettify.css create mode 100644 ui/console/coverage/prettify.js create mode 100644 ui/console/coverage/sort-arrow-sprite.png create mode 100644 ui/console/coverage/sorter.js create mode 100644 ui/kit/coverage/base.css create mode 100644 ui/kit/coverage/block-navigation.js create mode 100644 ui/kit/coverage/clover.xml create mode 100644 ui/kit/coverage/coverage-final.json create mode 100644 ui/kit/coverage/favicon.png create mode 100644 ui/kit/coverage/index.html create mode 100644 ui/kit/coverage/prettify.css create mode 100644 ui/kit/coverage/prettify.js create mode 100644 ui/kit/coverage/sort-arrow-sprite.png create mode 100644 ui/kit/coverage/sorter.js create mode 100644 ui/kit/coverage/src/adminResult.ts.html create mode 100644 ui/kit/coverage/src/components/AppShell.tsx.html create mode 100644 ui/kit/coverage/src/components/AuditBlock.tsx.html create mode 100644 ui/kit/coverage/src/components/Banner.tsx.html create mode 100644 ui/kit/coverage/src/components/KeysetTable.tsx.html create mode 100644 ui/kit/coverage/src/components/RunProgress.tsx.html create mode 100644 ui/kit/coverage/src/components/StateBadge.tsx.html create mode 100644 ui/kit/coverage/src/components/VerbButton.tsx.html create mode 100644 ui/kit/coverage/src/components/index.html create mode 100644 ui/kit/coverage/src/duration.ts.html create mode 100644 ui/kit/coverage/src/index.html create mode 100644 ui/kit/coverage/src/status.ts.html diff --git a/docs/rfc/goldpath-console.md b/docs/rfc/goldpath-console.md index 1da22d2..5d57653 100644 --- a/docs/rfc/goldpath-console.md +++ b/docs/rfc/goldpath-console.md @@ -62,7 +62,9 @@ custom-develop ON, with the same kit, the same way they add features to the back landing page: operators open consoles to answer "is anything wrong", not to browse. - **D3 — Proof bar (UI is claims-are-proofs too).** Kit: component tests (vitest) on the composites (keyset table paging, verb button's - refusal surface, state mapping). Console: the smoke drives THREE real apps — one open, + refusal surface, state mapping), under a COVERAGE FLOOR that CI enforces (kit 95/90, + console 97/85 statements/branches) — the floor exists because the gaps that hid real + bugs here were branches nobody had thought to exercise, not tests anyone had deleted. Console: the smoke drives THREE real apps — one open, one behind the auth floor, one tenant-scoped — because how the console behaves when it is REFUSED is as much a claim as how it behaves when it is welcome; plus a service that dies mid-session. Runnable on demand (`.github/workflows/console-smoke.yml`), not only diff --git a/ui/console/coverage/ArchivalPanel.tsx.html b/ui/console/coverage/ArchivalPanel.tsx.html new file mode 100644 index 0000000..58b855a --- /dev/null +++ b/ui/console/coverage/ArchivalPanel.tsx.html @@ -0,0 +1,1258 @@ + + + + + + Code coverage report for ArchivalPanel.tsx + + + + + + + + + +
+
+

All files ArchivalPanel.tsx

+
+ +
+ 100% + Statements + 308/308 +
+ + +
+ 89.88% + Branches + 80/89 +
+ + +
+ 77.77% + Functions + 21/27 +
+ + +
+ 100% + Lines + 308/308 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +3921x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +4x +4x +4x +4x +  +  +  +  +  +  +  +1x +118x +118x +118x +118x +118x +118x +118x +  +118x +118x +118x +118x +  +  +118x +  +118x +118x +4x +4x +4x +  +118x +21x +21x +21x +21x +20x +20x +20x +21x +21x +21x +21x +21x +118x +  +  +118x +46x +13x +13x +13x +13x +13x +13x +13x +13x +118x +  +118x +118x +118x +118x +  +118x +118x +118x +118x +  +118x +9x +9x +9x +9x +9x +9x +9x +  +118x +  +4x +4x +4x +4x +3x +  +3x +2x +1x +4x +1x +1x +1x +4x +  +118x +  +118x +118x +118x +  +118x +118x +118x +118x +108x +108x +108x +108x +108x +108x +108x +  +108x +108x +108x +108x +108x +108x +  +108x +108x +108x +108x +118x +118x +118x +118x +  +118x +1x +1x +1x +  +  +118x +6x +6x +4x +4x +4x +  +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +  +6x +  +  +118x +118x +118x +118x +  +118x +118x +118x +118x +118x +1x +1x +1x +1x +  +118x +108x +108x +108x +118x +118x +118x +118x +  +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +  +118x +118x +  +118x +  +118x +118x +  +118x +10x +10x +10x +  +  +118x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +  +  +17x +17x +17x +17x +17x +17x +17x +17x +17x +  +17x +6x +6x +6x +  +17x +2x +  +  +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +  +17x +  +  +1x +1x +1x +1x +  +  +17x +17x +17x +17x +  +17x +17x +  +  +17x +17x +1x +1x +1x +  +17x +17x +  +  +118x +118x +118x +118x +118x +  +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +88x +1x +  +87x +  +118x +118x +118x +118x +118x +118x +118x +  +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +118x +  +118x +  +118x +118x +118x +  +118x + 
import { useCallback, useEffect, useState } from "react";
+import { Banner, humanizeSeconds, KeysetTable, StateBadge, VerbButton } from "@goldpath/kit";
+import type { VerbOutcome } from "@goldpath/kit";
+import type {
+  AdminClient,
+  ArchiveDefinitionStatus,
+  ArchiveEntry,
+  ChainFinding,
+  ErasureRecord,
+  LegalHold,
+} from "./adminClient";
+ 
+export interface ArchivalPanelProps {
+  client: AdminClient;
+  /** Injected in tests; only used to age the hold list. */
+  now?: Date;
+}
+ 
+/** The verb envelope, adapted to the kit's outcome type — refusals stay data. */
+async function asOutcome(call: Promise<{ ok: boolean; message: string }>): Promise<VerbOutcome> {
+  const result = await call;
+  return result.ok ? { kind: "ok", message: result.message } : { kind: "refused", message: result.message };
+}
+ 
+/**
+ * The archival panel (console RFC §3): the chain's health, retrieval by key, and the three
+ * lifecycle verbs — hold, lift, erase — each of which writes its own evidence row. The
+ * archive/purge/verify RUNS live in the run console; what this screen owns is the
+ * lifecycle and the proof that the chain is still intact.
+ */
+export function ArchivalPanel({ client, now }: ArchivalPanelProps) {
+  const [definitions, setDefinitions] = useState<ArchiveDefinitionStatus[] | null>(null);
+  const [definition, setDefinition] = useState<string>("");
+  const [key, setKey] = useState<string>("");
+  const [entry, setEntry] = useState<ArchiveEntry | null>(null);
+  const [lookedUp, setLookedUp] = useState<string | null>(null);
+  const [revealDocument, setRevealDocument] = useState(false);
+  const [findings, setFindings] = useState<{ definition: string; findings: ChainFinding[] } | null>(null);
+  // A verification that could not RUN is its own state: neither "verifies" nor "broken".
+  const [verifyFailed, setVerifyFailed] = useState<string | null>(null);
+  const [includeLifted, setIncludeLifted] = useState(false);
+  const [error, setError] = useState<string | null>(null);
+  const [refreshToken, setRefreshToken] = useState(0);
+  // A lifecycle verb changes what the entry IS (held, erased), so the buttons around it
+  // re-render — the outcome has to live above them.
+  const [outcome, setOutcome] = useState<VerbOutcome | null>(null);
+ 
+  const refresh = () => setRefreshToken((token) => token + 1);
+  const settle = (result: VerbOutcome) => {
+    setOutcome(result);
+    refresh();
+  };
+ 
+  useEffect(() => {
+    let live = true;
+    client
+      .archiveDefinitions()
+      .then((found) => {
+        if (!live) return;
+        setDefinitions(found);
+        setDefinition((current) => current || found[0]?.name || "");
+      })
+      .catch(() => live && setError("the archive definitions could not be loaded"));
+    return () => {
+      live = false;
+    };
+  }, [client, refreshToken]);
+ 
+  // The open entry re-reads on refresh: a hold or an erasure changes the very row shown.
+  useEffect(() => {
+    if (!lookedUp || !definition) return;
+    let live = true;
+    client
+      .archiveEntry(definition, lookedUp)
+      .then((found) => live && setEntry(found))
+      .catch(() => live && setError(`entry ${lookedUp} could not be read`));
+    return () => {
+      live = false;
+    };
+  }, [client, definition, lookedUp, refreshToken]);
+ 
+  const loadHolds = useCallback(
+    async (_cursor: string | null, take: number) => ({ items: await client.holds(includeLifted, take), nextCursor: null }),
+    [client, includeLifted, refreshToken],
+  );
+ 
+  const loadErasures = useCallback(
+    async (_cursor: string | null, take: number) => ({ items: await client.erasures(take), nextCursor: null }),
+    [client, refreshToken],
+  );
+ 
+  const lookUp = () => {
+    const trimmed = key.trim();
+    if (!trimmed) return;
+    setOutcome(null);
+    setRevealDocument(false);
+    setEntry(null);
+    setLookedUp(trimmed);
+  };
+ 
+  const verify = async (name: string): Promise<VerbOutcome> => {
+    // Clear FIRST: a stale verdict from the previous run must never stand in for this one.
+    setFindings(null);
+    setVerifyFailed(null);
+    try {
+      const found = await client.verifyChain(name);
+      setFindings({ definition: name, findings: found });
+      // An empty finding list is the good news, and it is said as such.
+      return found.length === 0
+        ? { kind: "ok", message: `${name}: the chain verifies — no findings` }
+        : { kind: "refused", message: `${name}: ${found.length} chain finding(s) — see below` };
+    } catch {
+      setVerifyFailed(name);
+      return { kind: "error", status: 0 };
+    }
+  };
+ 
+  const clock = now ?? new Date();
+ 
+  return (
+    <div data-testid="archival-panel" className="space-y-6">
+      {error && <Banner tone="danger">{error}</Banner>}
+ 
+      <section>
+        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Archives</h2>
+        <ul className="space-y-2">
+          {(definitions ?? []).map((archive) => (
+            <li key={archive.name} className="flex flex-wrap items-center gap-3 rounded-md border border-border/60 px-3 py-2">
+              <span className="text-sm font-medium">{archive.name}</span>
+              <span className="text-xs text-faint">{archive.entries} entries</span>
+              <span className={`text-xs ${archive.dueBacklog > 0 ? "text-warning" : "text-faint"}`}>
+                {archive.dueBacklog} due to archive
+              </span>
+              <span className="text-xs text-faint">{archive.activeHolds} active holds</span>
+              {/* The chain head and the purge watermark together say how much history is provable. */}
+              <span className="text-xs text-faint">chain head {archive.chainHead} · purged through {archive.purgedThrough}</span>
+              <span className="ml-auto">
+                <VerbButton
+                  label={`verify ${archive.name}`}
+                  confirm={`Verify the ${archive.name} chain end to end? This reads every entry.`}
+                  execute={() => verify(archive.name)}
+                  // Quiet: the findings section below says it richer, and says it in one place.
+                  quiet
+                />
+              </span>
+            </li>
+          ))}
+          {definitions?.length === 0 && <li className="text-xs text-faint">No archives are defined in this app.</li>}
+        </ul>
+      </section>
+ 
+      {verifyFailed && (
+        <Banner tone="warning" live="alert">
+          {verifyFailed}: the verification could not be run — the chain's state is unknown, not proven good.
+        </Banner>
+      )}
+ 
+      {findings && (
+        <section data-testid="chain-findings">
+          {findings.findings.length === 0 ? (
+            <Banner tone="success" live="status">
+              {findings.definition}: the chain verifies — every entry links to the one before it.
+            </Banner>
+          ) : (
+            <>
+              <Banner tone="danger" live="alert">
+                {findings.definition}: the chain does NOT verify — {findings.findings.length} finding(s).
+              </Banner>
+              <ul className="mt-2 space-y-1">
+                {findings.findings.map((finding) => (
+                  <li key={`${finding.definition}-${finding.chainIndex}`} className="flex flex-wrap items-baseline gap-2 text-xs">
+                    <span className="font-mono">#{finding.chainIndex}</span>
+                    <span className="font-mono">{finding.aggregateKey}</span>
+                    <span className="text-danger">{finding.problem}</span>
+                  </li>
+                ))}
+              </ul>
+            </>
+          )}
+        </section>
+      )}
+ 
+      <section>
+        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Retrieve</h2>
+        <div className="flex flex-wrap items-end gap-2">
+          <label className="flex flex-col gap-1 text-xs text-muted-foreground">
+            Archive
+            <select
+              aria-label="archive"
+              className="rounded-md border border-border bg-background px-2 py-1 text-sm text-foreground"
+              value={definition}
+              onChange={(event) => {
+                setDefinition(event.target.value);
+                setEntry(null);
+                setLookedUp(null);
+              }}
+            >
+              {(definitions ?? []).map((archive) => (
+                <option key={archive.name} value={archive.name}>
+                  {archive.name}
+                </option>
+              ))}
+            </select>
+          </label>
+          <label className="flex flex-col gap-1 text-xs text-muted-foreground">
+            Aggregate key
+            <input
+              aria-label="aggregate key"
+              className="w-64 rounded-md border border-border bg-background px-2 py-1 text-sm text-foreground"
+              value={key}
+              onChange={(event) => setKey(event.target.value)}
+              onKeyDown={(event) => event.key === "Enter" && lookUp()}
+            />
+          </label>
+          <button
+            className="rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-accent"
+            onClick={lookUp}
+          >
+            retrieve
+          </button>
+        </div>
+        {/* The archive is keyed, not browsable — saying so beats an empty search box. */}
+        <p className="mt-1 text-xs text-faint">
+          An archive is retrieved by key, never browsed: the contract has no listing route, and the console invents none.
+        </p>
+      </section>
+ 
+      {lookedUp && !entry && (
+        <Banner tone="info">
+          No entry for “{lookedUp}” in {definition} — it may never have been archived, or it may have been purged.
+        </Banner>
+      )}
+ 
+      {entry && (
+        <section data-testid="archive-entry" className="rounded-lg border border-border p-4">
+          <div className="mb-3 flex flex-wrap items-center gap-3">
+            <h2 className="text-sm font-medium">
+              {entry.definition} · <span className="font-mono">{entry.aggregateKey}</span>
+            </h2>
+            {entry.erasedAt && <StateBadge state="Erased" tone="warning" />}
+            {entry.tenant && <span className="text-xs text-faint">tenant {entry.tenant}</span>}
+            <span className="ml-auto flex flex-wrap gap-2">
+              <VerbButton
+                label="hold"
+                confirm={`Place a legal hold on ${entry.aggregateKey}? It will survive retention purges until lifted.`}
+                note={{ label: "case reference (required)", required: true }}
+                execute={(caseReference) => asOutcome(client.placeHold(entry.definition, entry.aggregateKey, caseReference ?? ""))}
+                onDone={settle}
+                quiet
+              />
+              <VerbButton
+                label="lift-hold"
+                confirm={`Lift the hold on ${entry.aggregateKey}? Retention applies again from now on.`}
+                execute={() => asOutcome(client.liftHold(entry.definition, entry.aggregateKey))}
+                onDone={settle}
+                quiet
+              />
+              <VerbButton
+                label="erase"
+                // Erasure redacts classified fields IN PLACE and re-stamps the content
+                // hash; the chain stays verifiable because the sealed hash is kept.
+                confirm={`Erase the classified fields of ${entry.aggregateKey}? This cannot be undone — the entry stays in the chain, redacted, and the erasure is recorded.`}
+                note={{ label: "subject key (required)", required: true }}
+                execute={(subjectKey) => asOutcome(client.erase(entry.definition, entry.aggregateKey, subjectKey ?? ""))}
+                onDone={settle}
+                quiet
+                destructive
+              />
+            </span>
+          </div>
+ 
+          {outcome && outcome.kind !== "error" && (
+            <Banner tone={outcome.kind === "ok" ? "success" : "danger"} live={outcome.kind === "ok" ? "status" : "alert"}>
+              {outcome.message}
+            </Banner>
+          )}
+          {outcome?.kind === "error" && (
+            <Banner tone="warning">the verb did not reach the server — it may not have been applied</Banner>
+          )}
+ 
+          <dl className="mt-3 grid grid-cols-2 gap-x-6 gap-y-2 text-xs sm:grid-cols-3">
+            <div>
+              <dt className="text-faint">Chain index</dt>
+              <dd>{entry.chainIndex}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Due / archived</dt>
+              <dd>
+                {entry.dueAt} → {entry.archivedAt}
+              </dd>
+            </div>
+            <div>
+              <dt className="text-faint">Schema version</dt>
+              <dd>{entry.schemaVersion}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Chain hash (sealed)</dt>
+              <dd className="font-mono break-all">{entry.chainHash}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Content hash (current)</dt>
+              <dd className="font-mono break-all">{entry.contentHash}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Previous hash</dt>
+              <dd className="font-mono break-all">{entry.previousHash || "genesis"}</dd>
+            </div>
+          </dl>
+ 
+          {entry.erasedAt && (
+            // Divergence WITHOUT an erasure stamp is tamper; with one, it is the record
+            // of a redaction — the panel spells out which of the two this is.
+            <p className="mt-3 text-xs text-warning">
+              Redacted {entry.erasedAt}: the current content hash differs from the sealed one BY DESIGN
+              {entry.preErasureContentHash ? ` (pre-erasure hash ${entry.preErasureContentHash} is kept, so the chain still verifies)` : ""}.
+            </p>
+          )}
+ 
+          <div className="mt-4">
+            <button
+              className="rounded-md border border-border bg-background px-3 py-1 text-xs hover:bg-accent"
+              onClick={() => setRevealDocument((shown) => !shown)}
+            >
+              {revealDocument ? "hide document" : "reveal document"}
+            </button>
+            {/* Hidden by DEFAULT: the API returns the whole archived graph, and an operator
+                opening a screen should not spray personal data across it by accident. */}
+            <span className="ml-2 text-xs text-faint">the archived graph, as stored — it may contain personal data</span>
+            {revealDocument && (
+              <pre className="mt-2 max-h-64 overflow-auto rounded-md border border-border bg-muted p-3 text-xs">
+                {entry.document}
+              </pre>
+            )}
+          </div>
+        </section>
+      )}
+ 
+      <section>
+        <div className="mb-2 flex flex-wrap items-center gap-3">
+          <h2 className="text-sm font-medium text-muted-foreground">Legal holds</h2>
+          <label className="flex items-center gap-2 text-xs text-muted-foreground">
+            <input type="checkbox" checked={includeLifted} onChange={(event) => setIncludeLifted(event.target.checked)} />
+            include lifted
+          </label>
+        </div>
+        <KeysetTable<LegalHold>
+          key={`holds-${includeLifted}-${refreshToken}`}
+          columns={[
+            { header: "Archive", cell: (hold) => hold.definition },
+            { header: "Key", cell: (hold) => <span className="font-mono text-xs">{hold.aggregateKey}</span> },
+            { header: "Case", cell: (hold) => hold.caseReference },
+            { header: "Placed", cell: (hold) => `${hold.placedBy} · ${humanizeSeconds((clock.getTime() - Date.parse(hold.placedAt)) / 1000)} ago` },
+            {
+              header: "State",
+              cell: (hold) =>
+                hold.liftedAt ? (
+                  <span className="text-xs text-faint">lifted by {hold.liftedBy} at {hold.liftedAt}</span>
+                ) : (
+                  <StateBadge state="Held" tone="warning" />
+                ),
+            },
+          ]}
+          loadPage={loadHolds}
+          rowKey={(hold) => String(hold.id)}
+          emptyMessage={includeLifted ? "No holds have ever been placed." : "No active holds."}
+        />
+      </section>
+ 
+      <section>
+        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Erasures</h2>
+        <KeysetTable<ErasureRecord>
+          key={`erasures-${refreshToken}`}
+          columns={[
+            { header: "Subject", cell: (record) => <span className="font-mono text-xs">{record.subjectKey}</span> },
+            { header: "Requested by", cell: (record) => record.requestedBy },
+            { header: "At", cell: (record) => record.requestedAt },
+            { header: "Entries", align: "right", cell: (record) => record.entriesAffected },
+            { header: "Detail", cell: (record) => record.detail ?? "—" },
+          ]}
+          loadPage={loadErasures}
+          rowKey={(record) => String(record.id)}
+          emptyMessage="No erasure has been performed."
+        />
+        {/* The record IS the answer to a subject request — that is why it is a list, not a log line. */}
+        <p className="mt-1 text-xs text-faint">
+          Each row is the durable answer to one erasure request: who asked, when, and how many entries it touched.
+        </p>
+      </section>
+    </div>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/console/coverage/BulkPanel.tsx.html b/ui/console/coverage/BulkPanel.tsx.html new file mode 100644 index 0000000..b974206 --- /dev/null +++ b/ui/console/coverage/BulkPanel.tsx.html @@ -0,0 +1,1159 @@ + + + + + + Code coverage report for BulkPanel.tsx + + + + + + + + + +
+
+

All files BulkPanel.tsx

+
+ +
+ 100% + Statements + 279/279 +
+ + +
+ 86.17% + Branches + 81/94 +
+ + +
+ 95.23% + Functions + 20/21 +
+ + +
+ 100% + Lines + 279/279 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +3591x +  +  +  +  +  +  +  +  +  +5x +5x +5x +5x +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +1x +  +  +  +  +  +  +1x +76x +76x +76x +76x +76x +  +  +76x +76x +76x +76x +76x +  +76x +  +  +76x +5x +5x +5x +  +76x +23x +23x +23x +23x +22x +22x +22x +23x +23x +23x +23x +23x +76x +  +76x +76x +  +  +24x +22x +24x +76x +76x +  +  +76x +76x +15x +15x +15x +  +15x +15x +76x +76x +  +  +  +76x +27x +76x +  +76x +32x +17x +17x +17x +  +15x +15x +15x +15x +15x +15x +15x +15x +76x +  +  +  +76x +2x +2x +2x +  +  +  +1x +1x +1x +1x +1x +1x +2x +  +76x +17x +17x +  +76x +  +76x +76x +76x +  +76x +55x +55x +55x +55x +55x +55x +55x +55x +  +  +76x +76x +76x +76x +57x +57x +57x +112x +112x +112x +57x +57x +1x +  +57x +76x +76x +76x +  +76x +76x +76x +76x +  +76x +76x +76x +76x +76x +76x +  +76x +57x +57x +57x +76x +76x +76x +76x +76x +76x +  +  +76x +76x +76x +76x +4x +4x +4x +4x +4x +  +76x +76x +76x +  +76x +76x +  +76x +76x +76x +76x +  +76x +76x +76x +76x +76x +76x +1x +1x +1x +  +76x +76x +472x +472x +472x +76x +76x +76x +  +76x +76x +76x +76x +76x +76x +40x +40x +40x +  +76x +76x +76x +76x +76x +76x +76x +76x +76x +76x +76x +  +76x +20x +20x +20x +20x +20x +20x +20x +20x +20x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +17x +  +17x +17x +17x +17x +17x +17x +17x +  +20x +  +20x +  +  +8x +8x +8x +  +  +20x +2x +  +  +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +  +20x +  +  +1x +1x +1x +1x +1x +  +  +20x +20x +20x +20x +19x +19x +19x +19x +19x +19x +19x +19x +19x +19x +19x +19x +  +20x +  +76x +  +76x + 
import { useCallback, useEffect, useRef, useState } from "react";
+import { Banner, humanizeSeconds, KeysetTable, StateBadge, VerbButton } from "@goldpath/kit";
+import type { VerbOutcome } from "@goldpath/kit";
+import type { AdminClient, BulkBatchInfo, BulkDefinitionStatus, BulkRowError } from "./adminClient";
+ 
+export interface BulkPanelProps {
+  client: AdminClient;
+}
+ 
+/** The verb envelope, adapted to the kit's outcome type — refusals stay data. */
+async function asOutcome(call: Promise<{ ok: boolean; message: string }>): Promise<VerbOutcome> {
+  const result = await call;
+  return result.ok ? { kind: "ok", message: result.message } : { kind: "refused", message: result.message };
+}
+ 
+/** The states the intake surface can filter by — the engine's own enum, in its order. */
+const STATES = [
+  "Received",
+  "Validating",
+  "Validated",
+  "Approved",
+  "Rejected",
+  "Executing",
+  "Completed",
+  "CompletedWithFailures",
+] as const;
+ 
+/** The gate only opens on a validated batch; everywhere else the decision is already made. */
+const GATED = "Validated";
+ 
+/**
+ * The bulk intake panel (console RFC §3): upload → validation report → the four-eyes gate.
+ * The run half of a batch lives in the RUN console (a batch executes as a run) — this
+ * screen owns only what the intake surface owns, and links the two by run id.
+ */
+export function BulkPanel({ client }: BulkPanelProps) {
+  const [definitions, setDefinitions] = useState<BulkDefinitionStatus[] | null>(null);
+  const [state, setState] = useState<string>("");
+  const [selectedId, setSelectedId] = useState<string | null>(null);
+  const [selected, setSelected] = useState<BulkBatchInfo | null>(null);
+  const [error, setError] = useState<string | null>(null);
+  // The gate's outcome lives HERE, not in the buttons: approving moves the batch out of
+  // the gated state, so the gate — and any message inside it — unmounts on the refresh.
+  const [decision, setDecision] = useState<VerbOutcome | null>(null);
+  const [refreshToken, setRefreshToken] = useState(0);
+  const fileInput = useRef<HTMLInputElement>(null);
+  const [uploadInto, setUploadInto] = useState<string>("");
+  const [file, setFile] = useState<File | null>(null);
+ 
+  const refresh = () => setRefreshToken((token) => token + 1);
+ 
+  /** A gate decision: keep the message, then re-read the batch it changed. */
+  const settle = (outcome: VerbOutcome) => {
+    setDecision(outcome);
+    refresh();
+  };
+ 
+  useEffect(() => {
+    let live = true;
+    client
+      .bulkDefinitions()
+      .then((found) => {
+        if (!live) return;
+        setDefinitions(found);
+        setUploadInto((current) => current || found[0]?.name || "");
+      })
+      .catch(() => live && setError("the bulk definitions could not be loaded"));
+    return () => {
+      live = false;
+    };
+  }, [client, refreshToken]);
+ 
+  const loadBatches = useCallback(
+    async (_cursor: string | null, take: number) => {
+      // The batch list is take-bounded, not cursor-paged (frozen contract): one page,
+      // honestly ended — the table stops instead of faking a cursor it was never given.
+      const batches = await client.bulkBatches({ state: state || undefined, take });
+      return { items: batches, nextCursor: null };
+    },
+    [client, state, refreshToken],
+  );
+ 
+  // The validation report IS keyset-paged: the cursor is the last row number of the page.
+  const loadErrors = useCallback(
+    async (cursor: string | null, take: number) => {
+      if (!selectedId) return { items: [] as BulkRowError[], nextCursor: null };
+      const errors = await client.bulkErrors(selectedId, { afterRow: cursor ? Number(cursor) : 0, take });
+      const last = errors.at(-1);
+      // A short page is the end; a full page hands back the last row number as the cursor.
+      return { items: errors, nextCursor: errors.length < take || !last ? null : String(last.rowNumber) };
+    },
+    [client, selectedId, refreshToken],
+  );
+ 
+  // The open batch RE-FETCHES on refresh rather than closing: a gate outcome renders
+  // inside this panel, so tearing it down would hide the message just produced.
+  useEffect(() => {
+    setDecision(null);   // a decision belongs to the batch it was made on
+  }, [selectedId]);
+ 
+  useEffect(() => {
+    if (!selectedId) {
+      setSelected(null);
+      return;
+    }
+ 
+    let live = true;
+    client
+      .batch(selectedId)
+      .then((batch) => live && setSelected(batch))
+      .catch(() => live && setError(`batch ${selectedId} could not be opened`));
+    return () => {
+      live = false;
+    };
+  }, [client, selectedId, refreshToken]);
+ 
+  // Upload is the one intake verb that is NOT the admin envelope (it answers the batch it
+  // created), so the outcome is built here — honestly: a failed post must not read "ok".
+  const upload = async (): Promise<VerbOutcome> => {
+    if (!file || !uploadInto) return { kind: "error", status: 0 };
+    try {
+      const batch = await client.uploadBatch(uploadInto, file);
+      // The chosen file is deliberately NOT cleared here: the upload button renders only
+      // while a file is selected, so clearing it would unmount the very button whose
+      // banner carries the outcome (the U2 gate's teardown lesson, found again here).
+      setSelectedId(batch.id);
+      refresh();
+      return { kind: "ok", message: `${batch.state} — batch ${batch.id} is queued for validation` };
+    } catch {
+      return { kind: "error", status: 0 };
+    }
+  };
+ 
+  if (definitions === null && !error) {
+    return <p className="text-sm text-muted-foreground">Loading bulk definitions…</p>;
+  }
+ 
+  const waiting = (definitions ?? []).filter((definition) => definition.awaitingApproval > 0);
+ 
+  return (
+    <div data-testid="bulk-panel" className="space-y-6">
+      {error && <Banner tone="danger">{error}</Banner>}
+ 
+      {waiting.length > 0 && (
+        <Banner tone="warning" live="status">
+          {waiting
+            .map((definition) => {
+              const age = definition.oldestAwaitingApprovalSeconds;
+              return `${definition.name}: ${definition.awaitingApproval} awaiting approval${age ? ` (oldest ${humanizeSeconds(age)})` : ""}`;
+            })
+            .join(" · ")}
+        </Banner>
+      )}
+ 
+      <section>
+        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Definitions</h2>
+        <ul className="space-y-2">
+          {(definitions ?? []).map((definition) => (
+            <li key={definition.name} className="flex flex-wrap items-center gap-2 rounded-md border border-border/60 px-3 py-2">
+              <span className="text-sm font-medium">{definition.name}</span>
+              {Object.entries(definition.batchesByState).map(([batchState, count]) => (
+                <span key={batchState} className="text-xs text-faint">
+                  {batchState}: {count}
+                </span>
+              ))}
+              {Object.keys(definition.batchesByState ?? {}).length === 0 && (
+                <span className="text-xs text-faint">no batches yet</span>
+              )}
+            </li>
+          ))}
+        </ul>
+      </section>
+ 
+      <section>
+        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Upload</h2>
+        <div className="flex flex-wrap items-center gap-2">
+          <label className="text-xs text-muted-foreground" htmlFor="bulk-definition">
+            Definition
+          </label>
+          <select
+            id="bulk-definition"
+            className="rounded-md border border-border bg-background px-2 py-1 text-sm"
+            value={uploadInto}
+            onChange={(event) => setUploadInto(event.target.value)}
+          >
+            {(definitions ?? []).map((definition) => (
+              <option key={definition.name} value={definition.name}>
+                {definition.name}
+              </option>
+            ))}
+          </select>
+          <input
+            ref={fileInput}
+            type="file"
+            aria-label="batch file"
+            // The native control is kept (it is the accessible one); only its button half
+            // is dressed in the kit's language so it does not read as a foreign widget.
+            className="max-w-xs text-sm text-muted-foreground file:mr-3 file:rounded-md file:border file:border-border file:bg-background file:px-3 file:py-1.5 file:text-sm file:font-medium file:text-foreground hover:file:bg-accent"
+            onChange={(event) => setFile(event.target.files?.[0] ?? null)}
+          />
+          {file && (
+            <VerbButton
+              label="upload"
+              confirm={`Upload ${file.name} into ${uploadInto}?`}
+              execute={upload}
+            />
+          )}
+        </div>
+        <p className="mt-1 text-xs text-faint">
+          The file is posted as a raw body, exactly as <code>curl --data-binary</code> would — the console adds no
+          format the API does not already accept.
+        </p>
+      </section>
+ 
+      <section>
+        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Batches</h2>
+        <div className="mb-2 flex flex-wrap items-center gap-2">
+          <label className="text-xs text-muted-foreground" htmlFor="bulk-state">
+            State
+          </label>
+          <select
+            id="bulk-state"
+            className="rounded-md border border-border bg-background px-2 py-1 text-sm"
+            value={state}
+            onChange={(event) => {
+              setState(event.target.value);
+              setSelectedId(null);
+            }}
+          >
+            <option value="">all states</option>
+            {STATES.map((option) => (
+              <option key={option} value={option}>
+                {option}
+              </option>
+            ))}
+          </select>
+        </div>
+ 
+        <KeysetTable<BulkBatchInfo>
+          key={`${state}-${refreshToken}`}
+          columns={[
+            {
+              header: "Batch",
+              cell: (batch) => (
+                <button className="font-mono text-xs underline-offset-2 hover:underline" onClick={() => setSelectedId(batch.id)}>
+                  {batch.id}
+                </button>
+              ),
+            },
+            { header: "Definition", cell: (batch) => batch.definition },
+            { header: "State", cell: (batch) => <StateBadge state={batch.state} /> },
+            { header: "Rows", align: "right", cell: (batch) => `${batch.validRows}/${batch.totalRows}` },
+            { header: "Invalid", align: "right", cell: (batch) => batch.invalidRows },
+          ]}
+          loadPage={loadBatches}
+          rowKey={(batch) => batch.id}
+          emptyMessage="No batches in this state."
+        />
+      </section>
+ 
+      {selected && (
+        <section data-testid="batch-detail" className="rounded-lg border border-border p-4">
+          <div className="mb-3 flex flex-wrap items-center gap-3">
+            <h2 className="text-sm font-medium">
+              Batch {selected.id} · {selected.definition}
+            </h2>
+            <StateBadge state={selected.state} />
+            {selected.tenant && <span className="text-xs text-faint">tenant {selected.tenant}</span>}
+            {selected.runId && <span className="text-xs text-faint">run {selected.runId}</span>}
+            {selected.state === GATED && (
+              <span className="ml-auto flex flex-wrap gap-2">
+                <VerbButton
+                  label="approve"
+                  confirm={`Approve ${selected.validRows} valid rows of this batch for execution?`}
+                  note={{ label: "note (optional)" }}
+                  execute={(note) => asOutcome(client.approveBatch(selected.id, note || undefined))}
+                  onDone={settle}
+                  quiet
+                />
+                <VerbButton
+                  label="reject"
+                  confirm="Reject this batch? Nothing will execute."
+                  // The contract makes the note MANDATORY here — it is the gate's evidence.
+                  note={{ label: "reason (required)", required: true }}
+                  execute={(note) => asOutcome(client.rejectBatch(selected.id, note ?? ""))}
+                  onDone={settle}
+                  quiet
+                  destructive
+                />
+              </span>
+            )}
+          </div>
+ 
+          {decision && decision.kind !== "error" && (
+            // The engine's own words, verbatim — a refusal here teaches the fix
+            // ("invalid rows block approval…"), so it must never be paraphrased.
+            <Banner tone={decision.kind === "ok" ? "success" : "danger"} live={decision.kind === "ok" ? "status" : "alert"}>
+              {decision.message}
+            </Banner>
+          )}
+ 
+          {decision?.kind === "error" && (
+            <Banner tone="warning">the decision did not reach the server — it may not have been recorded</Banner>
+          )}
+ 
+          <dl className="mt-3 grid grid-cols-2 gap-x-6 gap-y-1 text-xs sm:grid-cols-4">
+            <div>
+              <dt className="text-faint">Total rows</dt>
+              <dd>{selected.totalRows}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Valid</dt>
+              <dd>{selected.validRows}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Invalid</dt>
+              <dd className={selected.invalidRows > 0 ? "text-danger" : undefined}>{selected.invalidRows}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Executed / failed</dt>
+              <dd>
+                {selected.executedRows} / <span className={selected.failedRows > 0 ? "text-danger" : undefined}>{selected.failedRows}</span>
+              </dd>
+            </div>
+          </dl>
+ 
+          {selected.decidedAt && (
+            // The decision evidence, as the server recorded it — the actor comes from the
+            // token, never from this screen.
+            <p className="mt-3 text-xs text-muted-foreground">
+              {selected.state === "Rejected" ? "Rejected" : "Approved"} by {selected.decidedBy ?? "unknown"} at{" "}
+              {selected.decidedAt}
+              {selected.decisionNote ? ` — “${selected.decisionNote}”` : ""}
+            </p>
+          )}
+ 
+          <h3 className="mb-1 mt-4 text-xs text-muted-foreground">
+            Validation report{selected.invalidRows === 0 ? " — no findings" : ""}
+          </h3>
+          {selected.invalidRows > 0 && (
+            <KeysetTable<BulkRowError>
+              key={`${selected.id}-${refreshToken}`}
+              columns={[
+                { header: "Row", align: "right", cell: (row) => (row.rowNumber === 0 ? "file" : row.rowNumber) },
+                { header: "Field", cell: (row) => row.field },
+                { header: "Finding", cell: (row) => row.message },
+              ]}
+              loadPage={loadErrors}
+              rowKey={(row) => String(row.id)}
+              take={100}
+              emptyMessage="No findings recorded for this batch."
+            />
+          )}
+        </section>
+      )}
+    </div>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/console/coverage/CampaignPanel.tsx.html b/ui/console/coverage/CampaignPanel.tsx.html new file mode 100644 index 0000000..5892847 --- /dev/null +++ b/ui/console/coverage/CampaignPanel.tsx.html @@ -0,0 +1,1468 @@ + + + + + + Code coverage report for CampaignPanel.tsx + + + + + + + + + +
+
+

All files CampaignPanel.tsx

+
+ +
+ 100% + Statements + 361/361 +
+ + +
+ 83.5% + Branches + 81/97 +
+ + +
+ 82.75% + Functions + 24/29 +
+ + +
+ 100% + Lines + 361/361 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +4621x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +5x +5x +5x +5x +  +  +1x +  +  +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +1x +115x +115x +115x +115x +115x +115x +115x +115x +115x +115x +115x +115x +115x +  +  +1x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +  +  +  +  +  +  +1x +111x +111x +111x +111x +111x +111x +111x +111x +111x +  +  +111x +  +111x +111x +5x +5x +5x +  +111x +111x +  +25x +24x +24x +25x +111x +111x +  +111x +32x +32x +111x +  +  +  +111x +38x +18x +18x +18x +18x +18x +  +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +20x +111x +  +111x +111x +  +111x +111x +111x +  +111x +111x +111x +111x +  +111x +111x +111x +111x +111x +111x +1x +1x +1x +  +111x +111x +777x +777x +777x +111x +111x +  +  +  +  +111x +111x +111x +111x +  +111x +111x +  +111x +111x +111x +111x +111x +111x +52x +52x +52x +  +111x +111x +111x +111x +111x +111x +111x +111x +111x +111x +111x +111x +111x +  +111x +29x +29x +29x +29x +29x +29x +29x +  +1x +  +29x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +  +29x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +  +29x +  +29x +  +8x +8x +8x +  +29x +2x +  +  +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +  +29x +  +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +28x +1x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +  +29x +26x +26x +  +26x +26x +  +26x +26x +26x +26x +26x +26x +78x +78x +78x +78x +78x +78x +78x +78x +78x +78x +78x +26x +  +26x +26x +26x +26x +26x +52x +52x +52x +52x +52x +52x +52x +52x +52x +52x +26x +26x +  +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +26x +  +26x +26x +26x +26x +26x +26x +26x +  +26x +26x +3x +3x +3x +3x +3x +1x +1x +1x +3x +3x +  +26x +26x +  +  +29x +29x +29x +29x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +1x +  +1x +1x +  +  +29x +  +  +  +  +  +29x +29x +1x +1x +1x +1x +1x +1x +29x +29x +29x +29x +  +111x +  +111x + 
import { useCallback, useEffect, useState } from "react";
+import { Banner, humanizeSeconds, KeysetTable, StateBadge, VerbButton } from "@goldpath/kit";
+import type { VerbOutcome } from "@goldpath/kit";
+import type {
+  AdminClient,
+  CampaignAuditEntry,
+  CampaignFailedItem,
+  CampaignInfo,
+  CampaignThrottle,
+} from "./adminClient";
+ 
+export interface CampaignPanelProps {
+  client: AdminClient;
+}
+ 
+/** The verb envelope, adapted to the kit's outcome type — refusals stay data. */
+async function asOutcome(call: Promise<{ ok: boolean; message: string }>): Promise<VerbOutcome> {
+  const result = await call;
+  return result.ok ? { kind: "ok", message: result.message } : { kind: "refused", message: result.message };
+}
+ 
+/** The pacer's state machine, in its own order. */
+const STATES = ["Created", "Enumerating", "Running", "Paused", "Completed", "CompletedWithFailures", "Aborted"] as const;
+ 
+/** Only a live campaign can be paused, resumed or aborted; the rest already ended. */
+const LIVE = new Set(["Created", "Enumerating", "Running"]);
+ 
+/** The throttle form's raw text; empty means "leave this as it is" (the patch's null). */
+interface ThrottleDraft {
+  tps: string;
+  dailyQuota: string;
+  maxInFlight: string;
+  windowStart: string;
+  windowEnd: string;
+  timeZoneId: string;
+  clearDailyQuota: boolean;
+  clearWindow: boolean;
+}
+ 
+const EMPTY_DRAFT: ThrottleDraft = {
+  tps: "",
+  dailyQuota: "",
+  maxInFlight: "",
+  windowStart: "",
+  windowEnd: "",
+  timeZoneId: "",
+  clearDailyQuota: false,
+  clearWindow: false,
+};
+ 
+/**
+ * Turns the draft into the contract's patch: an untouched field is simply ABSENT, so the
+ * server keeps its current value. Clearing is explicit on purpose — "no daily quota"
+ * cannot be expressed by leaving a box empty.
+ */
+export function toThrottle(draft: ThrottleDraft): CampaignThrottle {
+  const patch: CampaignThrottle = {};
+  const number = (raw: string) => (raw.trim() === "" ? undefined : Number(raw));
+  const text = (raw: string) => (raw.trim() === "" ? undefined : raw.trim());
+  if (number(draft.tps) !== undefined) patch.tps = number(draft.tps);
+  if (number(draft.dailyQuota) !== undefined) patch.dailyQuota = number(draft.dailyQuota);
+  if (number(draft.maxInFlight) !== undefined) patch.maxInFlight = number(draft.maxInFlight);
+  if (text(draft.windowStart)) patch.windowStart = text(draft.windowStart);
+  if (text(draft.windowEnd)) patch.windowEnd = text(draft.windowEnd);
+  if (text(draft.timeZoneId)) patch.timeZoneId = text(draft.timeZoneId);
+  if (draft.clearDailyQuota) patch.clearDailyQuota = true;
+  if (draft.clearWindow) patch.clearWindow = true;
+  return patch;
+}
+ 
+/** The confirm line: what the operator is actually about to change, field by field. */
+export function describeThrottle(patch: CampaignThrottle): string {
+  const parts: string[] = [];
+  if (patch.tps !== undefined) parts.push(`${patch.tps} tps`);
+  if (patch.dailyQuota !== undefined) parts.push(`daily quota ${patch.dailyQuota}`);
+  if (patch.maxInFlight !== undefined) parts.push(`max in-flight ${patch.maxInFlight}`);
+  if (patch.windowStart || patch.windowEnd) parts.push(`window ${patch.windowStart ?? "…"}–${patch.windowEnd ?? "…"}`);
+  if (patch.timeZoneId) parts.push(`time zone ${patch.timeZoneId}`);
+  if (patch.clearDailyQuota) parts.push("no daily quota");
+  if (patch.clearWindow) parts.push("no window (release around the clock)");
+  return parts.join(", ");
+}
+ 
+/**
+ * The campaign governor (console RFC §3): the pacer's numbers, the policy in force, and
+ * the live verbs — pause, resume, abort, and a throttle that takes effect on the next
+ * tick. Item REPLAY is deliberately absent: repair has ONE home, the run console.
+ */
+export function CampaignPanel({ client }: CampaignPanelProps) {
+  const [state, setState] = useState<string>("");
+  const [selectedId, setSelectedId] = useState<string | null>(null);
+  const [selected, setSelected] = useState<CampaignInfo | null>(null);
+  const [failures, setFailures] = useState<CampaignFailedItem[]>([]);
+  const [audit, setAudit] = useState<CampaignAuditEntry[]>([]);
+  const [draft, setDraft] = useState<ThrottleDraft>(EMPTY_DRAFT);
+  const [error, setError] = useState<string | null>(null);
+  const [ready, setReady] = useState(false);
+  const [refreshToken, setRefreshToken] = useState(0);
+  // The verb outcome lives HERE: pausing or aborting moves the campaign out of the live
+  // set, so the buttons — and any message inside them — unmount on the refresh.
+  const [outcome, setOutcome] = useState<VerbOutcome | null>(null);
+ 
+  const refresh = () => setRefreshToken((token) => token + 1);
+  const settle = (result: VerbOutcome) => {
+    setOutcome(result);
+    refresh();
+  };
+ 
+  const loadCampaigns = useCallback(
+    async (_cursor: string | null, take: number) => {
+      // Take-bounded, not cursor-paged (frozen contract): one page, honestly ended.
+      const campaigns = await client.campaigns({ state: state || undefined, take });
+      setReady(true);
+      return { items: campaigns, nextCursor: null };
+    },
+    [client, state, refreshToken],
+  );
+ 
+  useEffect(() => {
+    setOutcome(null);   // a verb's answer belongs to the campaign it was aimed at
+    setDraft(EMPTY_DRAFT);
+  }, [selectedId]);
+ 
+  // The open campaign RE-FETCHES on refresh instead of closing — a governor watches
+  // numbers move, and the panel carries the outcome strip.
+  useEffect(() => {
+    if (!selectedId) {
+      setSelected(null);
+      setFailures([]);
+      setAudit([]);
+      return;
+    }
+ 
+    let live = true;
+    Promise.all([client.campaign(selectedId), client.campaignFailures(selectedId), client.campaignAudit(selectedId)])
+      .then(([info, failed, entries]) => {
+        if (!live) return;
+        setSelected(info);
+        setFailures(failed);
+        setAudit(entries);
+      })
+      .catch(() => live && setError(`campaign ${selectedId} could not be opened`));
+    return () => {
+      live = false;
+    };
+  }, [client, selectedId, refreshToken]);
+ 
+  const patch = toThrottle(draft);
+  const patched = Object.keys(patch).length > 0;
+ 
+  return (
+    <div data-testid="campaign-panel" className="space-y-6">
+      {error && <Banner tone="danger">{error}</Banner>}
+ 
+      <section>
+        <div className="mb-2 flex flex-wrap items-center gap-2">
+          <h2 className="text-sm font-medium text-muted-foreground">Campaigns</h2>
+          <label className="ml-2 text-xs text-muted-foreground" htmlFor="campaign-state">
+            State
+          </label>
+          <select
+            id="campaign-state"
+            className="rounded-md border border-border bg-background px-2 py-1 text-sm"
+            value={state}
+            onChange={(event) => {
+              setState(event.target.value);
+              setSelectedId(null);
+            }}
+          >
+            <option value="">all states</option>
+            {STATES.map((option) => (
+              <option key={option} value={option}>
+                {option}
+              </option>
+            ))}
+          </select>
+          {/*
+            A governor watches numbers that move under it: without a re-read the table
+            and the open campaign drift apart until a verb happens to refresh them.
+          */}
+          <button
+            className="ml-auto rounded-md border border-border bg-background px-3 py-1 text-sm hover:bg-accent"
+            onClick={refresh}
+          >
+            refresh
+          </button>
+        </div>
+ 
+        <KeysetTable<CampaignInfo>
+          key={`${state}-${refreshToken}`}
+          columns={[
+            {
+              header: "Campaign",
+              cell: (campaign) => (
+                <button className="text-xs underline-offset-2 hover:underline" onClick={() => setSelectedId(campaign.id)}>
+                  {campaign.name}
+                </button>
+              ),
+            },
+            { header: "Type", cell: (campaign) => campaign.type },
+            { header: "State", cell: (campaign) => <StateBadge state={campaign.state} /> },
+            { header: "Released", align: "right", cell: (campaign) => campaign.releasedThrough },
+            { header: "Remaining", align: "right", cell: (campaign) => campaign.remaining },
+            { header: "Failed", align: "right", cell: (campaign) => campaign.failedCount },
+            { header: "tps", align: "right", cell: (campaign) => campaign.tps },
+          ]}
+          loadPage={loadCampaigns}
+          rowKey={(campaign) => campaign.id}
+          emptyMessage={ready ? "No campaigns in this state." : "Loading campaigns…"}
+        />
+      </section>
+ 
+      {selected && (
+        <section data-testid="campaign-detail" className="rounded-lg border border-border p-4">
+          <div className="mb-3 flex flex-wrap items-center gap-3">
+            <h2 className="text-sm font-medium">
+              {selected.name} · {selected.type}
+            </h2>
+            <StateBadge state={selected.state} />
+            {!selected.windowOpenNow && (LIVE.has(selected.state) || selected.state === "Paused") && (
+              // Nothing is wrong — the policy simply says "not now".
+              <span className="text-xs text-warning">outside the release window</span>
+            )}
+            {LIVE.has(selected.state) && (
+              <span className="ml-auto flex flex-wrap gap-2">
+                <VerbButton
+                  label="pause"
+                  confirm={`Pause ${selected.name}? In-flight items drain; nothing new is released.`}
+                  execute={() => asOutcome(client.pauseCampaign(selected.id))}
+                  onDone={settle}
+                  quiet
+                />
+                <VerbButton
+                  label="abort"
+                  confirm={`Abort ${selected.name}? The ${selected.remaining} remaining items are stamped Aborted — this cannot be undone.`}
+                  note={{ label: "reason (required)", required: true }}
+                  execute={(reason) => asOutcome(client.abortCampaign(selected.id, reason ?? ""))}
+                  onDone={settle}
+                  quiet
+                  destructive
+                />
+              </span>
+            )}
+            {selected.state === "Paused" && (
+              <span className="ml-auto flex flex-wrap gap-2">
+                <VerbButton
+                  label="resume"
+                  confirm={`Resume ${selected.name}? Release continues under the policy below.`}
+                  execute={() => asOutcome(client.resumeCampaign(selected.id))}
+                  onDone={settle}
+                  quiet
+                />
+                <VerbButton
+                  label="abort"
+                  confirm={`Abort ${selected.name}? The ${selected.remaining} remaining items are stamped Aborted — this cannot be undone.`}
+                  note={{ label: "reason (required)", required: true }}
+                  execute={(reason) => asOutcome(client.abortCampaign(selected.id, reason ?? ""))}
+                  onDone={settle}
+                  quiet
+                  destructive
+                />
+              </span>
+            )}
+          </div>
+ 
+          {outcome && outcome.kind !== "error" && (
+            // The pacer's own words — a refusal here explains which state it is in.
+            <Banner tone={outcome.kind === "ok" ? "success" : "danger"} live={outcome.kind === "ok" ? "status" : "alert"}>
+              {outcome.message}
+            </Banner>
+          )}
+          {outcome?.kind === "error" && (
+            <Banner tone="warning">the verb did not reach the server — it may not have been applied</Banner>
+          )}
+ 
+          <dl className="mt-3 grid grid-cols-2 gap-x-6 gap-y-2 text-xs sm:grid-cols-4">
+            <div>
+              <dt className="text-faint">Released</dt>
+              <dd>
+                {selected.releasedThrough} of {selected.enumeratedThrough}
+                {!selected.enumerationComplete && <span className="text-faint"> (still enumerating)</span>}
+              </dd>
+            </div>
+            <div>
+              <dt className="text-faint">Succeeded / failed</dt>
+              <dd>
+                {selected.succeededCount} /{" "}
+                <span className={selected.failedCount > 0 ? "text-danger" : undefined}>{selected.failedCount}</span>
+              </dd>
+            </div>
+            <div>
+              <dt className="text-faint">In flight</dt>
+              <dd>
+                {selected.inFlight} of {selected.maxInFlight} allowed
+              </dd>
+            </div>
+            <div>
+              <dt className="text-faint">Remaining</dt>
+              <dd>
+                {selected.remaining}
+                {selected.etaSecondsAtCurrentTps != null && (
+                  // Honest label: this is the arithmetic at the CURRENT rate, not a promise.
+                  <span className="text-faint"> · ~{humanizeSeconds(selected.etaSecondsAtCurrentTps)} at {selected.tps} tps</span>
+                )}
+              </dd>
+            </div>
+            <div>
+              <dt className="text-faint">Daily quota</dt>
+              <dd>
+                {selected.dailyQuota == null ? "none" : `${selected.releasedToday} of ${selected.dailyQuota} today`}
+              </dd>
+            </div>
+            <div>
+              <dt className="text-faint">Window</dt>
+              <dd>
+                {selected.windowStart && selected.windowEnd
+                  ? `${selected.windowStart}–${selected.windowEnd} ${selected.timeZoneId}`
+                  : "around the clock"}
+                {" · "}
+                {selected.windowOpenNow ? "open now" : "closed now"}
+              </dd>
+            </div>
+            <div>
+              <dt className="text-faint">Created</dt>
+              <dd>
+                {selected.createdAt} by {selected.createdBy}
+              </dd>
+            </div>
+            <div>
+              <dt className="text-faint">Last verb</dt>
+              <dd>{selected.lastVerb ?? "—"}</dd>
+            </div>
+          </dl>
+ 
+          {LIVE.has(selected.state) && (
+            <div className="mt-4 rounded-md border border-border/60 p-3">
+              <h3 className="mb-2 text-xs text-muted-foreground">
+                Throttle — takes effect on the next pacer tick; an empty box keeps its current value
+              </h3>
+              <div className="flex flex-wrap items-end gap-3">
+                {(
+                  [
+                    ["tps", "tps", selected.tps],
+                    ["dailyQuota", "daily quota", selected.dailyQuota],
+                    ["maxInFlight", "max in-flight", selected.maxInFlight],
+                  ] as const
+                ).map(([field, label, current]) => (
+                  <label key={field} className="flex flex-col gap-1 text-xs text-muted-foreground">
+                    {label} <span className="text-faint">(now {current ?? "none"})</span>
+                    <input
+                      type="number"
+                      min={0}
+                      aria-label={label}
+                      className="w-28 rounded-md border border-border bg-background px-2 py-1 text-sm text-foreground"
+                      value={draft[field]}
+                      onChange={(event) => setDraft({ ...draft, [field]: event.target.value })}
+                    />
+                  </label>
+                ))}
+                {(
+                  [
+                    ["windowStart", "window start"],
+                    ["windowEnd", "window end"],
+                  ] as const
+                ).map(([field, label]) => (
+                  <label key={field} className="flex flex-col gap-1 text-xs text-muted-foreground">
+                    {label}
+                    <input
+                      type="time"
+                      aria-label={label}
+                      className="rounded-md border border-border bg-background px-2 py-1 text-sm text-foreground"
+                      value={draft[field]}
+                      onChange={(event) => setDraft({ ...draft, [field]: event.target.value })}
+                    />
+                  </label>
+                ))}
+                <label className="flex flex-col gap-1 text-xs text-muted-foreground">
+                  time zone
+                  <input
+                    type="text"
+                    aria-label="time zone"
+                    placeholder={selected.timeZoneId}
+                    className="w-40 rounded-md border border-border bg-background px-2 py-1 text-sm text-foreground"
+                    value={draft.timeZoneId}
+                    onChange={(event) => setDraft({ ...draft, timeZoneId: event.target.value })}
+                  />
+                </label>
+                <label className="flex items-center gap-2 text-xs text-muted-foreground">
+                  <input
+                    type="checkbox"
+                    checked={draft.clearDailyQuota}
+                    onChange={(event) => setDraft({ ...draft, clearDailyQuota: event.target.checked })}
+                  />
+                  clear daily quota
+                </label>
+                <label className="flex items-center gap-2 text-xs text-muted-foreground">
+                  <input
+                    type="checkbox"
+                    checked={draft.clearWindow}
+                    onChange={(event) => setDraft({ ...draft, clearWindow: event.target.checked })}
+                  />
+                  clear window
+                </label>
+                {patched && (
+                  <VerbButton
+                    label="throttle"
+                    confirm={`Change the release policy of ${selected.name} to ${describeThrottle(patch)}?`}
+                    execute={() => asOutcome(client.throttleCampaign(selected.id, patch))}
+                    onDone={(result) => {
+                      if (result.kind === "ok") setDraft(EMPTY_DRAFT);
+                      settle(result);
+                    }}
+                    quiet
+                  />
+                )}
+              </div>
+            </div>
+          )}
+ 
+          <h3 className="mb-1 mt-4 text-xs text-muted-foreground">
+            Failed items{failures.length === 0 ? " — none" : ` (${failures.length} shown)`}
+          </h3>
+          {failures.length > 0 && (
+            <>
+              <ul className="space-y-1">
+                {failures.map((item) => (
+                  <li key={item.seq} className="flex items-baseline gap-2 text-xs">
+                    <span className="font-mono">#{item.seq}</span>
+                    <span className="text-danger">{item.error ?? "no error recorded"}</span>
+                    {item.completedAt && <span className="text-faint">{item.completedAt}</span>}
+                  </li>
+                ))}
+              </ul>
+              <p className="mt-1 text-xs text-faint">
+                Repair has one home: replay these items from the run console, not from here.
+              </p>
+            </>
+          )}
+ 
+          <h3 className="mb-1 mt-4 text-xs text-muted-foreground">Verb log</h3>
+          {/*
+            NOT the AuditBlock: that composite renders property-level old→new rows of the
+            audit-trail module. A campaign's audit is verb-level (who ran what, why), so
+            forcing it into that shape would invent fields the server never sent.
+          */}
+          <ul className="space-y-1">
+            {audit.map((entry) => (
+              <li key={entry.id} className="flex flex-wrap items-baseline gap-2 text-xs">
+                <span className="text-faint">{entry.at}</span>
+                <span className="font-medium">{entry.action}</span>
+                <span>{entry.actor}</span>
+                {entry.detail && <span className="text-muted-foreground">{entry.detail}</span>}
+              </li>
+            ))}
+            {audit.length === 0 && <li className="text-xs text-faint">No verbs recorded yet.</li>}
+          </ul>
+        </section>
+      )}
+    </div>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/console/coverage/Console.tsx.html b/ui/console/coverage/Console.tsx.html new file mode 100644 index 0000000..ef81d16 --- /dev/null +++ b/ui/console/coverage/Console.tsx.html @@ -0,0 +1,409 @@ + + + + + + Code coverage report for Console.tsx + + + + + + + + + +
+
+

All files Console.tsx

+
+ +
+ 100% + Statements + 61/61 +
+ + +
+ 94.59% + Branches + 35/37 +
+ + +
+ 33.33% + Functions + 1/3 +
+ + +
+ 100% + Lines + 61/61 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +1091x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +1x +20x +20x +20x +20x +  +20x +10x +10x +10x +10x +10x +10x +10x +10x +10x +10x +20x +  +20x +10x +18x +18x +18x +10x +10x +  +20x +20x +20x +20x +20x +20x +20x +  +20x +  +20x +1x +  +1x +  +  +20x +2x +2x +2x +2x +  +  +20x +  +  +1x +1x +1x +1x +  +  +20x +2x +  +  +20x +  +20x +  +20x +  +20x +20x +  +20x + 
import { useEffect, useMemo, useState } from "react";
+import { AppShell, Banner } from "@goldpath/kit";
+import type { ShellNavItem } from "@goldpath/kit";
+import { AdminClient, MODULES, type Capability, type ModuleName } from "./adminClient";
+import { RunConsole } from "./RunConsole";
+import { BulkPanel } from "./BulkPanel";
+import { CampaignPanel } from "./CampaignPanel";
+import { NotificationPanel } from "./NotificationPanel";
+import { ArchivalPanel } from "./ArchivalPanel";
+ 
+export interface ConsoleProps {
+  /** Service root; omit for same-origin (the console is served BY the app it drives). */
+  baseUrl?: string;
+  title?: string;
+  fetcher?: typeof fetch;
+  now?: Date;
+}
+ 
+type Capabilities = Record<ModuleName, Capability>;
+ 
+const SECTION_LABEL: Record<ModuleName, string> = {
+  jobs: "Runs",
+  archival: "Archival",
+  bulk: "Bulk intake",
+  notification: "Notifications",
+  campaign: "Campaigns",
+};
+ 
+/**
+ * The console shell: capability discovery decides what EXISTS, the shell renders only
+ * that (console RFC §2). A module the app never composed is an absent section — never a
+ * dead link, never a manifest upload. A capability that is present but REFUSING — no ops
+ * role, or no tenant to scope the call to — says exactly that, in the server's words:
+ * "absent" is reserved for a module the app genuinely does not compose.
+ */
+export function Console({ baseUrl, title = "Goldpath console", fetcher, now }: ConsoleProps) {
+  const client = useMemo(() => new AdminClient({ baseUrl, fetcher }), [baseUrl, fetcher]);
+  const [capabilities, setCapabilities] = useState<Capabilities | null>(null);
+  const [section, setSection] = useState<ModuleName>("jobs");
+  const [collapsed, setCollapsed] = useState(false);
+ 
+  useEffect(() => {
+    let live = true;
+    void client.discoverCapabilities().then((found) => {
+      if (!live) return;
+      setCapabilities(found);
+      const first = MODULES.find((module) => found[module].kind !== "absent");
+      if (first) setSection(first);
+    });
+    return () => {
+      live = false;
+    };
+  }, [client]);
+ 
+  const nav: ShellNavItem[] = capabilities
+    ? MODULES.filter((module) => capabilities[module].kind !== "absent").map((module) => ({
+        id: module,
+        label: SECTION_LABEL[module],
+        onSelect: () => setSection(module),
+      }))
+    : [];
+ 
+  return (
+    <AppShell
+      title={title}
+      nav={nav}
+      activeId={section}
+      collapsed={collapsed}
+      onToggleCollapsed={() => setCollapsed(!collapsed)}
+    >
+      {capabilities === null && <p className="text-sm text-muted-foreground">Discovering capabilities…</p>}
+ 
+      {capabilities !== null && nav.length === 0 && (
+        <p className="text-sm text-muted-foreground">
+          No Goldpath admin surface answered here — this app composes none, or the service is unreachable.
+        </p>
+      )}
+ 
+      {capabilities?.[section].kind === "forbidden" && (
+        <Banner tone="warning">
+          {SECTION_LABEL[section]} exists on this service, but your account lacks the ops role for it.
+          {capabilities[section].message ? ` The service said: “${capabilities[section].message}”` : ""}
+        </Banner>
+      )}
+ 
+      {capabilities?.[section].kind === "refused" && (
+        // Composed, reachable, and REFUSING — the operator needs the server's reason
+        // (a multi-tenant app scopes admin calls to the ambient tenant), not a blank screen.
+        <Banner tone="warning">
+          {SECTION_LABEL[section]} is composed here but refused this request.
+          {capabilities[section].message ? ` The service said: “${capabilities[section].message}”` : ""}
+        </Banner>
+      )}
+ 
+      {capabilities?.[section].kind === "present" && section === "jobs" && (
+        <RunConsole client={client} now={now} />
+      )}
+ 
+      {capabilities?.[section].kind === "present" && section === "bulk" && <BulkPanel client={client} />}
+ 
+      {capabilities?.[section].kind === "present" && section === "campaign" && <CampaignPanel client={client} />}
+ 
+      {capabilities?.[section].kind === "present" && section === "notification" && <NotificationPanel client={client} />}
+ 
+      {capabilities?.[section].kind === "present" && section === "archival" && <ArchivalPanel client={client} />}
+    </AppShell>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/console/coverage/NotificationPanel.tsx.html b/ui/console/coverage/NotificationPanel.tsx.html new file mode 100644 index 0000000..227af94 --- /dev/null +++ b/ui/console/coverage/NotificationPanel.tsx.html @@ -0,0 +1,1027 @@ + + + + + + Code coverage report for NotificationPanel.tsx + + + + + + + + + +
+
+

All files NotificationPanel.tsx

+
+ +
+ 99.59% + Statements + 245/246 +
+ + +
+ 90.78% + Branches + 69/76 +
+ + +
+ 92.85% + Functions + 13/14 +
+ + +
+ 99.59% + Lines + 245/246 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +3151x +  +  +  +  +  +  +  +  +1x +  +  +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +1x +33x +32x +33x +32x +33x +33x +33x +1x +1x +  +  +  +  +  +  +  +  +1x +44x +44x +44x +44x +44x +44x +44x +44x +  +44x +  +44x +13x +13x +13x +13x +13x +13x +13x +13x +44x +  +44x +44x +  +  +19x +19x +2x +17x +2x +15x +13x +19x +44x +44x +  +  +  +44x +19x +13x +13x +13x +  +6x +6x +6x +6x +6x +6x +6x +6x +44x +  +44x +  +44x +44x +44x +  +44x +29x +29x +29x +29x +29x +  +  +44x +44x +44x +44x +29x +29x +  +29x +29x +29x +29x +29x +58x +58x +58x +29x +29x +  +  +29x +44x +44x +44x +44x +  +44x +44x +44x +132x +132x +132x +132x +132x +132x +132x +4x +4x +4x +  +132x +132x +44x +  +44x +36x +36x +  +36x +36x +36x +36x +36x +36x +1x +1x +1x +  +36x +36x +144x +144x +144x +36x +36x +  +36x +  +36x +36x +36x +36x +36x +36x +1x +1x +1x +  +36x +36x +21x +21x +21x +36x +36x +36x +  +  +44x +44x +44x +44x +  +44x +44x +  +44x +44x +44x +44x +44x +44x +29x +29x +29x +  +44x +44x +44x +44x +44x +44x +44x +44x +44x +44x +44x +4x +40x +4x +36x +  +44x +44x +  +  +44x +44x +  +44x +6x +6x +6x +6x +6x +6x +6x +6x +  +6x +6x +6x +  +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +6x +  +6x +6x +6x +1x +1x +1x +1x +  +6x +1x +1x +1x +1x +  +6x +  +6x +  +2x +2x +2x +  +6x +  +44x +  +44x + 
import { useCallback, useEffect, useState } from "react";
+import { Banner, humanizeSeconds, KeysetTable, StateBadge } from "@goldpath/kit";
+import type { AdminClient, NotificationInfo, NotificationTemplateStatus } from "./adminClient";
+ 
+export interface NotificationPanelProps {
+  client: AdminClient;
+}
+ 
+/** The evidence row's state machine, in its own order. */
+const STATES = ["Requested", "Suppressed", "Sent", "Failed"] as const;
+ 
+/** The three lenses the contract exposes: the full list, and its two focused cuts. */
+const LENSES = [
+  { key: "all", label: "All notifications" },
+  { key: "failures", label: "Failures" },
+  { key: "suppressions", label: "Suppressions" },
+] as const;
+ 
+type Lens = (typeof LENSES)[number]["key"];
+ 
+/**
+ * .NET serializes a TimeSpan as `d.hh:mm:ss` — shown as-is would read like a timestamp,
+ * so the retention promise is spelled out in days/hours.
+ */
+export function retentionWords(deleteBodyAfter: string | null | undefined): string {
+  if (!deleteBodyAfter) return "kept";
+  const match = /^(?:(\d+)\.)?(\d{2}):(\d{2}):(\d{2})/.exec(deleteBodyAfter);
+  if (!match) return deleteBodyAfter;
+  const [, days, hours, minutes] = match;
+  const totalHours = Number(days ?? 0) * 24 + Number(hours);
+  if (totalHours >= 48) return `body deleted after ${Math.round(totalHours / 24)}d`;
+  if (totalHours >= 1) return `body deleted after ${totalHours}h`;
+  return `body deleted after ${Number(minutes)}m`;
+}
+ 
+/**
+ * The notification evidence panel (console RFC §3). The surface is READ-ONLY by contract
+ * and so is this screen: requesting belongs to the app (a console that could inject
+ * messages would be an evidence hole) and re-sending belongs to the run console. What the
+ * operator gets here is the evidence: who was written to (masked), which template hash
+ * rendered it, when it was claimed, sent or failed, and why.
+ */
+export function NotificationPanel({ client }: NotificationPanelProps) {
+  const [templates, setTemplates] = useState<NotificationTemplateStatus[] | null>(null);
+  const [lens, setLens] = useState<Lens>("all");
+  const [state, setState] = useState<string>("");
+  const [template, setTemplate] = useState<string>("");
+  const [selectedId, setSelectedId] = useState<string | null>(null);
+  const [selected, setSelected] = useState<NotificationInfo | null>(null);
+  const [error, setError] = useState<string | null>(null);
+  const [refreshToken, setRefreshToken] = useState(0);
+ 
+  const refresh = () => setRefreshToken((token) => token + 1);
+ 
+  useEffect(() => {
+    let live = true;
+    client
+      .notificationTemplates()
+      .then((found) => live && setTemplates(found))
+      .catch(() => live && setError("the notification templates could not be loaded"));
+    return () => {
+      live = false;
+    };
+  }, [client, refreshToken]);
+ 
+  const loadRows = useCallback(
+    async (_cursor: string | null, take: number) => {
+      // Each lens is the contract's OWN route — the focused cuts are not this screen
+      // re-filtering the broad list, so a server-side change to either is visible here.
+      const rows =
+        lens === "failures"
+          ? await client.notificationFailures(take)
+          : lens === "suppressions"
+            ? await client.notificationSuppressions(take)
+            : await client.notifications({ state: state || undefined, template: template || undefined, take });
+      return { items: rows, nextCursor: null };
+    },
+    [client, lens, state, template, refreshToken],
+  );
+ 
+  // The open row RE-READS by id: a notification is evidence in MOTION (Requested → Sent
+  // or Failed), so a row captured minutes ago is not what the operator should judge.
+  useEffect(() => {
+    if (!selectedId) {
+      setSelected(null);
+      return;
+    }
+ 
+    let live = true;
+    client
+      .notification(selectedId)
+      .then((found) => live && setSelected(found))
+      .catch(() => live && setError(`notification ${selectedId} could not be read`));
+    return () => {
+      live = false;
+    };
+  }, [client, selectedId, refreshToken]);
+ 
+  const waiting = (templates ?? []).filter((entry) => (entry.oldestRequestedSeconds ?? 0) > 0);
+ 
+  return (
+    <div data-testid="notification-panel" className="space-y-6">
+      {error && <Banner tone="danger">{error}</Banner>}
+ 
+      {waiting.length > 0 && (
+        <Banner tone="info" live="status">
+          {waiting
+            .map((entry) => `${entry.key}: oldest request waiting ${humanizeSeconds(entry.oldestRequestedSeconds ?? 0)}`)
+            .join(" · ")}
+        </Banner>
+      )}
+ 
+      <section>
+        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Templates</h2>
+        <ul className="space-y-2">
+          {(templates ?? []).map((entry) => (
+            <li key={entry.key} className="flex flex-wrap items-center gap-2 rounded-md border border-border/60 px-3 py-2">
+              <span className="text-sm font-medium">{entry.key}</span>
+              {/* The hash is what proves WHICH text was sent — truncated for the eye, whole in the row. */}
+              <span className="font-mono text-xs text-faint" title={entry.hash}>
+                {entry.hash.slice(0, 12)}
+              </span>
+              <span className="text-xs text-faint">{retentionWords(entry.deleteBodyAfter)}</span>
+              {Object.entries(entry.byState).map(([key, count]) => (
+                <span key={key} className="text-xs text-faint">
+                  {key}: {count}
+                </span>
+              ))}
+              {Object.keys(entry.byState ?? {}).length === 0 && (
+                <span className="text-xs text-faint">nothing requested yet</span>
+              )}
+            </li>
+          ))}
+          {templates?.length === 0 && <li className="text-xs text-faint">No templates are registered in this app.</li>}
+        </ul>
+      </section>
+ 
+      <section>
+        <div className="mb-2 flex flex-wrap items-center gap-2">
+          {LENSES.map((entry) => (
+            <button
+              key={entry.key}
+              aria-pressed={lens === entry.key}
+              className={`rounded-md border px-3 py-1 text-sm ${
+                lens === entry.key ? "border-border bg-primary text-primary-foreground" : "border-border bg-background hover:bg-accent"
+              }`}
+              onClick={() => {
+                setLens(entry.key);
+                setSelectedId(null);
+              }}
+            >
+              {entry.label}
+            </button>
+          ))}
+ 
+          {lens === "all" && (
+            <>
+              <label className="ml-2 text-xs text-muted-foreground" htmlFor="notification-state">
+                State
+              </label>
+              <select
+                id="notification-state"
+                className="rounded-md border border-border bg-background px-2 py-1 text-sm"
+                value={state}
+                onChange={(event) => {
+                  setState(event.target.value);
+                  setSelectedId(null);
+                }}
+              >
+                <option value="">all states</option>
+                {STATES.map((option) => (
+                  <option key={option} value={option}>
+                    {option}
+                  </option>
+                ))}
+              </select>
+ 
+              <label className="text-xs text-muted-foreground" htmlFor="notification-template">
+                Template
+              </label>
+              <select
+                id="notification-template"
+                className="rounded-md border border-border bg-background px-2 py-1 text-sm"
+                value={template}
+                onChange={(event) => {
+                  setTemplate(event.target.value);
+                  setSelectedId(null);
+                }}
+              >
+                <option value="">all templates</option>
+                {(templates ?? []).map((entry) => (
+                  <option key={entry.key} value={entry.key}>
+                    {entry.key}
+                  </option>
+                ))}
+              </select>
+            </>
+          )}
+ 
+          <button
+            className="ml-auto rounded-md border border-border bg-background px-3 py-1 text-sm hover:bg-accent"
+            onClick={refresh}
+          >
+            refresh
+          </button>
+        </div>
+ 
+        <KeysetTable<NotificationInfo>
+          key={`${lens}-${state}-${template}-${refreshToken}`}
+          columns={[
+            {
+              header: "Recipient (masked)",
+              cell: (row) => (
+                <button className="font-mono text-xs underline-offset-2 hover:underline" onClick={() => setSelectedId(row.id)}>
+                  {row.maskedRecipient}
+                </button>
+              ),
+            },
+            { header: "Template", cell: (row) => row.template },
+            { header: "Channel", cell: (row) => row.channel },
+            { header: "State", cell: (row) => <StateBadge state={row.state} /> },
+            { header: "Attempts", align: "right", cell: (row) => row.attempts },
+            { header: "Requested", cell: (row) => row.requestedAt },
+          ]}
+          loadPage={loadRows}
+          rowKey={(row) => row.id}
+          emptyMessage={
+            lens === "failures"
+              ? "No failed notifications."
+              : lens === "suppressions"
+                ? "Nothing was suppressed."
+                : "No notifications match this filter."
+          }
+        />
+        <p className="mt-1 text-xs text-faint">
+          Recipients are masked by the API, not by this screen — the full address never leaves the store. Requesting
+          belongs to the app and re-sending to the run console, so this surface has no verbs at all.
+        </p>
+      </section>
+ 
+      {selected && (
+        <section data-testid="notification-detail" className="rounded-lg border border-border p-4">
+          <div className="mb-3 flex flex-wrap items-center gap-3">
+            <h2 className="text-sm font-medium">
+              {selected.template} → <span className="font-mono">{selected.maskedRecipient}</span>
+            </h2>
+            <StateBadge state={selected.state} />
+            <span className="text-xs text-faint">{selected.channel} · {selected.culture || "default culture"}</span>
+          </div>
+ 
+          <dl className="grid grid-cols-2 gap-x-6 gap-y-2 text-xs sm:grid-cols-3">
+            <div>
+              <dt className="text-faint">Dedup key</dt>
+              {/* The business identity that makes a retry storm land once. */}
+              <dd className="font-mono break-all">{selected.dedupKey}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Template hash</dt>
+              <dd className="font-mono break-all">{selected.templateHash}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Attempts</dt>
+              <dd>{selected.attempts}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Requested</dt>
+              <dd>{selected.requestedAt}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Not before</dt>
+              <dd>{selected.notBefore ?? "—"}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Claimed</dt>
+              <dd>{selected.claimedAt ?? "—"}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Sent</dt>
+              <dd>{selected.sentAt ?? "—"}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Failed</dt>
+              <dd className={selected.failedAt ? "text-danger" : undefined}>{selected.failedAt ?? "—"}</dd>
+            </div>
+            <div>
+              <dt className="text-faint">Body</dt>
+              {/* Retention is a promise the module keeps; the row records when it was kept. */}
+              <dd>{selected.bodyDeletedAt ? `deleted ${selected.bodyDeletedAt}` : "retained"}</dd>
+            </div>
+            {selected.tenant && (
+              <div>
+                <dt className="text-faint">Tenant</dt>
+                <dd>{selected.tenant}</dd>
+              </div>
+            )}
+            {selected.correlationId && (
+              <div>
+                <dt className="text-faint">Correlation</dt>
+                <dd className="font-mono break-all">{selected.correlationId}</dd>
+              </div>
+            )}
+          </dl>
+ 
+          {selected.detail && (
+            // The server's own words: the transport's refusal, or why it was suppressed.
+            <p className={`mt-3 text-xs ${selected.state === "Failed" ? "text-danger" : "text-muted-foreground"}`}>
+              {selected.detail}
+            </p>
+          )}
+        </section>
+      )}
+    </div>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/console/coverage/RunConsole.tsx.html b/ui/console/coverage/RunConsole.tsx.html new file mode 100644 index 0000000..de0073b --- /dev/null +++ b/ui/console/coverage/RunConsole.tsx.html @@ -0,0 +1,787 @@ + + + + + + Code coverage report for RunConsole.tsx + + + + + + + + + +
+
+

All files RunConsole.tsx

+
+ +
+ 100% + Statements + 186/186 +
+ + +
+ 91.22% + Branches + 52/57 +
+ + +
+ 87.5% + Functions + 14/16 +
+ + +
+ 100% + Lines + 186/186 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +2351x +  +  +  +  +  +  +  +  +  +  +  +4x +4x +4x +4x +  +  +  +  +  +  +1x +48x +48x +48x +48x +48x +48x +48x +  +48x +11x +11x +11x +11x +10x +10x +10x +11x +11x +11x +11x +11x +48x +  +48x +25x +14x +14x +14x +14x +14x +14x +14x +14x +48x +  +48x +48x +  +  +14x +14x +14x +48x +48x +  +48x +  +  +  +  +48x +20x +15x +15x +15x +  +5x +5x +5x +5x +5x +5x +5x +5x +48x +  +48x +  +48x +11x +11x +  +37x +37x +48x +  +48x +48x +48x +48x +43x +43x +43x +43x +43x +43x +43x +1x +1x +1x +  +43x +43x +43x +48x +48x +48x +  +48x +36x +36x +36x +36x +27x +27x +27x +27x +27x +27x +27x +27x +27x +27x +27x +27x +3x +3x +3x +3x +3x +3x +  +24x +24x +24x +24x +24x +24x +24x +  +27x +27x +36x +36x +36x +  +  +48x +36x +36x +36x +36x +36x +36x +20x +20x +20x +36x +36x +36x +36x +36x +36x +36x +36x +36x +36x +  +  +48x +7x +7x +7x +7x +7x +7x +7x +7x +7x +7x +7x +6x +6x +  +  +6x +6x +6x +6x +  +7x +7x +  +7x +  +7x +7x +7x +14x +14x +14x +7x +7x +  +7x +7x +7x +7x +7x +6x +6x +6x +6x +6x +7x +7x +7x +  +48x +  +48x + 
import { useCallback, useEffect, useState } from "react";
+import { Banner, KeysetTable, RunProgress, StateBadge, VerbButton } from "@goldpath/kit";
+import type { VerbOutcome } from "@goldpath/kit";
+import type { AdminClient, FleetInfo, JobInfo, RunDetail, RunSummary } from "./adminClient";
+ 
+export interface RunConsoleProps {
+  client: AdminClient;
+  /** Injected in tests; the composite reads the clock only for rate/prediction display. */
+  now?: Date;
+}
+ 
+/** The verb envelope, adapted to the kit's outcome type — refusals stay data. */
+async function asOutcome(call: Promise<{ ok: boolean; message: string }>): Promise<VerbOutcome> {
+  const result = await call;
+  return result.ok ? { kind: "ok", message: result.message } : { kind: "refused", message: result.message };
+}
+ 
+/**
+ * The run console (console RFC §2, the core screen): fleets → jobs → runs → chunk
+ * breakdown → repair queue. Everything is a client of the frozen contract; the screen
+ * holds no state the API does not own.
+ */
+export function RunConsole({ client, now }: RunConsoleProps) {
+  const [fleets, setFleets] = useState<FleetInfo[]>([]);
+  const [fleet, setFleet] = useState<string | null>(null);
+  const [jobs, setJobs] = useState<JobInfo[]>([]);
+  const [selectedRunId, setSelectedRunId] = useState<string | null>(null);
+  const [selectedRun, setSelectedRun] = useState<RunDetail | null>(null);
+  const [error, setError] = useState<string | null>(null);
+  const [refreshToken, setRefreshToken] = useState(0);
+ 
+  useEffect(() => {
+    let live = true;
+    client
+      .fleets()
+      .then((found) => {
+        if (!live) return;
+        setFleets(found);
+        setFleet((current) => current ?? found[0]?.schedulerName ?? null);
+      })
+      .catch(() => live && setError("the fleet list could not be loaded"));
+    return () => {
+      live = false;
+    };
+  }, [client]);
+ 
+  useEffect(() => {
+    if (!fleet) return;
+    let live = true;
+    client
+      .jobs(fleet)
+      .then((found) => live && setJobs(found))
+      .catch(() => live && setError(`the jobs of ${fleet} could not be loaded`));
+    return () => {
+      live = false;
+    };
+  }, [client, fleet, refreshToken]);
+ 
+  const loadRuns = useCallback(
+    async (_cursor: string | null, take: number) => {
+      // The runs surface is take-bounded, not cursor-paged (frozen contract): one page,
+      // honestly ended — the table's walk stops immediately instead of faking a cursor.
+      const runs = fleet ? await client.runs(fleet, { take }) : [];
+      return { items: runs, nextCursor: null };
+    },
+    [client, fleet, refreshToken],
+  );
+ 
+  const openRun = (run: RunSummary) => setSelectedRunId(run.id);
+ 
+  // The open run RE-FETCHES on every refresh instead of closing: a verb's outcome strip
+  // lives inside the panel, so tearing the panel down would hide the very message the
+  // operator just triggered (found by the U2 Playwright gate).
+  useEffect(() => {
+    if (!selectedRunId) {
+      setSelectedRun(null);
+      return;
+    }
+ 
+    let live = true;
+    client
+      .run(selectedRunId)
+      .then((detail) => live && setSelectedRun(detail))
+      .catch(() => live && setError(`run ${selectedRunId} could not be opened`));
+    return () => {
+      live = false;
+    };
+  }, [client, selectedRunId, refreshToken]);
+ 
+  const refresh = () => setRefreshToken((token) => token + 1);
+ 
+  if (fleets.length === 0 && !error) {
+    return <p className="text-sm text-muted-foreground">Discovering fleets…</p>;
+  }
+ 
+  return (
+    <div data-testid="run-console" className="space-y-6">
+      {error && <Banner tone="danger">{error}</Banner>}
+ 
+      <section>
+        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Fleets</h2>
+        <div className="flex flex-wrap gap-2">
+          {fleets.map((entry) => (
+            <button
+              key={entry.schedulerName}
+              aria-pressed={entry.schedulerName === fleet}
+              className={`rounded-md border px-3 py-1.5 text-sm ${
+                entry.schedulerName === fleet ? "border-border bg-primary text-primary-foreground" : "border-border bg-background hover:bg-accent"
+              }`}
+              onClick={() => {
+                setFleet(entry.schedulerName);
+                setSelectedRunId(null);
+              }}
+            >
+              {entry.schedulerName}
+              <span className="ml-2 text-xs opacity-70">{entry.jobCount} jobs · {entry.nodes?.length ?? 0} nodes</span>
+            </button>
+          ))}
+        </div>
+      </section>
+ 
+      {fleet && (
+        <section>
+          <h2 className="mb-2 text-sm font-medium text-muted-foreground">Jobs in {fleet}</h2>
+          <ul className="space-y-2">
+            {jobs.map((job) => (
+              <li key={job.name} className="flex flex-wrap items-center gap-3 rounded-md border border-border/60 px-3 py-2">
+                <span className="text-sm font-medium">{job.name}</span>
+                {job.paused && <StateBadge state="Suppressed" />}
+                {job.nextFireTime && <span className="text-xs text-faint">next {job.nextFireTime}</span>}
+                <span className="ml-auto flex gap-2">
+                  <VerbButton
+                    label="trigger"
+                    confirm={`Trigger ${job.name} now?`}
+                    execute={() => asOutcome(client.triggerJob(fleet, job.name))}
+                    onDone={refresh}
+                  />
+                  {job.paused ? (
+                    <VerbButton
+                      label="resume"
+                      confirm={`Resume ${job.name}?`}
+                      execute={() => asOutcome(client.resumeJob(fleet, job.name))}
+                      onDone={refresh}
+                    />
+                  ) : (
+                    <VerbButton
+                      label="pause"
+                      confirm={`Pause ${job.name}?`}
+                      execute={() => asOutcome(client.pauseJob(fleet, job.name))}
+                      onDone={refresh}
+                      destructive
+                    />
+                  )}
+                </span>
+              </li>
+            ))}
+          </ul>
+        </section>
+      )}
+ 
+      {fleet && (
+        <section>
+          <h2 className="mb-2 text-sm font-medium text-muted-foreground">Runs</h2>
+          <KeysetTable<RunSummary>
+            key={`${fleet}-${refreshToken}`}
+            columns={[
+              { header: "Run", cell: (run) => (
+                <button className="font-mono text-xs underline-offset-2 hover:underline" onClick={() => openRun(run)}>
+                  {run.id}
+                </button>
+              ) },
+              { header: "Job", cell: (run) => run.jobName },
+              { header: "State", cell: (run) => <StateBadge state={run.status} /> },
+              { header: "Chunks", align: "right", cell: (run) => `${run.completedChunks}/${run.totalChunks}` },
+            ]}
+            loadPage={loadRuns}
+            rowKey={(run) => run.id}
+            emptyMessage="No runs recorded for this fleet yet."
+          />
+        </section>
+      )}
+ 
+      {selectedRun && (
+        <section data-testid="run-detail" className="rounded-lg border border-border p-4">
+          <div className="mb-3 flex items-center justify-between">
+            <h2 className="text-sm font-medium">Run {selectedRun.run.id} · {selectedRun.run.jobName}</h2>
+            <span className="flex gap-2">
+              <VerbButton
+                label="rerun"
+                confirm={`Rerun ${selectedRun.run.id}?`}
+                execute={() => asOutcome(client.rerun(selectedRun.run.id))}
+                onDone={refresh}
+              />
+              {selectedRun.openFailures.length > 0 && (
+                <VerbButton
+                  label="replay-items"
+                  // The verb redrives ALL open items; the listed failures are a capped
+                  // VIEW, so a count here would understate what the operator triggers.
+                  confirm="Replay all open repair items of this run?"
+                  execute={() => asOutcome(client.replayItems(selectedRun.run.id))}
+                  onDone={refresh}
+                />
+              )}
+            </span>
+          </div>
+ 
+          <RunProgress run={selectedRun.run} now={now} />
+ 
+          <h3 className="mb-1 mt-4 text-xs text-muted-foreground">Chunks by status</h3>
+          <div className="flex flex-wrap gap-1">
+            {Object.entries(selectedRun.chunksByStatus).map(([status, count]) => (
+              <span key={status} className="rounded border border-border px-1.5 py-0.5 text-[11px]">
+                {status}: {count}
+              </span>
+            ))}
+          </div>
+ 
+          <h3 className="mb-1 mt-4 text-xs text-muted-foreground">
+            Repair queue{selectedRun.openFailures.length === 0 ? " — empty" : ` (${selectedRun.openFailures.length} shown)`}
+          </h3>
+          <ul className="space-y-1">
+            {selectedRun.openFailures.map((failure) => (
+              <li key={failure.id} className="flex items-baseline gap-2 text-xs">
+                <span className="font-mono">{failure.itemKey}</span>
+                <span className="text-faint">chunk {failure.chunkIndex}</span>
+                <span className="text-danger">{failure.reason}</span>
+              </li>
+            ))}
+          </ul>
+        </section>
+      )}
+    </div>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/console/coverage/adminClient.ts.html b/ui/console/coverage/adminClient.ts.html new file mode 100644 index 0000000..2c91a7f --- /dev/null +++ b/ui/console/coverage/adminClient.ts.html @@ -0,0 +1,1909 @@ + + + + + + Code coverage report for adminClient.ts + + + + + + + + + +
+
+

All files adminClient.ts

+
+ +
+ 100% + Statements + 236/236 +
+ + +
+ 86.81% + Branches + 79/91 +
+ + +
+ 100% + Functions + 44/44 +
+ + +
+ 100% + Lines + 236/236 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593 +594 +595 +596 +597 +598 +599 +600 +601 +602 +603 +604 +605 +606 +607 +608 +609  +  +  +  +  +  +  +  +  +  +  +  +1x +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +16x +16x +16x +16x +16x +4x +4x +16x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +20x +20x +20x +1x +  +1x +1x +94x +  +1x +94x +  +  +  +  +94x +94x +  +1x +313x +313x +313x +313x +313x +300x +313x +  +  +  +  +  +  +  +  +  +  +  +  +1x +15x +15x +75x +75x +75x +75x +75x +75x +75x +8x +8x +  +75x +8x +8x +  +75x +75x +5x +5x +15x +15x +15x +15x +  +1x +12x +12x +  +1x +15x +15x +  +1x +16x +16x +  +16x +16x +16x +16x +16x +  +1x +5x +5x +  +  +1x +25x +25x +25x +25x +25x +25x +25x +20x +20x +  +5x +25x +  +1x +4x +4x +  +1x +1x +1x +  +1x +1x +1x +  +1x +2x +2x +  +  +  +  +  +  +1x +1x +1x +  +1x +23x +23x +  +  +  +  +  +  +  +  +1x +24x +24x +24x +24x +24x +  +  +1x +15x +15x +15x +15x +15x +15x +15x +  +1x +4x +4x +  +1x +  +1x +1x +  +  +  +  +  +1x +2x +2x +2x +2x +2x +2x +2x +2x +2x +2x +1x +2x +  +1x +15x +15x +  +1x +25x +25x +25x +25x +25x +  +1x +20x +20x +  +  +1x +20x +20x +20x +20x +  +1x +20x +20x +20x +20x +  +1x +4x +4x +  +1x +1x +1x +  +1x +  +1x +1x +  +1x +1x +1x +  +1x +13x +13x +  +1x +15x +15x +15x +15x +15x +15x +  +1x +7x +7x +  +  +1x +2x +2x +  +1x +2x +2x +  +1x +21x +21x +  +  +1x +14x +14x +14x +14x +14x +14x +14x +13x +14x +  +1x +22x +22x +22x +  +1x +21x +21x +  +1x +  +1x +1x +  +1x +2x +2x +  +1x +1x +1x +1x +1x +1x +  +  +  +  +  +1x +4x +4x +4x +4x +4x +4x +4x +3x +4x +1x + 
/**
+ * The console's ONLY door to a service: the FROZEN admin contract
+ * (docs/rfc/goldpath-admin-contract.md). Every call carries the operator's credentials —
+ * the console is a well-dressed client of the same API adopters script, nothing more.
+ */
+export interface AdminClientOptions {
+  /** Service root, e.g. "" for same-origin or "https://payments.internal". */
+  baseUrl?: string;
+  fetcher?: typeof fetch;
+}
+ 
+/** The five module surfaces of the frozen contract. */
+export const MODULES = ["jobs", "archival", "bulk", "notification", "campaign"] as const;
+export type ModuleName = (typeof MODULES)[number];
+ 
+/**
+ * The probe route per module — the contract's own list root. A 404 means the module was
+ * never composed into this app, so the panel does not exist (console RFC §2: no manifest
+ * upload, no config drift — the API is the truth here too).
+ */
+const PROBE: Record<ModuleName, string> = {
+  jobs: "/goldpath/admin/jobs/fleets",
+  archival: "/goldpath/admin/archival/definitions",
+  bulk: "/goldpath/admin/bulk/definitions",
+  notification: "/goldpath/admin/notification/templates",
+  campaign: "/goldpath/admin/campaign/",
+};
+ 
+/**
+ * What a probe learned about one module. A refusal carries the SERVER's words: the
+ * console repeats them rather than inventing its own explanation.
+ */
+export type Capability =
+  | { kind: "present" }
+  | { kind: "absent" }
+  | { kind: "forbidden"; message?: string }
+  | { kind: "refused"; message?: string };
+ 
+/**
+ * Pulls the human sentence out of a refusal. Goldpath's own envelope says `message`;
+ * ASP.NET's ProblemDetails (what tenant resolution answers with) says `title`/`detail`.
+ * Neither is guessed at — an unreadable body simply yields nothing.
+ */
+async function refusalMessage(response: Response): Promise<string | undefined> {
+  try {
+    const body = (await response.clone().json()) as { message?: string; detail?: string; title?: string };
+    return body.message ?? body.detail ?? body.title;
+  } catch {
+    return undefined;
+  }
+}
+ 
+export interface FleetInfo {
+  schedulerName: string;
+  jobCount: number;
+  nodes: { instanceId: string; isClustered?: boolean }[];
+}
+ 
+export interface JobInfo {
+  name: string;
+  group?: string;
+  requestsRecovery?: boolean;
+  paused?: boolean;
+  nextFireTime?: string | null;
+}
+ 
+export interface RunSummary {
+  id: string;
+  jobName: string;
+  status: string;
+  startedAt: string;
+  finishedAt?: string | null;
+  deadlineAt?: string | null;
+  predictedFinishAt?: string | null;
+  totalChunks: number;
+  completedChunks: number;
+  failedChunks: number;
+  totalItems?: number | null;
+  itemFailures: number;
+}
+ 
+/**
+ * The run detail as the contract actually returns it — a NESTED record
+ * (`GoldpathRunDetail(Run, ChunksByStatus, OpenFailures)`), not a flattened row:
+ * chunks arrive as counts per status, and open failures are capped at 200 server-side.
+ */
+export interface RunDetail {
+  run: RunSummary;
+  chunksByStatus: Record<string, number>;
+  openFailures: {
+    id: number;
+    runId: string;
+    chunkIndex: number;
+    itemKey: string;
+    reason: string;
+    failedAt: string;
+    redrivenAt?: string | null;
+  }[];
+}
+ 
+/** Intake numbers per definition — the panel's headline row. */
+export interface BulkDefinitionStatus {
+  name: string;
+  batchesByState: Record<string, number>;
+  awaitingApproval: number;
+  oldestAwaitingApprovalSeconds?: number | null;
+}
+ 
+/** One batch over the wire: the state machine's public face. */
+export interface BulkBatchInfo {
+  id: string;
+  definition: string;
+  state: string;
+  tenant?: string | null;
+  totalRows: number;
+  validRows: number;
+  invalidRows: number;
+  executedRows: number;
+  failedRows: number;
+  runId?: string | null;
+  receivedAt: string;
+  validatedAt?: string | null;
+  decidedAt?: string | null;
+  decidedBy?: string | null;
+  decisionNote?: string | null;
+  completedAt?: string | null;
+}
+ 
+/** One validation finding — teaching text, value-free by contract. */
+export interface BulkRowError {
+  id: number;
+  batchId: string;
+  rowNumber: number;
+  field: string;
+  message: string;
+}
+ 
+/** A campaign as the governor sees it: pacer counters + the live policy in force. */
+export interface CampaignInfo {
+  id: string;
+  type: string;
+  name: string;
+  state: string;
+  enumeratedThrough: number;
+  enumerationComplete: boolean;
+  releasedThrough: number;
+  succeededCount: number;
+  failedCount: number;
+  inFlight: number;
+  remaining: number;
+  tps: number;
+  dailyQuota?: number | null;
+  releasedToday: number;
+  maxInFlight: number;
+  windowStart?: string | null;
+  windowEnd?: string | null;
+  timeZoneId: string;
+  windowOpenNow: boolean;
+  etaSecondsAtCurrentTps?: number | null;
+  createdAt: string;
+  createdBy: string;
+  completedAt?: string | null;
+  lastVerb?: string | null;
+  tenant?: string | null;
+}
+ 
+/** One failed item — the drill-down; REPLAY belongs to the jobs console. */
+export interface CampaignFailedItem {
+  seq: number;
+  error?: string | null;
+  completedAt?: string | null;
+}
+ 
+/** One audited verb against a campaign (who did what, newest first). */
+export interface CampaignAuditEntry {
+  id: number;
+  at: string;
+  actor: string;
+  action: string;
+  campaignId: string;
+  detail?: string | null;
+}
+ 
+/**
+ * The LIVE policy patch: every field is optional and a null one KEEPS its current value,
+ * so the console sends only what the operator actually changed. Clearing is explicit —
+ * `clearDailyQuota` / `clearWindow` exist because "no quota" cannot be said with a null.
+ */
+export interface CampaignThrottle {
+  tps?: number;
+  dailyQuota?: number;
+  maxInFlight?: number;
+  windowStart?: string;
+  windowEnd?: string;
+  timeZoneId?: string;
+  clearDailyQuota?: boolean;
+  clearWindow?: boolean;
+}
+ 
+/** One template with its live queue numbers and its retention promise. */
+export interface NotificationTemplateStatus {
+  key: string;
+  hash: string;
+  /** ISO-8601 duration or null — how long the rendered body survives (D4 retention). */
+  deleteBodyAfter?: string | null;
+  byState: Record<string, number>;
+  oldestRequestedSeconds?: number | null;
+}
+ 
+/**
+ * One notification as the ADMIN surface returns it. The recipient arrives MASKED from the
+ * server (first character + domain hint); the console never has the full address and must
+ * never present this field as if it were one.
+ */
+export interface NotificationInfo {
+  id: string;
+  dedupKey: string;
+  template: string;
+  templateHash: string;
+  channel: string;
+  maskedRecipient: string;
+  culture: string;
+  state: string;
+  attempts: number;
+  detail?: string | null;
+  requestedAt: string;
+  notBefore?: string | null;
+  claimedAt?: string | null;
+  sentAt?: string | null;
+  failedAt?: string | null;
+  bodyDeletedAt?: string | null;
+  tenant?: string | null;
+  correlationId?: string | null;
+}
+ 
+/** One archive definition with the numbers that decide whether it is healthy. */
+export interface ArchiveDefinitionStatus {
+  name: string;
+  entries: number;
+  dueBacklog: number;
+  activeHolds: number;
+  chainHead: number;
+  purgedThrough: number;
+}
+ 
+/** One archived entry: the document plus the tamper-evidence around it. */
+export interface ArchiveEntry {
+  id: number;
+  definition: string;
+  aggregateKey: string;
+  tenant?: string | null;
+  document: string;
+  schemaVersion: number;
+  dueAt: string;
+  archivedAt: string;
+  chainIndex: number;
+  contentHash: string;
+  chainHash: string;
+  previousHash: string;
+  erasedAt?: string | null;
+  preErasureContentHash?: string | null;
+}
+ 
+/** A legal hold — the row IS its own audit. */
+export interface LegalHold {
+  id: number;
+  definition: string;
+  aggregateKey: string;
+  caseReference: string;
+  placedBy: string;
+  placedAt: string;
+  liftedBy?: string | null;
+  liftedAt?: string | null;
+}
+ 
+/** An erasure record — the row IS the answer to the subject's request. */
+export interface ErasureRecord {
+  id: number;
+  subjectKey: string;
+  requestedBy: string;
+  requestedAt: string;
+  entriesAffected: number;
+  detail?: string | null;
+}
+ 
+/** One thing the chain verifier found wrong. An empty list is the good news. */
+export interface ChainFinding {
+  definition: string;
+  chainIndex: number;
+  aggregateKey: string;
+  problem: string;
+}
+ 
+export interface AdminResult {
+  ok: boolean;
+  message: string;
+}
+ 
+/** Thrown for transport/status failures the caller must surface, never swallow. */
+export class AdminHttpError extends Error {
+  constructor(readonly status: number, readonly route: string) {
+    super(`${route} answered ${status}`);
+    this.name = "AdminHttpError";
+  }
+}
+ 
+export class AdminClient {
+  private readonly baseUrl: string;
+  private readonly fetcher: typeof fetch;
+ 
+  constructor(options: AdminClientOptions = {}) {
+    this.baseUrl = (options.baseUrl ?? "").replace(/\/$/, "");
+    // BIND the default: a bare `fetch` stored on an object and called as `this.fetcher(...)`
+    // loses its receiver and throws "Illegal invocation" in a real browser — which the
+    // discovery catch would have silently turned into "no capabilities" (found by the U2
+    // Playwright gate; jsdom does not reproduce it, so the unit tests were green).
+    this.fetcher = options.fetcher ?? ((input, init) => globalThis.fetch(input, init));
+  }
+ 
+  private async get<T>(route: string): Promise<T> {
+    const response = await this.fetcher(`${this.baseUrl}${route}`, {
+      headers: { accept: "application/json" },
+      credentials: "include",
+    });
+    if (!response.ok) throw new AdminHttpError(response.status, route);
+    return (await response.json()) as T;
+  }
+ 
+  /**
+   * Capability discovery: probe each module's list root ONCE.
+   *
+   * - 404 → `absent`: the module was never composed into this app.
+   * - 401/403 → `forbidden`: it exists, this operator may not see it.
+   * - 400 → `refused`: it exists and answered, but the request could not be SCOPED — a
+   *   multi-tenant app refuses an admin call that carries no ambient tenant (contract
+   *   revision R1). Reading that as "absent" would tell the operator the module is not
+   *   composed, which is a lie the console must never tell.
+   * - anything else non-ok → `absent`, honestly: nothing usable answered.
+   */
+  async discoverCapabilities(): Promise<Record<ModuleName, Capability>> {
+    const entries = await Promise.all(
+      MODULES.map(async (module) => {
+        try {
+          const response = await this.fetcher(`${this.baseUrl}${PROBE[module]}`, {
+            headers: { accept: "application/json" },
+            credentials: "include",
+          });
+          if (response.status === 404) return [module, { kind: "absent" } as Capability] as const;
+          if (response.status === 401 || response.status === 403) {
+            return [module, { kind: "forbidden", message: await refusalMessage(response) } as Capability] as const;
+          }
+ 
+          if (response.status === 400) {
+            return [module, { kind: "refused", message: await refusalMessage(response) } as Capability] as const;
+          }
+ 
+          return [module, { kind: response.ok ? "present" : "absent" } as Capability] as const;
+        } catch {
+          return [module, { kind: "absent" } as Capability] as const;   // unreachable: no panel, no crash
+        }
+      }),
+    );
+    return Object.fromEntries(entries) as Record<ModuleName, Capability>;
+  }
+ 
+  fleets(): Promise<FleetInfo[]> {
+    return this.get<FleetInfo[]>("/goldpath/admin/jobs/fleets");
+  }
+ 
+  jobs(fleet: string): Promise<JobInfo[]> {
+    return this.get<JobInfo[]>(`/goldpath/admin/jobs/fleets/${encodeURIComponent(fleet)}/jobs`);
+  }
+ 
+  runs(fleet: string, options: { job?: string; take?: number } = {}): Promise<RunSummary[]> {
+    const query = new URLSearchParams();
+    if (options.job) query.set("job", options.job);
+    // The contract clamps take to [1,500]; the console never asks for more.
+    query.set("take", String(Math.min(500, Math.max(1, options.take ?? 50))));
+    return this.get<RunSummary[]>(
+      `/goldpath/admin/jobs/fleets/${encodeURIComponent(fleet)}/runs?${query.toString()}`,
+    );
+  }
+ 
+  run(runId: string): Promise<RunDetail> {
+    return this.get<RunDetail>(`/goldpath/admin/jobs/runs/${encodeURIComponent(runId)}`);
+  }
+ 
+  /** Every mutating verb answers the frozen envelope — 200 ok, 400 refusal, both typed. */
+  async verb(route: string, body?: unknown): Promise<AdminResult> {
+    const response = await this.fetcher(`${this.baseUrl}${route}`, {
+      method: "POST",
+      credentials: "include",
+      headers: body === undefined ? { accept: "application/json" } : { accept: "application/json", "content-type": "application/json" },
+      body: body === undefined ? undefined : JSON.stringify(body),
+    });
+    if (response.status === 200 || response.status === 400) {
+      return (await response.json()) as AdminResult;
+    }
+ 
+    throw new AdminHttpError(response.status, route);
+  }
+ 
+  triggerJob(fleet: string, job: string): Promise<AdminResult> {
+    return this.verb(`/goldpath/admin/jobs/fleets/${encodeURIComponent(fleet)}/jobs/${encodeURIComponent(job)}/trigger`);
+  }
+ 
+  pauseJob(fleet: string, job: string): Promise<AdminResult> {
+    return this.verb(`/goldpath/admin/jobs/fleets/${encodeURIComponent(fleet)}/jobs/${encodeURIComponent(job)}/pause`);
+  }
+ 
+  resumeJob(fleet: string, job: string): Promise<AdminResult> {
+    return this.verb(`/goldpath/admin/jobs/fleets/${encodeURIComponent(fleet)}/jobs/${encodeURIComponent(job)}/resume`);
+  }
+ 
+  rerun(runId: string): Promise<AdminResult> {
+    return this.verb(`/goldpath/admin/jobs/runs/${encodeURIComponent(runId)}/rerun`);
+  }
+ 
+  /**
+   * Redrives EVERY open repair item of the run — the frozen verb takes no body and
+   * scopes itself server-side (`RedrivenAt == null`). The console must not pretend to
+   * select items it cannot select (review R1 on the U2 slice-1 PR).
+   */
+  replayItems(runId: string): Promise<AdminResult> {
+    return this.verb(`/goldpath/admin/jobs/runs/${encodeURIComponent(runId)}/replay-items`);
+  }
+ 
+  bulkDefinitions(): Promise<BulkDefinitionStatus[]> {
+    return this.get<BulkDefinitionStatus[]>("/goldpath/admin/bulk/definitions");
+  }
+ 
+  /**
+   * The batch list. The frozen surface filters by STATE (and tenant) only — there is no
+   * `definition` parameter, and the panel does NOT fake one client-side: narrowing the
+   * take-bounded page the server returned would read as "no batches" while plenty exist.
+   * The per-definition counts come from `/definitions`; issue #72 tracks adding the
+   * server-side filter.
+   */
+  bulkBatches(options: { state?: string; take?: number } = {}): Promise<BulkBatchInfo[]> {
+    const query = new URLSearchParams();
+    if (options.state) query.set("state", options.state);
+    query.set("take", String(Math.min(500, Math.max(1, options.take ?? 50))));
+    return this.get<BulkBatchInfo[]>(`/goldpath/admin/bulk/batches?${query.toString()}`);
+  }
+ 
+  /** The VALIDATION report — keyset-paged by row number (the contract's own cursor). */
+  bulkErrors(batchId: string, options: { afterRow?: number; take?: number } = {}): Promise<BulkRowError[]> {
+    const query = new URLSearchParams();
+    query.set("afterRow", String(options.afterRow ?? 0));
+    query.set("take", String(Math.min(500, Math.max(1, options.take ?? 100))));
+    return this.get<BulkRowError[]>(
+      `/goldpath/admin/bulk/batches/${encodeURIComponent(batchId)}/errors?${query.toString()}`,
+    );
+  }
+ 
+  approveBatch(batchId: string, note?: string): Promise<AdminResult> {
+    return this.verb(`/goldpath/admin/bulk/batches/${encodeURIComponent(batchId)}/approve`, { note: note ?? null });
+  }
+ 
+  rejectBatch(batchId: string, note: string): Promise<AdminResult> {
+    // The contract makes the note MANDATORY on reject — the refusal must teach later readers.
+    return this.verb(`/goldpath/admin/bulk/batches/${encodeURIComponent(batchId)}/reject`, { note });
+  }
+ 
+  /**
+   * Intake upload. The contract takes a RAW body on purpose (`curl --data-binary @file.csv`)
+   * — no multipart, no antiforgery coupling — so the console posts the file bytes as-is.
+   */
+  async uploadBatch(definition: string, file: File, tenant?: string): Promise<BulkBatchInfo> {
+    const query = new URLSearchParams({ fileName: file.name });
+    if (tenant) query.set("tenant", tenant);
+    const route = `/goldpath/admin/bulk/batches/${encodeURIComponent(definition)}?${query.toString()}`;
+    const response = await this.fetcher(`${this.baseUrl}${route}`, {
+      method: "POST",
+      credentials: "include",
+      headers: { accept: "application/json", "content-type": "application/octet-stream" },
+      body: file,
+    });
+    if (!response.ok) throw new AdminHttpError(response.status, route);
+    return (await response.json()) as BulkBatchInfo;
+  }
+ 
+  batch(batchId: string): Promise<BulkBatchInfo> {
+    return this.get<BulkBatchInfo>(`/goldpath/admin/bulk/batches/${encodeURIComponent(batchId)}`);
+  }
+ 
+  campaigns(options: { state?: string; take?: number } = {}): Promise<CampaignInfo[]> {
+    const query = new URLSearchParams();
+    if (options.state) query.set("state", options.state);
+    query.set("take", String(Math.min(500, Math.max(1, options.take ?? 50))));
+    return this.get<CampaignInfo[]>(`/goldpath/admin/campaign/?${query.toString()}`);
+  }
+ 
+  campaign(id: string): Promise<CampaignInfo> {
+    return this.get<CampaignInfo>(`/goldpath/admin/campaign/${encodeURIComponent(id)}`);
+  }
+ 
+  /** Execution failures — one noun across modules (bulk's `/errors` is validation). */
+  campaignFailures(id: string, take = 100): Promise<CampaignFailedItem[]> {
+    return this.get<CampaignFailedItem[]>(
+      `/goldpath/admin/campaign/${encodeURIComponent(id)}/failures?take=${Math.min(500, Math.max(1, take))}`,
+    );
+  }
+ 
+  campaignAudit(id: string, take = 100): Promise<CampaignAuditEntry[]> {
+    return this.get<CampaignAuditEntry[]>(
+      `/goldpath/admin/campaign/${encodeURIComponent(id)}/audit?take=${Math.min(500, Math.max(1, take))}`,
+    );
+  }
+ 
+  pauseCampaign(id: string): Promise<AdminResult> {
+    return this.verb(`/goldpath/admin/campaign/${encodeURIComponent(id)}/pause`, {});
+  }
+ 
+  resumeCampaign(id: string): Promise<AdminResult> {
+    return this.verb(`/goldpath/admin/campaign/${encodeURIComponent(id)}/resume`, {});
+  }
+ 
+  abortCampaign(id: string, reason: string): Promise<AdminResult> {
+    // The reason is the evidence — the contract binds the body, so it is never optional.
+    return this.verb(`/goldpath/admin/campaign/${encodeURIComponent(id)}/abort`, { reason });
+  }
+ 
+  throttleCampaign(id: string, patch: CampaignThrottle): Promise<AdminResult> {
+    return this.verb(`/goldpath/admin/campaign/${encodeURIComponent(id)}/throttle`, patch);
+  }
+ 
+  notificationTemplates(): Promise<NotificationTemplateStatus[]> {
+    return this.get<NotificationTemplateStatus[]>("/goldpath/admin/notification/templates");
+  }
+ 
+  notifications(options: { state?: string; template?: string; take?: number } = {}): Promise<NotificationInfo[]> {
+    const query = new URLSearchParams();
+    if (options.state) query.set("state", options.state);
+    if (options.template) query.set("template", options.template);
+    query.set("take", String(Math.min(500, Math.max(1, options.take ?? 50))));
+    return this.get<NotificationInfo[]>(`/goldpath/admin/notification/notifications?${query.toString()}`);
+  }
+ 
+  notification(id: string): Promise<NotificationInfo> {
+    return this.get<NotificationInfo>(`/goldpath/admin/notification/notifications/${encodeURIComponent(id)}`);
+  }
+ 
+  /** The two focused lists the contract exposes in their own right. */
+  notificationSuppressions(take = 100): Promise<NotificationInfo[]> {
+    return this.get<NotificationInfo[]>(`/goldpath/admin/notification/suppressions?take=${Math.min(500, Math.max(1, take))}`);
+  }
+ 
+  notificationFailures(take = 100): Promise<NotificationInfo[]> {
+    return this.get<NotificationInfo[]>(`/goldpath/admin/notification/failures?take=${Math.min(500, Math.max(1, take))}`);
+  }
+ 
+  archiveDefinitions(): Promise<ArchiveDefinitionStatus[]> {
+    return this.get<ArchiveDefinitionStatus[]>("/goldpath/admin/archival/definitions");
+  }
+ 
+  /** Retrieval is by (definition, key) — the archive has no browse route by design. */
+  async archiveEntry(definition: string, key: string): Promise<ArchiveEntry | null> {
+    const route = `/goldpath/admin/archival/entries/${encodeURIComponent(definition)}/${encodeURIComponent(key)}`;
+    const response = await this.fetcher(`${this.baseUrl}${route}`, {
+      headers: { accept: "application/json" },
+      credentials: "include",
+    });
+    if (response.status === 404) return null;   // "no such entry" is an answer, not a failure
+    if (!response.ok) throw new AdminHttpError(response.status, route);
+    return (await response.json()) as ArchiveEntry;
+  }
+ 
+  holds(includeLifted = false, take = 100): Promise<LegalHold[]> {
+    const query = new URLSearchParams({ includeLifted: String(includeLifted), take: String(Math.min(500, Math.max(1, take))) });
+    return this.get<LegalHold[]>(`/goldpath/admin/archival/holds?${query.toString()}`);
+  }
+ 
+  erasures(take = 100): Promise<ErasureRecord[]> {
+    return this.get<ErasureRecord[]>(`/goldpath/admin/archival/erasures?take=${Math.min(500, Math.max(1, take))}`);
+  }
+ 
+  placeHold(definition: string, key: string, caseReference: string): Promise<AdminResult> {
+    // The case reference is mandatory: a hold that cannot be justified later is not a hold.
+    return this.verb(`/goldpath/admin/archival/entries/${encodeURIComponent(definition)}/${encodeURIComponent(key)}/hold`, { caseReference });
+  }
+ 
+  liftHold(definition: string, key: string): Promise<AdminResult> {
+    return this.verb(`/goldpath/admin/archival/entries/${encodeURIComponent(definition)}/${encodeURIComponent(key)}/lift-hold`, {});
+  }
+ 
+  erase(definition: string, key: string, subjectKey: string, detail?: string): Promise<AdminResult> {
+    return this.verb(
+      `/goldpath/admin/archival/entries/${encodeURIComponent(definition)}/${encodeURIComponent(key)}/erase`,
+      { subjectKey, detail: detail ?? null },
+    );
+  }
+ 
+  /**
+   * Chain verification. This POST does NOT answer the verb envelope — it returns the
+   * FINDINGS themselves, and an empty list is the good news.
+   */
+  async verifyChain(definition: string): Promise<ChainFinding[]> {
+    const route = `/goldpath/admin/archival/definitions/${encodeURIComponent(definition)}/verify`;
+    const response = await this.fetcher(`${this.baseUrl}${route}`, {
+      method: "POST",
+      credentials: "include",
+      headers: { accept: "application/json" },
+    });
+    if (!response.ok) throw new AdminHttpError(response.status, route);
+    return (await response.json()) as ChainFinding[];
+  }
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/console/coverage/base.css b/ui/console/coverage/base.css new file mode 100644 index 0000000..f418035 --- /dev/null +++ b/ui/console/coverage/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/ui/console/coverage/block-navigation.js b/ui/console/coverage/block-navigation.js new file mode 100644 index 0000000..530d1ed --- /dev/null +++ b/ui/console/coverage/block-navigation.js @@ -0,0 +1,87 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selector that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } + + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/ui/console/coverage/clover.xml b/ui/console/coverage/clover.xml new file mode 100644 index 0000000..8bf4fe5 --- /dev/null +++ b/ui/console/coverage/clover.xml @@ -0,0 +1,1704 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui/console/coverage/coverage-final.json b/ui/console/coverage/coverage-final.json new file mode 100644 index 0000000..e1fbef8 --- /dev/null +++ b/ui/console/coverage/coverage-final.json @@ -0,0 +1,8 @@ +{"/Users/omercelik/Repositories/goldpath/ui/console/src/ArchivalPanel.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/ArchivalPanel.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":57}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":97}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":28}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":108}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":1}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":68}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":89}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":59}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":45}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":64}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":64}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":62}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":106}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":72}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":60}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":58}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":54}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":67}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":62}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":43}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":23}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":14}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":4}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":19}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":20}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":10}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":27}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":24}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":26}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":30}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":68}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":8}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":84}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":18}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":19}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":6}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":29}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":19}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":41}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":20}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":10}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":41}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":47}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":76}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":18}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":19}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":6}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":51}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":32}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":123}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":42}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":4}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":35}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":111}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":27}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":4}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":24}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":31}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":25}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":21}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":29}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":19}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":25}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":4}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":64}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":22}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":26}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":9}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":51}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":57}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":31}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":78}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":96}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":13}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":28}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":42}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":5}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":4}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":34}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":10}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":60}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":55}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":15}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":84}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":34}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":49}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":126}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":73}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":83}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":100}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":51}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":21}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":92}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":129}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":40}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":27}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":50}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":98}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":54}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":23}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":18}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":21}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":17}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":13}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":117}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":13}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":16}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":24}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":44}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":108}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":17}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":20}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":46}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":45}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":49}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":97}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":21}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":14}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":49}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":105}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":23}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":45}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":53}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":130}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":76}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":77}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":74}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":23}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":19}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":19}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":15}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":18}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":15}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":84}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":56}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":79}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":19}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":34}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":105}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":32}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":36}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":50}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":31}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":34}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":16}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":53}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":64}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":32}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":25}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":17}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":21}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":18}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":79}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":18}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":40}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":110}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":25}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":62}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":70}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":14}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":18}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":17}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":105}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":28}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":11}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":19}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":14}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":47}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":12}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":16}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":30}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":28}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":114}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":17}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":17}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":93}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":66}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":48}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":90}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":17}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":76}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":95}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":59}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":25}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":28}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":119}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":77}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":131}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":31}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":21}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":16}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":25}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":33}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":104}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":96}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":31}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":21}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":16}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":25}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":29}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":174}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":74}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":121}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":31}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":21}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":27}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":16}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":19}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":16}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":51}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":122}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":31}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":21}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":41}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":108}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":87}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":17}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":57}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":41}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":18}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":17}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":60}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":18}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":50}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":19}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":18}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":17}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":60}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":44}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":18}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":17}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":65}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":72}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":18}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":17}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":68}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":74}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":18}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":17}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":59}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":88}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":18}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":15}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":30}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":53}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":103}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":141}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":16}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":32}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":19}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":105}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":66}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":68}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":21}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":121}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":32}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":112}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":32}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":20}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":16}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":18}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":15}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":64}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":84}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":83}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":122}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":18}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":14}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":31}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":56}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":20}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":67}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":110}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":67}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":148}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":13}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":30}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":29}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":33}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":106}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":60}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":14}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":12}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":30}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":44}},"364":{"start":{"line":365,"column":0},"end":{"line":365,"column":95}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":10}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":16}},"368":{"start":{"line":369,"column":0},"end":{"line":369,"column":15}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":84}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":35}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":42}},"372":{"start":{"line":373,"column":0},"end":{"line":373,"column":20}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":116}},"374":{"start":{"line":375,"column":0},"end":{"line":375,"column":77}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":67}},"376":{"start":{"line":377,"column":0},"end":{"line":377,"column":92}},"377":{"start":{"line":378,"column":0},"end":{"line":378,"column":73}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":12}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":33}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":48}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":55}},"382":{"start":{"line":383,"column":0},"end":{"line":383,"column":10}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":47}},"386":{"start":{"line":387,"column":0},"end":{"line":387,"column":12}},"387":{"start":{"line":388,"column":0},"end":{"line":388,"column":16}},"388":{"start":{"line":389,"column":0},"end":{"line":389,"column":10}},"390":{"start":{"line":391,"column":0},"end":{"line":391,"column":1}}},"s":{"0":1,"19":4,"20":4,"21":4,"22":4,"30":1,"31":118,"32":118,"33":118,"34":118,"35":118,"36":118,"37":118,"39":118,"40":118,"41":118,"42":118,"45":118,"47":118,"48":118,"49":4,"50":4,"51":4,"53":118,"54":21,"55":21,"56":21,"57":21,"58":20,"59":20,"60":20,"61":21,"62":21,"63":21,"64":21,"65":21,"66":118,"69":118,"70":46,"71":13,"72":13,"73":13,"74":13,"75":13,"76":13,"77":13,"78":13,"79":118,"81":118,"82":118,"83":118,"84":118,"86":118,"87":118,"88":118,"89":118,"91":118,"92":9,"93":9,"94":9,"95":9,"96":9,"97":9,"98":9,"100":118,"102":4,"103":4,"104":4,"105":4,"106":3,"108":3,"109":2,"110":1,"111":4,"112":1,"113":1,"114":1,"115":4,"117":118,"119":118,"120":118,"121":118,"123":118,"124":118,"125":118,"126":118,"127":108,"128":108,"129":108,"130":108,"131":108,"132":108,"133":108,"135":108,"136":108,"137":108,"138":108,"139":108,"140":108,"142":108,"143":108,"144":108,"145":108,"146":118,"147":118,"148":118,"149":118,"151":118,"152":1,"153":1,"154":1,"157":118,"158":6,"159":6,"160":4,"161":4,"162":4,"164":2,"165":2,"166":2,"167":2,"168":2,"169":2,"170":2,"171":2,"172":2,"173":2,"174":2,"175":2,"176":2,"177":2,"179":6,"182":118,"183":118,"184":118,"185":118,"187":118,"188":118,"189":118,"190":118,"191":118,"192":1,"193":1,"194":1,"195":1,"197":118,"198":108,"199":108,"200":108,"201":118,"202":118,"203":118,"204":118,"206":118,"207":118,"208":118,"209":118,"210":118,"211":118,"212":118,"213":118,"214":118,"215":118,"216":118,"217":118,"219":118,"220":118,"222":118,"224":118,"225":118,"227":118,"228":10,"229":10,"230":10,"233":118,"234":17,"235":17,"236":17,"237":17,"238":17,"239":17,"240":17,"241":17,"242":17,"243":17,"244":17,"245":17,"246":17,"247":17,"248":17,"249":17,"250":17,"251":17,"252":17,"253":17,"254":17,"255":17,"256":17,"257":17,"258":17,"261":17,"262":17,"263":17,"264":17,"265":17,"266":17,"267":17,"268":17,"269":17,"271":17,"272":6,"273":6,"274":6,"276":17,"277":2,"280":17,"281":17,"282":17,"283":17,"284":17,"285":17,"286":17,"287":17,"288":17,"289":17,"290":17,"291":17,"292":17,"293":17,"294":17,"295":17,"296":17,"297":17,"298":17,"299":17,"300":17,"301":17,"302":17,"303":17,"304":17,"305":17,"306":17,"307":17,"309":17,"312":1,"313":1,"314":1,"315":1,"318":17,"319":17,"320":17,"321":17,"323":17,"324":17,"327":17,"328":17,"329":1,"330":1,"331":1,"333":17,"334":17,"337":118,"338":118,"339":118,"340":118,"341":118,"343":118,"344":118,"345":118,"346":118,"347":118,"348":118,"349":118,"350":118,"351":118,"352":118,"353":118,"354":118,"355":88,"356":1,"358":87,"360":118,"361":118,"362":118,"363":118,"364":118,"365":118,"366":118,"368":118,"369":118,"370":118,"371":118,"372":118,"373":118,"374":118,"375":118,"376":118,"377":118,"378":118,"379":118,"380":118,"381":118,"382":118,"384":118,"386":118,"387":118,"388":118,"390":118},"branchMap":{"0":{"type":"branch","line":20,"loc":{"start":{"line":20,"column":0},"end":{"line":23,"column":1}},"locations":[{"start":{"line":20,"column":0},"end":{"line":23,"column":1}}]},"1":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":23},"end":{"line":22,"column":21}},"locations":[{"start":{"line":21,"column":23},"end":{"line":22,"column":21}}]},"2":{"type":"branch","line":22,"loc":{"start":{"line":22,"column":16},"end":{"line":22,"column":63}},"locations":[{"start":{"line":22,"column":16},"end":{"line":22,"column":63}}]},"3":{"type":"branch","line":22,"loc":{"start":{"line":22,"column":59},"end":{"line":22,"column":108}},"locations":[{"start":{"line":22,"column":59},"end":{"line":22,"column":108}}]},"4":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":7},"end":{"line":391,"column":1}},"locations":[{"start":{"line":31,"column":7},"end":{"line":391,"column":1}}]},"5":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":16},"end":{"line":118,"column":34}},"locations":[{"start":{"line":118,"column":16},"end":{"line":118,"column":34}}]},"6":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":7},"end":{"line":122,"column":55}},"locations":[{"start":{"line":122,"column":7},"end":{"line":122,"column":55}}]},"7":{"type":"branch","line":127,"loc":{"start":{"line":127,"column":12},"end":{"line":127,"column":31}},"locations":[{"start":{"line":127,"column":12},"end":{"line":127,"column":31}}]},"8":{"type":"branch","line":148,"loc":{"start":{"line":148,"column":11},"end":{"line":148,"column":35}},"locations":[{"start":{"line":148,"column":11},"end":{"line":148,"column":35}}]},"9":{"type":"branch","line":148,"loc":{"start":{"line":148,"column":35},"end":{"line":148,"column":117}},"locations":[{"start":{"line":148,"column":35},"end":{"line":148,"column":117}}]},"10":{"type":"branch","line":152,"loc":{"start":{"line":152,"column":7},"end":{"line":155,"column":17}},"locations":[{"start":{"line":152,"column":7},"end":{"line":155,"column":17}}]},"11":{"type":"branch","line":158,"loc":{"start":{"line":158,"column":7},"end":{"line":180,"column":18}},"locations":[{"start":{"line":158,"column":7},"end":{"line":180,"column":18}}]},"12":{"type":"branch","line":160,"loc":{"start":{"line":160,"column":40},"end":{"line":163,"column":21}},"locations":[{"start":{"line":160,"column":40},"end":{"line":163,"column":21}}]},"13":{"type":"branch","line":163,"loc":{"start":{"line":163,"column":12},"end":{"line":178,"column":15}},"locations":[{"start":{"line":163,"column":12},"end":{"line":178,"column":15}}]},"14":{"type":"branch","line":198,"loc":{"start":{"line":198,"column":16},"end":{"line":198,"column":35}},"locations":[{"start":{"line":198,"column":16},"end":{"line":198,"column":35}}]},"15":{"type":"branch","line":228,"loc":{"start":{"line":228,"column":7},"end":{"line":228,"column":30}},"locations":[{"start":{"line":228,"column":7},"end":{"line":228,"column":30}}]},"16":{"type":"branch","line":228,"loc":{"start":{"line":228,"column":20},"end":{"line":231,"column":17}},"locations":[{"start":{"line":228,"column":20},"end":{"line":231,"column":17}}]},"17":{"type":"branch","line":234,"loc":{"start":{"line":234,"column":7},"end":{"line":335,"column":18}},"locations":[{"start":{"line":234,"column":7},"end":{"line":335,"column":18}}]},"18":{"type":"branch","line":240,"loc":{"start":{"line":240,"column":19},"end":{"line":240,"column":76}},"locations":[{"start":{"line":240,"column":19},"end":{"line":240,"column":76}}]},"19":{"type":"branch","line":272,"loc":{"start":{"line":272,"column":11},"end":{"line":272,"column":51}},"locations":[{"start":{"line":272,"column":11},"end":{"line":272,"column":51}}]},"20":{"type":"branch","line":272,"loc":{"start":{"line":272,"column":39},"end":{"line":275,"column":21}},"locations":[{"start":{"line":272,"column":39},"end":{"line":275,"column":21}}]},"21":{"type":"branch","line":273,"loc":{"start":{"line":273,"column":43},"end":{"line":273,"column":62}},"locations":[{"start":{"line":273,"column":43},"end":{"line":273,"column":62}}]},"22":{"type":"branch","line":273,"loc":{"start":{"line":273,"column":50},"end":{"line":273,"column":72}},"locations":[{"start":{"line":273,"column":50},"end":{"line":273,"column":72}}]},"23":{"type":"branch","line":273,"loc":{"start":{"line":273,"column":95},"end":{"line":273,"column":113}},"locations":[{"start":{"line":273,"column":95},"end":{"line":273,"column":113}}]},"24":{"type":"branch","line":273,"loc":{"start":{"line":273,"column":102},"end":{"line":273,"column":122}},"locations":[{"start":{"line":273,"column":102},"end":{"line":273,"column":122}}]},"25":{"type":"branch","line":277,"loc":{"start":{"line":277,"column":11},"end":{"line":277,"column":29}},"locations":[{"start":{"line":277,"column":11},"end":{"line":277,"column":29}}]},"26":{"type":"branch","line":277,"loc":{"start":{"line":277,"column":29},"end":{"line":278,"column":108}},"locations":[{"start":{"line":277,"column":29},"end":{"line":278,"column":108}}]},"27":{"type":"branch","line":306,"loc":{"start":{"line":306,"column":57},"end":{"line":306,"column":83}},"locations":[{"start":{"line":306,"column":57},"end":{"line":306,"column":83}}]},"28":{"type":"branch","line":310,"loc":{"start":{"line":310,"column":17},"end":{"line":316,"column":16}},"locations":[{"start":{"line":310,"column":17},"end":{"line":316,"column":16}}]},"29":{"type":"branch","line":315,"loc":{"start":{"line":315,"column":94},"end":{"line":315,"column":140}},"locations":[{"start":{"line":315,"column":94},"end":{"line":315,"column":140}}]},"30":{"type":"branch","line":324,"loc":{"start":{"line":324,"column":15},"end":{"line":324,"column":50}},"locations":[{"start":{"line":324,"column":15},"end":{"line":324,"column":50}}]},"31":{"type":"branch","line":324,"loc":{"start":{"line":324,"column":32},"end":{"line":324,"column":68}},"locations":[{"start":{"line":324,"column":32},"end":{"line":324,"column":68}}]},"32":{"type":"branch","line":329,"loc":{"start":{"line":329,"column":13},"end":{"line":332,"column":20}},"locations":[{"start":{"line":329,"column":13},"end":{"line":332,"column":20}}]},"33":{"type":"branch","line":365,"loc":{"start":{"line":365,"column":24},"end":{"line":365,"column":76}},"locations":[{"start":{"line":365,"column":24},"end":{"line":365,"column":76}}]},"34":{"type":"branch","line":365,"loc":{"start":{"line":365,"column":40},"end":{"line":365,"column":95}},"locations":[{"start":{"line":365,"column":40},"end":{"line":365,"column":95}}]},"35":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":18},"end":{"line":48,"column":62}},"locations":[{"start":{"line":48,"column":18},"end":{"line":48,"column":62}}]},"36":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":40},"end":{"line":48,"column":60}},"locations":[{"start":{"line":48,"column":40},"end":{"line":48,"column":60}}]},"37":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":17},"end":{"line":52,"column":4}},"locations":[{"start":{"line":49,"column":17},"end":{"line":52,"column":4}}]},"38":{"type":"branch","line":54,"loc":{"start":{"line":54,"column":12},"end":{"line":67,"column":5}},"locations":[{"start":{"line":54,"column":12},"end":{"line":67,"column":5}}]},"39":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":12},"end":{"line":62,"column":7}},"locations":[{"start":{"line":58,"column":12},"end":{"line":62,"column":7}}]},"40":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":19},"end":{"line":59,"column":26}},"locations":[{"start":{"line":59,"column":19},"end":{"line":59,"column":26}}]},"41":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":22},"end":{"line":61,"column":66}},"locations":[{"start":{"line":61,"column":22},"end":{"line":61,"column":66}}]},"42":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":35},"end":{"line":61,"column":64}},"locations":[{"start":{"line":61,"column":35},"end":{"line":61,"column":64}}]},"43":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":56},"end":{"line":61,"column":66}},"locations":[{"start":{"line":61,"column":56},"end":{"line":61,"column":66}}]},"44":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":13},"end":{"line":63,"column":82}},"locations":[{"start":{"line":63,"column":13},"end":{"line":63,"column":82}}]},"45":{"type":"branch","line":64,"loc":{"start":{"line":64,"column":11},"end":{"line":66,"column":6}},"locations":[{"start":{"line":64,"column":11},"end":{"line":66,"column":6}}]},"46":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":12},"end":{"line":80,"column":5}},"locations":[{"start":{"line":70,"column":12},"end":{"line":80,"column":5}}]},"47":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":9},"end":{"line":71,"column":34}},"locations":[{"start":{"line":71,"column":9},"end":{"line":71,"column":34}}]},"48":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":34},"end":{"line":71,"column":41}},"locations":[{"start":{"line":71,"column":34},"end":{"line":71,"column":41}}]},"49":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":34},"end":{"line":79,"column":6}},"locations":[{"start":{"line":71,"column":34},"end":{"line":79,"column":6}}]},"50":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":12},"end":{"line":75,"column":46}},"locations":[{"start":{"line":75,"column":12},"end":{"line":75,"column":46}}]},"51":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":11},"end":{"line":79,"column":6}},"locations":[{"start":{"line":77,"column":11},"end":{"line":79,"column":6}}]},"52":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":83,"column":123}},"locations":[{"start":{"line":83,"column":4},"end":{"line":83,"column":123}}]},"53":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":100},"end":{"line":83,"column":123}},"locations":[{"start":{"line":83,"column":100},"end":{"line":83,"column":123}}]},"54":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":4},"end":{"line":88,"column":111}},"locations":[{"start":{"line":88,"column":4},"end":{"line":88,"column":111}}]},"55":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":88},"end":{"line":88,"column":111}},"locations":[{"start":{"line":88,"column":88},"end":{"line":88,"column":111}}]},"56":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":17},"end":{"line":99,"column":4}},"locations":[{"start":{"line":92,"column":17},"end":{"line":99,"column":4}}]},"57":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":18},"end":{"line":94,"column":25}},"locations":[{"start":{"line":94,"column":18},"end":{"line":94,"column":25}}]},"58":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":17},"end":{"line":116,"column":4}},"locations":[{"start":{"line":101,"column":17},"end":{"line":116,"column":4}}]},"59":{"type":"branch","line":106,"loc":{"start":{"line":106,"column":49},"end":{"line":109,"column":31}},"locations":[{"start":{"line":106,"column":49},"end":{"line":109,"column":31}}]},"60":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":30},"end":{"line":110,"column":78}},"locations":[{"start":{"line":109,"column":30},"end":{"line":110,"column":78}}]},"61":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":77},"end":{"line":111,"column":96}},"locations":[{"start":{"line":110,"column":77},"end":{"line":111,"column":96}}]},"62":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":4},"end":{"line":115,"column":5}},"locations":[{"start":{"line":112,"column":4},"end":{"line":115,"column":5}}]},"63":{"type":"branch","line":127,"loc":{"start":{"line":127,"column":35},"end":{"line":146,"column":17}},"locations":[{"start":{"line":127,"column":35},"end":{"line":146,"column":17}}]},"64":{"type":"branch","line":131,"loc":{"start":{"line":131,"column":63},"end":{"line":131,"column":84}},"locations":[{"start":{"line":131,"column":63},"end":{"line":131,"column":84}}]},"65":{"type":"branch","line":131,"loc":{"start":{"line":131,"column":67},"end":{"line":131,"column":96}},"locations":[{"start":{"line":131,"column":67},"end":{"line":131,"column":96}}]},"66":{"type":"branch","line":141,"loc":{"start":{"line":141,"column":27},"end":{"line":141,"column":54}},"locations":[{"start":{"line":141,"column":27},"end":{"line":141,"column":54}}]},"67":{"type":"branch","line":170,"loc":{"start":{"line":170,"column":39},"end":{"line":175,"column":23}},"locations":[{"start":{"line":170,"column":39},"end":{"line":175,"column":23}}]},"68":{"type":"branch","line":192,"loc":{"start":{"line":192,"column":24},"end":{"line":196,"column":16}},"locations":[{"start":{"line":192,"column":24},"end":{"line":196,"column":16}}]},"69":{"type":"branch","line":198,"loc":{"start":{"line":198,"column":39},"end":{"line":201,"column":25}},"locations":[{"start":{"line":198,"column":39},"end":{"line":201,"column":25}}]},"70":{"type":"branch","line":211,"loc":{"start":{"line":211,"column":24},"end":{"line":211,"column":62}},"locations":[{"start":{"line":211,"column":24},"end":{"line":211,"column":62}}]},"71":{"type":"branch","line":212,"loc":{"start":{"line":212,"column":25},"end":{"line":212,"column":70}},"locations":[{"start":{"line":212,"column":25},"end":{"line":212,"column":70}}]},"72":{"type":"branch","line":212,"loc":{"start":{"line":212,"column":50},"end":{"line":212,"column":70}},"locations":[{"start":{"line":212,"column":50},"end":{"line":212,"column":70}}]},"73":{"type":"branch","line":247,"loc":{"start":{"line":247,"column":25},"end":{"line":247,"column":131}},"locations":[{"start":{"line":247,"column":25},"end":{"line":247,"column":131}}]},"74":{"type":"branch","line":247,"loc":{"start":{"line":247,"column":109},"end":{"line":247,"column":128}},"locations":[{"start":{"line":247,"column":109},"end":{"line":247,"column":128}}]},"75":{"type":"branch","line":254,"loc":{"start":{"line":254,"column":25},"end":{"line":254,"column":96}},"locations":[{"start":{"line":254,"column":25},"end":{"line":254,"column":96}}]},"76":{"type":"branch","line":264,"loc":{"start":{"line":264,"column":25},"end":{"line":264,"column":121}},"locations":[{"start":{"line":264,"column":25},"end":{"line":264,"column":121}}]},"77":{"type":"branch","line":264,"loc":{"start":{"line":264,"column":102},"end":{"line":264,"column":118}},"locations":[{"start":{"line":264,"column":102},"end":{"line":264,"column":118}}]},"78":{"type":"branch","line":322,"loc":{"start":{"line":322,"column":23},"end":{"line":322,"column":66}},"locations":[{"start":{"line":322,"column":23},"end":{"line":322,"column":66}}]},"79":{"type":"branch","line":322,"loc":{"start":{"line":322,"column":47},"end":{"line":322,"column":64}},"locations":[{"start":{"line":322,"column":47},"end":{"line":322,"column":64}}]},"80":{"type":"branch","line":342,"loc":{"start":{"line":342,"column":69},"end":{"line":342,"column":120}},"locations":[{"start":{"line":342,"column":69},"end":{"line":342,"column":120}}]},"81":{"type":"branch","line":349,"loc":{"start":{"line":349,"column":39},"end":{"line":349,"column":65}},"locations":[{"start":{"line":349,"column":39},"end":{"line":349,"column":65}}]},"82":{"type":"branch","line":350,"loc":{"start":{"line":350,"column":35},"end":{"line":350,"column":108}},"locations":[{"start":{"line":350,"column":35},"end":{"line":350,"column":108}}]},"83":{"type":"branch","line":351,"loc":{"start":{"line":351,"column":36},"end":{"line":351,"column":65}},"locations":[{"start":{"line":351,"column":36},"end":{"line":351,"column":65}}]},"84":{"type":"branch","line":352,"loc":{"start":{"line":352,"column":38},"end":{"line":352,"column":146}},"locations":[{"start":{"line":352,"column":38},"end":{"line":352,"column":146}}]},"85":{"type":"branch","line":355,"loc":{"start":{"line":355,"column":20},"end":{"line":359,"column":60}},"locations":[{"start":{"line":355,"column":20},"end":{"line":359,"column":60}}]},"86":{"type":"branch","line":356,"loc":{"start":{"line":356,"column":21},"end":{"line":357,"column":106}},"locations":[{"start":{"line":356,"column":21},"end":{"line":357,"column":106}}]},"87":{"type":"branch","line":357,"loc":{"start":{"line":357,"column":99},"end":{"line":359,"column":60}},"locations":[{"start":{"line":357,"column":99},"end":{"line":359,"column":60}}]},"88":{"type":"branch","line":364,"loc":{"start":{"line":364,"column":18},"end":{"line":364,"column":44}},"locations":[{"start":{"line":364,"column":18},"end":{"line":364,"column":44}}]}},"b":{"0":[4],"1":[3],"2":[2],"3":[1],"4":[118],"5":[1],"6":[1],"7":[18],"8":[100],"9":[0],"10":[1],"11":[6],"12":[4],"13":[2],"14":[18],"15":[27],"16":[10],"17":[17],"18":[1],"19":[8],"20":[6],"21":[4],"22":[2],"23":[4],"24":[2],"25":[8],"26":[2],"27":[0],"28":[1],"29":[0],"30":[1],"31":[16],"32":[1],"33":[1],"34":[117],"35":[4],"36":[4],"37":[4],"38":[21],"39":[20],"40":[0],"41":[19],"42":[15],"43":[0],"44":[1],"45":[21],"46":[46],"47":[13],"48":[33],"49":[13],"50":[13],"51":[13],"52":[22],"53":[20],"54":[21],"55":[19],"56":[9],"57":[0],"58":[4],"59":[3],"60":[2],"61":[1],"62":[1],"63":[108],"64":[87],"65":[21],"66":[4],"67":[2],"68":[1],"69":[108],"70":[48],"71":[48],"72":[0],"73":[1],"74":[0],"75":[2],"76":[1],"77":[0],"78":[1],"79":[1],"80":[1],"81":[88],"82":[88],"83":[88],"84":[88],"85":[88],"86":[1],"87":[87],"88":[88]},"fnMap":{"0":{"name":"asOutcome","decl":{"start":{"line":20,"column":0},"end":{"line":23,"column":1}},"loc":{"start":{"line":20,"column":0},"end":{"line":23,"column":1}},"line":20},"1":{"name":"ArchivalPanel","decl":{"start":{"line":31,"column":7},"end":{"line":391,"column":1}},"loc":{"start":{"line":31,"column":7},"end":{"line":391,"column":1}},"line":31},"2":{"name":"refresh","decl":{"start":{"line":48,"column":18},"end":{"line":48,"column":62}},"loc":{"start":{"line":48,"column":18},"end":{"line":48,"column":62}},"line":48},"3":{"name":"settle","decl":{"start":{"line":49,"column":17},"end":{"line":52,"column":4}},"loc":{"start":{"line":49,"column":17},"end":{"line":52,"column":4}},"line":49},"4":{"name":"lookUp","decl":{"start":{"line":92,"column":17},"end":{"line":99,"column":4}},"loc":{"start":{"line":92,"column":17},"end":{"line":99,"column":4}},"line":92},"5":{"name":"verify","decl":{"start":{"line":101,"column":17},"end":{"line":116,"column":4}},"loc":{"start":{"line":101,"column":17},"end":{"line":116,"column":4}},"line":101},"6":{"name":"execute","decl":{"start":{"line":141,"column":27},"end":{"line":141,"column":54}},"loc":{"start":{"line":141,"column":27},"end":{"line":141,"column":54}},"line":141},"7":{"name":"onChange","decl":{"start":{"line":192,"column":24},"end":{"line":196,"column":16}},"loc":{"start":{"line":192,"column":24},"end":{"line":196,"column":16}},"line":192},"8":{"name":"onChange","decl":{"start":{"line":211,"column":24},"end":{"line":211,"column":62}},"loc":{"start":{"line":211,"column":24},"end":{"line":211,"column":62}},"line":211},"9":{"name":"onKeyDown","decl":{"start":{"line":212,"column":25},"end":{"line":212,"column":70}},"loc":{"start":{"line":212,"column":25},"end":{"line":212,"column":70}},"line":212},"10":{"name":"execute","decl":{"start":{"line":247,"column":25},"end":{"line":247,"column":131}},"loc":{"start":{"line":247,"column":25},"end":{"line":247,"column":131}},"line":247},"11":{"name":"execute","decl":{"start":{"line":254,"column":25},"end":{"line":254,"column":96}},"loc":{"start":{"line":254,"column":25},"end":{"line":254,"column":96}},"line":254},"12":{"name":"execute","decl":{"start":{"line":264,"column":25},"end":{"line":264,"column":121}},"loc":{"start":{"line":264,"column":25},"end":{"line":264,"column":121}},"line":264},"13":{"name":"onClick","decl":{"start":{"line":322,"column":23},"end":{"line":322,"column":66}},"loc":{"start":{"line":322,"column":23},"end":{"line":322,"column":66}},"line":322},"14":{"name":"onChange","decl":{"start":{"line":342,"column":69},"end":{"line":342,"column":120}},"loc":{"start":{"line":342,"column":69},"end":{"line":342,"column":120}},"line":342},"15":{"name":"cell","decl":{"start":{"line":349,"column":39},"end":{"line":349,"column":65}},"loc":{"start":{"line":349,"column":39},"end":{"line":349,"column":65}},"line":349},"16":{"name":"cell","decl":{"start":{"line":350,"column":35},"end":{"line":350,"column":108}},"loc":{"start":{"line":350,"column":35},"end":{"line":350,"column":108}},"line":350},"17":{"name":"cell","decl":{"start":{"line":351,"column":36},"end":{"line":351,"column":65}},"loc":{"start":{"line":351,"column":36},"end":{"line":351,"column":65}},"line":351},"18":{"name":"cell","decl":{"start":{"line":352,"column":38},"end":{"line":352,"column":146}},"loc":{"start":{"line":352,"column":38},"end":{"line":352,"column":146}},"line":352},"19":{"name":"cell","decl":{"start":{"line":355,"column":20},"end":{"line":359,"column":60}},"loc":{"start":{"line":355,"column":20},"end":{"line":359,"column":60}},"line":355},"20":{"name":"rowKey","decl":{"start":{"line":364,"column":18},"end":{"line":364,"column":44}},"loc":{"start":{"line":364,"column":18},"end":{"line":364,"column":44}},"line":364},"21":{"name":"cell","decl":{"start":{"line":374,"column":39},"end":{"line":374,"column":114}},"loc":{"start":{"line":374,"column":39},"end":{"line":374,"column":114}},"line":374},"22":{"name":"cell","decl":{"start":{"line":375,"column":44},"end":{"line":375,"column":75}},"loc":{"start":{"line":375,"column":44},"end":{"line":375,"column":75}},"line":375},"23":{"name":"cell","decl":{"start":{"line":376,"column":34},"end":{"line":376,"column":65}},"loc":{"start":{"line":376,"column":34},"end":{"line":376,"column":65}},"line":376},"24":{"name":"cell","decl":{"start":{"line":377,"column":55},"end":{"line":377,"column":90}},"loc":{"start":{"line":377,"column":55},"end":{"line":377,"column":90}},"line":377},"25":{"name":"cell","decl":{"start":{"line":378,"column":38},"end":{"line":378,"column":71}},"loc":{"start":{"line":378,"column":38},"end":{"line":378,"column":71}},"line":378},"26":{"name":"rowKey","decl":{"start":{"line":381,"column":18},"end":{"line":381,"column":48}},"loc":{"start":{"line":381,"column":18},"end":{"line":381,"column":48}},"line":381}},"f":{"0":4,"1":118,"2":4,"3":4,"4":9,"5":4,"6":4,"7":1,"8":48,"9":48,"10":1,"11":2,"12":1,"13":1,"14":1,"15":88,"16":88,"17":88,"18":88,"19":88,"20":88,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0}} +,"/Users/omercelik/Repositories/goldpath/ui/console/src/BulkPanel.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/BulkPanel.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":65}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":97}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":28}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":108}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":1}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":16}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":13}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":15}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":14}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":13}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":13}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":14}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":26}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":11}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":26}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":55}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":86}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":49}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":68}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":71}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":58}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":69}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":54}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":51}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":59}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":54}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":62}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":44}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":25}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":14}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":4}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":19}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":20}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":10}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":24}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":24}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":26}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":30}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":68}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":8}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":81}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":18}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":19}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":6}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":29}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":34}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":53}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":84}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":50}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":6}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":34}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":4}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":33}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":52}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":80}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":106}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":33}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":106}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":6}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":39}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":4}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":19}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":74}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":19}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":19}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":22}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":24}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":13}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":5}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":20}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":10}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":24}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":50}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":80}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":18}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":19}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":6}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":41}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":52}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":66}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":9}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":63}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":30}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":16}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":100}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":13}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":42}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":5}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":4}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":39}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":86}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":3}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":94}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":10}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":56}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":55}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":30}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":45}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":18}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":34}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":67}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":141}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":14}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":25}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":17}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":15}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":87}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":34}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":52}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":129}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":76}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":87}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":70}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":39}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":23}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":17}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":77}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":74}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":17}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":13}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":13}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":16}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":15}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":82}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":59}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":85}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":18}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":17}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":32}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":87}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":30}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":67}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":54}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":68}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":33}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":23}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":15}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":19}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":16}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":27}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":23}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":35}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":232}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":74}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":12}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":20}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":23}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":28}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":65}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":30}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":14}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":14}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":47}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":114}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":12}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":16}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":15}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":83}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":64}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":80}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":18}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":17}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":27}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":87}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":25}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":34}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":43}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":34}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":14}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":48}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":37}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":50}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":24}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":23}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":15}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":19}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":14}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":35}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":42}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":20}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":13}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":30}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":32}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":129}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":28}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":25}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":14}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":72}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":85}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":105}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":86}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":12}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":32}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":38}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":50}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":10}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":16}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":20}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":92}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":66}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":48}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":57}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":17}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":49}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":101}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":96}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":42}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":61}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":27}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":33}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":99}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":53}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":100}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":33}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":23}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":18}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":27}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":32}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":68}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":71}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":92}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":33}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":23}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":29}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":18}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":21}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":16}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":53}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":124}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":32}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":21}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":42}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":113}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":87}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":17}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":56}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":43}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":18}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":17}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":51}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":43}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":18}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":17}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":53}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":110}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":18}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":17}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":63}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":18}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":140}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":19}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":18}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":15}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":34}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":62}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":116}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":34}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":76}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":16}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":66}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":81}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":15}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":40}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":38}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":52}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":24}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":113}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":62}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":66}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":16}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":35}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":46}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":24}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":65}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":14}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":18}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":10}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":1}}},"s":{"0":1,"10":5,"11":5,"12":5,"13":5,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"28":1,"35":1,"36":76,"37":76,"38":76,"39":76,"40":76,"43":76,"44":76,"45":76,"46":76,"47":76,"49":76,"52":76,"53":5,"54":5,"55":5,"57":76,"58":23,"59":23,"60":23,"61":23,"62":22,"63":22,"64":22,"65":23,"66":23,"67":23,"68":23,"69":23,"70":76,"72":76,"73":76,"76":24,"77":22,"78":24,"79":76,"80":76,"83":76,"84":76,"85":15,"86":15,"87":15,"89":15,"90":15,"91":76,"92":76,"96":76,"97":27,"98":76,"100":76,"101":32,"102":17,"103":17,"104":17,"106":15,"107":15,"108":15,"109":15,"110":15,"111":15,"112":15,"113":15,"114":76,"118":76,"119":2,"120":2,"121":2,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":2,"133":76,"134":17,"135":17,"137":76,"139":76,"140":76,"141":76,"143":76,"144":55,"145":55,"146":55,"147":55,"148":55,"149":55,"150":55,"151":55,"154":76,"155":76,"156":76,"157":76,"158":57,"159":57,"160":57,"161":112,"162":112,"163":112,"164":57,"165":57,"166":1,"168":57,"169":76,"170":76,"171":76,"173":76,"174":76,"175":76,"176":76,"178":76,"179":76,"180":76,"181":76,"182":76,"183":76,"185":76,"186":57,"187":57,"188":57,"189":76,"190":76,"191":76,"192":76,"193":76,"194":76,"197":76,"198":76,"199":76,"200":76,"201":4,"202":4,"203":4,"204":4,"205":4,"207":76,"208":76,"209":76,"211":76,"212":76,"214":76,"215":76,"216":76,"217":76,"219":76,"220":76,"221":76,"222":76,"223":76,"224":76,"225":1,"226":1,"227":1,"229":76,"230":76,"231":472,"232":472,"233":472,"234":76,"235":76,"236":76,"238":76,"239":76,"240":76,"241":76,"242":76,"243":76,"244":40,"245":40,"246":40,"248":76,"249":76,"250":76,"251":76,"252":76,"253":76,"254":76,"255":76,"256":76,"257":76,"258":76,"260":76,"261":20,"262":20,"263":20,"264":20,"265":20,"266":20,"267":20,"268":20,"269":20,"270":17,"271":17,"272":17,"273":17,"274":17,"275":17,"276":17,"277":17,"278":17,"279":17,"280":17,"281":17,"283":17,"284":17,"285":17,"286":17,"287":17,"288":17,"289":17,"291":20,"293":20,"296":8,"297":8,"298":8,"301":20,"302":2,"305":20,"306":20,"307":20,"308":20,"309":20,"310":20,"311":20,"312":20,"313":20,"314":20,"315":20,"316":20,"317":20,"318":20,"319":20,"320":20,"321":20,"322":20,"323":20,"324":20,"326":20,"329":1,"330":1,"331":1,"332":1,"333":1,"336":20,"337":20,"338":20,"339":20,"340":19,"341":19,"342":19,"343":19,"344":19,"345":19,"346":19,"347":19,"348":19,"349":19,"350":19,"351":19,"353":20,"355":76,"357":76},"branchMap":{"0":{"type":"branch","line":11,"loc":{"start":{"line":11,"column":0},"end":{"line":14,"column":1}},"locations":[{"start":{"line":11,"column":0},"end":{"line":14,"column":1}}]},"1":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":23},"end":{"line":13,"column":21}},"locations":[{"start":{"line":12,"column":23},"end":{"line":13,"column":21}}]},"2":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":16},"end":{"line":13,"column":63}},"locations":[{"start":{"line":13,"column":16},"end":{"line":13,"column":63}}]},"3":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":59},"end":{"line":13,"column":108}},"locations":[{"start":{"line":13,"column":59},"end":{"line":13,"column":108}}]},"4":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":7},"end":{"line":358,"column":1}},"locations":[{"start":{"line":36,"column":7},"end":{"line":358,"column":1}}]},"5":{"type":"branch","line":134,"loc":{"start":{"line":134,"column":22},"end":{"line":134,"column":38}},"locations":[{"start":{"line":134,"column":22},"end":{"line":134,"column":38}}]},"6":{"type":"branch","line":134,"loc":{"start":{"line":134,"column":38},"end":{"line":138,"column":34}},"locations":[{"start":{"line":134,"column":38},"end":{"line":138,"column":34}}]},"7":{"type":"branch","line":134,"loc":{"start":{"line":134,"column":38},"end":{"line":136,"column":3}},"locations":[{"start":{"line":134,"column":38},"end":{"line":136,"column":3}}]},"8":{"type":"branch","line":136,"loc":{"start":{"line":136,"column":2},"end":{"line":138,"column":34}},"locations":[{"start":{"line":136,"column":2},"end":{"line":138,"column":34}}]},"9":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":19},"end":{"line":138,"column":38}},"locations":[{"start":{"line":138,"column":19},"end":{"line":138,"column":38}}]},"10":{"type":"branch","line":142,"loc":{"start":{"line":142,"column":7},"end":{"line":142,"column":55}},"locations":[{"start":{"line":142,"column":7},"end":{"line":142,"column":55}}]},"11":{"type":"branch","line":144,"loc":{"start":{"line":144,"column":24},"end":{"line":152,"column":17}},"locations":[{"start":{"line":144,"column":24},"end":{"line":152,"column":17}}]},"12":{"type":"branch","line":158,"loc":{"start":{"line":158,"column":12},"end":{"line":158,"column":31}},"locations":[{"start":{"line":158,"column":12},"end":{"line":158,"column":31}}]},"13":{"type":"branch","line":186,"loc":{"start":{"line":186,"column":14},"end":{"line":186,"column":33}},"locations":[{"start":{"line":186,"column":14},"end":{"line":186,"column":33}}]},"14":{"type":"branch","line":201,"loc":{"start":{"line":201,"column":11},"end":{"line":206,"column":14}},"locations":[{"start":{"line":201,"column":11},"end":{"line":206,"column":14}}]},"15":{"type":"branch","line":261,"loc":{"start":{"line":261,"column":7},"end":{"line":354,"column":18}},"locations":[{"start":{"line":261,"column":7},"end":{"line":354,"column":18}}]},"16":{"type":"branch","line":269,"loc":{"start":{"line":269,"column":22},"end":{"line":269,"column":96}},"locations":[{"start":{"line":269,"column":22},"end":{"line":269,"column":96}}]},"17":{"type":"branch","line":270,"loc":{"start":{"line":270,"column":32},"end":{"line":290,"column":21}},"locations":[{"start":{"line":270,"column":32},"end":{"line":290,"column":21}}]},"18":{"type":"branch","line":294,"loc":{"start":{"line":294,"column":11},"end":{"line":294,"column":53}},"locations":[{"start":{"line":294,"column":11},"end":{"line":294,"column":53}}]},"19":{"type":"branch","line":294,"loc":{"start":{"line":294,"column":41},"end":{"line":299,"column":21}},"locations":[{"start":{"line":294,"column":41},"end":{"line":299,"column":21}}]},"20":{"type":"branch","line":297,"loc":{"start":{"line":297,"column":44},"end":{"line":297,"column":63}},"locations":[{"start":{"line":297,"column":44},"end":{"line":297,"column":63}}]},"21":{"type":"branch","line":297,"loc":{"start":{"line":297,"column":51},"end":{"line":297,"column":73}},"locations":[{"start":{"line":297,"column":51},"end":{"line":297,"column":73}}]},"22":{"type":"branch","line":297,"loc":{"start":{"line":297,"column":97},"end":{"line":297,"column":115}},"locations":[{"start":{"line":297,"column":97},"end":{"line":297,"column":115}}]},"23":{"type":"branch","line":297,"loc":{"start":{"line":297,"column":104},"end":{"line":297,"column":124}},"locations":[{"start":{"line":297,"column":104},"end":{"line":297,"column":124}}]},"24":{"type":"branch","line":302,"loc":{"start":{"line":302,"column":11},"end":{"line":302,"column":30}},"locations":[{"start":{"line":302,"column":11},"end":{"line":302,"column":30}}]},"25":{"type":"branch","line":302,"loc":{"start":{"line":302,"column":30},"end":{"line":303,"column":113}},"locations":[{"start":{"line":302,"column":30},"end":{"line":303,"column":113}}]},"26":{"type":"branch","line":317,"loc":{"start":{"line":317,"column":52},"end":{"line":317,"column":72}},"locations":[{"start":{"line":317,"column":52},"end":{"line":317,"column":72}}]},"27":{"type":"branch","line":317,"loc":{"start":{"line":317,"column":56},"end":{"line":317,"column":84}},"locations":[{"start":{"line":317,"column":56},"end":{"line":317,"column":84}}]},"28":{"type":"branch","line":322,"loc":{"start":{"line":322,"column":81},"end":{"line":322,"column":101}},"locations":[{"start":{"line":322,"column":81},"end":{"line":322,"column":101}}]},"29":{"type":"branch","line":327,"loc":{"start":{"line":327,"column":20},"end":{"line":334,"column":16}},"locations":[{"start":{"line":327,"column":20},"end":{"line":334,"column":16}}]},"30":{"type":"branch","line":331,"loc":{"start":{"line":331,"column":47},"end":{"line":331,"column":71}},"locations":[{"start":{"line":331,"column":47},"end":{"line":331,"column":71}}]},"31":{"type":"branch","line":331,"loc":{"start":{"line":331,"column":85},"end":{"line":331,"column":108}},"locations":[{"start":{"line":331,"column":85},"end":{"line":331,"column":108}}]},"32":{"type":"branch","line":333,"loc":{"start":{"line":333,"column":67},"end":{"line":333,"column":76}},"locations":[{"start":{"line":333,"column":67},"end":{"line":333,"column":76}}]},"33":{"type":"branch","line":338,"loc":{"start":{"line":338,"column":55},"end":{"line":338,"column":78}},"locations":[{"start":{"line":338,"column":55},"end":{"line":338,"column":78}}]},"34":{"type":"branch","line":338,"loc":{"start":{"line":338,"column":59},"end":{"line":338,"column":81}},"locations":[{"start":{"line":338,"column":59},"end":{"line":338,"column":81}}]},"35":{"type":"branch","line":340,"loc":{"start":{"line":340,"column":34},"end":{"line":352,"column":14}},"locations":[{"start":{"line":340,"column":34},"end":{"line":352,"column":14}}]},"36":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":18},"end":{"line":50,"column":62}},"locations":[{"start":{"line":50,"column":18},"end":{"line":50,"column":62}}]},"37":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":40},"end":{"line":50,"column":60}},"locations":[{"start":{"line":50,"column":40},"end":{"line":50,"column":60}}]},"38":{"type":"branch","line":53,"loc":{"start":{"line":53,"column":17},"end":{"line":56,"column":4}},"locations":[{"start":{"line":53,"column":17},"end":{"line":56,"column":4}}]},"39":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":12},"end":{"line":71,"column":5}},"locations":[{"start":{"line":58,"column":12},"end":{"line":71,"column":5}}]},"40":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":12},"end":{"line":66,"column":7}},"locations":[{"start":{"line":62,"column":12},"end":{"line":66,"column":7}}]},"41":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":19},"end":{"line":63,"column":26}},"locations":[{"start":{"line":63,"column":19},"end":{"line":63,"column":26}}]},"42":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":22},"end":{"line":65,"column":66}},"locations":[{"start":{"line":65,"column":22},"end":{"line":65,"column":66}}]},"43":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":35},"end":{"line":65,"column":64}},"locations":[{"start":{"line":65,"column":35},"end":{"line":65,"column":64}}]},"44":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":53},"end":{"line":65,"column":64}},"locations":[{"start":{"line":65,"column":53},"end":{"line":65,"column":64}}]},"45":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":56},"end":{"line":65,"column":66}},"locations":[{"start":{"line":65,"column":56},"end":{"line":65,"column":66}}]},"46":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":13},"end":{"line":67,"column":79}},"locations":[{"start":{"line":67,"column":13},"end":{"line":67,"column":79}}]},"47":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":11},"end":{"line":70,"column":6}},"locations":[{"start":{"line":68,"column":11},"end":{"line":70,"column":6}}]},"48":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":4},"end":{"line":79,"column":6}},"locations":[{"start":{"line":74,"column":4},"end":{"line":79,"column":6}}]},"49":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":56},"end":{"line":77,"column":76}},"locations":[{"start":{"line":77,"column":56},"end":{"line":77,"column":76}}]},"50":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":82},"end":{"line":78,"column":50}},"locations":[{"start":{"line":77,"column":82},"end":{"line":78,"column":50}}]},"51":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":4},"end":{"line":91,"column":6}},"locations":[{"start":{"line":85,"column":4},"end":{"line":91,"column":6}}]},"52":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":23},"end":{"line":86,"column":80}},"locations":[{"start":{"line":86,"column":23},"end":{"line":86,"column":80}}]},"53":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":69},"end":{"line":87,"column":95}},"locations":[{"start":{"line":87,"column":69},"end":{"line":87,"column":95}}]},"54":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":91},"end":{"line":87,"column":98}},"locations":[{"start":{"line":87,"column":91},"end":{"line":87,"column":98}}]},"55":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":58},"end":{"line":90,"column":74}},"locations":[{"start":{"line":90,"column":58},"end":{"line":90,"column":74}}]},"56":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":67},"end":{"line":90,"column":81}},"locations":[{"start":{"line":90,"column":67},"end":{"line":90,"column":81}}]},"57":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":74},"end":{"line":90,"column":104}},"locations":[{"start":{"line":90,"column":74},"end":{"line":90,"column":104}}]},"58":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":12},"end":{"line":99,"column":5}},"locations":[{"start":{"line":97,"column":12},"end":{"line":99,"column":5}}]},"59":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":12},"end":{"line":115,"column":5}},"locations":[{"start":{"line":101,"column":12},"end":{"line":115,"column":5}}]},"60":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":21},"end":{"line":105,"column":5}},"locations":[{"start":{"line":102,"column":21},"end":{"line":105,"column":5}}]},"61":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":4},"end":{"line":114,"column":6}},"locations":[{"start":{"line":105,"column":4},"end":{"line":114,"column":6}}]},"62":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":12},"end":{"line":110,"column":49}},"locations":[{"start":{"line":110,"column":12},"end":{"line":110,"column":49}}]},"63":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":11},"end":{"line":114,"column":6}},"locations":[{"start":{"line":112,"column":11},"end":{"line":114,"column":6}}]},"64":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":17},"end":{"line":132,"column":4}},"locations":[{"start":{"line":119,"column":17},"end":{"line":132,"column":4}}]},"65":{"type":"branch","line":120,"loc":{"start":{"line":120,"column":30},"end":{"line":120,"column":66}},"locations":[{"start":{"line":120,"column":30},"end":{"line":120,"column":66}}]},"66":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":61},"end":{"line":131,"column":5}},"locations":[{"start":{"line":122,"column":61},"end":{"line":131,"column":5}}]},"67":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":45},"end":{"line":138,"column":92}},"locations":[{"start":{"line":138,"column":45},"end":{"line":138,"column":92}}]},"68":{"type":"branch","line":147,"loc":{"start":{"line":147,"column":17},"end":{"line":150,"column":13}},"locations":[{"start":{"line":147,"column":17},"end":{"line":150,"column":13}}]},"69":{"type":"branch","line":149,"loc":{"start":{"line":149,"column":130},"end":{"line":149,"column":138}},"locations":[{"start":{"line":149,"column":130},"end":{"line":149,"column":138}}]},"70":{"type":"branch","line":158,"loc":{"start":{"line":158,"column":35},"end":{"line":169,"column":17}},"locations":[{"start":{"line":158,"column":35},"end":{"line":169,"column":17}}]},"71":{"type":"branch","line":166,"loc":{"start":{"line":166,"column":38},"end":{"line":166,"column":58}},"locations":[{"start":{"line":166,"column":38},"end":{"line":166,"column":58}}]},"72":{"type":"branch","line":166,"loc":{"start":{"line":166,"column":71},"end":{"line":167,"column":74}},"locations":[{"start":{"line":166,"column":71},"end":{"line":167,"column":74}}]},"73":{"type":"branch","line":161,"loc":{"start":{"line":161,"column":61},"end":{"line":164,"column":23}},"locations":[{"start":{"line":161,"column":61},"end":{"line":164,"column":23}}]},"74":{"type":"branch","line":186,"loc":{"start":{"line":186,"column":37},"end":{"line":189,"column":23}},"locations":[{"start":{"line":186,"column":37},"end":{"line":189,"column":23}}]},"75":{"type":"branch","line":199,"loc":{"start":{"line":199,"column":22},"end":{"line":199,"column":74}},"locations":[{"start":{"line":199,"column":22},"end":{"line":199,"column":74}}]},"76":{"type":"branch","line":199,"loc":{"start":{"line":199,"column":63},"end":{"line":199,"column":72}},"locations":[{"start":{"line":199,"column":63},"end":{"line":199,"column":72}}]},"77":{"type":"branch","line":225,"loc":{"start":{"line":225,"column":22},"end":{"line":228,"column":14}},"locations":[{"start":{"line":225,"column":22},"end":{"line":228,"column":14}}]},"78":{"type":"branch","line":231,"loc":{"start":{"line":231,"column":24},"end":{"line":234,"column":23}},"locations":[{"start":{"line":231,"column":24},"end":{"line":234,"column":23}}]},"79":{"type":"branch","line":244,"loc":{"start":{"line":244,"column":20},"end":{"line":247,"column":25}},"locations":[{"start":{"line":244,"column":20},"end":{"line":247,"column":25}}]},"80":{"type":"branch","line":245,"loc":{"start":{"line":245,"column":98},"end":{"line":245,"column":129}},"locations":[{"start":{"line":245,"column":98},"end":{"line":245,"column":129}}]},"81":{"type":"branch","line":250,"loc":{"start":{"line":250,"column":42},"end":{"line":250,"column":70}},"locations":[{"start":{"line":250,"column":42},"end":{"line":250,"column":70}}]},"82":{"type":"branch","line":251,"loc":{"start":{"line":251,"column":37},"end":{"line":251,"column":83}},"locations":[{"start":{"line":251,"column":37},"end":{"line":251,"column":83}}]},"83":{"type":"branch","line":252,"loc":{"start":{"line":252,"column":52},"end":{"line":252,"column":103}},"locations":[{"start":{"line":252,"column":52},"end":{"line":252,"column":103}}]},"84":{"type":"branch","line":253,"loc":{"start":{"line":253,"column":55},"end":{"line":253,"column":84}},"locations":[{"start":{"line":253,"column":55},"end":{"line":253,"column":84}}]},"85":{"type":"branch","line":256,"loc":{"start":{"line":256,"column":18},"end":{"line":256,"column":38}},"locations":[{"start":{"line":256,"column":18},"end":{"line":256,"column":38}}]},"86":{"type":"branch","line":276,"loc":{"start":{"line":276,"column":27},"end":{"line":276,"column":100}},"locations":[{"start":{"line":276,"column":27},"end":{"line":276,"column":100}}]},"87":{"type":"branch","line":285,"loc":{"start":{"line":285,"column":27},"end":{"line":285,"column":92}},"locations":[{"start":{"line":285,"column":27},"end":{"line":285,"column":92}}]},"88":{"type":"branch","line":285,"loc":{"start":{"line":285,"column":79},"end":{"line":285,"column":89}},"locations":[{"start":{"line":285,"column":79},"end":{"line":285,"column":89}}]},"89":{"type":"branch","line":344,"loc":{"start":{"line":344,"column":55},"end":{"line":344,"column":111}},"locations":[{"start":{"line":344,"column":55},"end":{"line":344,"column":111}}]},"90":{"type":"branch","line":344,"loc":{"start":{"line":344,"column":83},"end":{"line":344,"column":96}},"locations":[{"start":{"line":344,"column":83},"end":{"line":344,"column":96}}]},"91":{"type":"branch","line":345,"loc":{"start":{"line":345,"column":41},"end":{"line":345,"column":60}},"locations":[{"start":{"line":345,"column":41},"end":{"line":345,"column":60}}]},"92":{"type":"branch","line":346,"loc":{"start":{"line":346,"column":43},"end":{"line":346,"column":64}},"locations":[{"start":{"line":346,"column":43},"end":{"line":346,"column":64}}]},"93":{"type":"branch","line":349,"loc":{"start":{"line":349,"column":22},"end":{"line":349,"column":46}},"locations":[{"start":{"line":349,"column":22},"end":{"line":349,"column":46}}]}},"b":{"0":[5],"1":[4],"2":[3],"3":[1],"4":[76],"5":[18],"6":[75],"7":[17],"8":[59],"9":[1],"10":[1],"11":[55],"12":[1],"13":[1],"14":[4],"15":[20],"16":[0],"17":[17],"18":[10],"19":[8],"20":[6],"21":[2],"22":[6],"23":[2],"24":[10],"25":[2],"26":[19],"27":[1],"28":[0],"29":[1],"30":[0],"31":[0],"32":[0],"33":[1],"34":[19],"35":[19],"36":[6],"37":[6],"38":[5],"39":[23],"40":[22],"41":[0],"42":[22],"43":[16],"44":[15],"45":[1],"46":[1],"47":[23],"48":[24],"49":[23],"50":[22],"51":[15],"52":[0],"53":[1],"54":[14],"55":[1],"56":[14],"57":[1],"58":[27],"59":[32],"60":[17],"61":[15],"62":[15],"63":[15],"64":[2],"65":[0],"66":[1],"67":[57],"68":[55],"69":[0],"70":[57],"71":[0],"72":[1],"73":[112],"74":[57],"75":[2],"76":[0],"77":[1],"78":[472],"79":[40],"80":[9],"81":[40],"82":[40],"83":[40],"84":[40],"85":[40],"86":[4],"87":[1],"88":[0],"89":[323],"90":[0],"91":[323],"92":[323],"93":[323]},"fnMap":{"0":{"name":"asOutcome","decl":{"start":{"line":11,"column":0},"end":{"line":14,"column":1}},"loc":{"start":{"line":11,"column":0},"end":{"line":14,"column":1}},"line":11},"1":{"name":"BulkPanel","decl":{"start":{"line":36,"column":7},"end":{"line":358,"column":1}},"loc":{"start":{"line":36,"column":7},"end":{"line":358,"column":1}},"line":36},"2":{"name":"refresh","decl":{"start":{"line":50,"column":18},"end":{"line":50,"column":62}},"loc":{"start":{"line":50,"column":18},"end":{"line":50,"column":62}},"line":50},"3":{"name":"settle","decl":{"start":{"line":53,"column":17},"end":{"line":56,"column":4}},"loc":{"start":{"line":53,"column":17},"end":{"line":56,"column":4}},"line":53},"4":{"name":"upload","decl":{"start":{"line":119,"column":17},"end":{"line":132,"column":4}},"loc":{"start":{"line":119,"column":17},"end":{"line":132,"column":4}},"line":119},"5":{"name":"onChange","decl":{"start":{"line":184,"column":22},"end":{"line":184,"column":67}},"loc":{"start":{"line":184,"column":22},"end":{"line":184,"column":67}},"line":184},"6":{"name":"onChange","decl":{"start":{"line":199,"column":22},"end":{"line":199,"column":74}},"loc":{"start":{"line":199,"column":22},"end":{"line":199,"column":74}},"line":199},"7":{"name":"onChange","decl":{"start":{"line":225,"column":22},"end":{"line":228,"column":14}},"loc":{"start":{"line":225,"column":22},"end":{"line":228,"column":14}},"line":225},"8":{"name":"cell","decl":{"start":{"line":244,"column":20},"end":{"line":247,"column":25}},"loc":{"start":{"line":244,"column":20},"end":{"line":247,"column":25}},"line":244},"9":{"name":"onClick","decl":{"start":{"line":245,"column":98},"end":{"line":245,"column":129}},"loc":{"start":{"line":245,"column":98},"end":{"line":245,"column":129}},"line":245},"10":{"name":"cell","decl":{"start":{"line":250,"column":42},"end":{"line":250,"column":70}},"loc":{"start":{"line":250,"column":42},"end":{"line":250,"column":70}},"line":250},"11":{"name":"cell","decl":{"start":{"line":251,"column":37},"end":{"line":251,"column":83}},"loc":{"start":{"line":251,"column":37},"end":{"line":251,"column":83}},"line":251},"12":{"name":"cell","decl":{"start":{"line":252,"column":52},"end":{"line":252,"column":103}},"loc":{"start":{"line":252,"column":52},"end":{"line":252,"column":103}},"line":252},"13":{"name":"cell","decl":{"start":{"line":253,"column":55},"end":{"line":253,"column":84}},"loc":{"start":{"line":253,"column":55},"end":{"line":253,"column":84}},"line":253},"14":{"name":"rowKey","decl":{"start":{"line":256,"column":18},"end":{"line":256,"column":38}},"loc":{"start":{"line":256,"column":18},"end":{"line":256,"column":38}},"line":256},"15":{"name":"execute","decl":{"start":{"line":276,"column":27},"end":{"line":276,"column":100}},"loc":{"start":{"line":276,"column":27},"end":{"line":276,"column":100}},"line":276},"16":{"name":"execute","decl":{"start":{"line":285,"column":27},"end":{"line":285,"column":92}},"loc":{"start":{"line":285,"column":27},"end":{"line":285,"column":92}},"line":285},"17":{"name":"cell","decl":{"start":{"line":344,"column":55},"end":{"line":344,"column":111}},"loc":{"start":{"line":344,"column":55},"end":{"line":344,"column":111}},"line":344},"18":{"name":"cell","decl":{"start":{"line":345,"column":41},"end":{"line":345,"column":60}},"loc":{"start":{"line":345,"column":41},"end":{"line":345,"column":60}},"line":345},"19":{"name":"cell","decl":{"start":{"line":346,"column":43},"end":{"line":346,"column":64}},"loc":{"start":{"line":346,"column":43},"end":{"line":346,"column":64}},"line":346},"20":{"name":"rowKey","decl":{"start":{"line":349,"column":22},"end":{"line":349,"column":46}},"loc":{"start":{"line":349,"column":22},"end":{"line":349,"column":46}},"line":349}},"f":{"0":5,"1":76,"2":6,"3":5,"4":2,"5":0,"6":2,"7":1,"8":40,"9":9,"10":40,"11":40,"12":40,"13":40,"14":40,"15":4,"16":1,"17":323,"18":323,"19":323,"20":323}} +,"/Users/omercelik/Repositories/goldpath/ui/console/src/CampaignPanel.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/CampaignPanel.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":57}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":97}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":28}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":108}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":1}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":121}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":60}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":36}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":10}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":17}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":18}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":18}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":16}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":17}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":25}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":21}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":2}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":68}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":37}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":80}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":77}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":69}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":90}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":93}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":75}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":69}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":72}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":58}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":50}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":15}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":1}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":67}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":29}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":62}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":84}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":88}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":119}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":68}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":58}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":76}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":26}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":1}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":63}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":49}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":68}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":70}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":69}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":63}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":65}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":58}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":44}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":54}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":67}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":62}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":43}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":23}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":14}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":4}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":36}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":53}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":84}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":21}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":52}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":6}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":34}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":4}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":19}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":82}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":26}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":19}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":19}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":22}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":24}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":22}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":19}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":13}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":5}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":20}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":117}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":42}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":26}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":26}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":28}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":26}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":8}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":83}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":18}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":19}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":6}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":41}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":34}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":48}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":10}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":60}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":55}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":15}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":64}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":82}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":89}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":18}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":17}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":31}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":87}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":25}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":34}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":43}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":34}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":14}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":48}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":37}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":50}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":24}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":23}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":15}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":19}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":17}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":111}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":29}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":11}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":19}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":14}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":34}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":42}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":20}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":13}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":33}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":35}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":122}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":33}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":25}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":14}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":66}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":91}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":97}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":92}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":91}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":80}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":12}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":34}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":44}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":85}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":10}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":16}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":20}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":95}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":66}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":48}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":47}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":17}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":49}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":102}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":86}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":42}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":61}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":27}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":31}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":101}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":78}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":33}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":23}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":18}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":27}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":31}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":140}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":71}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":98}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":33}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":23}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":29}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":18}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":21}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":45}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":61}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":27}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":32}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":96}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":79}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":33}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":23}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":18}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":27}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":31}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":140}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":71}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":98}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":33}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":23}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":29}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":18}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":21}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":16}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":51}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":122}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":31}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":21}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":41}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":108}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":87}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":17}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":54}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":18}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":74}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":107}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":19}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":18}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":17}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":64}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":18}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":48}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":116}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":19}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":18}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":17}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":55}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":18}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":69}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":19}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":18}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":17}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":55}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":18}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":36}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":61}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":130}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":19}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":18}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":17}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":57}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":18}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":116}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":19}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":18}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":17}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":52}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":18}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":59}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":90}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":39}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":23}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":68}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":19}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":18}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":17}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":53}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":18}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":60}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":19}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":18}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":17}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":55}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":49}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":18}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":15}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":40}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":73}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":65}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":19}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":62}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":19}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":49}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":71}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":75}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":28}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":52}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":99}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":89}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":26}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":35}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":29}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":40}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":118}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":42}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":95}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":22}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":26}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":19}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":19}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":52}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":48}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":28}},"364":{"start":{"line":365,"column":0},"end":{"line":365,"column":43}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":99}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":27}},"367":{"start":{"line":368,"column":0},"end":{"line":368,"column":26}},"368":{"start":{"line":369,"column":0},"end":{"line":369,"column":33}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":40}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":113}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":42}},"372":{"start":{"line":373,"column":0},"end":{"line":373,"column":95}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":22}},"374":{"start":{"line":375,"column":0},"end":{"line":375,"column":26}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":19}},"376":{"start":{"line":377,"column":0},"end":{"line":377,"column":85}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":24}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":31}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":42}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":53}},"382":{"start":{"line":383,"column":0},"end":{"line":383,"column":116}},"383":{"start":{"line":384,"column":0},"end":{"line":384,"column":44}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":96}},"385":{"start":{"line":386,"column":0},"end":{"line":386,"column":20}},"386":{"start":{"line":387,"column":0},"end":{"line":387,"column":24}},"387":{"start":{"line":388,"column":0},"end":{"line":388,"column":89}},"388":{"start":{"line":389,"column":0},"end":{"line":389,"column":24}},"389":{"start":{"line":390,"column":0},"end":{"line":390,"column":35}},"390":{"start":{"line":391,"column":0},"end":{"line":391,"column":51}},"391":{"start":{"line":392,"column":0},"end":{"line":392,"column":103}},"392":{"start":{"line":393,"column":0},"end":{"line":393,"column":20}},"394":{"start":{"line":395,"column":0},"end":{"line":395,"column":24}},"395":{"start":{"line":396,"column":0},"end":{"line":396,"column":89}},"396":{"start":{"line":397,"column":0},"end":{"line":397,"column":24}},"397":{"start":{"line":398,"column":0},"end":{"line":398,"column":35}},"398":{"start":{"line":399,"column":0},"end":{"line":399,"column":47}},"399":{"start":{"line":400,"column":0},"end":{"line":400,"column":99}},"400":{"start":{"line":401,"column":0},"end":{"line":401,"column":20}},"402":{"start":{"line":403,"column":0},"end":{"line":403,"column":24}},"403":{"start":{"line":404,"column":0},"end":{"line":404,"column":29}},"404":{"start":{"line":405,"column":0},"end":{"line":405,"column":29}},"405":{"start":{"line":406,"column":0},"end":{"line":406,"column":36}},"406":{"start":{"line":407,"column":0},"end":{"line":407,"column":108}},"407":{"start":{"line":408,"column":0},"end":{"line":408,"column":90}},"408":{"start":{"line":409,"column":0},"end":{"line":409,"column":41}},"409":{"start":{"line":410,"column":0},"end":{"line":410,"column":70}},"410":{"start":{"line":411,"column":0},"end":{"line":411,"column":37}},"411":{"start":{"line":412,"column":0},"end":{"line":412,"column":22}},"412":{"start":{"line":413,"column":0},"end":{"line":413,"column":25}},"413":{"start":{"line":414,"column":0},"end":{"line":414,"column":20}},"415":{"start":{"line":416,"column":0},"end":{"line":416,"column":20}},"416":{"start":{"line":417,"column":0},"end":{"line":417,"column":18}},"419":{"start":{"line":420,"column":0},"end":{"line":420,"column":66}},"420":{"start":{"line":421,"column":0},"end":{"line":421,"column":91}},"421":{"start":{"line":422,"column":0},"end":{"line":422,"column":15}},"422":{"start":{"line":423,"column":0},"end":{"line":423,"column":35}},"423":{"start":{"line":424,"column":0},"end":{"line":424,"column":14}},"424":{"start":{"line":425,"column":0},"end":{"line":425,"column":40}},"425":{"start":{"line":426,"column":0},"end":{"line":426,"column":41}},"426":{"start":{"line":427,"column":0},"end":{"line":427,"column":83}},"427":{"start":{"line":428,"column":0},"end":{"line":428,"column":66}},"428":{"start":{"line":429,"column":0},"end":{"line":429,"column":92}},"429":{"start":{"line":430,"column":0},"end":{"line":430,"column":96}},"430":{"start":{"line":431,"column":0},"end":{"line":431,"column":23}},"431":{"start":{"line":432,"column":0},"end":{"line":432,"column":19}},"432":{"start":{"line":433,"column":0},"end":{"line":433,"column":19}},"433":{"start":{"line":434,"column":0},"end":{"line":434,"column":53}},"435":{"start":{"line":436,"column":0},"end":{"line":436,"column":18}},"436":{"start":{"line":437,"column":0},"end":{"line":437,"column":15}},"439":{"start":{"line":440,"column":0},"end":{"line":440,"column":79}},"445":{"start":{"line":446,"column":0},"end":{"line":446,"column":36}},"446":{"start":{"line":447,"column":0},"end":{"line":447,"column":35}},"447":{"start":{"line":448,"column":0},"end":{"line":448,"column":89}},"448":{"start":{"line":449,"column":0},"end":{"line":449,"column":62}},"449":{"start":{"line":450,"column":0},"end":{"line":450,"column":67}},"450":{"start":{"line":451,"column":0},"end":{"line":451,"column":42}},"451":{"start":{"line":452,"column":0},"end":{"line":452,"column":95}},"452":{"start":{"line":453,"column":0},"end":{"line":453,"column":19}},"453":{"start":{"line":454,"column":0},"end":{"line":454,"column":15}},"454":{"start":{"line":455,"column":0},"end":{"line":455,"column":98}},"455":{"start":{"line":456,"column":0},"end":{"line":456,"column":15}},"456":{"start":{"line":457,"column":0},"end":{"line":457,"column":18}},"458":{"start":{"line":459,"column":0},"end":{"line":459,"column":10}},"460":{"start":{"line":461,"column":0},"end":{"line":461,"column":1}}},"s":{"0":1,"16":5,"17":5,"18":5,"19":5,"22":1,"25":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"55":1,"56":115,"57":115,"58":115,"59":115,"60":115,"61":115,"62":115,"63":115,"64":115,"65":115,"66":115,"67":115,"68":115,"71":1,"72":4,"73":4,"74":4,"75":4,"76":4,"77":4,"78":4,"79":4,"80":4,"81":4,"88":1,"89":111,"90":111,"91":111,"92":111,"93":111,"94":111,"95":111,"96":111,"97":111,"100":111,"102":111,"103":111,"104":5,"105":5,"106":5,"108":111,"109":111,"111":25,"112":24,"113":24,"114":25,"115":111,"116":111,"118":111,"119":32,"120":32,"121":111,"125":111,"126":38,"127":18,"128":18,"129":18,"130":18,"131":18,"133":20,"134":20,"135":20,"136":20,"137":20,"138":20,"139":20,"140":20,"141":20,"142":20,"143":20,"144":20,"145":111,"147":111,"148":111,"150":111,"151":111,"152":111,"154":111,"155":111,"156":111,"157":111,"159":111,"160":111,"161":111,"162":111,"163":111,"164":111,"165":1,"166":1,"167":1,"169":111,"170":111,"171":777,"172":777,"173":777,"174":111,"175":111,"180":111,"181":111,"182":111,"183":111,"185":111,"186":111,"188":111,"189":111,"190":111,"191":111,"192":111,"193":111,"194":52,"195":52,"196":52,"198":111,"199":111,"200":111,"201":111,"202":111,"203":111,"204":111,"205":111,"206":111,"207":111,"208":111,"209":111,"210":111,"212":111,"213":29,"214":29,"215":29,"216":29,"217":29,"218":29,"219":29,"221":1,"223":29,"224":26,"225":26,"226":26,"227":26,"228":26,"229":26,"230":26,"231":26,"232":26,"233":26,"234":26,"235":26,"236":26,"237":26,"238":26,"239":26,"240":26,"241":26,"243":29,"244":2,"245":2,"246":2,"247":2,"248":2,"249":2,"250":2,"251":2,"252":2,"253":2,"254":2,"255":2,"256":2,"257":2,"258":2,"259":2,"260":2,"261":2,"263":29,"265":29,"267":8,"268":8,"269":8,"271":29,"272":2,"275":29,"276":29,"277":29,"278":29,"279":29,"280":29,"281":29,"282":29,"283":29,"284":29,"285":29,"286":29,"287":29,"288":29,"289":29,"290":29,"291":29,"292":29,"293":29,"294":29,"295":29,"296":29,"297":29,"298":29,"299":29,"300":29,"302":29,"304":29,"305":29,"306":29,"307":29,"308":29,"309":29,"310":29,"311":29,"312":29,"313":29,"314":29,"315":29,"316":28,"317":1,"318":29,"319":29,"320":29,"321":29,"322":29,"323":29,"324":29,"325":29,"326":29,"327":29,"328":29,"329":29,"330":29,"331":29,"332":29,"334":29,"335":26,"336":26,"338":26,"339":26,"341":26,"342":26,"343":26,"344":26,"345":26,"346":26,"347":78,"348":78,"349":78,"350":78,"351":78,"352":78,"353":78,"354":78,"355":78,"356":78,"357":78,"358":26,"360":26,"361":26,"362":26,"363":26,"364":26,"365":52,"366":52,"367":52,"368":52,"369":52,"370":52,"371":52,"372":52,"373":52,"374":52,"375":26,"376":26,"378":26,"379":26,"380":26,"381":26,"382":26,"383":26,"384":26,"385":26,"386":26,"387":26,"388":26,"389":26,"390":26,"391":26,"392":26,"394":26,"395":26,"396":26,"397":26,"398":26,"399":26,"400":26,"402":26,"403":26,"404":3,"405":3,"406":3,"407":3,"408":3,"409":1,"410":1,"411":1,"412":3,"413":3,"415":26,"416":26,"419":29,"420":29,"421":29,"422":29,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"431":1,"432":1,"433":1,"435":1,"436":1,"439":29,"445":29,"446":29,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":29,"454":29,"455":29,"456":29,"458":111,"460":111},"branchMap":{"0":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":0},"end":{"line":20,"column":1}},"locations":[{"start":{"line":17,"column":0},"end":{"line":20,"column":1}}]},"1":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":23},"end":{"line":19,"column":21}},"locations":[{"start":{"line":18,"column":23},"end":{"line":19,"column":21}}]},"2":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":16},"end":{"line":19,"column":63}},"locations":[{"start":{"line":19,"column":16},"end":{"line":19,"column":63}}]},"3":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":59},"end":{"line":19,"column":108}},"locations":[{"start":{"line":19,"column":59},"end":{"line":19,"column":108}}]},"4":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":7},"end":{"line":69,"column":1}},"locations":[{"start":{"line":56,"column":7},"end":{"line":69,"column":1}}]},"5":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":39},"end":{"line":60,"column":69}},"locations":[{"start":{"line":60,"column":39},"end":{"line":60,"column":69}}]},"6":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":46},"end":{"line":61,"column":90}},"locations":[{"start":{"line":61,"column":46},"end":{"line":61,"column":90}}]},"7":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":47},"end":{"line":62,"column":93}},"locations":[{"start":{"line":62,"column":47},"end":{"line":62,"column":93}}]},"8":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":31},"end":{"line":63,"column":75}},"locations":[{"start":{"line":63,"column":31},"end":{"line":63,"column":75}}]},"9":{"type":"branch","line":64,"loc":{"start":{"line":64,"column":29},"end":{"line":64,"column":69}},"locations":[{"start":{"line":64,"column":29},"end":{"line":64,"column":69}}]},"10":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":30},"end":{"line":65,"column":72}},"locations":[{"start":{"line":65,"column":30},"end":{"line":65,"column":72}}]},"11":{"type":"branch","line":66,"loc":{"start":{"line":66,"column":29},"end":{"line":66,"column":58}},"locations":[{"start":{"line":66,"column":29},"end":{"line":66,"column":58}}]},"12":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":25},"end":{"line":67,"column":50}},"locations":[{"start":{"line":67,"column":25},"end":{"line":67,"column":50}}]},"13":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":17},"end":{"line":58,"column":80}},"locations":[{"start":{"line":58,"column":17},"end":{"line":58,"column":80}}]},"14":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":50},"end":{"line":58,"column":67}},"locations":[{"start":{"line":58,"column":50},"end":{"line":58,"column":67}}]},"15":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":55},"end":{"line":58,"column":80}},"locations":[{"start":{"line":58,"column":55},"end":{"line":58,"column":80}}]},"16":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":15},"end":{"line":59,"column":77}},"locations":[{"start":{"line":59,"column":15},"end":{"line":59,"column":77}}]},"17":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":48},"end":{"line":59,"column":65}},"locations":[{"start":{"line":59,"column":48},"end":{"line":59,"column":65}}]},"18":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":53},"end":{"line":59,"column":77}},"locations":[{"start":{"line":59,"column":53},"end":{"line":59,"column":77}}]},"19":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":7},"end":{"line":82,"column":1}},"locations":[{"start":{"line":72,"column":7},"end":{"line":82,"column":1}}]},"20":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":38},"end":{"line":75,"column":84}},"locations":[{"start":{"line":75,"column":38},"end":{"line":75,"column":84}}]},"21":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":39},"end":{"line":76,"column":88}},"locations":[{"start":{"line":76,"column":39},"end":{"line":76,"column":88}}]},"22":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":44},"end":{"line":77,"column":119}},"locations":[{"start":{"line":77,"column":44},"end":{"line":77,"column":119}}]},"23":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":24},"end":{"line":78,"column":68}},"locations":[{"start":{"line":78,"column":24},"end":{"line":78,"column":68}}]},"24":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":29},"end":{"line":79,"column":58}},"locations":[{"start":{"line":79,"column":29},"end":{"line":79,"column":58}}]},"25":{"type":"branch","line":80,"loc":{"start":{"line":80,"column":25},"end":{"line":80,"column":76}},"locations":[{"start":{"line":80,"column":25},"end":{"line":80,"column":76}}]},"26":{"type":"branch","line":89,"loc":{"start":{"line":89,"column":7},"end":{"line":461,"column":1}},"locations":[{"start":{"line":89,"column":7},"end":{"line":461,"column":1}}]},"27":{"type":"branch","line":153,"loc":{"start":{"line":153,"column":7},"end":{"line":153,"column":55}},"locations":[{"start":{"line":153,"column":7},"end":{"line":153,"column":55}}]},"28":{"type":"branch","line":209,"loc":{"start":{"line":209,"column":24},"end":{"line":209,"column":64}},"locations":[{"start":{"line":209,"column":24},"end":{"line":209,"column":64}}]},"29":{"type":"branch","line":209,"loc":{"start":{"line":209,"column":32},"end":{"line":209,"column":85}},"locations":[{"start":{"line":209,"column":32},"end":{"line":209,"column":85}}]},"30":{"type":"branch","line":213,"loc":{"start":{"line":213,"column":7},"end":{"line":457,"column":18}},"locations":[{"start":{"line":213,"column":7},"end":{"line":457,"column":18}}]},"31":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":23},"end":{"line":220,"column":102}},"locations":[{"start":{"line":220,"column":23},"end":{"line":220,"column":102}}]},"32":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":64},"end":{"line":220,"column":102}},"locations":[{"start":{"line":220,"column":64},"end":{"line":220,"column":102}}]},"33":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":88},"end":{"line":222,"column":86}},"locations":[{"start":{"line":220,"column":88},"end":{"line":222,"column":86}}]},"34":{"type":"branch","line":224,"loc":{"start":{"line":224,"column":36},"end":{"line":242,"column":21}},"locations":[{"start":{"line":224,"column":36},"end":{"line":242,"column":21}}]},"35":{"type":"branch","line":244,"loc":{"start":{"line":244,"column":32},"end":{"line":262,"column":21}},"locations":[{"start":{"line":244,"column":32},"end":{"line":262,"column":21}}]},"36":{"type":"branch","line":266,"loc":{"start":{"line":266,"column":11},"end":{"line":266,"column":51}},"locations":[{"start":{"line":266,"column":11},"end":{"line":266,"column":51}}]},"37":{"type":"branch","line":266,"loc":{"start":{"line":266,"column":39},"end":{"line":270,"column":21}},"locations":[{"start":{"line":266,"column":39},"end":{"line":270,"column":21}}]},"38":{"type":"branch","line":268,"loc":{"start":{"line":268,"column":43},"end":{"line":268,"column":62}},"locations":[{"start":{"line":268,"column":43},"end":{"line":268,"column":62}}]},"39":{"type":"branch","line":268,"loc":{"start":{"line":268,"column":50},"end":{"line":268,"column":72}},"locations":[{"start":{"line":268,"column":50},"end":{"line":268,"column":72}}]},"40":{"type":"branch","line":268,"loc":{"start":{"line":268,"column":95},"end":{"line":268,"column":113}},"locations":[{"start":{"line":268,"column":95},"end":{"line":268,"column":113}}]},"41":{"type":"branch","line":268,"loc":{"start":{"line":268,"column":102},"end":{"line":268,"column":122}},"locations":[{"start":{"line":268,"column":102},"end":{"line":268,"column":122}}]},"42":{"type":"branch","line":272,"loc":{"start":{"line":272,"column":11},"end":{"line":272,"column":29}},"locations":[{"start":{"line":272,"column":11},"end":{"line":272,"column":29}}]},"43":{"type":"branch","line":272,"loc":{"start":{"line":272,"column":29},"end":{"line":273,"column":108}},"locations":[{"start":{"line":272,"column":29},"end":{"line":273,"column":108}}]},"44":{"type":"branch","line":281,"loc":{"start":{"line":281,"column":27},"end":{"line":281,"column":107}},"locations":[{"start":{"line":281,"column":27},"end":{"line":281,"column":107}}]},"45":{"type":"branch","line":288,"loc":{"start":{"line":288,"column":60},"end":{"line":288,"column":88}},"locations":[{"start":{"line":288,"column":60},"end":{"line":288,"column":88}}]},"46":{"type":"branch","line":310,"loc":{"start":{"line":310,"column":40},"end":{"line":310,"column":56}},"locations":[{"start":{"line":310,"column":40},"end":{"line":310,"column":56}}]},"47":{"type":"branch","line":310,"loc":{"start":{"line":310,"column":47},"end":{"line":310,"column":116}},"locations":[{"start":{"line":310,"column":47},"end":{"line":310,"column":116}}]},"48":{"type":"branch","line":316,"loc":{"start":{"line":316,"column":26},"end":{"line":316,"column":59}},"locations":[{"start":{"line":316,"column":26},"end":{"line":316,"column":59}}]},"49":{"type":"branch","line":316,"loc":{"start":{"line":316,"column":50},"end":{"line":317,"column":90}},"locations":[{"start":{"line":316,"column":50},"end":{"line":317,"column":90}}]},"50":{"type":"branch","line":317,"loc":{"start":{"line":317,"column":88},"end":{"line":318,"column":39}},"locations":[{"start":{"line":317,"column":88},"end":{"line":318,"column":39}}]},"51":{"type":"branch","line":320,"loc":{"start":{"line":320,"column":26},"end":{"line":320,"column":55}},"locations":[{"start":{"line":320,"column":26},"end":{"line":320,"column":55}}]},"52":{"type":"branch","line":320,"loc":{"start":{"line":320,"column":42},"end":{"line":320,"column":68}},"locations":[{"start":{"line":320,"column":42},"end":{"line":320,"column":68}}]},"53":{"type":"branch","line":331,"loc":{"start":{"line":331,"column":28},"end":{"line":331,"column":44}},"locations":[{"start":{"line":331,"column":28},"end":{"line":331,"column":44}}]},"54":{"type":"branch","line":335,"loc":{"start":{"line":335,"column":34},"end":{"line":417,"column":18}},"locations":[{"start":{"line":335,"column":34},"end":{"line":417,"column":18}}]},"55":{"type":"branch","line":404,"loc":{"start":{"line":404,"column":17},"end":{"line":414,"column":20}},"locations":[{"start":{"line":404,"column":17},"end":{"line":414,"column":20}}]},"56":{"type":"branch","line":421,"loc":{"start":{"line":421,"column":45},"end":{"line":421,"column":61}},"locations":[{"start":{"line":421,"column":45},"end":{"line":421,"column":61}}]},"57":{"type":"branch","line":421,"loc":{"start":{"line":421,"column":49},"end":{"line":421,"column":91}},"locations":[{"start":{"line":421,"column":49},"end":{"line":421,"column":91}}]},"58":{"type":"branch","line":423,"loc":{"start":{"line":423,"column":29},"end":{"line":437,"column":15}},"locations":[{"start":{"line":423,"column":29},"end":{"line":437,"column":15}}]},"59":{"type":"branch","line":455,"loc":{"start":{"line":455,"column":30},"end":{"line":455,"column":98}},"locations":[{"start":{"line":455,"column":30},"end":{"line":455,"column":98}}]},"60":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":18},"end":{"line":103,"column":62}},"locations":[{"start":{"line":103,"column":18},"end":{"line":103,"column":62}}]},"61":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":40},"end":{"line":103,"column":60}},"locations":[{"start":{"line":103,"column":40},"end":{"line":103,"column":60}}]},"62":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":17},"end":{"line":107,"column":4}},"locations":[{"start":{"line":104,"column":17},"end":{"line":107,"column":4}}]},"63":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":4},"end":{"line":115,"column":6}},"locations":[{"start":{"line":110,"column":4},"end":{"line":115,"column":6}}]},"64":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":56},"end":{"line":112,"column":76}},"locations":[{"start":{"line":112,"column":56},"end":{"line":112,"column":76}}]},"65":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":82},"end":{"line":114,"column":52}},"locations":[{"start":{"line":112,"column":82},"end":{"line":114,"column":52}}]},"66":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":12},"end":{"line":122,"column":5}},"locations":[{"start":{"line":119,"column":12},"end":{"line":122,"column":5}}]},"67":{"type":"branch","line":126,"loc":{"start":{"line":126,"column":12},"end":{"line":146,"column":5}},"locations":[{"start":{"line":126,"column":12},"end":{"line":146,"column":5}}]},"68":{"type":"branch","line":127,"loc":{"start":{"line":127,"column":21},"end":{"line":132,"column":5}},"locations":[{"start":{"line":127,"column":21},"end":{"line":132,"column":5}}]},"69":{"type":"branch","line":132,"loc":{"start":{"line":132,"column":4},"end":{"line":145,"column":6}},"locations":[{"start":{"line":132,"column":4},"end":{"line":145,"column":6}}]},"70":{"type":"branch","line":136,"loc":{"start":{"line":136,"column":12},"end":{"line":141,"column":7}},"locations":[{"start":{"line":136,"column":12},"end":{"line":141,"column":7}}]},"71":{"type":"branch","line":137,"loc":{"start":{"line":137,"column":19},"end":{"line":137,"column":26}},"locations":[{"start":{"line":137,"column":19},"end":{"line":137,"column":26}}]},"72":{"type":"branch","line":143,"loc":{"start":{"line":143,"column":11},"end":{"line":145,"column":6}},"locations":[{"start":{"line":143,"column":11},"end":{"line":145,"column":6}}]},"73":{"type":"branch","line":165,"loc":{"start":{"line":165,"column":22},"end":{"line":168,"column":14}},"locations":[{"start":{"line":165,"column":22},"end":{"line":168,"column":14}}]},"74":{"type":"branch","line":171,"loc":{"start":{"line":171,"column":24},"end":{"line":174,"column":23}},"locations":[{"start":{"line":171,"column":24},"end":{"line":174,"column":23}}]},"75":{"type":"branch","line":194,"loc":{"start":{"line":194,"column":20},"end":{"line":197,"column":25}},"locations":[{"start":{"line":194,"column":20},"end":{"line":197,"column":25}}]},"76":{"type":"branch","line":195,"loc":{"start":{"line":195,"column":88},"end":{"line":195,"column":122}},"locations":[{"start":{"line":195,"column":88},"end":{"line":195,"column":122}}]},"77":{"type":"branch","line":200,"loc":{"start":{"line":200,"column":36},"end":{"line":200,"column":64}},"locations":[{"start":{"line":200,"column":36},"end":{"line":200,"column":64}}]},"78":{"type":"branch","line":201,"loc":{"start":{"line":201,"column":37},"end":{"line":201,"column":89}},"locations":[{"start":{"line":201,"column":37},"end":{"line":201,"column":89}}]},"79":{"type":"branch","line":202,"loc":{"start":{"line":202,"column":56},"end":{"line":202,"column":95}},"locations":[{"start":{"line":202,"column":56},"end":{"line":202,"column":95}}]},"80":{"type":"branch","line":203,"loc":{"start":{"line":203,"column":57},"end":{"line":203,"column":90}},"locations":[{"start":{"line":203,"column":57},"end":{"line":203,"column":90}}]},"81":{"type":"branch","line":204,"loc":{"start":{"line":204,"column":54},"end":{"line":204,"column":89}},"locations":[{"start":{"line":204,"column":54},"end":{"line":204,"column":89}}]},"82":{"type":"branch","line":205,"loc":{"start":{"line":205,"column":51},"end":{"line":205,"column":78}},"locations":[{"start":{"line":205,"column":51},"end":{"line":205,"column":78}}]},"83":{"type":"branch","line":208,"loc":{"start":{"line":208,"column":18},"end":{"line":208,"column":44}},"locations":[{"start":{"line":208,"column":18},"end":{"line":208,"column":44}}]},"84":{"type":"branch","line":229,"loc":{"start":{"line":229,"column":27},"end":{"line":229,"column":78}},"locations":[{"start":{"line":229,"column":27},"end":{"line":229,"column":78}}]},"85":{"type":"branch","line":237,"loc":{"start":{"line":237,"column":27},"end":{"line":237,"column":98}},"locations":[{"start":{"line":237,"column":27},"end":{"line":237,"column":98}}]},"86":{"type":"branch","line":237,"loc":{"start":{"line":237,"column":83},"end":{"line":237,"column":95}},"locations":[{"start":{"line":237,"column":83},"end":{"line":237,"column":95}}]},"87":{"type":"branch","line":347,"loc":{"start":{"line":347,"column":22},"end":{"line":358,"column":26}},"locations":[{"start":{"line":347,"column":22},"end":{"line":358,"column":26}}]},"88":{"type":"branch","line":349,"loc":{"start":{"line":349,"column":63},"end":{"line":349,"column":81}},"locations":[{"start":{"line":349,"column":63},"end":{"line":349,"column":81}}]},"89":{"type":"branch","line":356,"loc":{"start":{"line":356,"column":32},"end":{"line":356,"column":95}},"locations":[{"start":{"line":356,"column":32},"end":{"line":356,"column":95}}]},"90":{"type":"branch","line":365,"loc":{"start":{"line":365,"column":22},"end":{"line":375,"column":26}},"locations":[{"start":{"line":365,"column":22},"end":{"line":375,"column":26}}]},"91":{"type":"branch","line":392,"loc":{"start":{"line":392,"column":30},"end":{"line":392,"column":103}},"locations":[{"start":{"line":392,"column":30},"end":{"line":392,"column":103}}]},"92":{"type":"branch","line":408,"loc":{"start":{"line":408,"column":29},"end":{"line":408,"column":90}},"locations":[{"start":{"line":408,"column":29},"end":{"line":408,"column":90}}]},"93":{"type":"branch","line":409,"loc":{"start":{"line":409,"column":28},"end":{"line":412,"column":22}},"locations":[{"start":{"line":409,"column":28},"end":{"line":412,"column":22}}]},"94":{"type":"branch","line":426,"loc":{"start":{"line":426,"column":30},"end":{"line":431,"column":23}},"locations":[{"start":{"line":426,"column":30},"end":{"line":431,"column":23}}]},"95":{"type":"branch","line":429,"loc":{"start":{"line":429,"column":56},"end":{"line":429,"column":85}},"locations":[{"start":{"line":429,"column":56},"end":{"line":429,"column":85}}]},"96":{"type":"branch","line":447,"loc":{"start":{"line":447,"column":23},"end":{"line":453,"column":19}},"locations":[{"start":{"line":447,"column":23},"end":{"line":453,"column":19}}]}},"b":{"0":[5],"1":[4],"2":[3],"3":[1],"4":[115],"5":[5],"6":[0],"7":[0],"8":[0],"9":[0],"10":[1],"11":[2],"12":[1],"13":[350],"14":[340],"15":[10],"16":[346],"17":[344],"18":[2],"19":[4],"20":[0],"21":[0],"22":[0],"23":[0],"24":[1],"25":[1],"26":[111],"27":[0],"28":[76],"29":[35],"30":[29],"31":[1],"32":[0],"33":[1],"34":[26],"35":[2],"36":[10],"37":[8],"38":[6],"39":[2],"40":[6],"41":[2],"42":[10],"43":[2],"44":[0],"45":[0],"46":[1],"47":[28],"48":[28],"49":[28],"50":[1],"51":[28],"52":[1],"53":[0],"54":[26],"55":[3],"56":[28],"57":[1],"58":[1],"59":[28],"60":[6],"61":[6],"62":[5],"63":[25],"64":[24],"65":[24],"66":[32],"67":[38],"68":[18],"69":[20],"70":[20],"71":[0],"72":[20],"73":[1],"74":[777],"75":[52],"76":[14],"77":[52],"78":[52],"79":[52],"80":[52],"81":[52],"82":[52],"83":[52],"84":[3],"85":[1],"86":[0],"87":[78],"88":[1],"89":[2],"90":[52],"91":[1],"92":[1],"93":[1],"94":[1],"95":[0],"96":[1]},"fnMap":{"0":{"name":"asOutcome","decl":{"start":{"line":17,"column":0},"end":{"line":20,"column":1}},"loc":{"start":{"line":17,"column":0},"end":{"line":20,"column":1}},"line":17},"1":{"name":"toThrottle","decl":{"start":{"line":56,"column":7},"end":{"line":69,"column":1}},"loc":{"start":{"line":56,"column":7},"end":{"line":69,"column":1}},"line":56},"2":{"name":"number","decl":{"start":{"line":58,"column":17},"end":{"line":58,"column":80}},"loc":{"start":{"line":58,"column":17},"end":{"line":58,"column":80}},"line":58},"3":{"name":"text","decl":{"start":{"line":59,"column":15},"end":{"line":59,"column":77}},"loc":{"start":{"line":59,"column":15},"end":{"line":59,"column":77}},"line":59},"4":{"name":"describeThrottle","decl":{"start":{"line":72,"column":7},"end":{"line":82,"column":1}},"loc":{"start":{"line":72,"column":7},"end":{"line":82,"column":1}},"line":72},"5":{"name":"CampaignPanel","decl":{"start":{"line":89,"column":7},"end":{"line":461,"column":1}},"loc":{"start":{"line":89,"column":7},"end":{"line":461,"column":1}},"line":89},"6":{"name":"refresh","decl":{"start":{"line":103,"column":18},"end":{"line":103,"column":62}},"loc":{"start":{"line":103,"column":18},"end":{"line":103,"column":62}},"line":103},"7":{"name":"settle","decl":{"start":{"line":104,"column":17},"end":{"line":107,"column":4}},"loc":{"start":{"line":104,"column":17},"end":{"line":107,"column":4}},"line":104},"8":{"name":"onChange","decl":{"start":{"line":165,"column":22},"end":{"line":168,"column":14}},"loc":{"start":{"line":165,"column":22},"end":{"line":168,"column":14}},"line":165},"9":{"name":"cell","decl":{"start":{"line":194,"column":20},"end":{"line":197,"column":25}},"loc":{"start":{"line":194,"column":20},"end":{"line":197,"column":25}},"line":194},"10":{"name":"onClick","decl":{"start":{"line":195,"column":88},"end":{"line":195,"column":122}},"loc":{"start":{"line":195,"column":88},"end":{"line":195,"column":122}},"line":195},"11":{"name":"cell","decl":{"start":{"line":200,"column":36},"end":{"line":200,"column":64}},"loc":{"start":{"line":200,"column":36},"end":{"line":200,"column":64}},"line":200},"12":{"name":"cell","decl":{"start":{"line":201,"column":37},"end":{"line":201,"column":89}},"loc":{"start":{"line":201,"column":37},"end":{"line":201,"column":89}},"line":201},"13":{"name":"cell","decl":{"start":{"line":202,"column":56},"end":{"line":202,"column":95}},"loc":{"start":{"line":202,"column":56},"end":{"line":202,"column":95}},"line":202},"14":{"name":"cell","decl":{"start":{"line":203,"column":57},"end":{"line":203,"column":90}},"loc":{"start":{"line":203,"column":57},"end":{"line":203,"column":90}},"line":203},"15":{"name":"cell","decl":{"start":{"line":204,"column":54},"end":{"line":204,"column":89}},"loc":{"start":{"line":204,"column":54},"end":{"line":204,"column":89}},"line":204},"16":{"name":"cell","decl":{"start":{"line":205,"column":51},"end":{"line":205,"column":78}},"loc":{"start":{"line":205,"column":51},"end":{"line":205,"column":78}},"line":205},"17":{"name":"rowKey","decl":{"start":{"line":208,"column":18},"end":{"line":208,"column":44}},"loc":{"start":{"line":208,"column":18},"end":{"line":208,"column":44}},"line":208},"18":{"name":"execute","decl":{"start":{"line":229,"column":27},"end":{"line":229,"column":78}},"loc":{"start":{"line":229,"column":27},"end":{"line":229,"column":78}},"line":229},"19":{"name":"execute","decl":{"start":{"line":237,"column":27},"end":{"line":237,"column":98}},"loc":{"start":{"line":237,"column":27},"end":{"line":237,"column":98}},"line":237},"20":{"name":"execute","decl":{"start":{"line":249,"column":27},"end":{"line":249,"column":79}},"loc":{"start":{"line":249,"column":27},"end":{"line":249,"column":79}},"line":249},"21":{"name":"execute","decl":{"start":{"line":257,"column":27},"end":{"line":257,"column":98}},"loc":{"start":{"line":257,"column":27},"end":{"line":257,"column":98}},"line":257},"22":{"name":"onChange","decl":{"start":{"line":356,"column":32},"end":{"line":356,"column":95}},"loc":{"start":{"line":356,"column":32},"end":{"line":356,"column":95}},"line":356},"23":{"name":"onChange","decl":{"start":{"line":373,"column":32},"end":{"line":373,"column":95}},"loc":{"start":{"line":373,"column":32},"end":{"line":373,"column":95}},"line":373},"24":{"name":"onChange","decl":{"start":{"line":385,"column":30},"end":{"line":385,"column":96}},"loc":{"start":{"line":385,"column":30},"end":{"line":385,"column":96}},"line":385},"25":{"name":"onChange","decl":{"start":{"line":392,"column":30},"end":{"line":392,"column":103}},"loc":{"start":{"line":392,"column":30},"end":{"line":392,"column":103}},"line":392},"26":{"name":"onChange","decl":{"start":{"line":400,"column":30},"end":{"line":400,"column":99}},"loc":{"start":{"line":400,"column":30},"end":{"line":400,"column":99}},"line":400},"27":{"name":"execute","decl":{"start":{"line":408,"column":29},"end":{"line":408,"column":90}},"loc":{"start":{"line":408,"column":29},"end":{"line":408,"column":90}},"line":408},"28":{"name":"onDone","decl":{"start":{"line":409,"column":28},"end":{"line":412,"column":22}},"loc":{"start":{"line":409,"column":28},"end":{"line":412,"column":22}},"line":409}},"f":{"0":5,"1":115,"2":350,"3":346,"4":4,"5":111,"6":6,"7":5,"8":1,"9":52,"10":14,"11":52,"12":52,"13":52,"14":52,"15":52,"16":52,"17":52,"18":3,"19":1,"20":0,"21":0,"22":2,"23":0,"24":0,"25":1,"26":0,"27":1,"28":1}} +,"/Users/omercelik/Repositories/goldpath/ui/console/src/Console.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/Console.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":53}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":51}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":15}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":23}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":22}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":32}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":24}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":2}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":94}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":90}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":78}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":61}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":52}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":19}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":20}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":56}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":24}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":29}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":78}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":35}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":7}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":18}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":19}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":6}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":15}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":42}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":91}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":19}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":37}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":43}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":9}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":9}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":10}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":13}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":19}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":15}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":24}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":27}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":56}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":107}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":53}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":53}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":12}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":56}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":31}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":102}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":104}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":17}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":54}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":31}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":77}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":104}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":17}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":76}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":48}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":105}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":113}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":121}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":113}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":15}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":1}}},"s":{"0":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"35":1,"36":20,"37":20,"38":20,"39":20,"41":20,"42":10,"43":10,"44":10,"45":10,"46":10,"47":10,"48":10,"49":10,"50":10,"51":10,"52":20,"54":20,"55":10,"56":18,"57":18,"58":18,"59":10,"60":10,"62":20,"63":20,"64":20,"65":20,"66":20,"67":20,"68":20,"70":20,"72":20,"73":1,"75":1,"78":20,"79":2,"80":2,"81":2,"82":2,"85":20,"88":1,"89":1,"90":1,"91":1,"94":20,"95":2,"98":20,"100":20,"102":20,"104":20,"105":20,"107":20},"branchMap":{"0":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":7},"end":{"line":108,"column":1}},"locations":[{"start":{"line":36,"column":7},"end":{"line":108,"column":1}}]},"1":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":30},"end":{"line":60,"column":9}},"locations":[{"start":{"line":55,"column":30},"end":{"line":60,"column":9}}]},"2":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":8},"end":{"line":61,"column":9}},"locations":[{"start":{"line":60,"column":8},"end":{"line":61,"column":9}}]},"3":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":24},"end":{"line":71,"column":107}},"locations":[{"start":{"line":71,"column":24},"end":{"line":71,"column":107}}]},"4":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":24},"end":{"line":73,"column":53}},"locations":[{"start":{"line":73,"column":24},"end":{"line":73,"column":53}}]},"5":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":47},"end":{"line":76,"column":12}},"locations":[{"start":{"line":73,"column":47},"end":{"line":76,"column":12}}]},"6":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":7},"end":{"line":79,"column":31}},"locations":[{"start":{"line":79,"column":7},"end":{"line":79,"column":31}}]},"7":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":40},"end":{"line":83,"column":17}},"locations":[{"start":{"line":79,"column":40},"end":{"line":83,"column":17}}]},"8":{"type":"branch","line":82,"loc":{"start":{"line":82,"column":33},"end":{"line":82,"column":101}},"locations":[{"start":{"line":82,"column":33},"end":{"line":82,"column":101}}]},"9":{"type":"branch","line":82,"loc":{"start":{"line":82,"column":95},"end":{"line":82,"column":104}},"locations":[{"start":{"line":82,"column":95},"end":{"line":82,"column":104}}]},"10":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":7},"end":{"line":86,"column":31}},"locations":[{"start":{"line":86,"column":7},"end":{"line":86,"column":31}}]},"11":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":40},"end":{"line":92,"column":17}},"locations":[{"start":{"line":86,"column":40},"end":{"line":92,"column":17}}]},"12":{"type":"branch","line":91,"loc":{"start":{"line":91,"column":95},"end":{"line":91,"column":104}},"locations":[{"start":{"line":91,"column":95},"end":{"line":91,"column":104}}]},"13":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":7},"end":{"line":95,"column":31}},"locations":[{"start":{"line":95,"column":7},"end":{"line":95,"column":31}}]},"14":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":40},"end":{"line":95,"column":76}},"locations":[{"start":{"line":95,"column":40},"end":{"line":95,"column":76}}]},"15":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":65},"end":{"line":96,"column":48}},"locations":[{"start":{"line":95,"column":65},"end":{"line":96,"column":48}}]},"16":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":7},"end":{"line":99,"column":31}},"locations":[{"start":{"line":99,"column":7},"end":{"line":99,"column":31}}]},"17":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":40},"end":{"line":99,"column":75}},"locations":[{"start":{"line":99,"column":40},"end":{"line":99,"column":75}}]},"18":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":65},"end":{"line":99,"column":105}},"locations":[{"start":{"line":99,"column":65},"end":{"line":99,"column":105}}]},"19":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":7},"end":{"line":101,"column":31}},"locations":[{"start":{"line":101,"column":7},"end":{"line":101,"column":31}}]},"20":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":40},"end":{"line":101,"column":79}},"locations":[{"start":{"line":101,"column":40},"end":{"line":101,"column":79}}]},"21":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":65},"end":{"line":101,"column":113}},"locations":[{"start":{"line":101,"column":65},"end":{"line":101,"column":113}}]},"22":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":7},"end":{"line":103,"column":31}},"locations":[{"start":{"line":103,"column":7},"end":{"line":103,"column":31}}]},"23":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":40},"end":{"line":103,"column":83}},"locations":[{"start":{"line":103,"column":40},"end":{"line":103,"column":83}}]},"24":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":65},"end":{"line":103,"column":121}},"locations":[{"start":{"line":103,"column":65},"end":{"line":103,"column":121}}]},"25":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":7},"end":{"line":105,"column":31}},"locations":[{"start":{"line":105,"column":7},"end":{"line":105,"column":31}}]},"26":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":40},"end":{"line":105,"column":79}},"locations":[{"start":{"line":105,"column":40},"end":{"line":105,"column":79}}]},"27":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":65},"end":{"line":105,"column":113}},"locations":[{"start":{"line":105,"column":65},"end":{"line":105,"column":113}}]},"28":{"type":"branch","line":37,"loc":{"start":{"line":37,"column":25},"end":{"line":37,"column":70}},"locations":[{"start":{"line":37,"column":25},"end":{"line":37,"column":70}}]},"29":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":12},"end":{"line":53,"column":5}},"locations":[{"start":{"line":42,"column":12},"end":{"line":53,"column":5}}]},"30":{"type":"branch","line":44,"loc":{"start":{"line":44,"column":44},"end":{"line":49,"column":5}},"locations":[{"start":{"line":44,"column":44},"end":{"line":49,"column":5}}]},"31":{"type":"branch","line":45,"loc":{"start":{"line":45,"column":17},"end":{"line":45,"column":24}},"locations":[{"start":{"line":45,"column":17},"end":{"line":45,"column":24}}]},"32":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":17},"end":{"line":48,"column":35}},"locations":[{"start":{"line":48,"column":17},"end":{"line":48,"column":35}}]},"33":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":33},"end":{"line":47,"column":76}},"locations":[{"start":{"line":47,"column":33},"end":{"line":47,"column":76}}]},"34":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":11},"end":{"line":52,"column":6}},"locations":[{"start":{"line":50,"column":11},"end":{"line":52,"column":6}}]},"35":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":21},"end":{"line":56,"column":71}},"locations":[{"start":{"line":56,"column":21},"end":{"line":56,"column":71}}]},"36":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":77},"end":{"line":60,"column":8}},"locations":[{"start":{"line":56,"column":77},"end":{"line":60,"column":8}}]}},"b":{"0":[20],"1":[10],"2":[10],"3":[10],"4":[10],"5":[1],"6":[10],"7":[2],"8":[1],"9":[1],"10":[10],"11":[1],"12":[0],"13":[10],"14":[6],"15":[2],"16":[10],"17":[6],"18":[1],"19":[10],"20":[6],"21":[1],"22":[10],"23":[6],"24":[1],"25":[10],"26":[6],"27":[1],"28":[10],"29":[10],"30":[10],"31":[0],"32":[9],"33":[24],"34":[10],"35":[50],"36":[18]},"fnMap":{"0":{"name":"Console","decl":{"start":{"line":36,"column":7},"end":{"line":108,"column":1}},"loc":{"start":{"line":36,"column":7},"end":{"line":108,"column":1}},"line":36},"1":{"name":"onSelect","decl":{"start":{"line":59,"column":18},"end":{"line":59,"column":43}},"loc":{"start":{"line":59,"column":18},"end":{"line":59,"column":43}},"line":59},"2":{"name":"onToggleCollapsed","decl":{"start":{"line":69,"column":25},"end":{"line":69,"column":56}},"loc":{"start":{"line":69,"column":25},"end":{"line":69,"column":56}},"line":69}},"f":{"0":20,"1":0,"2":0}} +,"/Users/omercelik/Repositories/goldpath/ui/console/src/NotificationPanel.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/NotificationPanel.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":57}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":70}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":16}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":45}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":41}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":49}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":11}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":84}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":38}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":77}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":37}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":41}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":60}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":84}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":66}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":50}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":1}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":71}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":88}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":48}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":49}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":55}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":68}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":74}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":58}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":54}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":62}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":19}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":20}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":10}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":30}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":51}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":87}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":18}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":19}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":6}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":29}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":31}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":53}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":18}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":27}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":51}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":35}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":57}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":111}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":47}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":6}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":50}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":4}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":19}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":22}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":24}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":13}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":5}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":20}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":10}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":31}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":50}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":85}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":18}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":19}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":6}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":41}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":95}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":10}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":64}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":55}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":30}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":42}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":18}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":121}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":25}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":17}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":15}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":85}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":34}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":45}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":123}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":70}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":80}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":41}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":21}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":97}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":68}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":63}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":32}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":23}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":17}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":65}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":81}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":17}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":13}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":119}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":13}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":16}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":15}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":64}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":34}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":19}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":29}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":47}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":64}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":135}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":17}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":30}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":35}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":36}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":16}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":27}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":21}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":13}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":30}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":14}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":97}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":22}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":21}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":39}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":91}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":29}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":38}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":47}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":38}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":18}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":52}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":41}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":54}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":28}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":27}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":19}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":23}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":95}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":22}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":21}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":42}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":91}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":32}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":38}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":50}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":38}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":18}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":55}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":51}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":60}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":31}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":27}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":19}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":23}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":15}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":17}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":111}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":29}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":11}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":19}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":14}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":38}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":62}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":20}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":13}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":43}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":30}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":127}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":39}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":25}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":14}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":64}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":62}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":81}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":80}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":68}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":12}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":29}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":34}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":24}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":31}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":42}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":39}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":43}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":55}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":10}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":47}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":12}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":16}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":20}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":99}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":66}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":48}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":97}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":17}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":49}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":116}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":16}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":82}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":17}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":55}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":74}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":18}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":17}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":59}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":78}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":18}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":17}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":54}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":42}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":18}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":17}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":55}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":45}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":18}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":17}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":56}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":50}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":18}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":17}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":53}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":50}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":18}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":17}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":50}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":47}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":18}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":17}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":52}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":107}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":18}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":17}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":50}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":98}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":18}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":33}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":19}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":54}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":42}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":20}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":40}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":19}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":59}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":81}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":20}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":15}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":31}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":115}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":31}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":16}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":18}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":10}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":1}}},"s":{"0":1,"9":1,"12":1,"13":1,"14":1,"15":1,"16":1,"24":1,"25":33,"26":32,"27":33,"28":32,"29":33,"30":33,"31":33,"32":1,"33":1,"42":1,"43":44,"44":44,"45":44,"46":44,"47":44,"48":44,"49":44,"50":44,"52":44,"54":44,"55":13,"56":13,"57":13,"58":13,"59":13,"60":13,"61":13,"62":13,"63":44,"65":44,"66":44,"69":19,"70":19,"71":2,"72":17,"73":2,"74":15,"75":13,"76":19,"77":44,"78":44,"82":44,"83":19,"84":13,"85":13,"86":13,"88":6,"89":6,"90":6,"91":6,"92":6,"93":6,"94":6,"95":6,"96":44,"98":44,"100":44,"101":44,"102":44,"104":44,"105":29,"106":29,"107":29,"108":29,"109":29,"112":44,"113":44,"114":44,"115":44,"116":29,"117":29,"119":29,"120":29,"121":29,"122":29,"123":29,"124":58,"125":58,"126":58,"127":29,"128":29,"129":0,"131":29,"132":44,"133":44,"134":44,"135":44,"137":44,"138":44,"139":44,"140":132,"141":132,"142":132,"143":132,"144":132,"145":132,"146":132,"147":4,"148":4,"149":4,"151":132,"152":132,"153":44,"155":44,"156":36,"157":36,"159":36,"160":36,"161":36,"162":36,"163":36,"164":36,"165":1,"166":1,"167":1,"169":36,"170":36,"171":144,"172":144,"173":144,"174":36,"175":36,"177":36,"179":36,"180":36,"181":36,"182":36,"183":36,"184":36,"185":1,"186":1,"187":1,"189":36,"190":36,"191":21,"192":21,"193":21,"194":36,"195":36,"196":36,"199":44,"200":44,"201":44,"202":44,"204":44,"205":44,"207":44,"208":44,"209":44,"210":44,"211":44,"212":44,"213":29,"214":29,"215":29,"217":44,"218":44,"219":44,"220":44,"221":44,"222":44,"223":44,"224":44,"225":44,"226":44,"227":44,"228":4,"229":40,"230":4,"231":36,"233":44,"234":44,"237":44,"238":44,"240":44,"241":6,"242":6,"243":6,"244":6,"245":6,"246":6,"247":6,"248":6,"250":6,"251":6,"252":6,"254":6,"255":6,"256":6,"257":6,"258":6,"259":6,"260":6,"261":6,"262":6,"263":6,"264":6,"265":6,"266":6,"267":6,"268":6,"269":6,"270":6,"271":6,"272":6,"273":6,"274":6,"275":6,"276":6,"277":6,"278":6,"279":6,"280":6,"281":6,"282":6,"283":6,"284":6,"285":6,"287":6,"288":6,"289":6,"290":1,"291":1,"292":1,"293":1,"295":6,"296":1,"297":1,"298":1,"299":1,"301":6,"303":6,"305":2,"306":2,"307":2,"309":6,"311":44,"313":44},"branchMap":{"0":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":7},"end":{"line":34,"column":1}},"locations":[{"start":{"line":25,"column":7},"end":{"line":34,"column":1}}]},"1":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":24},"end":{"line":26,"column":38}},"locations":[{"start":{"line":26,"column":24},"end":{"line":26,"column":38}}]},"2":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":31},"end":{"line":28,"column":21}},"locations":[{"start":{"line":26,"column":31},"end":{"line":28,"column":21}}]},"3":{"type":"branch","line":28,"loc":{"start":{"line":28,"column":14},"end":{"line":28,"column":37}},"locations":[{"start":{"line":28,"column":14},"end":{"line":28,"column":37}}]},"4":{"type":"branch","line":28,"loc":{"start":{"line":28,"column":21},"end":{"line":30,"column":36}},"locations":[{"start":{"line":28,"column":21},"end":{"line":30,"column":36}}]},"5":{"type":"branch","line":30,"loc":{"start":{"line":30,"column":28},"end":{"line":30,"column":37}},"locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":37}}]},"6":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":24},"end":{"line":31,"column":84}},"locations":[{"start":{"line":31,"column":24},"end":{"line":31,"column":84}}]},"7":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":80},"end":{"line":32,"column":30}},"locations":[{"start":{"line":31,"column":80},"end":{"line":32,"column":30}}]},"8":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":23},"end":{"line":34,"column":1}},"locations":[{"start":{"line":32,"column":23},"end":{"line":34,"column":1}}]},"9":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":7},"end":{"line":314,"column":1}},"locations":[{"start":{"line":43,"column":7},"end":{"line":314,"column":1}}]},"10":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":19},"end":{"line":99,"column":36}},"locations":[{"start":{"line":99,"column":19},"end":{"line":99,"column":36}}]},"11":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":7},"end":{"line":103,"column":55}},"locations":[{"start":{"line":103,"column":7},"end":{"line":103,"column":55}}]},"12":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":24},"end":{"line":110,"column":17}},"locations":[{"start":{"line":105,"column":24},"end":{"line":110,"column":17}}]},"13":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":12},"end":{"line":116,"column":29}},"locations":[{"start":{"line":116,"column":12},"end":{"line":116,"column":29}}]},"14":{"type":"branch","line":134,"loc":{"start":{"line":134,"column":11},"end":{"line":134,"column":33}},"locations":[{"start":{"line":134,"column":11},"end":{"line":134,"column":33}}]},"15":{"type":"branch","line":134,"loc":{"start":{"line":134,"column":33},"end":{"line":134,"column":119}},"locations":[{"start":{"line":134,"column":33},"end":{"line":134,"column":119}}]},"16":{"type":"branch","line":156,"loc":{"start":{"line":156,"column":20},"end":{"line":197,"column":15}},"locations":[{"start":{"line":156,"column":20},"end":{"line":197,"column":15}}]},"17":{"type":"branch","line":191,"loc":{"start":{"line":191,"column":18},"end":{"line":191,"column":35}},"locations":[{"start":{"line":191,"column":18},"end":{"line":191,"column":35}}]},"18":{"type":"branch","line":228,"loc":{"start":{"line":228,"column":21},"end":{"line":229,"column":42}},"locations":[{"start":{"line":228,"column":21},"end":{"line":229,"column":42}}]},"19":{"type":"branch","line":229,"loc":{"start":{"line":229,"column":16},"end":{"line":232,"column":55}},"locations":[{"start":{"line":229,"column":16},"end":{"line":232,"column":55}}]},"20":{"type":"branch","line":230,"loc":{"start":{"line":230,"column":25},"end":{"line":231,"column":43}},"locations":[{"start":{"line":230,"column":25},"end":{"line":231,"column":43}}]},"21":{"type":"branch","line":231,"loc":{"start":{"line":231,"column":18},"end":{"line":232,"column":55}},"locations":[{"start":{"line":231,"column":18},"end":{"line":232,"column":55}}]},"22":{"type":"branch","line":241,"loc":{"start":{"line":241,"column":7},"end":{"line":310,"column":18}},"locations":[{"start":{"line":241,"column":7},"end":{"line":310,"column":18}}]},"23":{"type":"branch","line":248,"loc":{"start":{"line":248,"column":80},"end":{"line":248,"column":109}},"locations":[{"start":{"line":248,"column":80},"end":{"line":248,"column":109}}]},"24":{"type":"branch","line":279,"loc":{"start":{"line":279,"column":28},"end":{"line":279,"column":42}},"locations":[{"start":{"line":279,"column":28},"end":{"line":279,"column":42}}]},"25":{"type":"branch","line":283,"loc":{"start":{"line":283,"column":38},"end":{"line":283,"column":65}},"locations":[{"start":{"line":283,"column":38},"end":{"line":283,"column":65}}]},"26":{"type":"branch","line":283,"loc":{"start":{"line":283,"column":49},"end":{"line":283,"column":77}},"locations":[{"start":{"line":283,"column":49},"end":{"line":283,"column":77}}]},"27":{"type":"branch","line":283,"loc":{"start":{"line":283,"column":86},"end":{"line":283,"column":102}},"locations":[{"start":{"line":283,"column":86},"end":{"line":283,"column":102}}]},"28":{"type":"branch","line":288,"loc":{"start":{"line":288,"column":28},"end":{"line":288,"column":82}},"locations":[{"start":{"line":288,"column":28},"end":{"line":288,"column":82}}]},"29":{"type":"branch","line":288,"loc":{"start":{"line":288,"column":77},"end":{"line":288,"column":93}},"locations":[{"start":{"line":288,"column":77},"end":{"line":288,"column":93}}]},"30":{"type":"branch","line":290,"loc":{"start":{"line":290,"column":22},"end":{"line":294,"column":20}},"locations":[{"start":{"line":290,"column":22},"end":{"line":294,"column":20}}]},"31":{"type":"branch","line":296,"loc":{"start":{"line":296,"column":22},"end":{"line":300,"column":20}},"locations":[{"start":{"line":296,"column":22},"end":{"line":300,"column":20}}]},"32":{"type":"branch","line":304,"loc":{"start":{"line":304,"column":20},"end":{"line":308,"column":16}},"locations":[{"start":{"line":304,"column":20},"end":{"line":308,"column":16}}]},"33":{"type":"branch","line":306,"loc":{"start":{"line":306,"column":61},"end":{"line":306,"column":88}},"locations":[{"start":{"line":306,"column":61},"end":{"line":306,"column":88}}]},"34":{"type":"branch","line":306,"loc":{"start":{"line":306,"column":72},"end":{"line":306,"column":111}},"locations":[{"start":{"line":306,"column":72},"end":{"line":306,"column":111}}]},"35":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":12},"end":{"line":64,"column":5}},"locations":[{"start":{"line":55,"column":12},"end":{"line":64,"column":5}}]},"36":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":12},"end":{"line":59,"column":50}},"locations":[{"start":{"line":59,"column":12},"end":{"line":59,"column":50}}]},"37":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":13},"end":{"line":60,"column":85}},"locations":[{"start":{"line":60,"column":13},"end":{"line":60,"column":85}}]},"38":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":11},"end":{"line":63,"column":6}},"locations":[{"start":{"line":61,"column":11},"end":{"line":63,"column":6}}]},"39":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":4},"end":{"line":77,"column":6}},"locations":[{"start":{"line":67,"column":4},"end":{"line":77,"column":6}}]},"40":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":17},"end":{"line":72,"column":51}},"locations":[{"start":{"line":71,"column":17},"end":{"line":72,"column":51}}]},"41":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":50},"end":{"line":75,"column":111}},"locations":[{"start":{"line":72,"column":50},"end":{"line":75,"column":111}}]},"42":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":21},"end":{"line":74,"column":57}},"locations":[{"start":{"line":73,"column":21},"end":{"line":74,"column":57}}]},"43":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":56},"end":{"line":75,"column":111}},"locations":[{"start":{"line":74,"column":56},"end":{"line":75,"column":111}}]},"44":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":50},"end":{"line":75,"column":70}},"locations":[{"start":{"line":75,"column":50},"end":{"line":75,"column":70}}]},"45":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":80},"end":{"line":75,"column":103}},"locations":[{"start":{"line":75,"column":80},"end":{"line":75,"column":103}}]},"46":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":109},"end":{"line":76,"column":47}},"locations":[{"start":{"line":75,"column":109},"end":{"line":76,"column":47}}]},"47":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":12},"end":{"line":97,"column":5}},"locations":[{"start":{"line":83,"column":12},"end":{"line":97,"column":5}}]},"48":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":21},"end":{"line":87,"column":5}},"locations":[{"start":{"line":84,"column":21},"end":{"line":87,"column":5}}]},"49":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":4},"end":{"line":96,"column":6}},"locations":[{"start":{"line":87,"column":4},"end":{"line":96,"column":6}}]},"50":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":12},"end":{"line":92,"column":49}},"locations":[{"start":{"line":92,"column":12},"end":{"line":92,"column":49}}]},"51":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":11},"end":{"line":96,"column":6}},"locations":[{"start":{"line":94,"column":11},"end":{"line":96,"column":6}}]},"52":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":43},"end":{"line":99,"column":93}},"locations":[{"start":{"line":99,"column":43},"end":{"line":99,"column":93}}]},"53":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":61},"end":{"line":99,"column":92}},"locations":[{"start":{"line":99,"column":61},"end":{"line":99,"column":92}}]},"54":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":17},"end":{"line":108,"column":120}},"locations":[{"start":{"line":108,"column":17},"end":{"line":108,"column":120}}]},"55":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":90},"end":{"line":108,"column":117}},"locations":[{"start":{"line":108,"column":90},"end":{"line":108,"column":117}}]},"56":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":33},"end":{"line":132,"column":17}},"locations":[{"start":{"line":116,"column":33},"end":{"line":132,"column":17}}]},"57":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":33},"end":{"line":129,"column":46}},"locations":[{"start":{"line":129,"column":33},"end":{"line":129,"column":46}}]},"58":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":59},"end":{"line":130,"column":81}},"locations":[{"start":{"line":129,"column":59},"end":{"line":130,"column":81}}]},"59":{"type":"branch","line":124,"loc":{"start":{"line":124,"column":49},"end":{"line":127,"column":23}},"locations":[{"start":{"line":124,"column":49},"end":{"line":127,"column":23}}]},"60":{"type":"branch","line":140,"loc":{"start":{"line":140,"column":22},"end":{"line":153,"column":21}},"locations":[{"start":{"line":140,"column":22},"end":{"line":153,"column":21}}]},"61":{"type":"branch","line":145,"loc":{"start":{"line":145,"column":31},"end":{"line":145,"column":90}},"locations":[{"start":{"line":145,"column":31},"end":{"line":145,"column":90}}]},"62":{"type":"branch","line":145,"loc":{"start":{"line":145,"column":37},"end":{"line":145,"column":135}},"locations":[{"start":{"line":145,"column":37},"end":{"line":145,"column":135}}]},"63":{"type":"branch","line":147,"loc":{"start":{"line":147,"column":23},"end":{"line":150,"column":16}},"locations":[{"start":{"line":147,"column":23},"end":{"line":150,"column":16}}]},"64":{"type":"branch","line":165,"loc":{"start":{"line":165,"column":26},"end":{"line":168,"column":18}},"locations":[{"start":{"line":165,"column":26},"end":{"line":168,"column":18}}]},"65":{"type":"branch","line":171,"loc":{"start":{"line":171,"column":28},"end":{"line":174,"column":27}},"locations":[{"start":{"line":171,"column":28},"end":{"line":174,"column":27}}]},"66":{"type":"branch","line":185,"loc":{"start":{"line":185,"column":26},"end":{"line":188,"column":18}},"locations":[{"start":{"line":185,"column":26},"end":{"line":188,"column":18}}]},"67":{"type":"branch","line":191,"loc":{"start":{"line":191,"column":39},"end":{"line":194,"column":27}},"locations":[{"start":{"line":191,"column":39},"end":{"line":194,"column":27}}]},"68":{"type":"branch","line":213,"loc":{"start":{"line":213,"column":20},"end":{"line":216,"column":25}},"locations":[{"start":{"line":213,"column":20},"end":{"line":216,"column":25}}]},"69":{"type":"branch","line":214,"loc":{"start":{"line":214,"column":98},"end":{"line":214,"column":127}},"locations":[{"start":{"line":214,"column":98},"end":{"line":214,"column":127}}]},"70":{"type":"branch","line":219,"loc":{"start":{"line":219,"column":40},"end":{"line":219,"column":62}},"locations":[{"start":{"line":219,"column":40},"end":{"line":219,"column":62}}]},"71":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":39},"end":{"line":220,"column":60}},"locations":[{"start":{"line":220,"column":39},"end":{"line":220,"column":60}}]},"72":{"type":"branch","line":221,"loc":{"start":{"line":221,"column":37},"end":{"line":221,"column":79}},"locations":[{"start":{"line":221,"column":37},"end":{"line":221,"column":79}}]},"73":{"type":"branch","line":222,"loc":{"start":{"line":222,"column":56},"end":{"line":222,"column":78}},"locations":[{"start":{"line":222,"column":56},"end":{"line":222,"column":78}}]},"74":{"type":"branch","line":223,"loc":{"start":{"line":223,"column":41},"end":{"line":223,"column":66}},"locations":[{"start":{"line":223,"column":41},"end":{"line":223,"column":66}}]},"75":{"type":"branch","line":226,"loc":{"start":{"line":226,"column":18},"end":{"line":226,"column":34}},"locations":[{"start":{"line":226,"column":18},"end":{"line":226,"column":34}}]}},"b":{"0":[33],"1":[1],"2":[32],"3":[0],"4":[32],"5":[2],"6":[30],"7":[2],"8":[1],"9":[44],"10":[14],"11":[1],"12":[29],"13":[14],"14":[30],"15":[1],"16":[36],"17":[14],"18":[4],"19":[40],"20":[4],"21":[36],"22":[6],"23":[0],"24":[0],"25":[1],"26":[5],"27":[5],"28":[1],"29":[5],"30":[1],"31":[1],"32":[2],"33":[1],"34":[1],"35":[13],"36":[12],"37":[1],"38":[13],"39":[19],"40":[2],"41":[17],"42":[2],"43":[15],"44":[13],"45":[14],"46":[13],"47":[19],"48":[13],"49":[6],"50":[6],"51":[6],"52":[29],"53":[0],"54":[29],"55":[0],"56":[29],"57":[0],"58":[0],"59":[58],"60":[132],"61":[44],"62":[88],"63":[4],"64":[1],"65":[144],"66":[1],"67":[21],"68":[29],"69":[6],"70":[29],"71":[29],"72":[29],"73":[29],"74":[29],"75":[29]},"fnMap":{"0":{"name":"retentionWords","decl":{"start":{"line":25,"column":7},"end":{"line":34,"column":1}},"loc":{"start":{"line":25,"column":7},"end":{"line":34,"column":1}},"line":25},"1":{"name":"NotificationPanel","decl":{"start":{"line":43,"column":7},"end":{"line":314,"column":1}},"loc":{"start":{"line":43,"column":7},"end":{"line":314,"column":1}},"line":43},"2":{"name":"refresh","decl":{"start":{"line":53,"column":18},"end":{"line":53,"column":62}},"loc":{"start":{"line":53,"column":18},"end":{"line":53,"column":62}},"line":53},"3":{"name":"onClick","decl":{"start":{"line":147,"column":23},"end":{"line":150,"column":16}},"loc":{"start":{"line":147,"column":23},"end":{"line":150,"column":16}},"line":147},"4":{"name":"onChange","decl":{"start":{"line":165,"column":26},"end":{"line":168,"column":18}},"loc":{"start":{"line":165,"column":26},"end":{"line":168,"column":18}},"line":165},"5":{"name":"onChange","decl":{"start":{"line":185,"column":26},"end":{"line":188,"column":18}},"loc":{"start":{"line":185,"column":26},"end":{"line":188,"column":18}},"line":185},"6":{"name":"cell","decl":{"start":{"line":213,"column":20},"end":{"line":216,"column":25}},"loc":{"start":{"line":213,"column":20},"end":{"line":216,"column":25}},"line":213},"7":{"name":"onClick","decl":{"start":{"line":214,"column":98},"end":{"line":214,"column":127}},"loc":{"start":{"line":214,"column":98},"end":{"line":214,"column":127}},"line":214},"8":{"name":"cell","decl":{"start":{"line":219,"column":40},"end":{"line":219,"column":62}},"loc":{"start":{"line":219,"column":40},"end":{"line":219,"column":62}},"line":219},"9":{"name":"cell","decl":{"start":{"line":220,"column":39},"end":{"line":220,"column":60}},"loc":{"start":{"line":220,"column":39},"end":{"line":220,"column":60}},"line":220},"10":{"name":"cell","decl":{"start":{"line":221,"column":37},"end":{"line":221,"column":79}},"loc":{"start":{"line":221,"column":37},"end":{"line":221,"column":79}},"line":221},"11":{"name":"cell","decl":{"start":{"line":222,"column":56},"end":{"line":222,"column":78}},"loc":{"start":{"line":222,"column":56},"end":{"line":222,"column":78}},"line":222},"12":{"name":"cell","decl":{"start":{"line":223,"column":41},"end":{"line":223,"column":66}},"loc":{"start":{"line":223,"column":41},"end":{"line":223,"column":66}},"line":223},"13":{"name":"rowKey","decl":{"start":{"line":226,"column":18},"end":{"line":226,"column":34}},"loc":{"start":{"line":226,"column":18},"end":{"line":226,"column":34}},"line":226}},"f":{"0":33,"1":44,"2":0,"3":4,"4":1,"5":1,"6":29,"7":6,"8":29,"9":29,"10":29,"11":29,"12":29,"13":29}} +,"/Users/omercelik/Repositories/goldpath/ui/console/src/RunConsole.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/RunConsole.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":57}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":97}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":28}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":108}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":1}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":62}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":56}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":58}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":50}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":74}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":73}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":58}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":54}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":19}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":20}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":10}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":15}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":24}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":26}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":25}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":74}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":8}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":75}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":18}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":19}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":6}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":15}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":19}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":23}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":20}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":10}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":18}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":46}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":81}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":18}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":19}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":6}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":36}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":31}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":53}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":67}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":47}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":6}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":34}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":4}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":64}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":19}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":25}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":27}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":13}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":5}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":20}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":10}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":25}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":55}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":81}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":18}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":19}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":6}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":44}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":62}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":38}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":80}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":3}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":10}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":57}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":55}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":15}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":82}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":46}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":34}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":19}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":39}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":58}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":66}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":146}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":17}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":30}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":46}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":39}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":16}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":35}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":119}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":21}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":13}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":14}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":16}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":17}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":17}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":93}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":36}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":32}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":124}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":71}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":65}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":105}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":53}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":29}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":35}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":56}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":81}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":36}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":20}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":33}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":31}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":36}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":53}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":82}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":38}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":22}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":31}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":35}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":52}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":81}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":38}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":33}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":22}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":23}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":19}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":15}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":15}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":18}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":17}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":17}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":82}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":34}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":44}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":22}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":47}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":118}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":26}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":25}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":18}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":60}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":84}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":111}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":14}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":31}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":36}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":63}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":12}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":18}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":23}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":90}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":66}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":105}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":41}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":25}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":29}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":56}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":75}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":32}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":16}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":55}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":27}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":38}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":69}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":83}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":34}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":18}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":19}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":16}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":57}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":87}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":48}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":82}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":100}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":33}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":21}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":15}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":16}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":66}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":124}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":15}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":36}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":56}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":81}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":68}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":78}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":69}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":19}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":15}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":15}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":18}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":10}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":1}}},"s":{"0":1,"12":4,"13":4,"14":4,"15":4,"22":1,"23":48,"24":48,"25":48,"26":48,"27":48,"28":48,"29":48,"31":48,"32":11,"33":11,"34":11,"35":11,"36":10,"37":10,"38":10,"39":11,"40":11,"41":11,"42":11,"43":11,"44":48,"46":48,"47":25,"48":14,"49":14,"50":14,"51":14,"52":14,"53":14,"54":14,"55":14,"56":48,"58":48,"59":48,"62":14,"63":14,"64":14,"65":48,"66":48,"68":48,"73":48,"74":20,"75":15,"76":15,"77":15,"79":5,"80":5,"81":5,"82":5,"83":5,"84":5,"85":5,"86":5,"87":48,"89":48,"91":48,"92":11,"93":11,"95":37,"96":37,"97":48,"99":48,"100":48,"101":48,"102":48,"103":43,"104":43,"105":43,"106":43,"107":43,"108":43,"109":43,"110":1,"111":1,"112":1,"114":43,"115":43,"116":43,"117":48,"118":48,"119":48,"121":48,"122":36,"123":36,"124":36,"125":36,"126":27,"127":27,"128":27,"129":27,"130":27,"131":27,"132":27,"133":27,"134":27,"135":27,"136":27,"137":27,"138":3,"139":3,"140":3,"141":3,"142":3,"143":3,"145":24,"146":24,"147":24,"148":24,"149":24,"150":24,"151":24,"153":27,"154":27,"155":36,"156":36,"157":36,"160":48,"161":36,"162":36,"163":36,"164":36,"165":36,"166":36,"167":20,"168":20,"169":20,"170":36,"171":36,"172":36,"173":36,"174":36,"175":36,"176":36,"177":36,"178":36,"179":36,"182":48,"183":7,"184":7,"185":7,"186":7,"187":7,"188":7,"189":7,"190":7,"191":7,"192":7,"193":7,"194":6,"195":6,"198":6,"199":6,"200":6,"201":6,"203":7,"204":7,"206":7,"208":7,"209":7,"210":7,"211":14,"212":14,"213":14,"214":7,"215":7,"217":7,"218":7,"219":7,"220":7,"221":7,"222":6,"223":6,"224":6,"225":6,"226":6,"227":7,"228":7,"229":7,"231":48,"233":48},"branchMap":{"0":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":0},"end":{"line":16,"column":1}},"locations":[{"start":{"line":13,"column":0},"end":{"line":16,"column":1}}]},"1":{"type":"branch","line":15,"loc":{"start":{"line":15,"column":16},"end":{"line":15,"column":63}},"locations":[{"start":{"line":15,"column":16},"end":{"line":15,"column":63}}]},"2":{"type":"branch","line":15,"loc":{"start":{"line":15,"column":59},"end":{"line":15,"column":108}},"locations":[{"start":{"line":15,"column":59},"end":{"line":15,"column":108}}]},"3":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":7},"end":{"line":234,"column":1}},"locations":[{"start":{"line":23,"column":7},"end":{"line":234,"column":1}}]},"4":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":24},"end":{"line":92,"column":37}},"locations":[{"start":{"line":92,"column":24},"end":{"line":92,"column":37}}]},"5":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":37},"end":{"line":94,"column":3}},"locations":[{"start":{"line":92,"column":37},"end":{"line":94,"column":3}}]},"6":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":2},"end":{"line":98,"column":16}},"locations":[{"start":{"line":94,"column":2},"end":{"line":98,"column":16}}]},"7":{"type":"branch","line":98,"loc":{"start":{"line":98,"column":7},"end":{"line":98,"column":55}},"locations":[{"start":{"line":98,"column":7},"end":{"line":98,"column":55}}]},"8":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":7},"end":{"line":158,"column":18}},"locations":[{"start":{"line":122,"column":7},"end":{"line":158,"column":18}}]},"9":{"type":"branch","line":161,"loc":{"start":{"line":161,"column":7},"end":{"line":180,"column":18}},"locations":[{"start":{"line":161,"column":7},"end":{"line":180,"column":18}}]},"10":{"type":"branch","line":183,"loc":{"start":{"line":183,"column":7},"end":{"line":230,"column":18}},"locations":[{"start":{"line":183,"column":7},"end":{"line":230,"column":18}}]},"11":{"type":"branch","line":194,"loc":{"start":{"line":194,"column":49},"end":{"line":202,"column":18}},"locations":[{"start":{"line":194,"column":49},"end":{"line":202,"column":18}}]},"12":{"type":"branch","line":219,"loc":{"start":{"line":219,"column":61},"end":{"line":219,"column":78}},"locations":[{"start":{"line":219,"column":61},"end":{"line":219,"column":78}}]},"13":{"type":"branch","line":219,"loc":{"start":{"line":219,"column":65},"end":{"line":219,"column":124}},"locations":[{"start":{"line":219,"column":65},"end":{"line":219,"column":124}}]},"14":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":12},"end":{"line":45,"column":5}},"locations":[{"start":{"line":32,"column":12},"end":{"line":45,"column":5}}]},"15":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":12},"end":{"line":40,"column":7}},"locations":[{"start":{"line":36,"column":12},"end":{"line":40,"column":7}}]},"16":{"type":"branch","line":37,"loc":{"start":{"line":37,"column":19},"end":{"line":37,"column":26}},"locations":[{"start":{"line":37,"column":19},"end":{"line":37,"column":26}}]},"17":{"type":"branch","line":39,"loc":{"start":{"line":39,"column":17},"end":{"line":39,"column":72}},"locations":[{"start":{"line":39,"column":17},"end":{"line":39,"column":72}}]},"18":{"type":"branch","line":39,"loc":{"start":{"line":39,"column":51},"end":{"line":39,"column":72}},"locations":[{"start":{"line":39,"column":51},"end":{"line":39,"column":72}}]},"19":{"type":"branch","line":41,"loc":{"start":{"line":41,"column":13},"end":{"line":41,"column":73}},"locations":[{"start":{"line":41,"column":13},"end":{"line":41,"column":73}}]},"20":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":11},"end":{"line":44,"column":6}},"locations":[{"start":{"line":42,"column":11},"end":{"line":44,"column":6}}]},"21":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":12},"end":{"line":57,"column":5}},"locations":[{"start":{"line":47,"column":12},"end":{"line":57,"column":5}}]},"22":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":16},"end":{"line":48,"column":23}},"locations":[{"start":{"line":48,"column":16},"end":{"line":48,"column":23}}]},"23":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":16},"end":{"line":56,"column":6}},"locations":[{"start":{"line":48,"column":16},"end":{"line":56,"column":6}}]},"24":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":12},"end":{"line":52,"column":45}},"locations":[{"start":{"line":52,"column":12},"end":{"line":52,"column":45}}]},"25":{"type":"branch","line":54,"loc":{"start":{"line":54,"column":11},"end":{"line":56,"column":6}},"locations":[{"start":{"line":54,"column":11},"end":{"line":56,"column":6}}]},"26":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":4},"end":{"line":65,"column":6}},"locations":[{"start":{"line":60,"column":4},"end":{"line":65,"column":6}}]},"27":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":60},"end":{"line":63,"column":67}},"locations":[{"start":{"line":63,"column":60},"end":{"line":63,"column":67}}]},"28":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":18},"end":{"line":69,"column":64}},"locations":[{"start":{"line":69,"column":18},"end":{"line":69,"column":64}}]},"29":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":12},"end":{"line":88,"column":5}},"locations":[{"start":{"line":74,"column":12},"end":{"line":88,"column":5}}]},"30":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":24},"end":{"line":78,"column":5}},"locations":[{"start":{"line":75,"column":24},"end":{"line":78,"column":5}}]},"31":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":4},"end":{"line":87,"column":6}},"locations":[{"start":{"line":78,"column":4},"end":{"line":87,"column":6}}]},"32":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":12},"end":{"line":83,"column":54}},"locations":[{"start":{"line":83,"column":12},"end":{"line":83,"column":54}}]},"33":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":11},"end":{"line":87,"column":6}},"locations":[{"start":{"line":85,"column":11},"end":{"line":87,"column":6}}]},"34":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":18},"end":{"line":90,"column":62}},"locations":[{"start":{"line":90,"column":18},"end":{"line":90,"column":62}}]},"35":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":40},"end":{"line":90,"column":60}},"locations":[{"start":{"line":90,"column":40},"end":{"line":90,"column":60}}]},"36":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":22},"end":{"line":117,"column":21}},"locations":[{"start":{"line":103,"column":22},"end":{"line":117,"column":21}}]},"37":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":40},"end":{"line":108,"column":101}},"locations":[{"start":{"line":108,"column":40},"end":{"line":108,"column":101}}]},"38":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":48},"end":{"line":108,"column":146}},"locations":[{"start":{"line":108,"column":48},"end":{"line":108,"column":146}}]},"39":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":94},"end":{"line":116,"column":106}},"locations":[{"start":{"line":116,"column":94},"end":{"line":116,"column":106}}]},"40":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":23},"end":{"line":113,"column":16}},"locations":[{"start":{"line":110,"column":23},"end":{"line":113,"column":16}}]},"41":{"type":"branch","line":126,"loc":{"start":{"line":126,"column":22},"end":{"line":155,"column":19}},"locations":[{"start":{"line":126,"column":22},"end":{"line":155,"column":19}}]},"42":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":21},"end":{"line":129,"column":65}},"locations":[{"start":{"line":129,"column":21},"end":{"line":129,"column":65}}]},"43":{"type":"branch","line":130,"loc":{"start":{"line":130,"column":21},"end":{"line":130,"column":105}},"locations":[{"start":{"line":130,"column":21},"end":{"line":130,"column":105}}]},"44":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":23},"end":{"line":144,"column":22}},"locations":[{"start":{"line":138,"column":23},"end":{"line":144,"column":22}}]},"45":{"type":"branch","line":144,"loc":{"start":{"line":144,"column":20},"end":{"line":152,"column":22}},"locations":[{"start":{"line":144,"column":20},"end":{"line":152,"column":22}}]},"46":{"type":"branch","line":135,"loc":{"start":{"line":135,"column":29},"end":{"line":135,"column":81}},"locations":[{"start":{"line":135,"column":29},"end":{"line":135,"column":81}}]},"47":{"type":"branch","line":142,"loc":{"start":{"line":142,"column":31},"end":{"line":142,"column":82}},"locations":[{"start":{"line":142,"column":31},"end":{"line":142,"column":82}}]},"48":{"type":"branch","line":167,"loc":{"start":{"line":167,"column":37},"end":{"line":170,"column":25}},"locations":[{"start":{"line":167,"column":37},"end":{"line":170,"column":25}}]},"49":{"type":"branch","line":168,"loc":{"start":{"line":168,"column":98},"end":{"line":168,"column":118}},"locations":[{"start":{"line":168,"column":98},"end":{"line":168,"column":118}}]},"50":{"type":"branch","line":172,"loc":{"start":{"line":172,"column":37},"end":{"line":172,"column":58}},"locations":[{"start":{"line":172,"column":37},"end":{"line":172,"column":58}}]},"51":{"type":"branch","line":173,"loc":{"start":{"line":173,"column":39},"end":{"line":173,"column":82}},"locations":[{"start":{"line":173,"column":39},"end":{"line":173,"column":82}}]},"52":{"type":"branch","line":174,"loc":{"start":{"line":174,"column":56},"end":{"line":174,"column":109}},"locations":[{"start":{"line":174,"column":56},"end":{"line":174,"column":109}}]},"53":{"type":"branch","line":177,"loc":{"start":{"line":177,"column":20},"end":{"line":177,"column":36}},"locations":[{"start":{"line":177,"column":20},"end":{"line":177,"column":36}}]},"54":{"type":"branch","line":200,"loc":{"start":{"line":200,"column":27},"end":{"line":200,"column":83}},"locations":[{"start":{"line":200,"column":27},"end":{"line":200,"column":83}}]},"55":{"type":"branch","line":211,"loc":{"start":{"line":211,"column":60},"end":{"line":214,"column":21}},"locations":[{"start":{"line":211,"column":60},"end":{"line":214,"column":21}}]},"56":{"type":"branch","line":222,"loc":{"start":{"line":222,"column":42},"end":{"line":227,"column":19}},"locations":[{"start":{"line":222,"column":42},"end":{"line":227,"column":19}}]}},"b":{"0":[4],"1":[3],"2":[1],"3":[48],"4":[12],"5":[11],"6":[37],"7":[1],"8":[36],"9":[36],"10":[7],"11":[6],"12":[1],"13":[6],"14":[11],"15":[10],"16":[0],"17":[9],"18":[0],"19":[1],"20":[11],"21":[25],"22":[11],"23":[14],"24":[14],"25":[14],"26":[14],"27":[0],"28":[4],"29":[20],"30":[15],"31":[5],"32":[5],"33":[5],"34":[4],"35":[4],"36":[43],"37":[36],"38":[7],"39":[0],"40":[1],"41":[27],"42":[3],"43":[0],"44":[3],"45":[24],"46":[2],"47":[1],"48":[20],"49":[4],"50":[20],"51":[20],"52":[20],"53":[20],"54":[1],"55":[14],"56":[6]},"fnMap":{"0":{"name":"asOutcome","decl":{"start":{"line":13,"column":0},"end":{"line":16,"column":1}},"loc":{"start":{"line":13,"column":0},"end":{"line":16,"column":1}},"line":13},"1":{"name":"RunConsole","decl":{"start":{"line":23,"column":7},"end":{"line":234,"column":1}},"loc":{"start":{"line":23,"column":7},"end":{"line":234,"column":1}},"line":23},"2":{"name":"openRun","decl":{"start":{"line":69,"column":18},"end":{"line":69,"column":64}},"loc":{"start":{"line":69,"column":18},"end":{"line":69,"column":64}},"line":69},"3":{"name":"refresh","decl":{"start":{"line":90,"column":18},"end":{"line":90,"column":62}},"loc":{"start":{"line":90,"column":18},"end":{"line":90,"column":62}},"line":90},"4":{"name":"onClick","decl":{"start":{"line":110,"column":23},"end":{"line":113,"column":16}},"loc":{"start":{"line":110,"column":23},"end":{"line":113,"column":16}},"line":110},"5":{"name":"execute","decl":{"start":{"line":135,"column":29},"end":{"line":135,"column":81}},"loc":{"start":{"line":135,"column":29},"end":{"line":135,"column":81}},"line":135},"6":{"name":"execute","decl":{"start":{"line":142,"column":31},"end":{"line":142,"column":82}},"loc":{"start":{"line":142,"column":31},"end":{"line":142,"column":82}},"line":142},"7":{"name":"execute","decl":{"start":{"line":149,"column":31},"end":{"line":149,"column":81}},"loc":{"start":{"line":149,"column":31},"end":{"line":149,"column":81}},"line":149},"8":{"name":"cell","decl":{"start":{"line":167,"column":37},"end":{"line":170,"column":25}},"loc":{"start":{"line":167,"column":37},"end":{"line":170,"column":25}},"line":167},"9":{"name":"onClick","decl":{"start":{"line":168,"column":98},"end":{"line":168,"column":118}},"loc":{"start":{"line":168,"column":98},"end":{"line":168,"column":118}},"line":168},"10":{"name":"cell","decl":{"start":{"line":172,"column":37},"end":{"line":172,"column":58}},"loc":{"start":{"line":172,"column":37},"end":{"line":172,"column":58}},"line":172},"11":{"name":"cell","decl":{"start":{"line":173,"column":39},"end":{"line":173,"column":82}},"loc":{"start":{"line":173,"column":39},"end":{"line":173,"column":82}},"line":173},"12":{"name":"cell","decl":{"start":{"line":174,"column":56},"end":{"line":174,"column":109}},"loc":{"start":{"line":174,"column":56},"end":{"line":174,"column":109}},"line":174},"13":{"name":"rowKey","decl":{"start":{"line":177,"column":20},"end":{"line":177,"column":36}},"loc":{"start":{"line":177,"column":20},"end":{"line":177,"column":36}},"line":177},"14":{"name":"execute","decl":{"start":{"line":191,"column":25},"end":{"line":191,"column":75}},"loc":{"start":{"line":191,"column":25},"end":{"line":191,"column":75}},"line":191},"15":{"name":"execute","decl":{"start":{"line":200,"column":27},"end":{"line":200,"column":83}},"loc":{"start":{"line":200,"column":27},"end":{"line":200,"column":83}},"line":200}},"f":{"0":4,"1":48,"2":4,"3":4,"4":1,"5":2,"6":1,"7":0,"8":20,"9":4,"10":20,"11":20,"12":20,"13":20,"14":0,"15":1}} +,"/Users/omercelik/Repositories/goldpath/ui/console/src/adminClient.ts": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/adminClient.ts","all":false,"statementMap":{"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":89}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":43}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":38}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":51}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":43}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":57}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":40}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":2}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":80}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":7}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":106}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":53}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":11}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":21}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":1}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":43}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":64}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":41}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":33}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":3}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":1}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":26}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":35}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":41}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":49}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":62}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":87}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":3}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":51}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":68}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":46}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":29}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":7}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":71}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":40}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":3}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":73}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":38}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":37}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":13}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":82}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":52}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":35}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":13}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":98}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":67}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":115}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":11}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":40}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":113}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":11}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":95}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":17}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":106}},"359":{"start":{"line":360,"column":0},"end":{"line":360,"column":9}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":9}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":6}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":73}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":3}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":34}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":64}},"367":{"start":{"line":368,"column":0},"end":{"line":368,"column":3}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":43}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":96}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":3}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":93}},"374":{"start":{"line":375,"column":0},"end":{"line":375,"column":40}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":51}},"377":{"start":{"line":378,"column":0},"end":{"line":378,"column":78}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":34}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":90}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":6}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":3}},"383":{"start":{"line":384,"column":0},"end":{"line":384,"column":42}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":89}},"385":{"start":{"line":386,"column":0},"end":{"line":386,"column":3}},"388":{"start":{"line":389,"column":0},"end":{"line":389,"column":67}},"389":{"start":{"line":390,"column":0},"end":{"line":390,"column":68}},"390":{"start":{"line":391,"column":0},"end":{"line":391,"column":21}},"391":{"start":{"line":392,"column":0},"end":{"line":392,"column":29}},"392":{"start":{"line":393,"column":0},"end":{"line":393,"column":136}},"393":{"start":{"line":394,"column":0},"end":{"line":394,"column":66}},"394":{"start":{"line":395,"column":0},"end":{"line":395,"column":7}},"395":{"start":{"line":396,"column":0},"end":{"line":396,"column":61}},"396":{"start":{"line":397,"column":0},"end":{"line":397,"column":52}},"397":{"start":{"line":398,"column":0},"end":{"line":398,"column":5}},"399":{"start":{"line":400,"column":0},"end":{"line":400,"column":53}},"400":{"start":{"line":401,"column":0},"end":{"line":401,"column":3}},"402":{"start":{"line":403,"column":0},"end":{"line":403,"column":64}},"403":{"start":{"line":404,"column":0},"end":{"line":404,"column":121}},"404":{"start":{"line":405,"column":0},"end":{"line":405,"column":3}},"406":{"start":{"line":407,"column":0},"end":{"line":407,"column":62}},"407":{"start":{"line":408,"column":0},"end":{"line":408,"column":119}},"408":{"start":{"line":409,"column":0},"end":{"line":409,"column":3}},"410":{"start":{"line":411,"column":0},"end":{"line":411,"column":63}},"411":{"start":{"line":412,"column":0},"end":{"line":412,"column":120}},"412":{"start":{"line":413,"column":0},"end":{"line":413,"column":3}},"414":{"start":{"line":415,"column":0},"end":{"line":415,"column":46}},"415":{"start":{"line":416,"column":0},"end":{"line":416,"column":85}},"416":{"start":{"line":417,"column":0},"end":{"line":417,"column":3}},"423":{"start":{"line":424,"column":0},"end":{"line":424,"column":52}},"424":{"start":{"line":425,"column":0},"end":{"line":425,"column":92}},"425":{"start":{"line":426,"column":0},"end":{"line":426,"column":3}},"427":{"start":{"line":428,"column":0},"end":{"line":428,"column":54}},"428":{"start":{"line":429,"column":0},"end":{"line":429,"column":80}},"429":{"start":{"line":430,"column":0},"end":{"line":430,"column":3}},"438":{"start":{"line":439,"column":0},"end":{"line":439,"column":90}},"439":{"start":{"line":440,"column":0},"end":{"line":440,"column":40}},"440":{"start":{"line":441,"column":0},"end":{"line":441,"column":57}},"441":{"start":{"line":442,"column":0},"end":{"line":442,"column":78}},"442":{"start":{"line":443,"column":0},"end":{"line":443,"column":89}},"443":{"start":{"line":444,"column":0},"end":{"line":444,"column":3}},"446":{"start":{"line":447,"column":0},"end":{"line":447,"column":108}},"447":{"start":{"line":448,"column":0},"end":{"line":448,"column":40}},"448":{"start":{"line":449,"column":0},"end":{"line":449,"column":57}},"449":{"start":{"line":450,"column":0},"end":{"line":450,"column":79}},"450":{"start":{"line":451,"column":0},"end":{"line":451,"column":36}},"451":{"start":{"line":452,"column":0},"end":{"line":452,"column":95}},"452":{"start":{"line":453,"column":0},"end":{"line":453,"column":6}},"453":{"start":{"line":454,"column":0},"end":{"line":454,"column":3}},"455":{"start":{"line":456,"column":0},"end":{"line":456,"column":70}},"456":{"start":{"line":457,"column":0},"end":{"line":457,"column":116}},"457":{"start":{"line":458,"column":0},"end":{"line":458,"column":3}},"459":{"start":{"line":460,"column":0},"end":{"line":460,"column":68}},"461":{"start":{"line":462,"column":0},"end":{"line":462,"column":101}},"462":{"start":{"line":463,"column":0},"end":{"line":463,"column":3}},"468":{"start":{"line":469,"column":0},"end":{"line":469,"column":94}},"469":{"start":{"line":470,"column":0},"end":{"line":470,"column":63}},"470":{"start":{"line":471,"column":0},"end":{"line":471,"column":44}},"471":{"start":{"line":472,"column":0},"end":{"line":472,"column":103}},"472":{"start":{"line":473,"column":0},"end":{"line":473,"column":68}},"473":{"start":{"line":474,"column":0},"end":{"line":474,"column":21}},"474":{"start":{"line":475,"column":0},"end":{"line":475,"column":29}},"475":{"start":{"line":476,"column":0},"end":{"line":476,"column":90}},"476":{"start":{"line":477,"column":0},"end":{"line":477,"column":17}},"477":{"start":{"line":478,"column":0},"end":{"line":478,"column":7}},"478":{"start":{"line":479,"column":0},"end":{"line":479,"column":71}},"479":{"start":{"line":480,"column":0},"end":{"line":480,"column":52}},"480":{"start":{"line":481,"column":0},"end":{"line":481,"column":3}},"482":{"start":{"line":483,"column":0},"end":{"line":483,"column":50}},"483":{"start":{"line":484,"column":0},"end":{"line":484,"column":98}},"484":{"start":{"line":485,"column":0},"end":{"line":485,"column":3}},"486":{"start":{"line":487,"column":0},"end":{"line":487,"column":87}},"487":{"start":{"line":488,"column":0},"end":{"line":488,"column":40}},"488":{"start":{"line":489,"column":0},"end":{"line":489,"column":57}},"489":{"start":{"line":490,"column":0},"end":{"line":490,"column":78}},"490":{"start":{"line":491,"column":0},"end":{"line":491,"column":85}},"491":{"start":{"line":492,"column":0},"end":{"line":492,"column":3}},"493":{"start":{"line":494,"column":0},"end":{"line":494,"column":47}},"494":{"start":{"line":495,"column":0},"end":{"line":495,"column":88}},"495":{"start":{"line":496,"column":0},"end":{"line":496,"column":3}},"498":{"start":{"line":499,"column":0},"end":{"line":499,"column":75}},"499":{"start":{"line":500,"column":0},"end":{"line":500,"column":42}},"500":{"start":{"line":501,"column":0},"end":{"line":501,"column":109}},"501":{"start":{"line":502,"column":0},"end":{"line":502,"column":6}},"502":{"start":{"line":503,"column":0},"end":{"line":503,"column":3}},"504":{"start":{"line":505,"column":0},"end":{"line":505,"column":72}},"505":{"start":{"line":506,"column":0},"end":{"line":506,"column":42}},"506":{"start":{"line":507,"column":0},"end":{"line":507,"column":106}},"507":{"start":{"line":508,"column":0},"end":{"line":508,"column":6}},"508":{"start":{"line":509,"column":0},"end":{"line":509,"column":3}},"510":{"start":{"line":511,"column":0},"end":{"line":511,"column":51}},"511":{"start":{"line":512,"column":0},"end":{"line":512,"column":85}},"512":{"start":{"line":513,"column":0},"end":{"line":513,"column":3}},"514":{"start":{"line":515,"column":0},"end":{"line":515,"column":52}},"515":{"start":{"line":516,"column":0},"end":{"line":516,"column":86}},"516":{"start":{"line":517,"column":0},"end":{"line":517,"column":3}},"518":{"start":{"line":519,"column":0},"end":{"line":519,"column":67}},"520":{"start":{"line":521,"column":0},"end":{"line":521,"column":93}},"521":{"start":{"line":522,"column":0},"end":{"line":522,"column":3}},"523":{"start":{"line":524,"column":0},"end":{"line":524,"column":79}},"524":{"start":{"line":525,"column":0},"end":{"line":525,"column":91}},"525":{"start":{"line":526,"column":0},"end":{"line":526,"column":3}},"527":{"start":{"line":528,"column":0},"end":{"line":528,"column":66}},"528":{"start":{"line":529,"column":0},"end":{"line":529,"column":92}},"529":{"start":{"line":530,"column":0},"end":{"line":530,"column":3}},"531":{"start":{"line":532,"column":0},"end":{"line":532,"column":114}},"532":{"start":{"line":533,"column":0},"end":{"line":533,"column":40}},"533":{"start":{"line":534,"column":0},"end":{"line":534,"column":57}},"534":{"start":{"line":535,"column":0},"end":{"line":535,"column":66}},"535":{"start":{"line":536,"column":0},"end":{"line":536,"column":78}},"536":{"start":{"line":537,"column":0},"end":{"line":537,"column":106}},"537":{"start":{"line":538,"column":0},"end":{"line":538,"column":3}},"539":{"start":{"line":540,"column":0},"end":{"line":540,"column":55}},"540":{"start":{"line":541,"column":0},"end":{"line":541,"column":110}},"541":{"start":{"line":542,"column":0},"end":{"line":542,"column":3}},"544":{"start":{"line":545,"column":0},"end":{"line":545,"column":69}},"545":{"start":{"line":546,"column":0},"end":{"line":546,"column":126}},"546":{"start":{"line":547,"column":0},"end":{"line":547,"column":3}},"548":{"start":{"line":549,"column":0},"end":{"line":549,"column":65}},"549":{"start":{"line":550,"column":0},"end":{"line":550,"column":122}},"550":{"start":{"line":551,"column":0},"end":{"line":551,"column":3}},"552":{"start":{"line":553,"column":0},"end":{"line":553,"column":60}},"553":{"start":{"line":554,"column":0},"end":{"line":554,"column":87}},"554":{"start":{"line":555,"column":0},"end":{"line":555,"column":3}},"557":{"start":{"line":558,"column":0},"end":{"line":558,"column":85}},"558":{"start":{"line":559,"column":0},"end":{"line":559,"column":114}},"559":{"start":{"line":560,"column":0},"end":{"line":560,"column":68}},"560":{"start":{"line":561,"column":0},"end":{"line":561,"column":46}},"561":{"start":{"line":562,"column":0},"end":{"line":562,"column":29}},"562":{"start":{"line":563,"column":0},"end":{"line":563,"column":7}},"563":{"start":{"line":564,"column":0},"end":{"line":564,"column":94}},"564":{"start":{"line":565,"column":0},"end":{"line":565,"column":71}},"565":{"start":{"line":566,"column":0},"end":{"line":566,"column":51}},"566":{"start":{"line":567,"column":0},"end":{"line":567,"column":3}},"568":{"start":{"line":569,"column":0},"end":{"line":569,"column":66}},"569":{"start":{"line":570,"column":0},"end":{"line":570,"column":128}},"570":{"start":{"line":571,"column":0},"end":{"line":571,"column":87}},"571":{"start":{"line":572,"column":0},"end":{"line":572,"column":3}},"573":{"start":{"line":574,"column":0},"end":{"line":574,"column":50}},"574":{"start":{"line":575,"column":0},"end":{"line":575,"column":115}},"575":{"start":{"line":576,"column":0},"end":{"line":576,"column":3}},"577":{"start":{"line":578,"column":0},"end":{"line":578,"column":91}},"579":{"start":{"line":580,"column":0},"end":{"line":580,"column":142}},"580":{"start":{"line":581,"column":0},"end":{"line":581,"column":3}},"582":{"start":{"line":583,"column":0},"end":{"line":583,"column":67}},"583":{"start":{"line":584,"column":0},"end":{"line":584,"column":132}},"584":{"start":{"line":585,"column":0},"end":{"line":585,"column":3}},"586":{"start":{"line":587,"column":0},"end":{"line":587,"column":101}},"587":{"start":{"line":588,"column":0},"end":{"line":588,"column":21}},"588":{"start":{"line":589,"column":0},"end":{"line":589,"column":108}},"589":{"start":{"line":590,"column":0},"end":{"line":590,"column":45}},"590":{"start":{"line":591,"column":0},"end":{"line":591,"column":6}},"591":{"start":{"line":592,"column":0},"end":{"line":592,"column":3}},"597":{"start":{"line":598,"column":0},"end":{"line":598,"column":66}},"598":{"start":{"line":599,"column":0},"end":{"line":599,"column":98}},"599":{"start":{"line":600,"column":0},"end":{"line":600,"column":68}},"600":{"start":{"line":601,"column":0},"end":{"line":601,"column":21}},"601":{"start":{"line":602,"column":0},"end":{"line":602,"column":29}},"602":{"start":{"line":603,"column":0},"end":{"line":603,"column":46}},"603":{"start":{"line":604,"column":0},"end":{"line":604,"column":7}},"604":{"start":{"line":605,"column":0},"end":{"line":605,"column":71}},"605":{"start":{"line":606,"column":0},"end":{"line":606,"column":53}},"606":{"start":{"line":607,"column":0},"end":{"line":607,"column":3}},"607":{"start":{"line":608,"column":0},"end":{"line":608,"column":1}}},"s":{"12":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"43":16,"44":16,"45":16,"46":16,"47":16,"48":4,"49":4,"50":16,"299":1,"300":1,"301":20,"302":20,"303":20,"304":1,"306":1,"307":1,"308":94,"310":1,"311":94,"316":94,"317":94,"319":1,"320":313,"321":313,"322":313,"323":313,"324":313,"325":300,"326":313,"339":1,"340":15,"341":15,"342":75,"343":75,"344":75,"345":75,"346":75,"347":75,"348":75,"349":8,"350":8,"352":75,"353":8,"354":8,"356":75,"357":75,"358":5,"359":5,"360":15,"361":15,"362":15,"363":15,"365":1,"366":12,"367":12,"369":1,"370":15,"371":15,"373":1,"374":16,"375":16,"377":16,"378":16,"379":16,"380":16,"381":16,"383":1,"384":5,"385":5,"388":1,"389":25,"390":25,"391":25,"392":25,"393":25,"394":25,"395":25,"396":20,"397":20,"399":5,"400":25,"402":1,"403":4,"404":4,"406":1,"407":1,"408":1,"410":1,"411":1,"412":1,"414":1,"415":2,"416":2,"423":1,"424":1,"425":1,"427":1,"428":23,"429":23,"438":1,"439":24,"440":24,"441":24,"442":24,"443":24,"446":1,"447":15,"448":15,"449":15,"450":15,"451":15,"452":15,"453":15,"455":1,"456":4,"457":4,"459":1,"461":1,"462":1,"468":1,"469":2,"470":2,"471":2,"472":2,"473":2,"474":2,"475":2,"476":2,"477":2,"478":2,"479":1,"480":2,"482":1,"483":15,"484":15,"486":1,"487":25,"488":25,"489":25,"490":25,"491":25,"493":1,"494":20,"495":20,"498":1,"499":20,"500":20,"501":20,"502":20,"504":1,"505":20,"506":20,"507":20,"508":20,"510":1,"511":4,"512":4,"514":1,"515":1,"516":1,"518":1,"520":1,"521":1,"523":1,"524":1,"525":1,"527":1,"528":13,"529":13,"531":1,"532":15,"533":15,"534":15,"535":15,"536":15,"537":15,"539":1,"540":7,"541":7,"544":1,"545":2,"546":2,"548":1,"549":2,"550":2,"552":1,"553":21,"554":21,"557":1,"558":14,"559":14,"560":14,"561":14,"562":14,"563":14,"564":14,"565":13,"566":14,"568":1,"569":22,"570":22,"571":22,"573":1,"574":21,"575":21,"577":1,"579":1,"580":1,"582":1,"583":2,"584":2,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"597":1,"598":4,"599":4,"600":4,"601":4,"602":4,"603":4,"604":4,"605":3,"606":4,"607":1},"branchMap":{"0":{"type":"branch","line":44,"loc":{"start":{"line":44,"column":0},"end":{"line":51,"column":1}},"locations":[{"start":{"line":44,"column":0},"end":{"line":51,"column":1}}]},"1":{"type":"branch","line":46,"loc":{"start":{"line":46,"column":46},"end":{"line":47,"column":27}},"locations":[{"start":{"line":46,"column":46},"end":{"line":47,"column":27}}]},"2":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":16},"end":{"line":47,"column":42}},"locations":[{"start":{"line":47,"column":16},"end":{"line":47,"column":42}}]},"3":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":32},"end":{"line":47,"column":53}},"locations":[{"start":{"line":47,"column":32},"end":{"line":47,"column":53}}]},"4":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":2},"end":{"line":50,"column":3}},"locations":[{"start":{"line":48,"column":2},"end":{"line":50,"column":3}}]},"5":{"type":"branch","line":301,"loc":{"start":{"line":301,"column":2},"end":{"line":304,"column":3}},"locations":[{"start":{"line":301,"column":2},"end":{"line":304,"column":3}}]},"6":{"type":"branch","line":308,"loc":{"start":{"line":308,"column":19},"end":{"line":309,"column":41}},"locations":[{"start":{"line":308,"column":19},"end":{"line":309,"column":41}}]},"7":{"type":"branch","line":311,"loc":{"start":{"line":311,"column":2},"end":{"line":318,"column":3}},"locations":[{"start":{"line":311,"column":2},"end":{"line":318,"column":3}}]},"8":{"type":"branch","line":317,"loc":{"start":{"line":317,"column":27},"end":{"line":317,"column":87}},"locations":[{"start":{"line":317,"column":27},"end":{"line":317,"column":87}}]},"9":{"type":"branch","line":317,"loc":{"start":{"line":317,"column":39},"end":{"line":317,"column":87}},"locations":[{"start":{"line":317,"column":39},"end":{"line":317,"column":87}}]},"10":{"type":"branch","line":320,"loc":{"start":{"line":320,"column":2},"end":{"line":327,"column":3}},"locations":[{"start":{"line":320,"column":2},"end":{"line":327,"column":3}}]},"11":{"type":"branch","line":325,"loc":{"start":{"line":325,"column":22},"end":{"line":325,"column":71}},"locations":[{"start":{"line":325,"column":22},"end":{"line":325,"column":71}}]},"12":{"type":"branch","line":325,"loc":{"start":{"line":325,"column":69},"end":{"line":326,"column":40}},"locations":[{"start":{"line":325,"column":69},"end":{"line":326,"column":40}}]},"13":{"type":"branch","line":340,"loc":{"start":{"line":340,"column":2},"end":{"line":364,"column":3}},"locations":[{"start":{"line":340,"column":2},"end":{"line":364,"column":3}}]},"14":{"type":"branch","line":342,"loc":{"start":{"line":342,"column":18},"end":{"line":361,"column":7}},"locations":[{"start":{"line":342,"column":18},"end":{"line":361,"column":7}}]},"15":{"type":"branch","line":347,"loc":{"start":{"line":347,"column":11},"end":{"line":348,"column":46}},"locations":[{"start":{"line":347,"column":11},"end":{"line":348,"column":46}}]},"16":{"type":"branch","line":348,"loc":{"start":{"line":348,"column":39},"end":{"line":348,"column":98}},"locations":[{"start":{"line":348,"column":39},"end":{"line":348,"column":98}}]},"17":{"type":"branch","line":348,"loc":{"start":{"line":348,"column":87},"end":{"line":349,"column":66}},"locations":[{"start":{"line":348,"column":87},"end":{"line":349,"column":66}}]},"18":{"type":"branch","line":348,"loc":{"start":{"line":348,"column":87},"end":{"line":349,"column":41}},"locations":[{"start":{"line":348,"column":87},"end":{"line":349,"column":41}}]},"19":{"type":"branch","line":349,"loc":{"start":{"line":349,"column":34},"end":{"line":349,"column":66}},"locations":[{"start":{"line":349,"column":34},"end":{"line":349,"column":66}}]},"20":{"type":"branch","line":349,"loc":{"start":{"line":349,"column":66},"end":{"line":351,"column":11}},"locations":[{"start":{"line":349,"column":66},"end":{"line":351,"column":11}}]},"21":{"type":"branch","line":351,"loc":{"start":{"line":351,"column":10},"end":{"line":353,"column":39}},"locations":[{"start":{"line":351,"column":10},"end":{"line":353,"column":39}}]},"22":{"type":"branch","line":353,"loc":{"start":{"line":353,"column":39},"end":{"line":357,"column":60}},"locations":[{"start":{"line":353,"column":39},"end":{"line":357,"column":60}}]},"23":{"type":"branch","line":353,"loc":{"start":{"line":353,"column":39},"end":{"line":355,"column":11}},"locations":[{"start":{"line":353,"column":39},"end":{"line":355,"column":11}}]},"24":{"type":"branch","line":355,"loc":{"start":{"line":355,"column":10},"end":{"line":357,"column":60}},"locations":[{"start":{"line":355,"column":10},"end":{"line":357,"column":60}}]},"25":{"type":"branch","line":357,"loc":{"start":{"line":357,"column":48},"end":{"line":357,"column":69}},"locations":[{"start":{"line":357,"column":48},"end":{"line":357,"column":69}}]},"26":{"type":"branch","line":358,"loc":{"start":{"line":358,"column":8},"end":{"line":360,"column":9}},"locations":[{"start":{"line":358,"column":8},"end":{"line":360,"column":9}}]},"27":{"type":"branch","line":366,"loc":{"start":{"line":366,"column":2},"end":{"line":368,"column":3}},"locations":[{"start":{"line":366,"column":2},"end":{"line":368,"column":3}}]},"28":{"type":"branch","line":370,"loc":{"start":{"line":370,"column":2},"end":{"line":372,"column":3}},"locations":[{"start":{"line":370,"column":2},"end":{"line":372,"column":3}}]},"29":{"type":"branch","line":374,"loc":{"start":{"line":374,"column":2},"end":{"line":382,"column":3}},"locations":[{"start":{"line":374,"column":2},"end":{"line":382,"column":3}}]},"30":{"type":"branch","line":376,"loc":{"start":{"line":376,"column":21},"end":{"line":376,"column":51}},"locations":[{"start":{"line":376,"column":21},"end":{"line":376,"column":51}}]},"31":{"type":"branch","line":378,"loc":{"start":{"line":378,"column":63},"end":{"line":378,"column":73}},"locations":[{"start":{"line":378,"column":63},"end":{"line":378,"column":73}}]},"32":{"type":"branch","line":384,"loc":{"start":{"line":384,"column":2},"end":{"line":386,"column":3}},"locations":[{"start":{"line":384,"column":2},"end":{"line":386,"column":3}}]},"33":{"type":"branch","line":389,"loc":{"start":{"line":389,"column":2},"end":{"line":401,"column":3}},"locations":[{"start":{"line":389,"column":2},"end":{"line":401,"column":3}}]},"34":{"type":"branch","line":393,"loc":{"start":{"line":393,"column":24},"end":{"line":393,"column":69}},"locations":[{"start":{"line":393,"column":24},"end":{"line":393,"column":69}}]},"35":{"type":"branch","line":393,"loc":{"start":{"line":393,"column":65},"end":{"line":393,"column":136}},"locations":[{"start":{"line":393,"column":65},"end":{"line":393,"column":136}}]},"36":{"type":"branch","line":394,"loc":{"start":{"line":394,"column":21},"end":{"line":394,"column":45}},"locations":[{"start":{"line":394,"column":21},"end":{"line":394,"column":45}}]},"37":{"type":"branch","line":394,"loc":{"start":{"line":394,"column":33},"end":{"line":394,"column":66}},"locations":[{"start":{"line":394,"column":33},"end":{"line":394,"column":66}}]},"38":{"type":"branch","line":396,"loc":{"start":{"line":396,"column":28},"end":{"line":396,"column":60}},"locations":[{"start":{"line":396,"column":28},"end":{"line":396,"column":60}}]},"39":{"type":"branch","line":396,"loc":{"start":{"line":396,"column":60},"end":{"line":398,"column":5}},"locations":[{"start":{"line":396,"column":60},"end":{"line":398,"column":5}}]},"40":{"type":"branch","line":398,"loc":{"start":{"line":398,"column":4},"end":{"line":400,"column":53}},"locations":[{"start":{"line":398,"column":4},"end":{"line":400,"column":53}}]},"41":{"type":"branch","line":403,"loc":{"start":{"line":403,"column":2},"end":{"line":405,"column":3}},"locations":[{"start":{"line":403,"column":2},"end":{"line":405,"column":3}}]},"42":{"type":"branch","line":407,"loc":{"start":{"line":407,"column":2},"end":{"line":409,"column":3}},"locations":[{"start":{"line":407,"column":2},"end":{"line":409,"column":3}}]},"43":{"type":"branch","line":411,"loc":{"start":{"line":411,"column":2},"end":{"line":413,"column":3}},"locations":[{"start":{"line":411,"column":2},"end":{"line":413,"column":3}}]},"44":{"type":"branch","line":415,"loc":{"start":{"line":415,"column":2},"end":{"line":417,"column":3}},"locations":[{"start":{"line":415,"column":2},"end":{"line":417,"column":3}}]},"45":{"type":"branch","line":424,"loc":{"start":{"line":424,"column":2},"end":{"line":426,"column":3}},"locations":[{"start":{"line":424,"column":2},"end":{"line":426,"column":3}}]},"46":{"type":"branch","line":428,"loc":{"start":{"line":428,"column":2},"end":{"line":430,"column":3}},"locations":[{"start":{"line":428,"column":2},"end":{"line":430,"column":3}}]},"47":{"type":"branch","line":439,"loc":{"start":{"line":439,"column":2},"end":{"line":444,"column":3}},"locations":[{"start":{"line":439,"column":2},"end":{"line":444,"column":3}}]},"48":{"type":"branch","line":441,"loc":{"start":{"line":441,"column":23},"end":{"line":441,"column":57}},"locations":[{"start":{"line":441,"column":23},"end":{"line":441,"column":57}}]},"49":{"type":"branch","line":442,"loc":{"start":{"line":442,"column":63},"end":{"line":442,"column":73}},"locations":[{"start":{"line":442,"column":63},"end":{"line":442,"column":73}}]},"50":{"type":"branch","line":447,"loc":{"start":{"line":447,"column":2},"end":{"line":454,"column":3}},"locations":[{"start":{"line":447,"column":2},"end":{"line":454,"column":3}}]},"51":{"type":"branch","line":449,"loc":{"start":{"line":449,"column":41},"end":{"line":449,"column":54}},"locations":[{"start":{"line":449,"column":41},"end":{"line":449,"column":54}}]},"52":{"type":"branch","line":450,"loc":{"start":{"line":450,"column":63},"end":{"line":450,"column":74}},"locations":[{"start":{"line":450,"column":63},"end":{"line":450,"column":74}}]},"53":{"type":"branch","line":456,"loc":{"start":{"line":456,"column":2},"end":{"line":458,"column":3}},"locations":[{"start":{"line":456,"column":2},"end":{"line":458,"column":3}}]},"54":{"type":"branch","line":460,"loc":{"start":{"line":460,"column":2},"end":{"line":463,"column":3}},"locations":[{"start":{"line":460,"column":2},"end":{"line":463,"column":3}}]},"55":{"type":"branch","line":469,"loc":{"start":{"line":469,"column":2},"end":{"line":481,"column":3}},"locations":[{"start":{"line":469,"column":2},"end":{"line":481,"column":3}}]},"56":{"type":"branch","line":471,"loc":{"start":{"line":471,"column":16},"end":{"line":471,"column":44}},"locations":[{"start":{"line":471,"column":16},"end":{"line":471,"column":44}}]},"57":{"type":"branch","line":479,"loc":{"start":{"line":479,"column":22},"end":{"line":480,"column":52}},"locations":[{"start":{"line":479,"column":22},"end":{"line":480,"column":52}}]},"58":{"type":"branch","line":483,"loc":{"start":{"line":483,"column":2},"end":{"line":485,"column":3}},"locations":[{"start":{"line":483,"column":2},"end":{"line":485,"column":3}}]},"59":{"type":"branch","line":487,"loc":{"start":{"line":487,"column":2},"end":{"line":492,"column":3}},"locations":[{"start":{"line":487,"column":2},"end":{"line":492,"column":3}}]},"60":{"type":"branch","line":489,"loc":{"start":{"line":489,"column":23},"end":{"line":489,"column":57}},"locations":[{"start":{"line":489,"column":23},"end":{"line":489,"column":57}}]},"61":{"type":"branch","line":490,"loc":{"start":{"line":490,"column":63},"end":{"line":490,"column":73}},"locations":[{"start":{"line":490,"column":63},"end":{"line":490,"column":73}}]},"62":{"type":"branch","line":494,"loc":{"start":{"line":494,"column":2},"end":{"line":496,"column":3}},"locations":[{"start":{"line":494,"column":2},"end":{"line":496,"column":3}}]},"63":{"type":"branch","line":499,"loc":{"start":{"line":499,"column":2},"end":{"line":503,"column":3}},"locations":[{"start":{"line":499,"column":2},"end":{"line":503,"column":3}}]},"64":{"type":"branch","line":505,"loc":{"start":{"line":505,"column":2},"end":{"line":509,"column":3}},"locations":[{"start":{"line":505,"column":2},"end":{"line":509,"column":3}}]},"65":{"type":"branch","line":511,"loc":{"start":{"line":511,"column":2},"end":{"line":513,"column":3}},"locations":[{"start":{"line":511,"column":2},"end":{"line":513,"column":3}}]},"66":{"type":"branch","line":515,"loc":{"start":{"line":515,"column":2},"end":{"line":517,"column":3}},"locations":[{"start":{"line":515,"column":2},"end":{"line":517,"column":3}}]},"67":{"type":"branch","line":519,"loc":{"start":{"line":519,"column":2},"end":{"line":522,"column":3}},"locations":[{"start":{"line":519,"column":2},"end":{"line":522,"column":3}}]},"68":{"type":"branch","line":524,"loc":{"start":{"line":524,"column":2},"end":{"line":526,"column":3}},"locations":[{"start":{"line":524,"column":2},"end":{"line":526,"column":3}}]},"69":{"type":"branch","line":528,"loc":{"start":{"line":528,"column":2},"end":{"line":530,"column":3}},"locations":[{"start":{"line":528,"column":2},"end":{"line":530,"column":3}}]},"70":{"type":"branch","line":532,"loc":{"start":{"line":532,"column":2},"end":{"line":538,"column":3}},"locations":[{"start":{"line":532,"column":2},"end":{"line":538,"column":3}}]},"71":{"type":"branch","line":534,"loc":{"start":{"line":534,"column":23},"end":{"line":534,"column":57}},"locations":[{"start":{"line":534,"column":23},"end":{"line":534,"column":57}}]},"72":{"type":"branch","line":535,"loc":{"start":{"line":535,"column":26},"end":{"line":535,"column":66}},"locations":[{"start":{"line":535,"column":26},"end":{"line":535,"column":66}}]},"73":{"type":"branch","line":536,"loc":{"start":{"line":536,"column":63},"end":{"line":536,"column":73}},"locations":[{"start":{"line":536,"column":63},"end":{"line":536,"column":73}}]},"74":{"type":"branch","line":540,"loc":{"start":{"line":540,"column":2},"end":{"line":542,"column":3}},"locations":[{"start":{"line":540,"column":2},"end":{"line":542,"column":3}}]},"75":{"type":"branch","line":545,"loc":{"start":{"line":545,"column":2},"end":{"line":547,"column":3}},"locations":[{"start":{"line":545,"column":2},"end":{"line":547,"column":3}}]},"76":{"type":"branch","line":549,"loc":{"start":{"line":549,"column":2},"end":{"line":551,"column":3}},"locations":[{"start":{"line":549,"column":2},"end":{"line":551,"column":3}}]},"77":{"type":"branch","line":553,"loc":{"start":{"line":553,"column":2},"end":{"line":555,"column":3}},"locations":[{"start":{"line":553,"column":2},"end":{"line":555,"column":3}}]},"78":{"type":"branch","line":558,"loc":{"start":{"line":558,"column":2},"end":{"line":567,"column":3}},"locations":[{"start":{"line":558,"column":2},"end":{"line":567,"column":3}}]},"79":{"type":"branch","line":564,"loc":{"start":{"line":564,"column":33},"end":{"line":564,"column":94}},"locations":[{"start":{"line":564,"column":33},"end":{"line":564,"column":94}}]},"80":{"type":"branch","line":564,"loc":{"start":{"line":564,"column":40},"end":{"line":565,"column":28}},"locations":[{"start":{"line":564,"column":40},"end":{"line":565,"column":28}}]},"81":{"type":"branch","line":565,"loc":{"start":{"line":565,"column":22},"end":{"line":565,"column":71}},"locations":[{"start":{"line":565,"column":22},"end":{"line":565,"column":71}}]},"82":{"type":"branch","line":565,"loc":{"start":{"line":565,"column":69},"end":{"line":566,"column":51}},"locations":[{"start":{"line":565,"column":69},"end":{"line":566,"column":51}}]},"83":{"type":"branch","line":569,"loc":{"start":{"line":569,"column":2},"end":{"line":572,"column":3}},"locations":[{"start":{"line":569,"column":2},"end":{"line":572,"column":3}}]},"84":{"type":"branch","line":574,"loc":{"start":{"line":574,"column":2},"end":{"line":576,"column":3}},"locations":[{"start":{"line":574,"column":2},"end":{"line":576,"column":3}}]},"85":{"type":"branch","line":578,"loc":{"start":{"line":578,"column":2},"end":{"line":581,"column":3}},"locations":[{"start":{"line":578,"column":2},"end":{"line":581,"column":3}}]},"86":{"type":"branch","line":583,"loc":{"start":{"line":583,"column":2},"end":{"line":585,"column":3}},"locations":[{"start":{"line":583,"column":2},"end":{"line":585,"column":3}}]},"87":{"type":"branch","line":587,"loc":{"start":{"line":587,"column":2},"end":{"line":592,"column":3}},"locations":[{"start":{"line":587,"column":2},"end":{"line":592,"column":3}}]},"88":{"type":"branch","line":598,"loc":{"start":{"line":598,"column":2},"end":{"line":607,"column":3}},"locations":[{"start":{"line":598,"column":2},"end":{"line":607,"column":3}}]},"89":{"type":"branch","line":605,"loc":{"start":{"line":605,"column":22},"end":{"line":605,"column":71}},"locations":[{"start":{"line":605,"column":22},"end":{"line":605,"column":71}}]},"90":{"type":"branch","line":605,"loc":{"start":{"line":605,"column":69},"end":{"line":606,"column":53}},"locations":[{"start":{"line":605,"column":69},"end":{"line":606,"column":53}}]}},"b":{"0":[16],"1":[12],"2":[6],"3":[6],"4":[4],"5":[20],"6":[94],"7":[94],"8":[0],"9":[0],"10":[313],"11":[13],"12":[300],"13":[15],"14":[75],"15":[70],"16":[44],"17":[43],"18":[26],"19":[25],"20":[8],"21":[18],"22":[53],"23":[8],"24":[10],"25":[0],"26":[5],"27":[12],"28":[15],"29":[16],"30":[0],"31":[0],"32":[5],"33":[25],"34":[9],"35":[16],"36":[9],"37":[16],"38":[10],"39":[20],"40":[5],"41":[4],"42":[1],"43":[1],"44":[2],"45":[1],"46":[23],"47":[24],"48":[1],"49":[0],"50":[15],"51":[0],"52":[0],"53":[4],"54":[1],"55":[2],"56":[0],"57":[1],"58":[15],"59":[25],"60":[1],"61":[0],"62":[20],"63":[20],"64":[20],"65":[4],"66":[1],"67":[1],"68":[1],"69":[13],"70":[15],"71":[2],"72":[1],"73":[0],"74":[7],"75":[2],"76":[2],"77":[21],"78":[14],"79":[1],"80":[13],"81":[0],"82":[13],"83":[22],"84":[21],"85":[1],"86":[2],"87":[1],"88":[4],"89":[1],"90":[3]},"fnMap":{"0":{"name":"refusalMessage","decl":{"start":{"line":44,"column":0},"end":{"line":51,"column":1}},"loc":{"start":{"line":44,"column":0},"end":{"line":51,"column":1}},"line":44},"1":{"name":"AdminHttpError","decl":{"start":{"line":301,"column":2},"end":{"line":304,"column":3}},"loc":{"start":{"line":301,"column":2},"end":{"line":304,"column":3}},"line":301},"2":{"name":"","decl":{"start":{"line":308,"column":19},"end":{"line":309,"column":41}},"loc":{"start":{"line":308,"column":19},"end":{"line":309,"column":41}},"line":308},"3":{"name":"AdminClient","decl":{"start":{"line":311,"column":2},"end":{"line":318,"column":3}},"loc":{"start":{"line":311,"column":2},"end":{"line":318,"column":3}},"line":311},"4":{"name":"get","decl":{"start":{"line":320,"column":2},"end":{"line":327,"column":3}},"loc":{"start":{"line":320,"column":2},"end":{"line":327,"column":3}},"line":320},"5":{"name":"discoverCapabilities","decl":{"start":{"line":340,"column":2},"end":{"line":364,"column":3}},"loc":{"start":{"line":340,"column":2},"end":{"line":364,"column":3}},"line":340},"6":{"name":"fleets","decl":{"start":{"line":366,"column":2},"end":{"line":368,"column":3}},"loc":{"start":{"line":366,"column":2},"end":{"line":368,"column":3}},"line":366},"7":{"name":"jobs","decl":{"start":{"line":370,"column":2},"end":{"line":372,"column":3}},"loc":{"start":{"line":370,"column":2},"end":{"line":372,"column":3}},"line":370},"8":{"name":"runs","decl":{"start":{"line":374,"column":2},"end":{"line":382,"column":3}},"loc":{"start":{"line":374,"column":2},"end":{"line":382,"column":3}},"line":374},"9":{"name":"run","decl":{"start":{"line":384,"column":2},"end":{"line":386,"column":3}},"loc":{"start":{"line":384,"column":2},"end":{"line":386,"column":3}},"line":384},"10":{"name":"verb","decl":{"start":{"line":389,"column":2},"end":{"line":401,"column":3}},"loc":{"start":{"line":389,"column":2},"end":{"line":401,"column":3}},"line":389},"11":{"name":"triggerJob","decl":{"start":{"line":403,"column":2},"end":{"line":405,"column":3}},"loc":{"start":{"line":403,"column":2},"end":{"line":405,"column":3}},"line":403},"12":{"name":"pauseJob","decl":{"start":{"line":407,"column":2},"end":{"line":409,"column":3}},"loc":{"start":{"line":407,"column":2},"end":{"line":409,"column":3}},"line":407},"13":{"name":"resumeJob","decl":{"start":{"line":411,"column":2},"end":{"line":413,"column":3}},"loc":{"start":{"line":411,"column":2},"end":{"line":413,"column":3}},"line":411},"14":{"name":"rerun","decl":{"start":{"line":415,"column":2},"end":{"line":417,"column":3}},"loc":{"start":{"line":415,"column":2},"end":{"line":417,"column":3}},"line":415},"15":{"name":"replayItems","decl":{"start":{"line":424,"column":2},"end":{"line":426,"column":3}},"loc":{"start":{"line":424,"column":2},"end":{"line":426,"column":3}},"line":424},"16":{"name":"bulkDefinitions","decl":{"start":{"line":428,"column":2},"end":{"line":430,"column":3}},"loc":{"start":{"line":428,"column":2},"end":{"line":430,"column":3}},"line":428},"17":{"name":"bulkBatches","decl":{"start":{"line":439,"column":2},"end":{"line":444,"column":3}},"loc":{"start":{"line":439,"column":2},"end":{"line":444,"column":3}},"line":439},"18":{"name":"bulkErrors","decl":{"start":{"line":447,"column":2},"end":{"line":454,"column":3}},"loc":{"start":{"line":447,"column":2},"end":{"line":454,"column":3}},"line":447},"19":{"name":"approveBatch","decl":{"start":{"line":456,"column":2},"end":{"line":458,"column":3}},"loc":{"start":{"line":456,"column":2},"end":{"line":458,"column":3}},"line":456},"20":{"name":"rejectBatch","decl":{"start":{"line":460,"column":2},"end":{"line":463,"column":3}},"loc":{"start":{"line":460,"column":2},"end":{"line":463,"column":3}},"line":460},"21":{"name":"uploadBatch","decl":{"start":{"line":469,"column":2},"end":{"line":481,"column":3}},"loc":{"start":{"line":469,"column":2},"end":{"line":481,"column":3}},"line":469},"22":{"name":"batch","decl":{"start":{"line":483,"column":2},"end":{"line":485,"column":3}},"loc":{"start":{"line":483,"column":2},"end":{"line":485,"column":3}},"line":483},"23":{"name":"campaigns","decl":{"start":{"line":487,"column":2},"end":{"line":492,"column":3}},"loc":{"start":{"line":487,"column":2},"end":{"line":492,"column":3}},"line":487},"24":{"name":"campaign","decl":{"start":{"line":494,"column":2},"end":{"line":496,"column":3}},"loc":{"start":{"line":494,"column":2},"end":{"line":496,"column":3}},"line":494},"25":{"name":"campaignFailures","decl":{"start":{"line":499,"column":2},"end":{"line":503,"column":3}},"loc":{"start":{"line":499,"column":2},"end":{"line":503,"column":3}},"line":499},"26":{"name":"campaignAudit","decl":{"start":{"line":505,"column":2},"end":{"line":509,"column":3}},"loc":{"start":{"line":505,"column":2},"end":{"line":509,"column":3}},"line":505},"27":{"name":"pauseCampaign","decl":{"start":{"line":511,"column":2},"end":{"line":513,"column":3}},"loc":{"start":{"line":511,"column":2},"end":{"line":513,"column":3}},"line":511},"28":{"name":"resumeCampaign","decl":{"start":{"line":515,"column":2},"end":{"line":517,"column":3}},"loc":{"start":{"line":515,"column":2},"end":{"line":517,"column":3}},"line":515},"29":{"name":"abortCampaign","decl":{"start":{"line":519,"column":2},"end":{"line":522,"column":3}},"loc":{"start":{"line":519,"column":2},"end":{"line":522,"column":3}},"line":519},"30":{"name":"throttleCampaign","decl":{"start":{"line":524,"column":2},"end":{"line":526,"column":3}},"loc":{"start":{"line":524,"column":2},"end":{"line":526,"column":3}},"line":524},"31":{"name":"notificationTemplates","decl":{"start":{"line":528,"column":2},"end":{"line":530,"column":3}},"loc":{"start":{"line":528,"column":2},"end":{"line":530,"column":3}},"line":528},"32":{"name":"notifications","decl":{"start":{"line":532,"column":2},"end":{"line":538,"column":3}},"loc":{"start":{"line":532,"column":2},"end":{"line":538,"column":3}},"line":532},"33":{"name":"notification","decl":{"start":{"line":540,"column":2},"end":{"line":542,"column":3}},"loc":{"start":{"line":540,"column":2},"end":{"line":542,"column":3}},"line":540},"34":{"name":"notificationSuppressions","decl":{"start":{"line":545,"column":2},"end":{"line":547,"column":3}},"loc":{"start":{"line":545,"column":2},"end":{"line":547,"column":3}},"line":545},"35":{"name":"notificationFailures","decl":{"start":{"line":549,"column":2},"end":{"line":551,"column":3}},"loc":{"start":{"line":549,"column":2},"end":{"line":551,"column":3}},"line":549},"36":{"name":"archiveDefinitions","decl":{"start":{"line":553,"column":2},"end":{"line":555,"column":3}},"loc":{"start":{"line":553,"column":2},"end":{"line":555,"column":3}},"line":553},"37":{"name":"archiveEntry","decl":{"start":{"line":558,"column":2},"end":{"line":567,"column":3}},"loc":{"start":{"line":558,"column":2},"end":{"line":567,"column":3}},"line":558},"38":{"name":"holds","decl":{"start":{"line":569,"column":2},"end":{"line":572,"column":3}},"loc":{"start":{"line":569,"column":2},"end":{"line":572,"column":3}},"line":569},"39":{"name":"erasures","decl":{"start":{"line":574,"column":2},"end":{"line":576,"column":3}},"loc":{"start":{"line":574,"column":2},"end":{"line":576,"column":3}},"line":574},"40":{"name":"placeHold","decl":{"start":{"line":578,"column":2},"end":{"line":581,"column":3}},"loc":{"start":{"line":578,"column":2},"end":{"line":581,"column":3}},"line":578},"41":{"name":"liftHold","decl":{"start":{"line":583,"column":2},"end":{"line":585,"column":3}},"loc":{"start":{"line":583,"column":2},"end":{"line":585,"column":3}},"line":583},"42":{"name":"erase","decl":{"start":{"line":587,"column":2},"end":{"line":592,"column":3}},"loc":{"start":{"line":587,"column":2},"end":{"line":592,"column":3}},"line":587},"43":{"name":"verifyChain","decl":{"start":{"line":598,"column":2},"end":{"line":607,"column":3}},"loc":{"start":{"line":598,"column":2},"end":{"line":607,"column":3}},"line":598}},"f":{"0":16,"1":20,"2":94,"3":94,"4":313,"5":15,"6":12,"7":15,"8":16,"9":5,"10":25,"11":4,"12":1,"13":1,"14":2,"15":1,"16":23,"17":24,"18":15,"19":4,"20":1,"21":2,"22":15,"23":25,"24":20,"25":20,"26":20,"27":4,"28":1,"29":1,"30":1,"31":13,"32":15,"33":7,"34":2,"35":2,"36":21,"37":14,"38":22,"39":21,"40":1,"41":2,"42":1,"43":4}} +} diff --git a/ui/console/coverage/favicon.png b/ui/console/coverage/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c1525b811a167671e9de1fa78aab9f5c0b61cef7 GIT binary patch literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 99.94% + Statements + 1676/1677 +
+ + +
+ 88.17% + Branches + 477/541 +
+ + +
+ 88.96% + Functions + 137/154 +
+ + +
+ 99.94% + Lines + 1676/1677 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
ArchivalPanel.tsx +
+
100%308/30889.88%80/8977.77%21/27100%308/308
BulkPanel.tsx +
+
100%279/27986.17%81/9495.23%20/21100%279/279
CampaignPanel.tsx +
+
100%361/36183.5%81/9782.75%24/29100%361/361
Console.tsx +
+
100%61/6194.59%35/3733.33%1/3100%61/61
NotificationPanel.tsx +
+
99.59%245/24690.78%69/7692.85%13/1499.59%245/246
RunConsole.tsx +
+
100%186/18691.22%52/5787.5%14/16100%186/186
adminClient.ts +
+
100%236/23686.81%79/91100%44/44100%236/236
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/console/coverage/prettify.css b/ui/console/coverage/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/ui/console/coverage/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/ui/console/coverage/prettify.js b/ui/console/coverage/prettify.js new file mode 100644 index 0000000..b322523 --- /dev/null +++ b/ui/console/coverage/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/ui/console/coverage/sort-arrow-sprite.png b/ui/console/coverage/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed68316eb3f65dec9063332d2f69bf3093bbfab GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc literal 0 HcmV?d00001 diff --git a/ui/console/coverage/sorter.js b/ui/console/coverage/sorter.js new file mode 100644 index 0000000..4ed70ae --- /dev/null +++ b/ui/console/coverage/sorter.js @@ -0,0 +1,210 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + + // Try to create a RegExp from the searchValue. If it fails (invalid regex), + // it will be treated as a plain text search + let searchRegex; + try { + searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive + } catch (error) { + searchRegex = null; + } + + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + let isMatch = false; + + if (searchRegex) { + // If a valid regex was created, use it for matching + isMatch = searchRegex.test(row.textContent); + } else { + // Otherwise, fall back to the original plain text search + isMatch = row.textContent + .toLowerCase() + .includes(searchValue.toLowerCase()); + } + + row.style.display = isMatch ? '' : 'none'; + } + } + + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/ui/console/package.json b/ui/console/package.json index d53b1c4..8d6ccb6 100644 --- a/ui/console/package.json +++ b/ui/console/package.json @@ -6,7 +6,7 @@ "type": "module", "main": "src/index.ts", "scripts": { - "test": "vitest run", + "test": "vitest run --coverage --coverage.thresholds.statements=97 --coverage.thresholds.branches=85 --coverage.thresholds.functions=75 --coverage.thresholds.lines=97", "typecheck": "tsc --noEmit", "dev": "vite", "e2e": "playwright test" @@ -16,21 +16,22 @@ "react-dom": "^19.0.0" }, "devDependencies": { + "@goldpath/kit": "link:../kit", + "@playwright/test": "1.50.1", + "@tailwindcss/vite": "^4.3.2", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@testing-library/user-event": "14.6.1", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", "@vitejs/plugin-react": "^4.3.4", + "@vitest/coverage-v8": "2.1.8", "jsdom": "^25.0.1", "react": "^19.0.0", "react-dom": "^19.0.0", + "tailwindcss": "^4.0.0", "typescript": "^5.7.0", "vite": "^8.1.4", - "vitest": "^2.1.8", - "@goldpath/kit": "link:../kit", - "@tailwindcss/vite": "^4.3.2", - "tailwindcss": "^4.0.0", - "@playwright/test": "1.50.1" + "vitest": "^2.1.8" } } diff --git a/ui/console/pnpm-lock.yaml b/ui/console/pnpm-lock.yaml index 61f1657..44fefb6 100644 --- a/ui/console/pnpm-lock.yaml +++ b/ui/console/pnpm-lock.yaml @@ -35,6 +35,9 @@ importers: '@vitejs/plugin-react': specifier: ^4.3.4 version: 4.7.0(vite@8.1.5(jiti@2.7.0)) + '@vitest/coverage-v8': + specifier: 2.1.8 + version: 2.1.8(vitest@2.1.9(jsdom@25.0.1)(lightningcss@1.33.0)) jsdom: specifier: ^25.0.1 version: 25.0.1 @@ -62,6 +65,10 @@ packages: '@adobe/css-tools@4.5.0': resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} @@ -152,6 +159,9 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@csstools/color-helpers@5.1.0': resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} engines: {node: '>=18'} @@ -327,6 +337,14 @@ packages: cpu: [x64] os: [win32] + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/schema@0.1.6': + resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} + engines: {node: '>=8'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -352,6 +370,10 @@ packages: '@oxc-project/types@0.139.0': resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@playwright/test@1.50.1': resolution: {integrity: sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==} engines: {node: '>=18'} @@ -757,6 +779,15 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@vitest/coverage-v8@2.1.8': + resolution: {integrity: sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==} + peerDependencies: + '@vitest/browser': 2.1.8 + vitest: 2.1.8 + peerDependenciesMeta: + '@vitest/browser': + optional: true + '@vitest/expect@2.1.9': resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} @@ -794,10 +825,22 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} @@ -812,11 +855,25 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + baseline-browser-mapping@2.11.3: resolution: {integrity: sha512-sbT0Ui/CZwyAyy7icT1Gw5P1LKRlFaHwaF6tDCW5YHq2X5SeeZFphBuIagopSfwSSZq3sQcbmEL072yphxm7ew==} engines: {node: '>=6.0.0'} hasBin: true + brace-expansion@2.1.2: + resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} + + brace-expansion@5.0.8: + resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==} + engines: {node: 20 || >=22} + browserslist@4.28.7: resolution: {integrity: sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -841,6 +898,13 @@ packages: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -848,6 +912,10 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -900,9 +968,18 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + electron-to-chromium@1.5.396: resolution: {integrity: sha512-yHiw2Y3C3H9U6TMbOfoWK/BPreiOPXRfTWPBwQBoZG6/8TB6eOPnsy5oaRYuatR7Fw2SJ4kKforgufeo7fq0EQ==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enhanced-resolve@5.24.3: resolution: {integrity: sha512-PwKooW9JUzh5chmYfHM3IQl5OkK2u2Nm011MgeZrss3JmFraUx/fqrf78kk8GUMYoibx/14MdwTl/1WKkG7TpQ==} engines: {node: '>=10.13.0'} @@ -955,6 +1032,10 @@ packages: picomatch: optional: true + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + form-data@4.0.6: resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} engines: {node: '>= 6'} @@ -984,6 +1065,11 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -991,6 +1077,10 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -1007,6 +1097,9 @@ packages: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -1023,9 +1116,35 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true @@ -1216,6 +1335,13 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -1232,6 +1358,18 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1247,9 +1385,20 @@ packages: nwsapi@2.2.24: resolution: {integrity: sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -1336,9 +1485,26 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -1349,10 +1515,30 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -1363,6 +1549,10 @@ packages: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} + test-exclude@7.0.2: + resolution: {integrity: sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==} + engines: {node: '>=18'} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -1539,11 +1729,24 @@ packages: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} hasBin: true + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + ws@8.21.1: resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} engines: {node: '>=10.0.0'} @@ -1570,6 +1773,11 @@ snapshots: '@adobe/css-tools@4.5.0': {} + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@asamuzakjp/css-color@3.2.0': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) @@ -1692,6 +1900,8 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 + '@bcoe/v8-coverage@0.2.3': {} + '@csstools/color-helpers@5.1.0': {} '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': @@ -1797,6 +2007,17 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.2.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/schema@0.1.6': {} + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -1825,6 +2046,9 @@ snapshots: '@oxc-project/types@0.139.0': {} + '@pkgjs/parseargs@0.11.0': + optional: true + '@playwright/test@1.50.1': dependencies: playwright: 1.50.1 @@ -2110,6 +2334,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/coverage-v8@2.1.8(vitest@2.1.9(jsdom@25.0.1)(lightningcss@1.33.0))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.4.3 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + magic-string: 0.30.21 + magicast: 0.3.5 + std-env: 3.10.0 + test-exclude: 7.0.2 + tinyrainbow: 1.2.0 + vitest: 2.1.9(jsdom@25.0.1)(lightningcss@1.33.0) + transitivePeerDependencies: + - supports-color + '@vitest/expect@2.1.9': dependencies: '@vitest/spy': 2.1.9 @@ -2154,8 +2396,16 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} + aria-query@5.3.0: dependencies: dequal: 2.0.3 @@ -2166,8 +2416,20 @@ snapshots: asynckit@0.4.0: {} + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + baseline-browser-mapping@2.11.3: {} + brace-expansion@2.1.2: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@5.0.8: + dependencies: + balanced-match: 4.0.4 + browserslist@4.28.7: dependencies: baseline-browser-mapping: 2.11.3 @@ -2195,12 +2457,24 @@ snapshots: check-error@2.1.3: {} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 convert-source-map@2.0.0: {} + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + css.escape@1.5.1: {} cssstyle@4.6.0: @@ -2239,8 +2513,14 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + eastasianwidth@0.2.0: {} + electron-to-chromium@1.5.396: {} + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + enhanced-resolve@5.24.3: dependencies: graceful-fs: 4.2.11 @@ -2303,6 +2583,11 @@ snapshots: optionalDependencies: picomatch: 4.0.5 + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + form-data@4.0.6: dependencies: asynckit: 0.4.0 @@ -2339,10 +2624,21 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.2 + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.9 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + gopd@1.2.0: {} graceful-fs@4.2.11: {} + has-flag@4.0.0: {} + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -2357,6 +2653,8 @@ snapshots: dependencies: whatwg-encoding: 3.1.1 + html-escaper@2.0.2: {} + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -2377,8 +2675,39 @@ snapshots: indent-string@4.0.0: {} + is-fullwidth-code-point@3.0.0: {} + is-potential-custom-element-name@1.0.1: {} + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + debug: 4.4.3 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jiti@2.7.0: {} js-tokens@4.0.0: {} @@ -2527,6 +2856,16 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.3.5: + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + source-map-js: 1.2.1 + + make-dir@4.0.0: + dependencies: + semver: 7.8.5 + math-intrinsics@1.1.0: {} mime-db@1.52.0: {} @@ -2537,6 +2876,16 @@ snapshots: min-indent@1.0.1: {} + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.8 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.2 + + minipass@7.1.3: {} + ms@2.1.3: {} nanoid@3.3.16: {} @@ -2545,10 +2894,19 @@ snapshots: nwsapi@2.2.24: {} + package-json-from-dist@1.0.1: {} + parse5@7.3.0: dependencies: entities: 6.0.1 + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.3 + pathe@1.1.2: {} pathval@2.0.1: {} @@ -2661,24 +3019,64 @@ snapshots: semver@6.3.1: {} + semver@7.8.5: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + siginfo@2.0.0: {} + signal-exit@4.1.0: {} + source-map-js@1.2.1: {} stackback@0.0.2: {} std-env@3.10.0: {} + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + symbol-tree@3.2.4: {} tailwindcss@4.3.3: {} tapable@2.3.3: {} + test-exclude@7.0.2: + dependencies: + '@istanbuljs/schema': 0.1.6 + glob: 10.5.0 + minimatch: 10.2.5 + tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -2809,11 +3207,27 @@ snapshots: tr46: 5.1.1 webidl-conversions: 7.0.0 + which@2.0.2: + dependencies: + isexe: 2.0.0 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + ws@8.21.1: {} xml-name-validator@5.0.0: {} diff --git a/ui/console/src/ArchivalPanel.test.tsx b/ui/console/src/ArchivalPanel.test.tsx index 08f8800..b200220 100644 --- a/ui/console/src/ArchivalPanel.test.tsx +++ b/ui/console/src/ArchivalPanel.test.tsx @@ -261,4 +261,45 @@ describe("the archival panel (chain health, retrieval, lifecycle)", () => { // The previous "verifies" verdict is GONE — an unknown chain must not read as a proven one. expect(screen.queryByTestId("chain-findings")).toBeNull(); }); + + it("a lifecycle verb that never reached the server is NOT reported as applied", async () => { + const { client: api } = client({ verb: { status: 503, body: {} } }); + render(); + + await retrieve(); + await userEvent.click(await screen.findByRole("button", { name: "lift-hold" })); + await userEvent.click(within(screen.getByRole("alertdialog")).getByRole("button", { name: "lift-hold" })); + + expect(await screen.findByText(/did not reach the server — it may not have been applied/)).toBeInTheDocument(); + }); + + it("switching archive clears the open entry — a key means nothing outside its archive", async () => { + const { client: api } = client({ + definitions: [ + { name: "policies", entries: 10, dueBacklog: 0, activeHolds: 0, chainHead: 10, purgedThrough: 0 }, + { name: "claims", entries: 4, dueBacklog: 0, activeHolds: 0, chainHead: 4, purgedThrough: 0 }, + ], + }); + render(); + + await retrieve(); + await screen.findByTestId("archive-entry"); + + await userEvent.selectOptions(screen.getByLabelText("archive"), "claims"); + + // The policies entry must not linger under the claims archive's name. + expect(screen.queryByTestId("archive-entry")).toBeNull(); + expect(screen.queryByText(/No entry for/)).toBeNull(); + }); + + it("a lifted hold shows who lifted it and when — the row stays as evidence", async () => { + const { client: api } = client({ + holds: [hold({ liftedBy: "legal@example.com", liftedAt: "2026-07-27T05:00:00Z" })], + }); + render(); + + const row = await screen.findByRole("row", { name: /CASE-2026-7/ }); + expect(row).toHaveTextContent("lifted by legal@example.com at 2026-07-27T05:00:00Z"); + expect(within(row).queryByText("Held")).toBeNull(); + }); }); diff --git a/ui/console/src/BulkPanel.test.tsx b/ui/console/src/BulkPanel.test.tsx index 8773478..546b950 100644 --- a/ui/console/src/BulkPanel.test.tsx +++ b/ui/console/src/BulkPanel.test.tsx @@ -259,4 +259,40 @@ describe("the bulk intake panel (upload → report → four-eyes gate)", () => { await waitFor(() => expect(screen.queryByRole("button", { name: "approve" })).toBeNull()); expect(screen.getByText("approved")).toBeInTheDocument(); }); + + it("a decision that never reached the server is NOT reported as recorded", async () => { + // The verb envelope never came back — 503 is neither an ok nor a refusal, and the + // operator must not walk away believing the gate moved. + const { client: api } = client({ verb: { status: 503, body: {} } }); + render(); + + await openBatch(); + await userEvent.click(await screen.findByRole("button", { name: "approve" })); + await userEvent.click(within(screen.getByRole("alertdialog")).getByRole("button", { name: "approve" })); + + expect(await screen.findByText(/did not reach the server — it may not have been recorded/)).toBeInTheDocument(); + }); + + it("a decided batch carries its evidence: who, when, and why", async () => { + const decided = batch({ + state: "Rejected", + decidedAt: "2026-07-27T10:00:00Z", + decidedBy: "ops@example.com", + decisionNote: "line 3 is malformed", + }); + const { client: api } = client({ batch: decided, batches: [decided] }); + render(); + + await openBatch(); + const detail = await screen.findByTestId("batch-detail"); + expect(detail).toHaveTextContent("Rejected by ops@example.com at 2026-07-27T10:00:00Z"); + expect(detail).toHaveTextContent("line 3 is malformed"); + }); + + it("a definition with nothing in it says so, instead of showing a bare name", async () => { + const { client: api } = client({ definitions: [definition({ batchesByState: {}, awaitingApproval: 0 })] }); + render(); + + expect(await screen.findByText("no batches yet")).toBeInTheDocument(); + }); }); diff --git a/ui/console/src/CampaignPanel.test.tsx b/ui/console/src/CampaignPanel.test.tsx index 8083696..f99fb5f 100644 --- a/ui/console/src/CampaignPanel.test.tsx +++ b/ui/console/src/CampaignPanel.test.tsx @@ -298,4 +298,26 @@ describe("the campaign governor panel", () => { await waitFor(() => expect(screen.getByTestId("campaign-detail").textContent).not.toBe(before)); }); + + it("a verb that never reached the server is NOT reported as applied", async () => { + const { client: api } = client({ verb: { status: 503, body: {} } }); + render(); + + await open(); + await userEvent.click(await screen.findByRole("button", { name: "pause" })); + await userEvent.click(within(screen.getByRole("alertdialog")).getByRole("button", { name: "pause" })); + + expect(await screen.findByText(/did not reach the server — it may not have been applied/)).toBeInTheDocument(); + }); + + it("a campaign with no window releases around the clock, and says exactly that", async () => { + const always = campaign({ windowStart: null, windowEnd: null, dailyQuota: null }); + const { client: api } = client({ detail: always, list: [always] }); + render(); + + await open(); + const detail = await screen.findByTestId("campaign-detail"); + expect(detail).toHaveTextContent("around the clock"); + expect(detail).toHaveTextContent("Daily quotanone"); + }); }); diff --git a/ui/console/src/NotificationPanel.test.tsx b/ui/console/src/NotificationPanel.test.tsx index 71d7934..2a48c41 100644 --- a/ui/console/src/NotificationPanel.test.tsx +++ b/ui/console/src/NotificationPanel.test.tsx @@ -44,6 +44,18 @@ function client(routes: Routes = {}) { const json = (body: unknown) => new Response(JSON.stringify(body), { status: 200, headers: { "content-type": "application/json" } }); + // The by-id route must be matched BEFORE the list route it is nested under. + if (/\/notifications\/[^/?]+$/.test(url)) { + const id = url.split("/").pop(); + const all = [ + notification(), + notification({ state: "Failed", id: "failed-1", attempts: 3, detail: "the relay refused: mailbox full", failedAt: "2026-07-27T06:02:00Z" }), + notification({ state: "Suppressed", id: "suppressed-1", detail: "suppressed by the MaySend hook — suppression is evidence too" }), + ...(Array.isArray(routes.list) ? (routes.list as NotificationInfo[]) : []), + ]; + return json(all.find((row) => row.id === id) ?? notification()); + } + if (url.includes("/failures")) return json(routes.failures ?? [notification({ state: "Failed", id: "failed-1", attempts: 3, detail: "the relay refused: mailbox full", failedAt: "2026-07-27T06:02:00Z" })]); if (url.includes("/suppressions")) return json(routes.suppressions ?? [notification({ state: "Suppressed", id: "suppressed-1", detail: "suppressed by the MaySend hook — suppression is evidence too" })]); if (url.includes("/notifications")) return json(routes.list ?? [notification()]); @@ -157,7 +169,7 @@ describe("the notification evidence panel (read-only by contract)", () => { }); it("says when the body was deleted — the retention promise, kept and recorded", async () => { - const { client: api } = client({ list: [notification({ bodyDeletedAt: "2026-10-25T00:00:00Z" })] }); + const { client: api } = client({ list: [notification({ id: "deleted-1", bodyDeletedAt: "2026-10-25T00:00:00Z" })] }); render(); await userEvent.click(await screen.findByRole("button", { name: "a***@e***" })); @@ -171,4 +183,26 @@ describe("the notification evidence panel (read-only by contract)", () => { // The table reports its own failure too — the panel-level banner is the first one. expect((await screen.findAllByRole("alert"))[0]).toHaveTextContent(/notification templates could not be loaded/i); }); + + it("tenant and correlation id appear when the row carries them — and never as empty labels", async () => { + const { client: api } = client({ + list: [notification({ id: "traced-1", tenant: "acme", correlationId: "0af7651916cd43dd8448eb211c80319c" })], + }); + render(); + + await userEvent.click(await screen.findByRole("button", { name: "a***@e***" })); + const detail = await screen.findByTestId("notification-detail"); + expect(detail).toHaveTextContent("acme"); + expect(detail).toHaveTextContent("0af7651916cd43dd8448eb211c80319c"); + }); + + it("a row WITHOUT them shows no tenant or correlation block at all", async () => { + const { client: api } = client(); + render(); + + await userEvent.click(await screen.findByRole("button", { name: "a***@e***" })); + const detail = await screen.findByTestId("notification-detail"); + expect(within(detail).queryByText("Tenant")).toBeNull(); + expect(within(detail).queryByText("Correlation")).toBeNull(); + }); }); diff --git a/ui/console/src/NotificationPanel.tsx b/ui/console/src/NotificationPanel.tsx index d124da8..215e498 100644 --- a/ui/console/src/NotificationPanel.tsx +++ b/ui/console/src/NotificationPanel.tsx @@ -45,6 +45,7 @@ export function NotificationPanel({ client }: NotificationPanelProps) { const [lens, setLens] = useState("all"); const [state, setState] = useState(""); const [template, setTemplate] = useState(""); + const [selectedId, setSelectedId] = useState(null); const [selected, setSelected] = useState(null); const [error, setError] = useState(null); const [refreshToken, setRefreshToken] = useState(0); @@ -77,6 +78,24 @@ export function NotificationPanel({ client }: NotificationPanelProps) { [client, lens, state, template, refreshToken], ); + // The open row RE-READS by id: a notification is evidence in MOTION (Requested → Sent + // or Failed), so a row captured minutes ago is not what the operator should judge. + useEffect(() => { + if (!selectedId) { + setSelected(null); + return; + } + + let live = true; + client + .notification(selectedId) + .then((found) => live && setSelected(found)) + .catch(() => live && setError(`notification ${selectedId} could not be read`)); + return () => { + live = false; + }; + }, [client, selectedId, refreshToken]); + const waiting = (templates ?? []).filter((entry) => (entry.oldestRequestedSeconds ?? 0) > 0); return ( @@ -127,7 +146,7 @@ export function NotificationPanel({ client }: NotificationPanelProps) { }`} onClick={() => { setLens(entry.key); - setSelected(null); + setSelectedId(null); }} > {entry.label} @@ -145,7 +164,7 @@ export function NotificationPanel({ client }: NotificationPanelProps) { value={state} onChange={(event) => { setState(event.target.value); - setSelected(null); + setSelectedId(null); }} > @@ -165,7 +184,7 @@ export function NotificationPanel({ client }: NotificationPanelProps) { value={template} onChange={(event) => { setTemplate(event.target.value); - setSelected(null); + setSelectedId(null); }} > @@ -192,7 +211,7 @@ export function NotificationPanel({ client }: NotificationPanelProps) { { header: "Recipient (masked)", cell: (row) => ( - ), diff --git a/ui/console/src/RunConsole.test.tsx b/ui/console/src/RunConsole.test.tsx index ee8fd48..7d317fa 100644 --- a/ui/console/src/RunConsole.test.tsx +++ b/ui/console/src/RunConsole.test.tsx @@ -141,4 +141,46 @@ describe("the run console (console RFC §2 — a client of the frozen contract)" expect(await screen.findByRole("alert")).toHaveTextContent(/fleet list could not be loaded/i); }); + + it("choosing another fleet loads ITS jobs and closes the run that belonged to the first", async () => { + const fetcher = (async (input: RequestInfo | URL, init?: RequestInit) => { + const url = String(input); + const json = (body: unknown) => new Response(JSON.stringify(body), { status: 200, headers: { "content-type": "application/json" } }); + if (init?.method === "POST") return json({ ok: true, message: "done" }); + if (url.includes("/jobs/runs/")) return json(detail()); + if (url.includes("/runs?")) return json(url.includes("night-cluster") ? [] : [run()]); + if (url.endsWith("/jobs")) return json(url.includes("night-cluster") ? [{ name: "nightly-sweep" }] : [{ name: "eod-reconciliation" }]); + return json([ + { schedulerName: "it-cluster", jobCount: 1, nodes: [{ instanceId: "node-a" }] }, + { schedulerName: "night-cluster", jobCount: 1, nodes: [] }, + ]); + }) as typeof fetch; + + render(); + + await userEvent.click(await screen.findByRole("button", { name: "run-9f21" })); + await screen.findByTestId("run-detail"); + + await userEvent.click(screen.getByRole("button", { name: /night-cluster/ })); + + // The open run belonged to the other fleet: keeping it on screen would put one + // fleet's job list next to another fleet's run. + await waitFor(() => expect(screen.queryByTestId("run-detail")).toBeNull()); + expect(await screen.findByText("nightly-sweep")).toBeInTheDocument(); + }); + + it("a PAUSED job offers resume, and resuming posts the frozen route", async () => { + const { client: api, posted } = client({ jobs: [{ name: "eod-reconciliation", paused: true }] }); + render(); + + // A paused job must never offer "pause" — the console reads the job's own flag. + expect(await screen.findByRole("button", { name: "resume" })).toBeInTheDocument(); + expect(screen.queryByRole("button", { name: "pause" })).toBeNull(); + + await userEvent.click(screen.getByRole("button", { name: "resume" })); + await userEvent.click(screen.getByRole("alertdialog").querySelector("button")!); + + await waitFor(() => expect(posted).toHaveLength(1)); + expect(posted[0].url).toContain("/goldpath/admin/jobs/fleets/it-cluster/jobs/eod-reconciliation/resume"); + }); }); diff --git a/ui/console/src/adminClient.test.ts b/ui/console/src/adminClient.test.ts index 2907b89..9d5bb02 100644 --- a/ui/console/src/adminClient.test.ts +++ b/ui/console/src/adminClient.test.ts @@ -132,4 +132,41 @@ describe("the admin client (the console's only door — the FROZEN contract)", ( expect(calls[0].init?.credentials).toBe("include"); }); + + it("every campaign verb posts ITS frozen route — including the ones the panel shows rarely", async () => { + const { fetcher, calls } = fakeFetch({ "/campaign/": json({ ok: true, message: "done" }) }); + const client = new AdminClient({ fetcher }); + + await client.resumeCampaign("c-1"); + await client.pauseCampaign("c-1"); + + expect(calls[0].url).toContain("/goldpath/admin/campaign/c-1/resume"); + expect(calls[1].url).toContain("/goldpath/admin/campaign/c-1/pause"); + }); + + it("ids with slashes and spaces are ENCODED — a key is data, never part of the path", async () => { + const { fetcher, calls } = fakeFetch({ "/goldpath/admin/": json({}) }); + const client = new AdminClient({ fetcher }); + + await client.notification("a/b c"); + await client.archiveEntry("policies", "P/42 x"); + + expect(calls[0].url).toContain("/notifications/a%2Fb%20c"); + expect(calls[1].url).toContain("/entries/policies/P%2F42%20x"); + }); + + it("rerun posts the run's own route — the repair verbs are all one shape", async () => { + const { fetcher, calls } = fakeFetch({ "/jobs/runs/": json({ ok: true, message: "rerun queued" }) }); + + const result = await new AdminClient({ fetcher }).rerun("run-9f21"); + + expect(calls[0].url).toContain("/goldpath/admin/jobs/runs/run-9f21/rerun"); + expect(result).toEqual({ ok: true, message: "rerun queued" }); + }); + + it("a verb answered with an unexpected status THROWS — it is never read as an outcome", async () => { + const { fetcher } = fakeFetch({ "/jobs/runs/": new Response("", { status: 503 }) }); + + await expect(new AdminClient({ fetcher }).rerun("run-9f21")).rejects.toThrow(/503/); + }); }); diff --git a/ui/console/vitest.config.ts b/ui/console/vitest.config.ts index e2ee1ff..1daa3b8 100644 --- a/ui/console/vitest.config.ts +++ b/ui/console/vitest.config.ts @@ -9,6 +9,13 @@ export default defineConfig({ }, test: { environment: "jsdom", + coverage: { + // Only the SOURCE is judged: the gallery and the dev entry point are worked + // examples, and a barrel file has nothing to test. + include: ["src/**/*.{ts,tsx}"], + exclude: ["src/index.ts", "src/test-setup.ts", "src/**/*.{test,spec}.{ts,tsx}"], + }, + globals: true, setupFiles: ["./src/test-setup.ts"], // The e2e suite belongs to Playwright (`pnpm e2e`); vitest owns src/ only. diff --git a/ui/kit/coverage/base.css b/ui/kit/coverage/base.css new file mode 100644 index 0000000..f418035 --- /dev/null +++ b/ui/kit/coverage/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/ui/kit/coverage/block-navigation.js b/ui/kit/coverage/block-navigation.js new file mode 100644 index 0000000..530d1ed --- /dev/null +++ b/ui/kit/coverage/block-navigation.js @@ -0,0 +1,87 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selector that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } + + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/ui/kit/coverage/clover.xml b/ui/kit/coverage/clover.xml new file mode 100644 index 0000000..092dc5a --- /dev/null +++ b/ui/kit/coverage/clover.xml @@ -0,0 +1,464 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui/kit/coverage/coverage-final.json b/ui/kit/coverage/coverage-final.json new file mode 100644 index 0000000..b5910f3 --- /dev/null +++ b/ui/kit/coverage/coverage-final.json @@ -0,0 +1,11 @@ +{"/Users/omercelik/Repositories/goldpath/ui/kit/src/adminResult.ts": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/adminResult.ts","all":false,"statementMap":{"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":34}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":14}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":20}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":32}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":25}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":67}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":59}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":66}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":110}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":3}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":52}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":1}}},"s":{"14":3,"15":3,"16":3,"17":3,"18":3,"19":3,"20":3,"21":2,"22":2,"23":2,"25":1,"26":1},"branchMap":{"0":{"type":"branch","line":15,"loc":{"start":{"line":15,"column":0},"end":{"line":27,"column":1}},"locations":[{"start":{"line":15,"column":0},"end":{"line":27,"column":1}}]},"1":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":26},"end":{"line":21,"column":58}},"locations":[{"start":{"line":21,"column":26},"end":{"line":21,"column":58}}]},"2":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":58},"end":{"line":24,"column":3}},"locations":[{"start":{"line":21,"column":58},"end":{"line":24,"column":3}}]},"3":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":18},"end":{"line":23,"column":65}},"locations":[{"start":{"line":23,"column":18},"end":{"line":23,"column":65}}]},"4":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":61},"end":{"line":23,"column":110}},"locations":[{"start":{"line":23,"column":61},"end":{"line":23,"column":110}}]},"5":{"type":"branch","line":24,"loc":{"start":{"line":24,"column":2},"end":{"line":27,"column":1}},"locations":[{"start":{"line":24,"column":2},"end":{"line":27,"column":1}}]}},"b":{"0":[3],"1":[2],"2":[2],"3":[1],"4":[1],"5":[1]},"fnMap":{"0":{"name":"executeVerb","decl":{"start":{"line":15,"column":0},"end":{"line":27,"column":1}},"loc":{"start":{"line":15,"column":0},"end":{"line":27,"column":1}},"line":15}},"f":{"0":3}} +,"/Users/omercelik/Repositories/goldpath/ui/kit/src/duration.ts": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/duration.ts","all":false,"statementMap":{"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":58}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":37}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":49}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":85}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":83}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":42}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":1}}},"s":{"9":1,"10":6,"11":6,"12":6,"13":6,"14":1,"15":1},"branchMap":{"0":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":7},"end":{"line":16,"column":1}},"locations":[{"start":{"line":10,"column":7},"end":{"line":16,"column":1}}]},"1":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":18},"end":{"line":13,"column":27}},"locations":[{"start":{"line":12,"column":18},"end":{"line":13,"column":27}}]},"2":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":20},"end":{"line":13,"column":85}},"locations":[{"start":{"line":13,"column":20},"end":{"line":13,"column":85}}]},"3":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":52},"end":{"line":14,"column":30}},"locations":[{"start":{"line":13,"column":52},"end":{"line":14,"column":30}}]},"4":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":23},"end":{"line":16,"column":1}},"locations":[{"start":{"line":14,"column":23},"end":{"line":16,"column":1}}]}},"b":{"0":[6],"1":[3],"2":[1],"3":[2],"4":[1]},"fnMap":{"0":{"name":"humanizeSeconds","decl":{"start":{"line":10,"column":7},"end":{"line":16,"column":1}},"loc":{"start":{"line":10,"column":7},"end":{"line":16,"column":1}},"line":10}},"f":{"0":6}} +,"/Users/omercelik/Repositories/goldpath/ui/kit/src/status.ts": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/status.ts","all":false,"statementMap":{"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":41}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":23}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":18}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":19}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":23}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":20}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":19}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":21}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":44}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":87}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":20}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":34}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":21}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":64}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":82}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":20}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":20}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":18}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":24}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":20}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":29}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":22}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":2}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":64}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":91}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":51}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":1}}},"s":{"4":1,"6":1,"7":1,"8":1,"9":1,"10":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"20":1,"21":1,"22":1,"24":1,"25":1,"26":1,"28":1,"29":1,"30":1,"31":1,"34":1,"41":1,"42":16,"43":16},"branchMap":{"0":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":7},"end":{"line":44,"column":1}},"locations":[{"start":{"line":42,"column":7},"end":{"line":44,"column":1}}]},"1":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":18},"end":{"line":43,"column":41}},"locations":[{"start":{"line":43,"column":18},"end":{"line":43,"column":41}}]},"2":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":23},"end":{"line":43,"column":41}},"locations":[{"start":{"line":43,"column":23},"end":{"line":43,"column":41}}]},"3":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":36},"end":{"line":43,"column":51}},"locations":[{"start":{"line":43,"column":36},"end":{"line":43,"column":51}}]}},"b":{"0":[16],"1":[2],"2":[1],"3":[1]},"fnMap":{"0":{"name":"statusTone","decl":{"start":{"line":42,"column":7},"end":{"line":44,"column":1}},"loc":{"start":{"line":42,"column":7},"end":{"line":44,"column":1}},"line":42}},"f":{"0":16}} +,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/AppShell.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/AppShell.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":39}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":26}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":8}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":6}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":11}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":11}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":11}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":16}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":20}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":20}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":9}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":19}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":10}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":79}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":12}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":34}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":109}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":12}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":34}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":39}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":80}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":71}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":91}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":35}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":21}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":84}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":42}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":95}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":43}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":39}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":23}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":16}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":61}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":39}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":98}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":21}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":37}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":103}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":57}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":101}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":44}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":89}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":19}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":23}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":18}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":30}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":48}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":20}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":21}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":29}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":58}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":58}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":93}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":83}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":19}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":39}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":88}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":101}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":78}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":113}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":23}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":13}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":82}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":14}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":14}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":47}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":13}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":37}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":104}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":56}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":20}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":15}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":12}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":10}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":1}}},"s":{"0":1,"41":1,"42":14,"43":14,"44":14,"45":14,"46":14,"47":14,"48":14,"49":14,"50":14,"51":14,"52":14,"53":14,"54":14,"55":14,"56":14,"61":14,"62":14,"63":14,"64":14,"66":14,"67":14,"68":14,"69":2,"70":2,"71":2,"72":2,"73":2,"75":2,"76":2,"78":14,"80":14,"81":2,"82":2,"83":2,"84":2,"85":2,"86":2,"87":2,"89":2,"90":4,"91":2,"92":2,"93":2,"96":14,"97":39,"98":39,"99":39,"100":39,"101":39,"102":39,"103":39,"104":39,"105":39,"106":39,"108":39,"109":39,"110":39,"111":1,"113":39,"115":14,"117":14,"118":14,"119":14,"121":14,"123":14,"124":14,"125":14,"126":14,"128":14,"129":14,"130":14,"131":14,"133":14},"branchMap":{"0":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":7},"end":{"line":134,"column":1}},"locations":[{"start":{"line":42,"column":7},"end":{"line":134,"column":1}}]},"1":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":70},"end":{"line":57,"column":95}},"locations":[{"start":{"line":57,"column":70},"end":{"line":57,"column":95}}]},"2":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":82},"end":{"line":57,"column":106}},"locations":[{"start":{"line":57,"column":82},"end":{"line":57,"column":106}}]},"3":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":14},"end":{"line":68,"column":91}},"locations":[{"start":{"line":68,"column":14},"end":{"line":68,"column":91}}]},"4":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":13},"end":{"line":77,"column":23}},"locations":[{"start":{"line":69,"column":13},"end":{"line":77,"column":23}}]},"5":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":28},"end":{"line":71,"column":62}},"locations":[{"start":{"line":71,"column":28},"end":{"line":71,"column":62}}]},"6":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":40},"end":{"line":71,"column":84}},"locations":[{"start":{"line":71,"column":40},"end":{"line":71,"column":84}}]},"7":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":17},"end":{"line":76,"column":35}},"locations":[{"start":{"line":76,"column":17},"end":{"line":76,"column":35}}]},"8":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":29},"end":{"line":76,"column":39}},"locations":[{"start":{"line":76,"column":29},"end":{"line":76,"column":39}}]},"9":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":11},"end":{"line":81,"column":46}},"locations":[{"start":{"line":81,"column":11},"end":{"line":81,"column":46}}]},"10":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":41},"end":{"line":81,"column":61}},"locations":[{"start":{"line":81,"column":41},"end":{"line":81,"column":61}}]},"11":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":47},"end":{"line":94,"column":18}},"locations":[{"start":{"line":81,"column":47},"end":{"line":94,"column":18}}]},"12":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":23},"end":{"line":87,"column":57}},"locations":[{"start":{"line":87,"column":23},"end":{"line":87,"column":57}}]},"13":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":11},"end":{"line":118,"column":82}},"locations":[{"start":{"line":118,"column":11},"end":{"line":118,"column":82}}]},"14":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":26},"end":{"line":88,"column":101}},"locations":[{"start":{"line":88,"column":26},"end":{"line":88,"column":101}}]},"15":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":51},"end":{"line":88,"column":87}},"locations":[{"start":{"line":88,"column":51},"end":{"line":88,"column":87}}]},"16":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":30},"end":{"line":91,"column":89}},"locations":[{"start":{"line":90,"column":30},"end":{"line":91,"column":89}}]},"17":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":19},"end":{"line":116,"column":11}},"locations":[{"start":{"line":97,"column":19},"end":{"line":116,"column":11}}]},"18":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":30},"end":{"line":102,"column":48}},"locations":[{"start":{"line":102,"column":30},"end":{"line":102,"column":48}}]},"19":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":39},"end":{"line":102,"column":58}},"locations":[{"start":{"line":102,"column":39},"end":{"line":102,"column":58}}]},"20":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":23},"end":{"line":103,"column":48}},"locations":[{"start":{"line":103,"column":23},"end":{"line":103,"column":48}}]},"21":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":40},"end":{"line":103,"column":58}},"locations":[{"start":{"line":103,"column":40},"end":{"line":103,"column":58}}]},"22":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":18},"end":{"line":105,"column":66}},"locations":[{"start":{"line":105,"column":18},"end":{"line":105,"column":66}}]},"23":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":27},"end":{"line":105,"column":83}},"locations":[{"start":{"line":105,"column":27},"end":{"line":105,"column":83}}]},"24":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":33},"end":{"line":109,"column":57}},"locations":[{"start":{"line":109,"column":33},"end":{"line":109,"column":57}}]},"25":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":45},"end":{"line":109,"column":70}},"locations":[{"start":{"line":109,"column":45},"end":{"line":109,"column":70}}]},"26":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":17},"end":{"line":110,"column":101}},"locations":[{"start":{"line":110,"column":17},"end":{"line":110,"column":101}}]},"27":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":32},"end":{"line":111,"column":63}},"locations":[{"start":{"line":111,"column":32},"end":{"line":111,"column":63}}]},"28":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":58},"end":{"line":111,"column":78}},"locations":[{"start":{"line":111,"column":58},"end":{"line":111,"column":78}}]},"29":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":64},"end":{"line":112,"column":113}},"locations":[{"start":{"line":111,"column":64},"end":{"line":112,"column":113}}]}},"b":{"0":[14],"1":[2],"2":[12],"3":[12],"4":[2],"5":[1],"6":[1],"7":[1],"8":[1],"9":[2],"10":[2],"11":[2],"12":[1],"13":[2],"14":[2],"15":[4],"16":[4],"17":[39],"18":[13],"19":[26],"20":[2],"21":[37],"22":[13],"23":[26],"24":[2],"25":[37],"26":[2],"27":[2],"28":[1],"29":[1]},"fnMap":{"0":{"name":"AppShell","decl":{"start":{"line":42,"column":7},"end":{"line":134,"column":1}},"loc":{"start":{"line":42,"column":7},"end":{"line":134,"column":1}},"line":42},"1":{"name":"onChange","decl":{"start":{"line":88,"column":26},"end":{"line":88,"column":101}},"loc":{"start":{"line":88,"column":26},"end":{"line":88,"column":101}},"line":88}},"f":{"0":14,"1":2}} +,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/AuditBlock.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/AuditBlock.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":64}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":37}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":95}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":96}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":1}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":22}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":90}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":15}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":115}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":3}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":46}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":99}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":3}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":60}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":1}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":108}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":29}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":92}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":3}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":10}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":57}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":31}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":68}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":16}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":129}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":59}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":97}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":76}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":18}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":17}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":69}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":73}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":64}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":71}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":23}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":84}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":20}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":72}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":64}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":61}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":64}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":20}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":39}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":105}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":18}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":16}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":9}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":10}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":1}}},"s":{"0":1,"22":1,"24":1,"25":8,"26":8,"28":1,"30":8,"31":8,"32":2,"33":2,"35":8,"36":1,"37":1,"39":5,"40":5,"48":1,"49":5,"50":1,"51":1,"53":4,"54":4,"55":4,"56":4,"57":4,"58":4,"59":4,"60":4,"61":4,"62":4,"63":4,"64":4,"65":4,"66":4,"67":4,"68":4,"69":4,"70":4,"71":4,"72":4,"73":4,"74":4,"75":4,"76":4,"77":4,"79":4,"80":4,"82":4,"83":4,"85":4},"branchMap":{"0":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":7},"end":{"line":27,"column":1}},"locations":[{"start":{"line":25,"column":7},"end":{"line":27,"column":1}}]},"1":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":9},"end":{"line":26,"column":26}},"locations":[{"start":{"line":26,"column":9},"end":{"line":26,"column":26}}]},"2":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":85},"end":{"line":26,"column":96}},"locations":[{"start":{"line":26,"column":85},"end":{"line":26,"column":96}}]},"3":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":26},"end":{"line":26,"column":85}},"locations":[{"start":{"line":26,"column":26},"end":{"line":26,"column":85}}]},"4":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":0},"end":{"line":41,"column":1}},"locations":[{"start":{"line":31,"column":0},"end":{"line":41,"column":1}}]},"5":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":14},"end":{"line":34,"column":3}},"locations":[{"start":{"line":32,"column":14},"end":{"line":34,"column":3}}]},"6":{"type":"branch","line":34,"loc":{"start":{"line":34,"column":2},"end":{"line":36,"column":24}},"locations":[{"start":{"line":34,"column":2},"end":{"line":36,"column":24}}]},"7":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":16},"end":{"line":36,"column":45}},"locations":[{"start":{"line":36,"column":16},"end":{"line":36,"column":45}}]},"8":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":45},"end":{"line":38,"column":3}},"locations":[{"start":{"line":36,"column":45},"end":{"line":38,"column":3}}]},"9":{"type":"branch","line":38,"loc":{"start":{"line":38,"column":2},"end":{"line":41,"column":1}},"locations":[{"start":{"line":38,"column":2},"end":{"line":41,"column":1}}]},"10":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":7},"end":{"line":86,"column":1}},"locations":[{"start":{"line":49,"column":7},"end":{"line":86,"column":1}}]},"11":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":28},"end":{"line":52,"column":3}},"locations":[{"start":{"line":50,"column":28},"end":{"line":52,"column":3}}]},"12":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":2},"end":{"line":86,"column":1}},"locations":[{"start":{"line":52,"column":2},"end":{"line":86,"column":1}}]},"13":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":19},"end":{"line":83,"column":7}},"locations":[{"start":{"line":56,"column":19},"end":{"line":83,"column":7}}]},"14":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":49},"end":{"line":62,"column":70}},"locations":[{"start":{"line":62,"column":49},"end":{"line":62,"column":70}}]},"15":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":17},"end":{"line":70,"column":84}},"locations":[{"start":{"line":70,"column":17},"end":{"line":70,"column":84}}]}},"b":{"0":[8],"1":[4],"2":[4],"3":[4],"4":[8],"5":[2],"6":[6],"7":[5],"8":[1],"9":[5],"10":[5],"11":[1],"12":[4],"13":[4],"14":[1],"15":[1]},"fnMap":{"0":{"name":"isClassified","decl":{"start":{"line":25,"column":7},"end":{"line":27,"column":1}},"loc":{"start":{"line":25,"column":7},"end":{"line":27,"column":1}},"line":25},"1":{"name":"Value","decl":{"start":{"line":31,"column":0},"end":{"line":41,"column":1}},"loc":{"start":{"line":31,"column":0},"end":{"line":41,"column":1}},"line":31},"2":{"name":"AuditBlock","decl":{"start":{"line":49,"column":7},"end":{"line":86,"column":1}},"loc":{"start":{"line":49,"column":7},"end":{"line":86,"column":1}},"line":49}},"f":{"0":8,"1":8,"2":5}} +,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/Banner.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/Banner.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":39}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":42}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":62}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":50}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":62}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":58}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":58}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":58}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":2}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":88}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":10}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":8}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":17}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":22}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":106}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":16}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":10}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":1}}},"s":{"0":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"30":1,"31":14,"32":14,"33":14,"34":14,"35":14,"37":14,"38":14,"40":14},"branchMap":{"0":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":7},"end":{"line":41,"column":1}},"locations":[{"start":{"line":31,"column":7},"end":{"line":41,"column":1}}]},"1":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":52},"end":{"line":36,"column":84}},"locations":[{"start":{"line":36,"column":52},"end":{"line":36,"column":84}}]},"2":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":60},"end":{"line":36,"column":103}},"locations":[{"start":{"line":36,"column":60},"end":{"line":36,"column":103}}]}},"b":{"0":[14],"1":[9],"2":[5]},"fnMap":{"0":{"name":"Banner","decl":{"start":{"line":31,"column":7},"end":{"line":41,"column":1}},"loc":{"start":{"line":31,"column":7},"end":{"line":41,"column":1}},"line":31}},"f":{"0":14}} +,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/KeysetTable.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/KeysetTable.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":81}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":49}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":40}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":54}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":1}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":131}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":44}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":60}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":44}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":59}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":31}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":32}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":52}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":40}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":26}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":11}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":59}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":86}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":83}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":35}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":43}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":25}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":15}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":48}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":26}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":7}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":6}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":21}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":4}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":19}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":31}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":18}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":10}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":36}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":40}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":15}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":89}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":38}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":122}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":31}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":19}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":15}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":15}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":16}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":15}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":30}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":90}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":40}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":112}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":36}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":21}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":17}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":17}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":13}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":16}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":14}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":58}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":88}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":29}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":30}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":32}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":19}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":112}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":98}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":13}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":21}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":19}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":14}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":62}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":45}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":53}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":15}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":41}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":17}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":125}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":42}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":57}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":60}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":19}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":12}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":10}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":1}}},"s":{"0":1,"25":1,"26":19,"27":18,"28":18,"37":1,"38":29,"39":29,"40":29,"41":29,"42":29,"44":29,"45":29,"46":15,"47":15,"48":15,"49":15,"50":13,"51":12,"52":12,"53":12,"54":12,"55":15,"56":2,"57":2,"58":2,"59":15,"60":29,"61":29,"63":29,"64":10,"65":29,"67":29,"68":29,"69":29,"70":29,"71":29,"72":29,"73":29,"74":29,"75":29,"76":29,"77":29,"78":29,"79":29,"80":29,"81":18,"82":18,"83":18,"84":18,"85":18,"86":18,"87":18,"88":29,"89":29,"90":29,"92":29,"95":2,"98":29,"99":2,"100":2,"102":2,"103":2,"104":2,"105":2,"107":2,"108":2,"109":2,"112":29,"113":29,"115":29,"116":29,"117":29,"118":19,"119":19,"120":19,"121":19,"123":19,"124":19,"126":29,"127":29,"129":29},"branchMap":{"0":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":7},"end":{"line":29,"column":1}},"locations":[{"start":{"line":26,"column":7},"end":{"line":29,"column":1}}]},"1":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":30},"end":{"line":27,"column":40}},"locations":[{"start":{"line":27,"column":30},"end":{"line":27,"column":40}}]},"2":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":37},"end":{"line":29,"column":1}},"locations":[{"start":{"line":27,"column":37},"end":{"line":29,"column":1}}]},"3":{"type":"branch","line":38,"loc":{"start":{"line":38,"column":7},"end":{"line":130,"column":1}},"locations":[{"start":{"line":38,"column":7},"end":{"line":130,"column":1}}]},"4":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":17},"end":{"line":93,"column":48}},"locations":[{"start":{"line":93,"column":17},"end":{"line":93,"column":48}}]},"5":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":43},"end":{"line":93,"column":58}},"locations":[{"start":{"line":93,"column":43},"end":{"line":93,"column":58}}]},"6":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":48},"end":{"line":96,"column":88}},"locations":[{"start":{"line":93,"column":48},"end":{"line":96,"column":88}}]},"7":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":17},"end":{"line":110,"column":14}},"locations":[{"start":{"line":99,"column":17},"end":{"line":110,"column":14}}]},"8":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":31},"end":{"line":116,"column":50}},"locations":[{"start":{"line":116,"column":31},"end":{"line":116,"column":50}}]},"9":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":39},"end":{"line":116,"column":53}},"locations":[{"start":{"line":116,"column":39},"end":{"line":116,"column":53}}]},"10":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":10},"end":{"line":118,"column":41}},"locations":[{"start":{"line":118,"column":10},"end":{"line":118,"column":41}}]},"11":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":29},"end":{"line":125,"column":19}},"locations":[{"start":{"line":118,"column":29},"end":{"line":125,"column":19}}]},"12":{"type":"branch","line":124,"loc":{"start":{"line":124,"column":23},"end":{"line":124,"column":48}},"locations":[{"start":{"line":124,"column":23},"end":{"line":124,"column":48}}]},"13":{"type":"branch","line":124,"loc":{"start":{"line":124,"column":35},"end":{"line":124,"column":60}},"locations":[{"start":{"line":124,"column":35},"end":{"line":124,"column":60}}]},"14":{"type":"branch","line":46,"loc":{"start":{"line":46,"column":4},"end":{"line":60,"column":6}},"locations":[{"start":{"line":46,"column":4},"end":{"line":60,"column":6}}]},"15":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":57},"end":{"line":51,"column":86}},"locations":[{"start":{"line":50,"column":57},"end":{"line":51,"column":86}}]},"16":{"type":"branch","line":51,"loc":{"start":{"line":51,"column":41},"end":{"line":51,"column":86}},"locations":[{"start":{"line":51,"column":41},"end":{"line":51,"column":86}}]},"17":{"type":"branch","line":51,"loc":{"start":{"line":51,"column":41},"end":{"line":56,"column":14}},"locations":[{"start":{"line":51,"column":41},"end":{"line":56,"column":14}}]},"18":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":6},"end":{"line":59,"column":7}},"locations":[{"start":{"line":56,"column":6},"end":{"line":59,"column":7}}]},"19":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":41},"end":{"line":57,"column":48}},"locations":[{"start":{"line":57,"column":41},"end":{"line":57,"column":48}}]},"20":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":16},"end":{"line":52,"column":81}},"locations":[{"start":{"line":52,"column":16},"end":{"line":52,"column":81}}]},"21":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":31},"end":{"line":52,"column":52}},"locations":[{"start":{"line":52,"column":31},"end":{"line":52,"column":52}}]},"22":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":44},"end":{"line":52,"column":81}},"locations":[{"start":{"line":52,"column":44},"end":{"line":52,"column":81}}]},"23":{"type":"branch","line":64,"loc":{"start":{"line":64,"column":12},"end":{"line":66,"column":5}},"locations":[{"start":{"line":64,"column":12},"end":{"line":66,"column":5}}]},"24":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":25},"end":{"line":76,"column":19}},"locations":[{"start":{"line":73,"column":25},"end":{"line":76,"column":19}}]},"25":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":91},"end":{"line":74,"column":116}},"locations":[{"start":{"line":74,"column":91},"end":{"line":74,"column":116}}]},"26":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":101},"end":{"line":74,"column":118}},"locations":[{"start":{"line":74,"column":101},"end":{"line":74,"column":118}}]},"27":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":20},"end":{"line":88,"column":17}},"locations":[{"start":{"line":81,"column":20},"end":{"line":88,"column":17}}]},"28":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":27},"end":{"line":86,"column":21}},"locations":[{"start":{"line":83,"column":27},"end":{"line":86,"column":21}}]},"29":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":81},"end":{"line":84,"column":106}},"locations":[{"start":{"line":84,"column":81},"end":{"line":84,"column":106}}]},"30":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":91},"end":{"line":84,"column":108}},"locations":[{"start":{"line":84,"column":91},"end":{"line":84,"column":108}}]},"31":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":23},"end":{"line":105,"column":98}},"locations":[{"start":{"line":105,"column":23},"end":{"line":105,"column":98}}]},"32":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":60},"end":{"line":105,"column":71}},"locations":[{"start":{"line":105,"column":60},"end":{"line":105,"column":71}}]},"33":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":64},"end":{"line":105,"column":79}},"locations":[{"start":{"line":105,"column":64},"end":{"line":105,"column":79}}]},"34":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":21},"end":{"line":122,"column":57}},"locations":[{"start":{"line":122,"column":21},"end":{"line":122,"column":57}}]}},"b":{"0":[19],"1":[1],"2":[18],"3":[29],"4":[12],"5":[3],"6":[2],"7":[2],"8":[8],"9":[21],"10":[21],"11":[19],"12":[15],"13":[4],"14":[15],"15":[13],"16":[1],"17":[12],"18":[2],"19":[0],"20":[12],"21":[9],"22":[3],"23":[10],"24":[29],"25":[2],"26":[27],"27":[18],"28":[18],"29":[1],"30":[17],"31":[2],"32":[1],"33":[1],"34":[3]},"fnMap":{"0":{"name":"clampTake","decl":{"start":{"line":26,"column":7},"end":{"line":29,"column":1}},"loc":{"start":{"line":26,"column":7},"end":{"line":29,"column":1}},"line":26},"1":{"name":"KeysetTable","decl":{"start":{"line":38,"column":7},"end":{"line":130,"column":1}},"loc":{"start":{"line":38,"column":7},"end":{"line":130,"column":1}},"line":38},"2":{"name":"onClick","decl":{"start":{"line":105,"column":23},"end":{"line":105,"column":98}},"loc":{"start":{"line":105,"column":23},"end":{"line":105,"column":98}},"line":105},"3":{"name":"onClick","decl":{"start":{"line":122,"column":21},"end":{"line":122,"column":57}},"loc":{"start":{"line":122,"column":21},"end":{"line":122,"column":57}},"line":122}},"f":{"0":19,"1":29,"2":2,"3":3}} +,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/RunProgress.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/RunProgress.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":42}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":80}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":87}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":62}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":77}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":61}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":72}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":24}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":1}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":96}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":37}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":54}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":100}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":49}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":48}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":97}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":72}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":25}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":46}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":34}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":2}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":43}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":100}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":1}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":74}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":98}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":40}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":44}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":17}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":49}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":19}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":39}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":22}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":23}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":100}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":10}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":58}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":47}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":58}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":56}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":56}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":15}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":34}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":80}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":34}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":89}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":12}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":10}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":26}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":27}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":25}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":27}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":68}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":76}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":12}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":97}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":27}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":58}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":96}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":32}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":15}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":34}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":23}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":35}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":31}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":49}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":34}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":34}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":35}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":17}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":12}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":10}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":1}}},"s":{"0":1,"24":1,"25":12,"26":12,"27":12,"28":12,"29":6,"30":6,"31":6,"43":1,"44":14,"45":11,"46":14,"47":14,"48":14,"49":14,"50":14,"52":1,"53":1,"54":1,"55":1,"56":1,"58":4,"59":4,"60":4,"67":1,"68":7,"69":7,"70":7,"71":7,"72":7,"73":2,"74":5,"75":3,"76":2,"82":7,"84":7,"85":7,"86":7,"87":7,"88":7,"89":7,"90":7,"91":7,"92":1,"94":7,"95":1,"97":7,"99":7,"100":7,"101":7,"102":7,"103":7,"104":7,"106":7,"107":7,"109":7,"110":7,"111":7,"112":7,"113":7,"114":5,"115":5,"116":5,"117":5,"118":1,"119":4,"120":3,"121":1,"124":5,"125":5,"127":7,"128":7,"130":7},"branchMap":{"0":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":7},"end":{"line":32,"column":1}},"locations":[{"start":{"line":25,"column":7},"end":{"line":32,"column":1}}]},"1":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":29},"end":{"line":26,"column":58}},"locations":[{"start":{"line":26,"column":29},"end":{"line":26,"column":58}}]},"2":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":53},"end":{"line":26,"column":75}},"locations":[{"start":{"line":26,"column":53},"end":{"line":26,"column":75}}]},"3":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":75},"end":{"line":26,"column":87}},"locations":[{"start":{"line":26,"column":75},"end":{"line":26,"column":87}}]},"4":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":82},"end":{"line":27,"column":31}},"locations":[{"start":{"line":26,"column":82},"end":{"line":27,"column":31}}]},"5":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":18},"end":{"line":27,"column":58}},"locations":[{"start":{"line":27,"column":18},"end":{"line":27,"column":58}}]},"6":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":54},"end":{"line":27,"column":62}},"locations":[{"start":{"line":27,"column":54},"end":{"line":27,"column":62}}]},"7":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":30},"end":{"line":29,"column":49}},"locations":[{"start":{"line":29,"column":30},"end":{"line":29,"column":49}}]},"8":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":49},"end":{"line":29,"column":61}},"locations":[{"start":{"line":29,"column":49},"end":{"line":29,"column":61}}]},"9":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":56},"end":{"line":32,"column":1}},"locations":[{"start":{"line":29,"column":56},"end":{"line":32,"column":1}}]},"10":{"type":"branch","line":44,"loc":{"start":{"line":44,"column":7},"end":{"line":51,"column":1}},"locations":[{"start":{"line":44,"column":7},"end":{"line":51,"column":1}}]},"11":{"type":"branch","line":45,"loc":{"start":{"line":45,"column":23},"end":{"line":45,"column":37}},"locations":[{"start":{"line":45,"column":23},"end":{"line":45,"column":37}}]},"12":{"type":"branch","line":45,"loc":{"start":{"line":45,"column":30},"end":{"line":47,"column":29}},"locations":[{"start":{"line":45,"column":30},"end":{"line":47,"column":29}}]},"13":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":22},"end":{"line":47,"column":100}},"locations":[{"start":{"line":47,"column":22},"end":{"line":47,"column":100}}]},"14":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":66},"end":{"line":47,"column":89}},"locations":[{"start":{"line":47,"column":66},"end":{"line":47,"column":89}}]},"15":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":77},"end":{"line":47,"column":100}},"locations":[{"start":{"line":47,"column":77},"end":{"line":47,"column":100}}]},"16":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":89},"end":{"line":48,"column":39}},"locations":[{"start":{"line":47,"column":89},"end":{"line":48,"column":39}}]},"17":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":32},"end":{"line":48,"column":49}},"locations":[{"start":{"line":48,"column":32},"end":{"line":48,"column":49}}]},"18":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":39},"end":{"line":49,"column":37}},"locations":[{"start":{"line":48,"column":39},"end":{"line":49,"column":37}}]},"19":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":30},"end":{"line":49,"column":48}},"locations":[{"start":{"line":49,"column":30},"end":{"line":49,"column":48}}]},"20":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":37},"end":{"line":50,"column":86}},"locations":[{"start":{"line":49,"column":37},"end":{"line":50,"column":86}}]},"21":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":64},"end":{"line":50,"column":97}},"locations":[{"start":{"line":50,"column":64},"end":{"line":50,"column":97}}]},"22":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":0},"end":{"line":61,"column":1}},"locations":[{"start":{"line":59,"column":0},"end":{"line":61,"column":1}}]},"23":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":58},"end":{"line":60,"column":100}},"locations":[{"start":{"line":60,"column":58},"end":{"line":60,"column":100}}]},"24":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":7},"end":{"line":131,"column":1}},"locations":[{"start":{"line":68,"column":7},"end":{"line":131,"column":1}}]},"25":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":32},"end":{"line":69,"column":96}},"locations":[{"start":{"line":69,"column":32},"end":{"line":69,"column":96}}]},"26":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":92},"end":{"line":69,"column":98}},"locations":[{"start":{"line":69,"column":92},"end":{"line":69,"column":98}}]},"27":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":16},"end":{"line":73,"column":49}},"locations":[{"start":{"line":73,"column":16},"end":{"line":73,"column":49}}]},"28":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":48},"end":{"line":74,"column":19}},"locations":[{"start":{"line":73,"column":48},"end":{"line":74,"column":19}}]},"29":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":8},"end":{"line":77,"column":23}},"locations":[{"start":{"line":74,"column":8},"end":{"line":77,"column":23}}]},"30":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":20},"end":{"line":76,"column":22}},"locations":[{"start":{"line":75,"column":20},"end":{"line":76,"column":22}}]},"31":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":10},"end":{"line":77,"column":23}},"locations":[{"start":{"line":76,"column":10},"end":{"line":77,"column":23}}]},"32":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":56},"end":{"line":83,"column":90}},"locations":[{"start":{"line":83,"column":56},"end":{"line":83,"column":90}}]},"33":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":78},"end":{"line":83,"column":100}},"locations":[{"start":{"line":83,"column":78},"end":{"line":83,"column":100}}]},"34":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":28},"end":{"line":93,"column":80}},"locations":[{"start":{"line":92,"column":28},"end":{"line":93,"column":80}}]},"35":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":28},"end":{"line":96,"column":89}},"locations":[{"start":{"line":95,"column":28},"end":{"line":96,"column":89}}]},"36":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":18},"end":{"line":112,"column":58}},"locations":[{"start":{"line":112,"column":18},"end":{"line":112,"column":58}}]},"37":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":27},"end":{"line":113,"column":96}},"locations":[{"start":{"line":113,"column":27},"end":{"line":113,"column":96}}]},"38":{"type":"branch","line":114,"loc":{"start":{"line":114,"column":21},"end":{"line":126,"column":17}},"locations":[{"start":{"line":114,"column":21},"end":{"line":126,"column":17}}]},"39":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":26},"end":{"line":119,"column":31}},"locations":[{"start":{"line":118,"column":26},"end":{"line":119,"column":31}}]},"40":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":18},"end":{"line":122,"column":34}},"locations":[{"start":{"line":119,"column":18},"end":{"line":122,"column":34}}]},"41":{"type":"branch","line":120,"loc":{"start":{"line":120,"column":30},"end":{"line":121,"column":34}},"locations":[{"start":{"line":120,"column":30},"end":{"line":121,"column":34}}]},"42":{"type":"branch","line":121,"loc":{"start":{"line":121,"column":20},"end":{"line":122,"column":34}},"locations":[{"start":{"line":121,"column":20},"end":{"line":122,"column":34}}]}},"b":{"0":[12],"1":[10],"2":[10],"3":[5],"4":[7],"5":[1],"6":[6],"7":[7],"8":[1],"9":[6],"10":[14],"11":[3],"12":[11],"13":[2],"14":[1],"15":[1],"16":[9],"17":[3],"18":[6],"19":[2],"20":[4],"21":[0],"22":[4],"23":[0],"24":[7],"25":[6],"26":[1],"27":[6],"28":[2],"29":[5],"30":[3],"31":[2],"32":[3],"33":[4],"34":[1],"35":[1],"36":[4],"37":[5],"38":[5],"39":[1],"40":[4],"41":[3],"42":[1]},"fnMap":{"0":{"name":"itemsPerSecond","decl":{"start":{"line":25,"column":7},"end":{"line":32,"column":1}},"loc":{"start":{"line":25,"column":7},"end":{"line":32,"column":1}},"line":25},"1":{"name":"deadlineVerdict","decl":{"start":{"line":44,"column":7},"end":{"line":51,"column":1}},"loc":{"start":{"line":44,"column":7},"end":{"line":51,"column":1}},"line":44},"2":{"name":"formatRate","decl":{"start":{"line":59,"column":0},"end":{"line":61,"column":1}},"loc":{"start":{"line":59,"column":0},"end":{"line":61,"column":1}},"line":59},"3":{"name":"RunProgress","decl":{"start":{"line":68,"column":7},"end":{"line":131,"column":1}},"loc":{"start":{"line":68,"column":7},"end":{"line":131,"column":1}},"line":68}},"f":{"0":12,"1":14,"2":4,"3":7}} +,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/StateBadge.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/StateBadge.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":56}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":50}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":62}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":50}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":62}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":58}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":58}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":58}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":2}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":79}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":52}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":10}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":9}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":22}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":116}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":13}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":11}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":1}}},"s":{"0":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"24":1,"25":9,"26":9,"27":9,"28":9,"29":9,"31":9,"32":9,"34":9},"branchMap":{"0":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":7},"end":{"line":35,"column":1}},"locations":[{"start":{"line":25,"column":7},"end":{"line":35,"column":1}}]},"1":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":15},"end":{"line":26,"column":52}},"locations":[{"start":{"line":26,"column":15},"end":{"line":26,"column":52}}]}},"b":{"0":[9],"1":[6]},"fnMap":{"0":{"name":"StateBadge","decl":{"start":{"line":25,"column":7},"end":{"line":35,"column":1}},"loc":{"start":{"line":25,"column":7},"end":{"line":35,"column":1}},"line":25}},"f":{"0":9}} +,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/VerbButton.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/VerbButton.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":124}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":60}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":43}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":78}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":27}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":34}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":29}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":9}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":64}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":13}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":96}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":5}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":41}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":18}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":22}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":4}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":34}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":12}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":182}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":30}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":61}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":18}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":16}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":35}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":36}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":26}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":63}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":94}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":12}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":15}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":206}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":34}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":36}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":17}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":17}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":137}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":17}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":13}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":3}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":10}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":53}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":13}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":210}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":43}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":54}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":55}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":15}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":75}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":83}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":80}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":68}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":78}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":37}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":37}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":80}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":76}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":17}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":11}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":1}}},"s":{"0":1,"42":1,"43":57,"44":57,"45":57,"47":57,"48":9,"49":9,"50":9,"51":9,"52":9,"53":1,"54":1,"56":9,"57":9,"58":9,"59":9,"61":57,"62":29,"63":29,"64":29,"65":29,"66":29,"67":21,"68":21,"69":21,"70":21,"71":21,"72":21,"73":21,"75":29,"76":29,"77":29,"78":29,"80":29,"81":29,"82":29,"84":29,"85":29,"87":29,"89":28,"90":28,"91":28,"92":57,"93":57,"94":57,"96":57,"97":57,"99":57,"100":4,"103":57,"105":2,"108":57,"109":2,"110":2,"111":1,"112":1,"113":2,"115":57,"117":57},"branchMap":{"0":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":7},"end":{"line":118,"column":1}},"locations":[{"start":{"line":43,"column":7},"end":{"line":118,"column":1}}]},"1":{"type":"branch","line":46,"loc":{"start":{"line":46,"column":24},"end":{"line":46,"column":43}},"locations":[{"start":{"line":46,"column":24},"end":{"line":46,"column":43}}]},"2":{"type":"branch","line":46,"loc":{"start":{"line":46,"column":43},"end":{"line":46,"column":78}},"locations":[{"start":{"line":46,"column":43},"end":{"line":46,"column":78}}]},"3":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":33},"end":{"line":88,"column":3}},"locations":[{"start":{"line":62,"column":33},"end":{"line":88,"column":3}}]},"4":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":9},"end":{"line":74,"column":12}},"locations":[{"start":{"line":67,"column":9},"end":{"line":74,"column":12}}]},"5":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":94},"end":{"line":77,"column":158}},"locations":[{"start":{"line":77,"column":94},"end":{"line":77,"column":158}}]},"6":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":2},"end":{"line":93,"column":106}},"locations":[{"start":{"line":88,"column":2},"end":{"line":93,"column":106}}]},"7":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":92},"end":{"line":93,"column":162}},"locations":[{"start":{"line":93,"column":92},"end":{"line":93,"column":162}}]},"8":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":106},"end":{"line":93,"column":207}},"locations":[{"start":{"line":93,"column":106},"end":{"line":93,"column":207}}]},"9":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":22},"end":{"line":97,"column":49}},"locations":[{"start":{"line":97,"column":22},"end":{"line":97,"column":49}}]},"10":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":36},"end":{"line":97,"column":55}},"locations":[{"start":{"line":97,"column":36},"end":{"line":97,"column":55}}]},"11":{"type":"branch","line":100,"loc":{"start":{"line":100,"column":8},"end":{"line":100,"column":43}},"locations":[{"start":{"line":100,"column":8},"end":{"line":100,"column":43}}]},"12":{"type":"branch","line":100,"loc":{"start":{"line":100,"column":30},"end":{"line":100,"column":75}},"locations":[{"start":{"line":100,"column":30},"end":{"line":100,"column":75}}]},"13":{"type":"branch","line":100,"loc":{"start":{"line":100,"column":66},"end":{"line":101,"column":83}},"locations":[{"start":{"line":100,"column":66},"end":{"line":101,"column":83}}]},"14":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":8},"end":{"line":104,"column":43}},"locations":[{"start":{"line":104,"column":8},"end":{"line":104,"column":43}}]},"15":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":30},"end":{"line":104,"column":80}},"locations":[{"start":{"line":104,"column":30},"end":{"line":104,"column":80}}]},"16":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":66},"end":{"line":106,"column":68}},"locations":[{"start":{"line":104,"column":66},"end":{"line":106,"column":68}}]},"17":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":8},"end":{"line":109,"column":43}},"locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":43}}]},"18":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":30},"end":{"line":109,"column":78}},"locations":[{"start":{"line":109,"column":30},"end":{"line":109,"column":78}}]},"19":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":66},"end":{"line":114,"column":17}},"locations":[{"start":{"line":109,"column":66},"end":{"line":114,"column":17}}]},"20":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":36},"end":{"line":112,"column":80}},"locations":[{"start":{"line":111,"column":36},"end":{"line":112,"column":80}}]},"21":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":14},"end":{"line":113,"column":76}},"locations":[{"start":{"line":112,"column":14},"end":{"line":113,"column":76}}]},"22":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":14},"end":{"line":60,"column":4}},"locations":[{"start":{"line":48,"column":14},"end":{"line":60,"column":4}}]},"23":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":30},"end":{"line":52,"column":53}},"locations":[{"start":{"line":52,"column":30},"end":{"line":52,"column":53}}]},"24":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":49},"end":{"line":52,"column":62}},"locations":[{"start":{"line":52,"column":49},"end":{"line":52,"column":62}}]},"25":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":62},"end":{"line":53,"column":12}},"locations":[{"start":{"line":52,"column":62},"end":{"line":53,"column":12}}]},"26":{"type":"branch","line":53,"loc":{"start":{"line":53,"column":4},"end":{"line":55,"column":5}},"locations":[{"start":{"line":53,"column":4},"end":{"line":55,"column":5}}]},"27":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":4},"end":{"line":59,"column":22}},"locations":[{"start":{"line":59,"column":4},"end":{"line":59,"column":22}}]},"28":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":22},"end":{"line":72,"column":63}},"locations":[{"start":{"line":72,"column":22},"end":{"line":72,"column":63}}]},"29":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":19},"end":{"line":79,"column":36}},"locations":[{"start":{"line":79,"column":19},"end":{"line":79,"column":36}}]},"30":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":105},"end":{"line":83,"column":137}},"locations":[{"start":{"line":83,"column":105},"end":{"line":83,"column":137}}]},"31":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":17},"end":{"line":95,"column":54}},"locations":[{"start":{"line":95,"column":17},"end":{"line":95,"column":54}}]}},"b":{"0":[57],"1":[27],"2":[23],"3":[29],"4":[21],"5":[0],"6":[28],"7":[0],"8":[28],"9":[9],"10":[19],"11":[25],"12":[8],"13":[4],"14":[25],"15":[8],"16":[2],"17":[25],"18":[8],"19":[2],"20":[1],"21":[1],"22":[9],"23":[2],"24":[7],"25":[8],"26":[1],"27":[2],"28":[18],"29":[9],"30":[1],"31":[11]},"fnMap":{"0":{"name":"VerbButton","decl":{"start":{"line":43,"column":7},"end":{"line":118,"column":1}},"loc":{"start":{"line":43,"column":7},"end":{"line":118,"column":1}},"line":43},"1":{"name":"run","decl":{"start":{"line":48,"column":14},"end":{"line":60,"column":4}},"loc":{"start":{"line":48,"column":14},"end":{"line":60,"column":4}},"line":48},"2":{"name":"onChange","decl":{"start":{"line":72,"column":22},"end":{"line":72,"column":63}},"loc":{"start":{"line":72,"column":22},"end":{"line":72,"column":63}},"line":72},"3":{"name":"onClick","decl":{"start":{"line":79,"column":19},"end":{"line":79,"column":36}},"loc":{"start":{"line":79,"column":19},"end":{"line":79,"column":36}},"line":79},"4":{"name":"onClick","decl":{"start":{"line":83,"column":105},"end":{"line":83,"column":137}},"loc":{"start":{"line":83,"column":105},"end":{"line":83,"column":137}},"line":83},"5":{"name":"onClick","decl":{"start":{"line":95,"column":17},"end":{"line":95,"column":54}},"loc":{"start":{"line":95,"column":17},"end":{"line":95,"column":54}},"line":95}},"f":{"0":57,"1":9,"2":18,"3":9,"4":1,"5":11}} +} diff --git a/ui/kit/coverage/favicon.png b/ui/kit/coverage/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c1525b811a167671e9de1fa78aab9f5c0b61cef7 GIT binary patch literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 100% + Statements + 422/422 +
+ + +
+ 97.15% + Branches + 171/176 +
+ + +
+ 100% + Functions + 24/24 +
+ + +
+ 100% + Lines + 422/422 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
src +
+
100%46/46100%15/15100%3/3100%46/46
src/components +
+
100%376/37696.89%156/161100%21/21100%376/376
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/prettify.css b/ui/kit/coverage/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/ui/kit/coverage/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/ui/kit/coverage/prettify.js b/ui/kit/coverage/prettify.js new file mode 100644 index 0000000..b322523 --- /dev/null +++ b/ui/kit/coverage/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/ui/kit/coverage/sort-arrow-sprite.png b/ui/kit/coverage/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed68316eb3f65dec9063332d2f69bf3093bbfab GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc literal 0 HcmV?d00001 diff --git a/ui/kit/coverage/sorter.js b/ui/kit/coverage/sorter.js new file mode 100644 index 0000000..4ed70ae --- /dev/null +++ b/ui/kit/coverage/sorter.js @@ -0,0 +1,210 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + + // Try to create a RegExp from the searchValue. If it fails (invalid regex), + // it will be treated as a plain text search + let searchRegex; + try { + searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive + } catch (error) { + searchRegex = null; + } + + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + let isMatch = false; + + if (searchRegex) { + // If a valid regex was created, use it for matching + isMatch = searchRegex.test(row.textContent); + } else { + // Otherwise, fall back to the original plain text search + isMatch = row.textContent + .toLowerCase() + .includes(searchValue.toLowerCase()); + } + + row.style.display = isMatch ? '' : 'none'; + } + } + + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/ui/kit/coverage/src/adminResult.ts.html b/ui/kit/coverage/src/adminResult.ts.html new file mode 100644 index 0000000..5918097 --- /dev/null +++ b/ui/kit/coverage/src/adminResult.ts.html @@ -0,0 +1,166 @@ + + + + + + Code coverage report for src/adminResult.ts + + + + + + + + + +
+
+

All files / src adminResult.ts

+
+ +
+ 100% + Statements + 12/12 +
+ + +
+ 100% + Branches + 6/6 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 12/12 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28  +  +  +  +  +  +  +  +  +  +  +  +  +  +3x +3x +3x +3x +3x +3x +3x +2x +2x +2x +  +1x +1x + 
// The FROZEN verb envelope (docs/rfc/goldpath-admin-contract.md): every mutating verb
+// answers { ok, message } — 200 when ok, 400 with the same envelope when refused.
+// Refusals TEACH; the kit surfaces the message verbatim, never paraphrased.
+export interface GoldpathAdminResult {
+  ok: boolean;
+  message: string;
+}
+ 
+export type VerbOutcome =
+  | { kind: "ok"; message: string }
+  | { kind: "refused"; message: string }
+  | { kind: "error"; status: number };
+ 
+/** Executes one admin verb per the frozen contract's envelope semantics. */
+export async function executeVerb(
+  url: string,
+  init: RequestInit,
+  fetcher: typeof fetch = fetch,
+): Promise<VerbOutcome> {
+  const response = await fetcher(url, { method: "POST", ...init });
+  if (response.status === 200 || response.status === 400) {
+    const result = (await response.json()) as GoldpathAdminResult;
+    return result.ok ? { kind: "ok", message: result.message } : { kind: "refused", message: result.message };
+  }
+ 
+  return { kind: "error", status: response.status };
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/src/components/AppShell.tsx.html b/ui/kit/coverage/src/components/AppShell.tsx.html new file mode 100644 index 0000000..f966d8c --- /dev/null +++ b/ui/kit/coverage/src/components/AppShell.tsx.html @@ -0,0 +1,487 @@ + + + + + + Code coverage report for src/components/AppShell.tsx + + + + + + + + + +
+
+

All files / src/components AppShell.tsx

+
+ +
+ 100% + Statements + 75/75 +
+ + +
+ 100% + Branches + 30/30 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 75/75 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +1351x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +14x +  +  +  +  +14x +14x +14x +14x +  +14x +14x +14x +2x +2x +2x +2x +2x +  +2x +2x +  +14x +  +14x +2x +2x +2x +2x +2x +2x +2x +  +2x +4x +2x +2x +2x +  +  +14x +39x +39x +39x +39x +39x +39x +39x +39x +39x +39x +  +39x +39x +39x +1x +  +39x +  +14x +  +14x +14x +14x +  +14x +  +14x +14x +14x +14x +  +14x +14x +14x +14x +  +14x + 
import type { ReactNode } from "react";
+ 
+export interface ShellNavItem {
+  /** Stable id — also the capability key when the console lights panels by discovery. */
+  id: string;
+  label: string;
+  /** Absent means the capability is present but has nothing to count. */
+  badge?: number;
+  onSelect: () => void;
+}
+ 
+export interface ShellService {
+  name: string;
+  onSelect: () => void;
+}
+ 
+export interface AppShellProps {
+  /** Product/tenant word in the rail head — the console is one shell, many services. */
+  title: string;
+  nav: ShellNavItem[];
+  activeId: string;
+  children: ReactNode;
+  /** Cross-service registry entries; a single-service console omits it entirely. */
+  services?: ShellService[];
+  activeService?: string;
+  collapsed?: boolean;
+  onToggleCollapsed?: () => void;
+  /**
+   * Rendered at the rail foot — theme toggle, sign-out, whatever the app owns. Receives
+   * the collapsed state so the caller can shrink with the rail (the eyes-on pass caught
+   * a full-width control spilling out of the 74px rail).
+   */
+  footer?: (collapsed: boolean) => ReactNode;
+}
+ 
+/**
+ * The app shell of ui-standard-v1 §3, vendored from the Mockifyr/Praxis layout: the PAGE
+ * never scrolls — the rail sits flush in the frame and only the content surface scrolls
+ * (its own `.scroll-area`). Capability-driven: the console renders the nav it is GIVEN,
+ * so a missing module is simply an absent item, never a dead link.
+ */
+export function AppShell({
+  title,
+  nav,
+  activeId,
+  children,
+  services,
+  activeService,
+  collapsed = false,
+  onToggleCollapsed,
+  footer,
+}: AppShellProps) {
+  return (
+    <div data-testid="app-shell" className="flex h-dvh overflow-hidden bg-app">
+      <aside
+        data-collapsed={collapsed}
+        className={`shrink-0 bg-app transition-[width] duration-300 ${collapsed ? "w-[74px]" : "w-[252px]"}`}
+      >
+        {/* The rail scrolls INDEPENDENTLY: a console composed of many capability panels
+            (console RFC §3's cross-service registry) must never clip its own nav inside
+            the frame's overflow-hidden — review R1 on this PR. */}
+        <nav
+          data-testid="shell-rail"
+          aria-label="console sections"
+          className="scroll-area flex h-full flex-col gap-1 overflow-y-auto p-3"
+        >
+          <div className="flex items-center justify-between px-2 py-3">
+            {!collapsed && <span className="truncate text-sm font-semibold">{title}</span>}
+            {onToggleCollapsed && (
+              <button
+                aria-label={collapsed ? "expand navigation" : "collapse navigation"}
+                aria-expanded={!collapsed}
+                className="rounded-md border border-border px-2 py-0.5 text-xs hover:bg-accent"
+                onClick={onToggleCollapsed}
+              >
+                {collapsed ? "»" : "«"}
+              </button>
+            )}
+          </div>
+ 
+          {services && services.length > 0 && !collapsed && (
+            <div className="mb-2 px-2">
+              <label className="text-[11px] text-faint" htmlFor="goldpath-service">service</label>
+              <select
+                id="goldpath-service"
+                className="mt-1 w-full rounded-md border border-border bg-background px-2 py-1 text-sm"
+                value={activeService ?? services[0].name}
+                onChange={(event) => services.find((s) => s.name === event.target.value)?.onSelect()}
+              >
+                {services.map((service) => (
+                  <option key={service.name} value={service.name}>{service.name}</option>
+                ))}
+              </select>
+            </div>
+          )}
+ 
+          {nav.map((item) => {
+            const active = item.id === activeId;
+            return (
+              <button
+                key={item.id}
+                aria-current={active ? "page" : undefined}
+                title={collapsed ? item.label : undefined}
+                className={`flex items-center justify-between rounded-md px-3 py-2 text-sm ${
+                  active ? "bg-primary text-primary-foreground" : "hover:bg-accent"
+                }`}
+                onClick={item.onSelect}
+              >
+                <span className={collapsed ? "sr-only" : "truncate"}>{item.label}</span>
+                {collapsed && <span aria-hidden="true">{item.label.slice(0, 1).toUpperCase()}</span>}
+                {item.badge !== undefined && item.badge > 0 && !collapsed && (
+                  <span className="ml-2 rounded-full bg-danger-bg px-1.5 text-xs text-danger">{item.badge}</span>
+                )}
+              </button>
+            );
+          })}
+ 
+          {footer && <div className="mt-auto px-2 pb-1">{footer(collapsed)}</div>}
+        </nav>
+      </aside>
+ 
+      <div className="min-w-0 flex-1 p-3 ps-0">
+        {/* The ONE scrolling surface — the frame stays put while content moves (§3). */}
+        <main
+          data-testid="shell-surface"
+          className="scroll-area h-full overflow-y-auto rounded-2xl border border-border bg-surface p-6"
+          style={{ boxShadow: "var(--shadow-surface)" }}
+        >
+          {children}
+        </main>
+      </div>
+    </div>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/src/components/AuditBlock.tsx.html b/ui/kit/coverage/src/components/AuditBlock.tsx.html new file mode 100644 index 0000000..abc40bf --- /dev/null +++ b/ui/kit/coverage/src/components/AuditBlock.tsx.html @@ -0,0 +1,343 @@ + + + + + + Code coverage report for src/components/AuditBlock.tsx + + + + + + + + + +
+
+

All files / src/components AuditBlock.tsx

+
+ +
+ 100% + Statements + 49/49 +
+ + +
+ 100% + Branches + 16/16 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 49/49 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +871x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +  +1x +8x +8x +  +1x +  +8x +8x +2x +2x +  +8x +1x +1x +  +5x +5x +  +  +  +  +  +  +  +1x +5x +1x +1x +  +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +4x +  +4x +4x +  +4x +4x +  +4x + 
/** One audit row of the frozen log, as the console reads it. */
+export interface AuditEntry {
+  id: number | string;
+  timestamp: string;
+  user?: string | null;
+  correlationId?: string | null;
+  entityType: string;
+  entityKey: string;
+  action: string;
+  propertyName: string;
+  oldValue?: string | null;
+  newValue?: string | null;
+}
+ 
+export interface AuditBlockProps {
+  entries: AuditEntry[];
+  /** Property names whose values are classified — rendered masked, NEVER in the DOM. */
+  classified?: string[];
+  emptyMessage?: string;
+}
+ 
+/** The system actor label — a null user is a SYSTEM flow, never an unknown human. */
+export const SYSTEM_ACTOR = "system";
+ 
+export function isClassified(propertyName: string, classified: string[] | undefined): boolean {
+  return classified?.some((name) => name.toLowerCase() === propertyName.toLowerCase()) ?? false;
+}
+ 
+const MASK = "••••••";
+ 
+function Value({ value, masked }: { value: string | null | undefined; masked: boolean }) {
+  if (masked) {
+    return <span className="font-mono text-xs text-faint" title="classified — masked by the console">{MASK}</span>;
+  }
+ 
+  if (value === null || value === undefined) {
+    return <span className="text-xs text-faint">∅</span>;   // an absent value, not an empty string
+  }
+ 
+  return <span className="font-mono text-xs">{value}</span>;
+}
+ 
+/**
+ * The audit trail block of ui-standard-v1 §4: old→new change rows with classified
+ * fields masked. The mask is applied HERE as the second line of defence — the API
+ * already refuses to hand out classified values — so a misconfigured server can never
+ * leak through the console's DOM.
+ */
+export function AuditBlock({ entries, classified, emptyMessage = "No audited changes." }: AuditBlockProps) {
+  if (entries.length === 0) {
+    return <p className="py-6 text-center text-sm text-muted-foreground">{emptyMessage}</p>;
+  }
+ 
+  return (
+    <div data-testid="audit-block" className="space-y-1">
+      {entries.map((entry) => {
+        const masked = isClassified(entry.propertyName, classified);
+        return (
+          <div key={entry.id} className="grid grid-cols-[auto_1fr] gap-x-4 rounded-md border border-border/60 px-3 py-2 text-sm">
+            <div className="text-xs text-muted-foreground">
+              <div>{new Date(entry.timestamp).toISOString().replace("T", " ").slice(0, 19)}</div>
+              <div className="text-faint">{entry.user ?? SYSTEM_ACTOR}</div>
+            </div>
+            <div>
+              <div className="flex flex-wrap items-baseline gap-x-2">
+                <span className="font-medium">{entry.propertyName}</span>
+                <span className="text-xs text-muted-foreground">
+                  {entry.action} · {entry.entityType} {entry.entityKey}
+                </span>
+                {masked && <span className="text-xs text-faint">(classified)</span>}
+              </div>
+              <div className="mt-0.5 flex flex-wrap items-center gap-2">
+                <Value value={entry.oldValue} masked={masked} />
+                <span className="text-xs text-faint">→</span>
+                <Value value={entry.newValue} masked={masked} />
+              </div>
+              {entry.correlationId && (
+                <div className="mt-0.5 font-mono text-[11px] text-faint">corr {entry.correlationId}</div>
+              )}
+            </div>
+          </div>
+        );
+      })}
+    </div>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/src/components/Banner.tsx.html b/ui/kit/coverage/src/components/Banner.tsx.html new file mode 100644 index 0000000..59a89c5 --- /dev/null +++ b/ui/kit/coverage/src/components/Banner.tsx.html @@ -0,0 +1,208 @@ + + + + + + Code coverage report for src/components/Banner.tsx + + + + + + + + + +
+
+

All files / src/components Banner.tsx

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +421x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +1x +14x +14x +14x +14x +14x +  +14x +14x +  +14x + 
import type { ReactNode } from "react";
+import type { StatusTone } from "../status";
+ 
+export interface BannerProps {
+  /** The semantic ramp only — the accent never carries meaning (ui-standard §1). */
+  tone: StatusTone;
+  children: ReactNode;
+  /**
+   * `alert` for something the operator must act on, `status` for a settled outcome.
+   * Screen readers treat them differently, so the caller chooses deliberately.
+   */
+  live?: "alert" | "status";
+  /** Inline pill next to a control (a verb's outcome) rather than a full-width box. */
+  dense?: boolean;
+}
+ 
+const TONE: Record<StatusTone, string> = {
+  success: "border-success-border bg-success-bg text-success",
+  info: "border-info-border bg-info-bg text-info",
+  warning: "border-warning-border bg-warning-bg text-warning",
+  danger: "border-danger-border bg-danger-bg text-danger",
+  violet: "border-violet-border bg-violet-bg text-violet",
+  neutral: "border-border bg-muted text-muted-foreground",
+};
+ 
+/**
+ * The one message box of the kit: every screen that must TELL the operator something
+ * uses it, so the tone language stays identical across shipped panels and adopter-built
+ * ones (console RFC §1 — the kit is everything a custom screen needs).
+ */
+export function Banner({ tone, children, live = "alert", dense = false }: BannerProps) {
+  return (
+    <div
+      role={live}
+      data-tone={tone}
+      className={`rounded-md border ${TONE[tone]} ${dense ? "px-2 py-0.5 text-xs" : "px-3 py-2 text-sm"}`}
+    >
+      {children}
+    </div>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/src/components/KeysetTable.tsx.html b/ui/kit/coverage/src/components/KeysetTable.tsx.html new file mode 100644 index 0000000..eddadbd --- /dev/null +++ b/ui/kit/coverage/src/components/KeysetTable.tsx.html @@ -0,0 +1,475 @@ + + + + + + Code coverage report for src/components/KeysetTable.tsx + + + + + + + + + +
+
+

All files / src/components KeysetTable.tsx

+
+ +
+ 100% + Statements + 82/82 +
+ + +
+ 97.14% + Branches + 34/35 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 82/82 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +1311x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +19x +18x +18x +  +  +  +  +  +  +  +  +1x +29x +29x +29x +29x +29x +  +29x +29x +15x +15x +15x +15x +13x +12x +12x +12x +12x +15x +2x +2x +2x +15x +29x +29x +  +29x +10x +29x +  +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +29x +18x +18x +18x +18x +18x +18x +18x +29x +29x +29x +  +29x +  +  +2x +  +  +29x +2x +2x +  +2x +2x +2x +2x +  +2x +2x +2x +  +  +29x +29x +  +29x +29x +29x +19x +19x +19x +19x +  +19x +19x +  +29x +29x +  +29x + 
import { type ReactNode, useCallback, useEffect, useRef, useState } from "react";
+import { Banner } from "./Banner";
+ 
+/** One keyset page — `nextCursor: null` means the end (the frozen paging contract). */
+export interface KeysetPage<T> {
+  items: T[];
+  nextCursor: string | null;
+}
+ 
+export interface KeysetColumn<T> {
+  header: string;
+  cell: (row: T) => ReactNode;
+  align?: "left" | "right";
+}
+ 
+export interface KeysetTableProps<T> {
+  columns: KeysetColumn<T>[];
+  /** Loads one page. The kit clamps `take` to the contract's [1, 500] before calling. */
+  loadPage: (cursor: string | null, take: number) => Promise<KeysetPage<T>>;
+  rowKey: (row: T) => string;
+  take?: number;
+  emptyMessage?: string;
+}
+ 
+/** AdminPaging.Clamp, mirrored — the UI never asks for what the API would refuse. */
+export function clampTake(take: number): number {
+  if (!Number.isFinite(take)) return 50;
+  return Math.min(500, Math.max(1, Math.trunc(take)));
+}
+ 
+type LoadState = "loading" | "idle" | "error";
+ 
+/**
+ * The keyset table of ui-standard-v1 §4: cursor pager only — NO offsets, NO page
+ * numbers, NO total count (the contract deliberately never counts large tables).
+ * Pages append; the walk ends when the API answers `nextCursor: null`.
+ */
+export function KeysetTable<T>({ columns, loadPage, rowKey, take = 50, emptyMessage = "Nothing here yet." }: KeysetTableProps<T>) {
+  const [rows, setRows] = useState<T[]>([]);
+  const [cursor, setCursor] = useState<string | null>(null);
+  const [ended, setEnded] = useState(false);
+  const [state, setState] = useState<LoadState>("loading");
+  const generation = useRef(0);
+ 
+  const fetchPage = useCallback(
+    async (from: string | null, fresh: boolean) => {
+      const mine = ++generation.current;
+      setState("loading");
+      try {
+        const page = await loadPage(from, clampTake(take));
+        if (mine !== generation.current) return;   // a newer load superseded this one
+        setRows((existing) => (fresh ? page.items : [...existing, ...page.items]));
+        setCursor(page.nextCursor);
+        setEnded(page.nextCursor === null);
+        setState("idle");
+      } catch {
+        if (mine !== generation.current) return;
+        setState("error");
+      }
+    },
+    [loadPage, take],
+  );
+ 
+  useEffect(() => {
+    void fetchPage(null, true);
+  }, [fetchPage]);
+ 
+  return (
+    <div data-testid="keyset-table">
+      <table className="w-full text-sm">
+        <thead>
+          <tr className="border-b border-border text-left text-xs text-muted-foreground">
+            {columns.map((column) => (
+              <th key={column.header} className={`py-2 pr-4 font-medium ${column.align === "right" ? "text-right" : ""}`}>
+                {column.header}
+              </th>
+            ))}
+          </tr>
+        </thead>
+        <tbody>
+          {rows.map((row) => (
+            <tr key={rowKey(row)} className="border-b border-border/60 hover:bg-muted/40">
+              {columns.map((column) => (
+                <td key={column.header} className={`py-2 pr-4 ${column.align === "right" ? "text-right" : ""}`}>
+                  {column.cell(row)}
+                </td>
+              ))}
+            </tr>
+          ))}
+        </tbody>
+      </table>
+ 
+      {state === "idle" && rows.length === 0 && ended && (
+        // Only the END of an empty walk is "empty" — an empty intermediate page keeps
+        // the load-more path alive without contradicting itself (review R3 on this PR).
+        <p className="py-6 text-center text-sm text-muted-foreground">{emptyMessage}</p>
+      )}
+ 
+      {state === "error" && (
+        <div className="my-3">
+          <Banner tone="danger">
+            The page could not be loaded.
+            <button
+              className="ml-3 rounded-md border border-border bg-background px-2 py-0.5 text-xs hover:bg-accent"
+              onClick={() => void fetchPage(rows.length === 0 ? null : cursor, rows.length === 0)}
+            >
+              retry
+            </button>
+          </Banner>
+        </div>
+      )}
+ 
+      <div className="flex items-center justify-between py-3">
+        <span className="text-xs text-faint">
+          {/* The honest footer: what is LOADED — never a total (the offset trap reborn). */}
+          {rows.length} loaded{ended ? " · end" : ""}
+        </span>
+        {!ended && state !== "error" && (
+          <button
+            className="rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-accent disabled:opacity-50"
+            disabled={state === "loading"}
+            onClick={() => void fetchPage(cursor, false)}
+          >
+            {state === "loading" ? "loading…" : "load more"}
+          </button>
+        )}
+      </div>
+    </div>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/src/components/RunProgress.tsx.html b/ui/kit/coverage/src/components/RunProgress.tsx.html new file mode 100644 index 0000000..77b56f3 --- /dev/null +++ b/ui/kit/coverage/src/components/RunProgress.tsx.html @@ -0,0 +1,478 @@ + + + + + + Code coverage report for src/components/RunProgress.tsx + + + + + + + + + +
+
+

All files / src/components RunProgress.tsx

+
+ +
+ 100% + Statements + 74/74 +
+ + +
+ 95.34% + Branches + 41/43 +
+ + +
+ 100% + Functions + 4/4 +
+ + +
+ 100% + Lines + 74/74 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +1321x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +12x +12x +12x +12x +6x +6x +6x +  +  +  +  +  +  +  +  +  +  +  +1x +14x +11x +14x +14x +14x +14x +14x +  +1x +1x +1x +1x +1x +  +4x +4x +4x +  +  +  +  +  +  +1x +7x +7x +7x +7x +7x +2x +5x +3x +2x +  +  +  +  +  +7x +  +7x +7x +7x +7x +7x +7x +7x +7x +1x +  +7x +1x +  +7x +  +7x +7x +7x +7x +7x +7x +  +7x +7x +  +7x +7x +7x +7x +7x +5x +5x +5x +5x +1x +4x +3x +1x +  +  +5x +5x +  +7x +7x +  +7x + 
import { StateBadge } from "./StateBadge";
+import type { StatusTone } from "../status";
+ 
+/** The run row of the frozen contract, as the console reads it. */
+export interface RunProgressData {
+  status: string;
+  startedAt: string;
+  finishedAt?: string | null;
+  deadlineAt?: string | null;
+  predictedFinishAt?: string | null;
+  totalChunks: number;
+  completedChunks: number;
+  failedChunks: number;
+  totalItems?: number | null;
+  itemFailures: number;
+}
+ 
+export interface RunProgressProps {
+  run: RunProgressData;
+  /** Injected for tests and for clock-skew-free rendering; defaults to now. */
+  now?: Date;
+}
+ 
+/** Items per second from the chunk rate — null while nothing has completed yet. */
+export function itemsPerSecond(run: RunProgressData, now: Date): number | null {
+  if (run.completedChunks <= 0 || run.totalChunks <= 0 || !run.totalItems) return null;
+  const end = run.finishedAt ? new Date(run.finishedAt) : now;
+  const seconds = (end.getTime() - new Date(run.startedAt).getTime()) / 1000;
+  if (!Number.isFinite(seconds) || seconds <= 0) return null;
+  const done = (run.completedChunks / run.totalChunks) * run.totalItems;
+  return done / seconds;
+}
+ 
+export type DeadlineVerdict = "none" | "on-track" | "overrun-predicted" | "overrun";
+ 
+/**
+ * The deadline verdict: a FINISHED run is judged on when it actually ended; a live run on
+ * the CLOCK first and its prediction second. The console warns BEFORE the deadline passes
+ * — that is the point of carrying a prediction — but a run that is still going after its
+ * deadline has already overrun, prediction or not. Reading that as "on track" (which it
+ * did until the UI coverage sweep of 2026-07-27) tells the operator the one thing that is
+ * certainly false.
+ */
+export function deadlineVerdict(run: RunProgressData, now: Date = new Date()): DeadlineVerdict {
+  if (!run.deadlineAt) return "none";
+  const deadline = new Date(run.deadlineAt).getTime();
+  if (run.finishedAt) return new Date(run.finishedAt).getTime() > deadline ? "overrun" : "on-track";
+  if (now.getTime() > deadline) return "overrun";
+  if (!run.predictedFinishAt) return "on-track";
+  return new Date(run.predictedFinishAt).getTime() > deadline ? "overrun-predicted" : "on-track";
+}
+ 
+const VERDICT_TEXT: Record<Exclude<DeadlineVerdict, "none">, string> = {
+  "on-track": "on track",
+  "overrun-predicted": "predicted to overrun",
+  overrun: "overran the deadline",
+};
+ 
+function formatRate(rate: number): string {
+  return rate >= 10 ? `${Math.round(rate).toLocaleString()} items/s` : `${rate.toFixed(1)} items/s`;
+}
+ 
+/**
+ * The run progress composite of ui-standard-v1 §4: chunk completion, live rate, and the
+ * prediction judged against the deadline. Percentages come from CHUNKS (the honest
+ * denominator the engine actually plans); item counts are shown, never guessed.
+ */
+export function RunProgress({ run, now = new Date() }: RunProgressProps) {
+  const pct = run.totalChunks > 0 ? Math.round((run.completedChunks / run.totalChunks) * 100) : 0;
+  const rate = itemsPerSecond(run, now);
+  const verdict = deadlineVerdict(run, now);
+  const barTone =
+    verdict === "overrun" || run.failedChunks > 0
+      ? "bg-danger"
+      : verdict === "overrun-predicted"
+        ? "bg-warning"
+        : "bg-primary";
+ 
+  // ui-standard-v1 §5: `Running + predicted-overrun` is a WARNING state at the badge
+  // level too — the chip is the operator's first glance, so it must carry the verdict
+  // (review R1 on this PR), not just the bar and the footnote. `extra` cannot do this:
+  // the standard MAP wins collisions by design, so the override is explicit.
+  const badgeTone: StatusTone | undefined = verdict === "overrun-predicted" ? "warning" : undefined;
+ 
+  return (
+    <div data-testid="run-progress" className="space-y-2">
+      <div className="flex items-center gap-3">
+        <StateBadge state={run.status} tone={badgeTone} />
+        <span className="text-sm text-muted-foreground">
+          {run.completedChunks}/{run.totalChunks} chunks
+        </span>
+        {run.failedChunks > 0 && (
+          <span className="text-xs text-danger">{run.failedChunks} failed</span>
+        )}
+        {run.itemFailures > 0 && (
+          <span className="text-xs text-danger">{run.itemFailures} items in repair</span>
+        )}
+      </div>
+ 
+      <div
+        role="progressbar"
+        aria-valuenow={pct}
+        aria-valuemin={0}
+        aria-valuemax={100}
+        className="h-2 w-full overflow-hidden rounded-full bg-muted"
+      >
+        <div className={`h-full ${barTone}`} style={{ width: `${pct}%` }} />
+      </div>
+ 
+      <div className="flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground">
+        <span>{pct}%</span>
+        {rate !== null && <span>{formatRate(rate)}</span>}
+        {run.totalItems != null && <span>{run.totalItems.toLocaleString()} items planned</span>}
+        {verdict !== "none" && (
+          <span
+            data-verdict={verdict}
+            className={
+              verdict === "overrun"
+                ? "text-danger"
+                : verdict === "overrun-predicted"
+                  ? "text-warning"
+                  : "text-success"
+            }
+          >
+            {VERDICT_TEXT[verdict]}
+          </span>
+        )}
+      </div>
+    </div>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/src/components/StateBadge.tsx.html b/ui/kit/coverage/src/components/StateBadge.tsx.html new file mode 100644 index 0000000..0f81df9 --- /dev/null +++ b/ui/kit/coverage/src/components/StateBadge.tsx.html @@ -0,0 +1,190 @@ + + + + + + Code coverage report for src/components/StateBadge.tsx + + + + + + + + + +
+
+

All files / src/components StateBadge.tsx

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +361x +  +1x +1x +1x +1x +1x +1x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +9x +9x +9x +9x +9x +  +9x +9x +  +9x + 
import { statusTone, type StatusTone } from "../status";
+ 
+const TONE_CLASSES: Record<StatusTone, string> = {
+  success: "text-success bg-success-bg border-success-border",
+  info: "text-info bg-info-bg border-info-border",
+  warning: "text-warning bg-warning-bg border-warning-border",
+  danger: "text-danger bg-danger-bg border-danger-border",
+  violet: "text-violet bg-violet-bg border-violet-border",
+  neutral: "text-muted-foreground bg-muted border-border",
+};
+ 
+export interface StateBadgeProps {
+  state: string;
+  /** Adopter vocabulary — extends, never replaces, the standard map. */
+  extra?: Record<string, StatusTone>;
+  /**
+   * EXPLICIT tone override for composite states the ramp defines beyond the bare word
+   * (§5: `Running + predicted-overrun` is warning). Deliberate and greppable — `extra`
+   * cannot express this because the standard MAP wins collisions by design.
+   */
+  tone?: StatusTone;
+}
+ 
+/** The state chip of ui-standard-v1 §5: semantic ramp only, never the accent. */
+export function StateBadge({ state, extra, tone: override }: StateBadgeProps) {
+  const tone = override ?? statusTone(state, extra);
+  return (
+    <span
+      data-tone={tone}
+      className={`inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium ${TONE_CLASSES[tone]}`}
+    >
+      {state}
+    </span>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/src/components/VerbButton.tsx.html b/ui/kit/coverage/src/components/VerbButton.tsx.html new file mode 100644 index 0000000..f92c764 --- /dev/null +++ b/ui/kit/coverage/src/components/VerbButton.tsx.html @@ -0,0 +1,439 @@ + + + + + + Code coverage report for src/components/VerbButton.tsx + + + + + + + + + +
+
+

All files / src/components VerbButton.tsx

+
+ +
+ 100% + Statements + 60/60 +
+ + +
+ 93.75% + Branches + 30/32 +
+ + +
+ 100% + Functions + 6/6 +
+ + +
+ 100% + Lines + 60/60 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +1191x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +1x +57x +57x +57x +  +57x +9x +9x +9x +9x +9x +1x +1x +  +9x +9x +9x +9x +  +57x +29x +29x +29x +29x +29x +21x +21x +21x +21x +21x +21x +21x +  +29x +29x +29x +29x +  +29x +29x +29x +  +29x +29x +  +29x +  +28x +28x +28x +57x +57x +57x +  +57x +57x +  +57x +4x +  +  +57x +  +2x +  +  +57x +2x +2x +1x +1x +2x +  +57x +  +57x + 
import { useState } from "react";
+import { Banner } from "./Banner";
+import type { VerbOutcome } from "../adminResult";
+ 
+export interface VerbButtonProps {
+  /** The verb's label — kebab-case on the wire, human words here. */
+  label: string;
+  /** The confirm question. Confirm-before-verb is NOT optional (ui-standard §3). */
+  confirm: string;
+  /** Executes the verb; receives the evidence note when the verb collects one. */
+  execute: (note?: string) => Promise<VerbOutcome>;
+  /**
+   * Turns the confirm step into an EVIDENCE step: the operator must type why before the
+   * verb runs (four-eyes gates, holds, erasures — the note is the audit trail's reason,
+   * and the server stores it). Omit for verbs that carry no reason.
+   */
+  note?: { label: string; required?: boolean };
+  /** Fired after every settled outcome (refresh tables, close panels...). */
+  onDone?: (outcome: VerbOutcome) => void;
+  /** Marks destructive verbs (reject, erase, pause-all) — the tone, not the flow. */
+  destructive?: boolean;
+  /**
+   * Suppresses the button's OWN outcome strip, for verbs whose control legitimately
+   * disappears once the verb lands (a four-eyes gate vanishes the moment the batch
+   * leaves the gated state). The composite must then render the outcome itself from
+   * `onDone` — otherwise the operator's confirmation dies with the button.
+   */
+  quiet?: boolean;
+}
+ 
+type Phase =
+  | { at: "rest" }
+  | { at: "confirming" }
+  | { at: "executing" }
+  | { at: "settled"; outcome: VerbOutcome };
+ 
+/**
+ * The verb button of ui-standard-v1 §4: every mutating admin verb goes through the
+ * confirm dialog, the `GoldpathAdminResult` message is surfaced VERBATIM (refusals
+ * TEACH — the UI never paraphrases them), and the audit hint reminds the operator the
+ * server records every verb (the actor comes from the token, never the UI).
+ */
+export function VerbButton({ label, confirm, execute, onDone, destructive = false, note, quiet = false }: VerbButtonProps) {
+  const [phase, setPhase] = useState<Phase>({ at: "rest" });
+  const [reason, setReason] = useState("");
+  const missingReason = note?.required === true && reason.trim().length === 0;
+ 
+  const run = async () => {
+    setPhase({ at: "executing" });
+    let outcome: VerbOutcome;
+    try {
+      outcome = await execute(note ? reason.trim() : undefined);
+    } catch {
+      outcome = { kind: "error", status: 0 };   // transport failure — the verb may not have run
+    }
+ 
+    setPhase({ at: "settled", outcome });
+    setReason("");
+    onDone?.(outcome);
+  };
+ 
+  if (phase.at === "confirming") {
+    return (
+      <span role="alertdialog" aria-label={`confirm ${label}`} className="inline-flex flex-wrap items-center gap-2 rounded-md border border-border bg-background px-3 py-1.5 text-sm">
+        <span>{confirm}</span>
+        <span className="text-xs text-faint">· audited</span>
+        {note && (
+          <input
+            aria-label={note.label}
+            placeholder={note.label}
+            value={reason}
+            onChange={(event) => setReason(event.target.value)}
+            className="w-56 rounded-md border border-border bg-background px-2 py-0.5 text-xs"
+          />
+        )}
+        <button
+          className={`rounded-md border px-2 py-0.5 text-xs font-medium disabled:opacity-50 ${destructive ? "border-danger-border bg-danger-bg text-danger" : "border-border bg-background hover:bg-accent"}`}
+          disabled={missingReason}
+          onClick={() => void run()}
+        >
+          {label}
+        </button>
+        <button className="rounded-md border border-border px-2 py-0.5 text-xs hover:bg-accent" onClick={() => setPhase({ at: "rest" })}>
+          cancel
+        </button>
+      </span>
+    );
+  }
+ 
+  return (
+    <span className="inline-flex items-center gap-2">
+      <button
+        className={`rounded-md border px-3 py-1.5 text-sm font-medium disabled:opacity-50 ${destructive ? "border-danger-border text-danger hover:bg-danger-bg" : "border-border bg-background hover:bg-accent"}`}
+        disabled={phase.at === "executing"}
+        onClick={() => setPhase({ at: "confirming" })}
+      >
+        {phase.at === "executing" ? "working…" : label}
+      </button>
+ 
+      {!quiet && phase.at === "settled" && phase.outcome.kind === "ok" && (
+        <Banner tone="success" live="status" dense>{phase.outcome.message}</Banner>
+      )}
+ 
+      {!quiet && phase.at === "settled" && phase.outcome.kind === "refused" && (
+        // The refusal surface: the envelope's message VERBATIM — it teaches the fix.
+        <Banner tone="danger" dense>{phase.outcome.message}</Banner>
+      )}
+ 
+      {!quiet && phase.at === "settled" && phase.outcome.kind === "error" && (
+        <Banner tone="warning" dense>
+          {phase.outcome.status === 0
+            ? "the request did not reach the server — the verb may not have run"
+            : `unexpected ${phase.outcome.status} — check the service logs`}
+        </Banner>
+      )}
+    </span>
+  );
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/src/components/index.html b/ui/kit/coverage/src/components/index.html new file mode 100644 index 0000000..c373e72 --- /dev/null +++ b/ui/kit/coverage/src/components/index.html @@ -0,0 +1,206 @@ + + + + + + Code coverage report for src/components + + + + + + + + + +
+
+

All files src/components

+
+ +
+ 100% + Statements + 376/376 +
+ + +
+ 96.89% + Branches + 156/161 +
+ + +
+ 100% + Functions + 21/21 +
+ + +
+ 100% + Lines + 376/376 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
AppShell.tsx +
+
100%75/75100%30/30100%2/2100%75/75
AuditBlock.tsx +
+
100%49/49100%16/16100%3/3100%49/49
Banner.tsx +
+
100%18/18100%3/3100%1/1100%18/18
KeysetTable.tsx +
+
100%82/8297.14%34/35100%4/4100%82/82
RunProgress.tsx +
+
100%74/7495.34%41/43100%4/4100%74/74
StateBadge.tsx +
+
100%18/18100%2/2100%1/1100%18/18
VerbButton.tsx +
+
100%60/6093.75%30/32100%6/6100%60/60
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/src/duration.ts.html b/ui/kit/coverage/src/duration.ts.html new file mode 100644 index 0000000..ebac967 --- /dev/null +++ b/ui/kit/coverage/src/duration.ts.html @@ -0,0 +1,133 @@ + + + + + + Code coverage report for src/duration.ts + + + + + + + + + +
+
+

All files / src duration.ts

+
+ +
+ 100% + Statements + 7/7 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 7/7 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17  +  +  +  +  +  +  +  +  +1x +6x +6x +6x +6x +1x +1x + 
/**
+ * One duration vocabulary for the whole console (ui-standard-v1 §3: the same fact reads
+ * the same everywhere). Every panel measures ages the operator must judge at a glance —
+ * how long a batch has waited at the gate, how long a campaign still needs, how long the
+ * oldest notification has sat in the queue — and three hand-rolled copies of the same
+ * ladder had already drifted apart in their tiers.
+ *
+ * The ladder is deliberately coarse: an operator reads "2h", not "7 213 seconds".
+ */
+export function humanizeSeconds(seconds: number): string {
+  const value = Math.max(0, seconds);
+  if (value < 90) return `${Math.round(value)}s`;
+  if (value < 5400) return `${Math.round(value / 60)}m`;          // up to 90 minutes
+  if (value < 172_800) return `${Math.round(value / 3600)}h`;     // up to 48 hours
+  return `${Math.round(value / 86_400)}d`;
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/src/index.html b/ui/kit/coverage/src/index.html new file mode 100644 index 0000000..013b8fe --- /dev/null +++ b/ui/kit/coverage/src/index.html @@ -0,0 +1,146 @@ + + + + + + Code coverage report for src + + + + + + + + + +
+
+

All files src

+
+ +
+ 100% + Statements + 46/46 +
+ + +
+ 100% + Branches + 15/15 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 46/46 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
adminResult.ts +
+
100%12/12100%6/6100%1/1100%12/12
duration.ts +
+
100%7/7100%5/5100%1/1100%7/7
status.ts +
+
100%27/27100%4/4100%1/1100%27/27
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/coverage/src/status.ts.html b/ui/kit/coverage/src/status.ts.html new file mode 100644 index 0000000..b104b3e --- /dev/null +++ b/ui/kit/coverage/src/status.ts.html @@ -0,0 +1,217 @@ + + + + + + Code coverage report for src/status.ts + + + + + + + + + +
+
+

All files / src status.ts

+
+ +
+ 100% + Statements + 27/27 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 27/27 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45  +  +  +  +1x +  +1x +1x +1x +1x +1x +  +1x +1x +1x +1x +1x +1x +1x +  +1x +1x +1x +  +1x +1x +1x +  +1x +1x +1x +1x +  +  +1x +  +  +  +  +  +  +1x +16x +16x + 
// ui-standard-v1 §5: domain states map onto the SEMANTIC ramp — the accent never
+// carries meaning, the ramp never carries brand. One table, every badge.
+export type StatusTone = "success" | "info" | "warning" | "danger" | "violet" | "neutral";
+ 
+const MAP: Record<string, StatusTone> = {
+  // run model
+  Completed: "success",
+  Running: "info",
+  Failed: "danger",
+  Recovering: "violet",
+  Resumed: "violet",
+  // bulk batch
+  Received: "info",
+  Validating: "info",
+  Validated: "warning", // awaiting the gate
+  Approved: "info",     // gate passed — work still ahead; Completed is the success end
+  Executing: "info",
+  CompletedWithFailures: "danger",
+  Rejected: "danger",
+  // campaign
+  Enumerating: "info",    // the leader is materializing targets
+  Paused: "warning",      // an operator stopped the release; nothing is wrong yet
+  Aborted: "danger",
+  // notification
+  Requested: "info",
+  Sent: "success",
+  Suppressed: "warning",
+  // payments (sample vocabulary — adopters extend via `extra`)
+  Submitted: "info",
+  PendingApproval: "warning",
+  Executed: "success",
+};
+ 
+/** Every state the standard maps — galleries and docs derive from THIS, never a hand copy. */
+export const KNOWN_STATES: readonly string[] = Object.keys(MAP);
+ 
+/**
+ * Resolves a domain state to its ramp tone; unknown states are honest neutrals.
+ * The STANDARD map wins collisions — adopter vocabulary extends, never replaces
+ * (ui-standard-v1 §5): a console must read the same everywhere.
+ */
+export function statusTone(state: string, extra?: Record<string, StatusTone>): StatusTone {
+  return MAP[state] ?? extra?.[state] ?? "neutral";
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/ui/kit/package.json b/ui/kit/package.json index e2989b0..b7c30ee 100644 --- a/ui/kit/package.json +++ b/ui/kit/package.json @@ -6,7 +6,7 @@ "type": "module", "main": "src/index.ts", "scripts": { - "test": "vitest run", + "test": "vitest run --coverage --coverage.thresholds.statements=95 --coverage.thresholds.branches=90 --coverage.thresholds.functions=75 --coverage.thresholds.lines=95", "typecheck": "tsc --noEmit", "gallery": "vite" }, @@ -22,6 +22,7 @@ "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", "@vitejs/plugin-react": "^4.3.4", + "@vitest/coverage-v8": "2.1.8", "jsdom": "^25.0.1", "react": "^19.0.0", "react-dom": "^19.0.0", diff --git a/ui/kit/pnpm-lock.yaml b/ui/kit/pnpm-lock.yaml index 15f7637..a714192 100644 --- a/ui/kit/pnpm-lock.yaml +++ b/ui/kit/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: '@vitejs/plugin-react': specifier: ^4.3.4 version: 4.7.0(vite@8.1.4(jiti@2.7.0)) + '@vitest/coverage-v8': + specifier: 2.1.8 + version: 2.1.8(vitest@2.1.9(jsdom@25.0.1)(lightningcss@1.32.0)) jsdom: specifier: ^25.0.1 version: 25.0.1 @@ -56,6 +59,10 @@ packages: '@adobe/css-tools@4.5.0': resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} @@ -146,6 +153,9 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@csstools/color-helpers@5.1.0': resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==} engines: {node: '>=18'} @@ -321,6 +331,14 @@ packages: cpu: [x64] os: [win32] + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/schema@0.1.6': + resolution: {integrity: sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==} + engines: {node: '>=8'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -346,6 +364,10 @@ packages: '@oxc-project/types@0.139.0': resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@rolldown/binding-android-arm64@1.1.5': resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -743,6 +765,15 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@vitest/coverage-v8@2.1.8': + resolution: {integrity: sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==} + peerDependencies: + '@vitest/browser': 2.1.8 + vitest: 2.1.8 + peerDependenciesMeta: + '@vitest/browser': + optional: true + '@vitest/expect@2.1.9': resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} @@ -780,10 +811,22 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} @@ -798,11 +841,25 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + baseline-browser-mapping@2.10.43: resolution: {integrity: sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==} engines: {node: '>=6.0.0'} hasBin: true + brace-expansion@2.1.2: + resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} + + brace-expansion@5.0.8: + resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==} + engines: {node: 20 || >=22} + browserslist@4.28.6: resolution: {integrity: sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -827,6 +884,13 @@ packages: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -834,6 +898,10 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -886,9 +954,18 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + electron-to-chromium@1.5.389: resolution: {integrity: sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enhanced-resolve@5.21.6: resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} engines: {node: '>=10.13.0'} @@ -941,6 +1018,10 @@ packages: picomatch: optional: true + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + form-data@4.0.6: resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} engines: {node: '>= 6'} @@ -965,6 +1046,11 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -972,6 +1058,10 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -988,6 +1078,9 @@ packages: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -1004,9 +1097,35 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jiti@2.7.0: resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true @@ -1123,6 +1242,13 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -1139,6 +1265,18 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1154,9 +1292,20 @@ packages: nwsapi@2.2.24: resolution: {integrity: sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -1233,9 +1382,26 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -1246,10 +1412,30 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -1260,6 +1446,10 @@ packages: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} + test-exclude@7.0.2: + resolution: {integrity: sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==} + engines: {node: '>=18'} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -1436,11 +1626,24 @@ packages: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} hasBin: true + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + ws@8.21.0: resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} @@ -1467,6 +1670,11 @@ snapshots: '@adobe/css-tools@4.5.0': {} + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@asamuzakjp/css-color@3.2.0': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) @@ -1589,6 +1797,8 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 + '@bcoe/v8-coverage@0.2.3': {} + '@csstools/color-helpers@5.1.0': {} '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': @@ -1694,6 +1904,17 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.2.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/schema@0.1.6': {} + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -1722,6 +1943,9 @@ snapshots: '@oxc-project/types@0.139.0': {} + '@pkgjs/parseargs@0.11.0': + optional: true + '@rolldown/binding-android-arm64@1.1.5': optional: true @@ -2002,6 +2226,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/coverage-v8@2.1.8(vitest@2.1.9(jsdom@25.0.1)(lightningcss@1.32.0))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.4.3 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + magic-string: 0.30.21 + magicast: 0.3.5 + std-env: 3.10.0 + test-exclude: 7.0.2 + tinyrainbow: 1.2.0 + vitest: 2.1.9(jsdom@25.0.1)(lightningcss@1.32.0) + transitivePeerDependencies: + - supports-color + '@vitest/expect@2.1.9': dependencies: '@vitest/spy': 2.1.9 @@ -2046,8 +2288,16 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} + aria-query@5.3.0: dependencies: dequal: 2.0.3 @@ -2058,8 +2308,20 @@ snapshots: asynckit@0.4.0: {} + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + baseline-browser-mapping@2.10.43: {} + brace-expansion@2.1.2: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@5.0.8: + dependencies: + balanced-match: 4.0.4 + browserslist@4.28.6: dependencies: baseline-browser-mapping: 2.10.43 @@ -2087,12 +2349,24 @@ snapshots: check-error@2.1.3: {} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 convert-source-map@2.0.0: {} + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + css.escape@1.5.1: {} cssstyle@4.6.0: @@ -2131,8 +2405,14 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + eastasianwidth@0.2.0: {} + electron-to-chromium@1.5.389: {} + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + enhanced-resolve@5.21.6: dependencies: graceful-fs: 4.2.11 @@ -2195,6 +2475,11 @@ snapshots: optionalDependencies: picomatch: 4.0.5 + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + form-data@4.0.6: dependencies: asynckit: 0.4.0 @@ -2228,10 +2513,21 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.2 + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.9 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + gopd@1.2.0: {} graceful-fs@4.2.11: {} + has-flag@4.0.0: {} + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -2246,6 +2542,8 @@ snapshots: dependencies: whatwg-encoding: 3.1.1 + html-escaper@2.0.2: {} + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -2266,8 +2564,39 @@ snapshots: indent-string@4.0.0: {} + is-fullwidth-code-point@3.0.0: {} + is-potential-custom-element-name@1.0.1: {} + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + debug: 4.4.3 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jiti@2.7.0: {} js-tokens@4.0.0: {} @@ -2367,6 +2696,16 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.3.5: + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + source-map-js: 1.2.1 + + make-dir@4.0.0: + dependencies: + semver: 7.8.5 + math-intrinsics@1.1.0: {} mime-db@1.52.0: {} @@ -2377,6 +2716,16 @@ snapshots: min-indent@1.0.1: {} + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.8 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.2 + + minipass@7.1.3: {} + ms@2.1.3: {} nanoid@3.3.16: {} @@ -2385,10 +2734,19 @@ snapshots: nwsapi@2.2.24: {} + package-json-from-dist@1.0.1: {} + parse5@7.3.0: dependencies: entities: 6.0.1 + path-key@3.1.1: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.3 + pathe@1.1.2: {} pathval@2.0.1: {} @@ -2493,24 +2851,64 @@ snapshots: semver@6.3.1: {} + semver@7.8.5: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + siginfo@2.0.0: {} + signal-exit@4.1.0: {} + source-map-js@1.2.1: {} stackback@0.0.2: {} std-env@3.10.0: {} + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + symbol-tree@3.2.4: {} tailwindcss@4.3.2: {} tapable@2.3.3: {} + test-exclude@7.0.2: + dependencies: + '@istanbuljs/schema': 0.1.6 + glob: 10.5.0 + minimatch: 10.2.5 + tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -2641,11 +3039,27 @@ snapshots: tr46: 5.1.1 webidl-conversions: 7.0.0 + which@2.0.2: + dependencies: + isexe: 2.0.0 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + ws@8.21.0: {} xml-name-validator@5.0.0: {} diff --git a/ui/kit/src/components/AppShell.test.tsx b/ui/kit/src/components/AppShell.test.tsx index f22c170..0c7db9f 100644 --- a/ui/kit/src/components/AppShell.test.tsx +++ b/ui/kit/src/components/AppShell.test.tsx @@ -124,4 +124,27 @@ describe("the app shell (ui-standard-v1 §3 — the surface scrolls, never the p rerender(

c

); expect(screen.queryByText("0")).toBeNull(); }); + + it("the service picker defaults to the first service and switches to the one chosen", async () => { + const chosen: string[] = []; + render( + chosen.push("payments") }, + { name: "claims", onSelect: () => chosen.push("claims") }, + ]} + > +

body

+
, + ); + + // No activeService given: the picker shows the first, rather than an empty box. + const picker = screen.getByLabelText(/service/i); + expect(picker).toHaveValue("payments"); + + await userEvent.selectOptions(picker, "claims"); + expect(chosen).toEqual(["claims"]); + }); }); diff --git a/ui/kit/src/components/KeysetTable.test.tsx b/ui/kit/src/components/KeysetTable.test.tsx index ed1808e..f227459 100644 --- a/ui/kit/src/components/KeysetTable.test.tsx +++ b/ui/kit/src/components/KeysetTable.test.tsx @@ -100,4 +100,53 @@ describe("the keyset table (ui-standard-v1 §4 — cursor pager, never offsets)" expect(load).toHaveBeenNthCalledWith(1, null, 50); expect(load).toHaveBeenNthCalledWith(2, null, 50); // same page, fresh walk }); + + it("a superseded load never overwrites the newer one — the page the operator sees is the last they asked for", async () => { + // Page 1 resolves LAST: without the generation guard it would land on top of the + // second page and the table would silently show stale rows. + const gates: ((rows: string[]) => void)[] = []; + const loadPage = (cursor: string | null) => + new Promise>((resolve) => { + gates.push((rows) => resolve({ items: rows, nextCursor: cursor === null ? "c1" : null })); + }); + + const { rerender } = render( + + columns={[{ header: "Row", cell: (row) => row }]} + loadPage={loadPage} + rowKey={(row) => row} + />, + ); + + // A second load supersedes the first (a filter change does exactly this). + rerender( + + columns={[{ header: "Row", cell: (row) => row }]} + loadPage={(cursor) => loadPage(cursor)} + rowKey={(row) => row} + />, + ); + + await waitFor(() => expect(gates).toHaveLength(2)); + gates[1](["fresh"]); + gates[0](["stale"]); + + expect(await screen.findByText("fresh")).toBeInTheDocument(); + await waitFor(() => expect(screen.queryByText("stale")).toBeNull()); + }); + + it("right-aligned columns align their header AND their cells", () => { + render( + + columns={[{ header: "Count", align: "right", cell: (row) => row.n }]} + loadPage={async () => ({ items: [{ n: 7 }], nextCursor: null })} + rowKey={(row) => String(row.n)} + />, + ); + + return waitFor(() => { + expect(screen.getByRole("columnheader", { name: "Count" })).toHaveClass("text-right"); + expect(screen.getByRole("cell", { name: "7" })).toHaveClass("text-right"); + }); + }); }); diff --git a/ui/kit/src/components/RunProgress.test.tsx b/ui/kit/src/components/RunProgress.test.tsx index 4fc1f61..131827b 100644 --- a/ui/kit/src/components/RunProgress.test.tsx +++ b/ui/kit/src/components/RunProgress.test.tsx @@ -31,27 +31,39 @@ describe("the run progress composite (ui-standard-v1 §4)", () => { expect(itemsPerSecond(finished, now)).toBeCloseTo(2000); // 100k in 50s, not in 100s }); - it("judges the deadline: live runs on the prediction, finished runs on reality", () => { - expect(deadlineVerdict(base)).toBe("none"); // no deadline - expect(deadlineVerdict({ ...base, deadlineAt: "2026-07-26T11:00:00Z" })).toBe("on-track"); + it("judges the deadline: live runs on the clock and the prediction, finished runs on reality", () => { + // The clock is INJECTED: a verdict that silently reads the wall clock cannot be tested + // and would drift under a skewed browser. + const now = new Date("2026-07-26T10:10:00Z"); + expect(deadlineVerdict(base, now)).toBe("none"); // no deadline + expect(deadlineVerdict({ ...base, deadlineAt: "2026-07-26T11:00:00Z" }, now)).toBe("on-track"); expect(deadlineVerdict({ ...base, deadlineAt: "2026-07-26T10:30:00Z", predictedFinishAt: "2026-07-26T10:45:00Z", - })).toBe("overrun-predicted"); + }, now)).toBe("overrun-predicted"); + + // Still running AFTER its deadline: it has overrun, prediction or not. Anything else + // would tell the operator the one thing that is certainly false. + expect(deadlineVerdict({ ...base, deadlineAt: "2026-07-26T10:05:00Z" }, now)).toBe("overrun"); + expect(deadlineVerdict({ + ...base, + deadlineAt: "2026-07-26T10:05:00Z", + predictedFinishAt: "2026-07-26T10:04:00Z", + }, now)).toBe("overrun"); expect(deadlineVerdict({ ...base, status: "Completed", deadlineAt: "2026-07-26T10:30:00Z", predictedFinishAt: "2026-07-26T10:45:00Z", finishedAt: "2026-07-26T10:20:00Z", - })).toBe("on-track"); // reality beat the prediction + }, now)).toBe("on-track"); // reality beat the prediction expect(deadlineVerdict({ ...base, status: "Completed", deadlineAt: "2026-07-26T10:30:00Z", finishedAt: "2026-07-26T10:44:00Z", - })).toBe("overrun"); + }, now)).toBe("overrun"); }); it("renders chunk progress, the rate and the predicted-overrun warning", () => { @@ -99,4 +111,31 @@ describe("the run progress composite (ui-standard-v1 §4)", () => { expect(screen.getByRole("progressbar")).toHaveAttribute("aria-valuenow", "0"); expect(screen.getByText("0/0 chunks")).toBeInTheDocument(); }); + + it("an overrun that ALREADY happened reads danger; one merely predicted reads warning", () => { + const overrun = render( + , + ); + expect(overrun.container.querySelector(".text-danger")).not.toBeNull(); + overrun.unmount(); + + const predicted = render( + , + ); + expect(predicted.container.querySelector(".text-warning")).not.toBeNull(); + expect(predicted.container.querySelector(".text-danger")).toBeNull(); + }); }); diff --git a/ui/kit/src/components/RunProgress.tsx b/ui/kit/src/components/RunProgress.tsx index 1120033..55ab99e 100644 --- a/ui/kit/src/components/RunProgress.tsx +++ b/ui/kit/src/components/RunProgress.tsx @@ -34,14 +34,18 @@ export function itemsPerSecond(run: RunProgressData, now: Date): number | null { export type DeadlineVerdict = "none" | "on-track" | "overrun-predicted" | "overrun"; /** - * The deadline verdict: a FINISHED run is judged on when it actually ended; a live run - * on its prediction. The console warns BEFORE the deadline passes — that is the whole - * point of carrying a prediction in the run row. + * The deadline verdict: a FINISHED run is judged on when it actually ended; a live run on + * the CLOCK first and its prediction second. The console warns BEFORE the deadline passes + * — that is the point of carrying a prediction — but a run that is still going after its + * deadline has already overrun, prediction or not. Reading that as "on track" (which it + * did until the UI coverage sweep of 2026-07-27) tells the operator the one thing that is + * certainly false. */ -export function deadlineVerdict(run: RunProgressData): DeadlineVerdict { +export function deadlineVerdict(run: RunProgressData, now: Date = new Date()): DeadlineVerdict { if (!run.deadlineAt) return "none"; const deadline = new Date(run.deadlineAt).getTime(); if (run.finishedAt) return new Date(run.finishedAt).getTime() > deadline ? "overrun" : "on-track"; + if (now.getTime() > deadline) return "overrun"; if (!run.predictedFinishAt) return "on-track"; return new Date(run.predictedFinishAt).getTime() > deadline ? "overrun-predicted" : "on-track"; } @@ -64,7 +68,7 @@ function formatRate(rate: number): string { export function RunProgress({ run, now = new Date() }: RunProgressProps) { const pct = run.totalChunks > 0 ? Math.round((run.completedChunks / run.totalChunks) * 100) : 0; const rate = itemsPerSecond(run, now); - const verdict = deadlineVerdict(run); + const verdict = deadlineVerdict(run, now); const barTone = verdict === "overrun" || run.failedChunks > 0 ? "bg-danger" diff --git a/ui/kit/src/components/VerbButton.test.tsx b/ui/kit/src/components/VerbButton.test.tsx index 50d6a92..ef361aa 100644 --- a/ui/kit/src/components/VerbButton.test.tsx +++ b/ui/kit/src/components/VerbButton.test.tsx @@ -137,4 +137,21 @@ describe("the verb button (ui-standard-v1 §3/§4 — confirm-before-verb, verba await waitFor(() => expect(seen).toEqual([ok("approved")])); expect(screen.queryByText("approved")).toBeNull(); }); + + it("an unexpected STATUS is named — the operator gets a number to take to the logs", async () => { + render( + Promise.resolve({ kind: "error", status: 503 } as VerbOutcome)} + />, + ); + + await userEvent.click(screen.getByRole("button", { name: "trigger" })); + await userEvent.click(within(screen.getByRole("alertdialog")).getByRole("button", { name: "trigger" })); + + // Status 0 means "never left the browser"; a real status means the service answered + // something unexpected — two different stories, told differently. + expect(await screen.findByText(/unexpected 503 — check the service logs/)).toBeInTheDocument(); + }); }); diff --git a/ui/kit/vitest.config.ts b/ui/kit/vitest.config.ts index af50570..4eb2dbd 100644 --- a/ui/kit/vitest.config.ts +++ b/ui/kit/vitest.config.ts @@ -5,6 +5,13 @@ export default defineConfig({ plugins: [react()], test: { environment: "jsdom", + coverage: { + // Only the SOURCE is judged: the gallery and the dev entry point are worked + // examples, and a barrel file has nothing to test. + include: ["src/**/*.{ts,tsx}"], + exclude: ["src/index.ts", "src/test-setup.ts", "src/**/*.{test,spec}.{ts,tsx}"], + }, + globals: true, setupFiles: ["./src/test-setup.ts"], }, From 430394efa827acfb8bc1d65b3402dab93efbe5dd Mon Sep 17 00:00:00 2001 From: Omer Celik Date: Mon, 27 Jul 2026 13:17:32 +0300 Subject: [PATCH 2/3] chore: coverage reports are build output, not source (review R6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The generated HTML report went in with the coverage work — ~10k lines that re-diff on every run because each file embeds its timestamp. Removed and ignored. Co-Authored-By: Claude Opus 5 --- .gitignore | 3 + ui/console/coverage/ArchivalPanel.tsx.html | 1258 ----------- ui/console/coverage/BulkPanel.tsx.html | 1159 ---------- ui/console/coverage/CampaignPanel.tsx.html | 1468 ------------- ui/console/coverage/Console.tsx.html | 409 ---- .../coverage/NotificationPanel.tsx.html | 1027 --------- ui/console/coverage/RunConsole.tsx.html | 787 ------- ui/console/coverage/adminClient.ts.html | 1909 ----------------- ui/console/coverage/base.css | 224 -- ui/console/coverage/block-navigation.js | 87 - ui/console/coverage/clover.xml | 1704 --------------- ui/console/coverage/coverage-final.json | 8 - ui/console/coverage/favicon.png | Bin 445 -> 0 bytes ui/console/coverage/index.html | 206 -- ui/console/coverage/prettify.css | 1 - ui/console/coverage/prettify.js | 2 - ui/console/coverage/sort-arrow-sprite.png | Bin 138 -> 0 bytes ui/console/coverage/sorter.js | 210 -- ui/kit/coverage/base.css | 224 -- ui/kit/coverage/block-navigation.js | 87 - ui/kit/coverage/clover.xml | 464 ---- ui/kit/coverage/coverage-final.json | 11 - ui/kit/coverage/favicon.png | Bin 445 -> 0 bytes ui/kit/coverage/index.html | 131 -- ui/kit/coverage/prettify.css | 1 - ui/kit/coverage/prettify.js | 2 - ui/kit/coverage/sort-arrow-sprite.png | Bin 138 -> 0 bytes ui/kit/coverage/sorter.js | 210 -- ui/kit/coverage/src/adminResult.ts.html | 166 -- .../coverage/src/components/AppShell.tsx.html | 487 ----- .../src/components/AuditBlock.tsx.html | 343 --- .../coverage/src/components/Banner.tsx.html | 208 -- .../src/components/KeysetTable.tsx.html | 475 ---- .../src/components/RunProgress.tsx.html | 478 ----- .../src/components/StateBadge.tsx.html | 190 -- .../src/components/VerbButton.tsx.html | 439 ---- ui/kit/coverage/src/components/index.html | 206 -- ui/kit/coverage/src/duration.ts.html | 133 -- ui/kit/coverage/src/index.html | 146 -- ui/kit/coverage/src/status.ts.html | 217 -- 40 files changed, 3 insertions(+), 15077 deletions(-) delete mode 100644 ui/console/coverage/ArchivalPanel.tsx.html delete mode 100644 ui/console/coverage/BulkPanel.tsx.html delete mode 100644 ui/console/coverage/CampaignPanel.tsx.html delete mode 100644 ui/console/coverage/Console.tsx.html delete mode 100644 ui/console/coverage/NotificationPanel.tsx.html delete mode 100644 ui/console/coverage/RunConsole.tsx.html delete mode 100644 ui/console/coverage/adminClient.ts.html delete mode 100644 ui/console/coverage/base.css delete mode 100644 ui/console/coverage/block-navigation.js delete mode 100644 ui/console/coverage/clover.xml delete mode 100644 ui/console/coverage/coverage-final.json delete mode 100644 ui/console/coverage/favicon.png delete mode 100644 ui/console/coverage/index.html delete mode 100644 ui/console/coverage/prettify.css delete mode 100644 ui/console/coverage/prettify.js delete mode 100644 ui/console/coverage/sort-arrow-sprite.png delete mode 100644 ui/console/coverage/sorter.js delete mode 100644 ui/kit/coverage/base.css delete mode 100644 ui/kit/coverage/block-navigation.js delete mode 100644 ui/kit/coverage/clover.xml delete mode 100644 ui/kit/coverage/coverage-final.json delete mode 100644 ui/kit/coverage/favicon.png delete mode 100644 ui/kit/coverage/index.html delete mode 100644 ui/kit/coverage/prettify.css delete mode 100644 ui/kit/coverage/prettify.js delete mode 100644 ui/kit/coverage/sort-arrow-sprite.png delete mode 100644 ui/kit/coverage/sorter.js delete mode 100644 ui/kit/coverage/src/adminResult.ts.html delete mode 100644 ui/kit/coverage/src/components/AppShell.tsx.html delete mode 100644 ui/kit/coverage/src/components/AuditBlock.tsx.html delete mode 100644 ui/kit/coverage/src/components/Banner.tsx.html delete mode 100644 ui/kit/coverage/src/components/KeysetTable.tsx.html delete mode 100644 ui/kit/coverage/src/components/RunProgress.tsx.html delete mode 100644 ui/kit/coverage/src/components/StateBadge.tsx.html delete mode 100644 ui/kit/coverage/src/components/VerbButton.tsx.html delete mode 100644 ui/kit/coverage/src/components/index.html delete mode 100644 ui/kit/coverage/src/duration.ts.html delete mode 100644 ui/kit/coverage/src/index.html delete mode 100644 ui/kit/coverage/src/status.ts.html diff --git a/.gitignore b/.gitignore index c7c5be5..516f1a1 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ test-results/ # UI kit / console (U1+) node_modules/ ui/**/dist/ + +# Coverage reports are BUILD OUTPUT: regenerated by `pnpm test`, timestamped, never reviewed. +coverage/ diff --git a/ui/console/coverage/ArchivalPanel.tsx.html b/ui/console/coverage/ArchivalPanel.tsx.html deleted file mode 100644 index 58b855a..0000000 --- a/ui/console/coverage/ArchivalPanel.tsx.html +++ /dev/null @@ -1,1258 +0,0 @@ - - - - - - Code coverage report for ArchivalPanel.tsx - - - - - - - - - -
-
-

All files ArchivalPanel.tsx

-
- -
- 100% - Statements - 308/308 -
- - -
- 89.88% - Branches - 80/89 -
- - -
- 77.77% - Functions - 21/27 -
- - -
- 100% - Lines - 308/308 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -3921x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -4x -4x -4x -4x -  -  -  -  -  -  -  -1x -118x -118x -118x -118x -118x -118x -118x -  -118x -118x -118x -118x -  -  -118x -  -118x -118x -4x -4x -4x -  -118x -21x -21x -21x -21x -20x -20x -20x -21x -21x -21x -21x -21x -118x -  -  -118x -46x -13x -13x -13x -13x -13x -13x -13x -13x -118x -  -118x -118x -118x -118x -  -118x -118x -118x -118x -  -118x -9x -9x -9x -9x -9x -9x -9x -  -118x -  -4x -4x -4x -4x -3x -  -3x -2x -1x -4x -1x -1x -1x -4x -  -118x -  -118x -118x -118x -  -118x -118x -118x -118x -108x -108x -108x -108x -108x -108x -108x -  -108x -108x -108x -108x -108x -108x -  -108x -108x -108x -108x -118x -118x -118x -118x -  -118x -1x -1x -1x -  -  -118x -6x -6x -4x -4x -4x -  -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -  -6x -  -  -118x -118x -118x -118x -  -118x -118x -118x -118x -118x -1x -1x -1x -1x -  -118x -108x -108x -108x -118x -118x -118x -118x -  -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -  -118x -118x -  -118x -  -118x -118x -  -118x -10x -10x -10x -  -  -118x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -  -  -17x -17x -17x -17x -17x -17x -17x -17x -17x -  -17x -6x -6x -6x -  -17x -2x -  -  -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -  -17x -  -  -1x -1x -1x -1x -  -  -17x -17x -17x -17x -  -17x -17x -  -  -17x -17x -1x -1x -1x -  -17x -17x -  -  -118x -118x -118x -118x -118x -  -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -88x -1x -  -87x -  -118x -118x -118x -118x -118x -118x -118x -  -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -118x -  -118x -  -118x -118x -118x -  -118x - 
import { useCallback, useEffect, useState } from "react";
-import { Banner, humanizeSeconds, KeysetTable, StateBadge, VerbButton } from "@goldpath/kit";
-import type { VerbOutcome } from "@goldpath/kit";
-import type {
-  AdminClient,
-  ArchiveDefinitionStatus,
-  ArchiveEntry,
-  ChainFinding,
-  ErasureRecord,
-  LegalHold,
-} from "./adminClient";
- 
-export interface ArchivalPanelProps {
-  client: AdminClient;
-  /** Injected in tests; only used to age the hold list. */
-  now?: Date;
-}
- 
-/** The verb envelope, adapted to the kit's outcome type — refusals stay data. */
-async function asOutcome(call: Promise<{ ok: boolean; message: string }>): Promise<VerbOutcome> {
-  const result = await call;
-  return result.ok ? { kind: "ok", message: result.message } : { kind: "refused", message: result.message };
-}
- 
-/**
- * The archival panel (console RFC §3): the chain's health, retrieval by key, and the three
- * lifecycle verbs — hold, lift, erase — each of which writes its own evidence row. The
- * archive/purge/verify RUNS live in the run console; what this screen owns is the
- * lifecycle and the proof that the chain is still intact.
- */
-export function ArchivalPanel({ client, now }: ArchivalPanelProps) {
-  const [definitions, setDefinitions] = useState<ArchiveDefinitionStatus[] | null>(null);
-  const [definition, setDefinition] = useState<string>("");
-  const [key, setKey] = useState<string>("");
-  const [entry, setEntry] = useState<ArchiveEntry | null>(null);
-  const [lookedUp, setLookedUp] = useState<string | null>(null);
-  const [revealDocument, setRevealDocument] = useState(false);
-  const [findings, setFindings] = useState<{ definition: string; findings: ChainFinding[] } | null>(null);
-  // A verification that could not RUN is its own state: neither "verifies" nor "broken".
-  const [verifyFailed, setVerifyFailed] = useState<string | null>(null);
-  const [includeLifted, setIncludeLifted] = useState(false);
-  const [error, setError] = useState<string | null>(null);
-  const [refreshToken, setRefreshToken] = useState(0);
-  // A lifecycle verb changes what the entry IS (held, erased), so the buttons around it
-  // re-render — the outcome has to live above them.
-  const [outcome, setOutcome] = useState<VerbOutcome | null>(null);
- 
-  const refresh = () => setRefreshToken((token) => token + 1);
-  const settle = (result: VerbOutcome) => {
-    setOutcome(result);
-    refresh();
-  };
- 
-  useEffect(() => {
-    let live = true;
-    client
-      .archiveDefinitions()
-      .then((found) => {
-        if (!live) return;
-        setDefinitions(found);
-        setDefinition((current) => current || found[0]?.name || "");
-      })
-      .catch(() => live && setError("the archive definitions could not be loaded"));
-    return () => {
-      live = false;
-    };
-  }, [client, refreshToken]);
- 
-  // The open entry re-reads on refresh: a hold or an erasure changes the very row shown.
-  useEffect(() => {
-    if (!lookedUp || !definition) return;
-    let live = true;
-    client
-      .archiveEntry(definition, lookedUp)
-      .then((found) => live && setEntry(found))
-      .catch(() => live && setError(`entry ${lookedUp} could not be read`));
-    return () => {
-      live = false;
-    };
-  }, [client, definition, lookedUp, refreshToken]);
- 
-  const loadHolds = useCallback(
-    async (_cursor: string | null, take: number) => ({ items: await client.holds(includeLifted, take), nextCursor: null }),
-    [client, includeLifted, refreshToken],
-  );
- 
-  const loadErasures = useCallback(
-    async (_cursor: string | null, take: number) => ({ items: await client.erasures(take), nextCursor: null }),
-    [client, refreshToken],
-  );
- 
-  const lookUp = () => {
-    const trimmed = key.trim();
-    if (!trimmed) return;
-    setOutcome(null);
-    setRevealDocument(false);
-    setEntry(null);
-    setLookedUp(trimmed);
-  };
- 
-  const verify = async (name: string): Promise<VerbOutcome> => {
-    // Clear FIRST: a stale verdict from the previous run must never stand in for this one.
-    setFindings(null);
-    setVerifyFailed(null);
-    try {
-      const found = await client.verifyChain(name);
-      setFindings({ definition: name, findings: found });
-      // An empty finding list is the good news, and it is said as such.
-      return found.length === 0
-        ? { kind: "ok", message: `${name}: the chain verifies — no findings` }
-        : { kind: "refused", message: `${name}: ${found.length} chain finding(s) — see below` };
-    } catch {
-      setVerifyFailed(name);
-      return { kind: "error", status: 0 };
-    }
-  };
- 
-  const clock = now ?? new Date();
- 
-  return (
-    <div data-testid="archival-panel" className="space-y-6">
-      {error && <Banner tone="danger">{error}</Banner>}
- 
-      <section>
-        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Archives</h2>
-        <ul className="space-y-2">
-          {(definitions ?? []).map((archive) => (
-            <li key={archive.name} className="flex flex-wrap items-center gap-3 rounded-md border border-border/60 px-3 py-2">
-              <span className="text-sm font-medium">{archive.name}</span>
-              <span className="text-xs text-faint">{archive.entries} entries</span>
-              <span className={`text-xs ${archive.dueBacklog > 0 ? "text-warning" : "text-faint"}`}>
-                {archive.dueBacklog} due to archive
-              </span>
-              <span className="text-xs text-faint">{archive.activeHolds} active holds</span>
-              {/* The chain head and the purge watermark together say how much history is provable. */}
-              <span className="text-xs text-faint">chain head {archive.chainHead} · purged through {archive.purgedThrough}</span>
-              <span className="ml-auto">
-                <VerbButton
-                  label={`verify ${archive.name}`}
-                  confirm={`Verify the ${archive.name} chain end to end? This reads every entry.`}
-                  execute={() => verify(archive.name)}
-                  // Quiet: the findings section below says it richer, and says it in one place.
-                  quiet
-                />
-              </span>
-            </li>
-          ))}
-          {definitions?.length === 0 && <li className="text-xs text-faint">No archives are defined in this app.</li>}
-        </ul>
-      </section>
- 
-      {verifyFailed && (
-        <Banner tone="warning" live="alert">
-          {verifyFailed}: the verification could not be run — the chain's state is unknown, not proven good.
-        </Banner>
-      )}
- 
-      {findings && (
-        <section data-testid="chain-findings">
-          {findings.findings.length === 0 ? (
-            <Banner tone="success" live="status">
-              {findings.definition}: the chain verifies — every entry links to the one before it.
-            </Banner>
-          ) : (
-            <>
-              <Banner tone="danger" live="alert">
-                {findings.definition}: the chain does NOT verify — {findings.findings.length} finding(s).
-              </Banner>
-              <ul className="mt-2 space-y-1">
-                {findings.findings.map((finding) => (
-                  <li key={`${finding.definition}-${finding.chainIndex}`} className="flex flex-wrap items-baseline gap-2 text-xs">
-                    <span className="font-mono">#{finding.chainIndex}</span>
-                    <span className="font-mono">{finding.aggregateKey}</span>
-                    <span className="text-danger">{finding.problem}</span>
-                  </li>
-                ))}
-              </ul>
-            </>
-          )}
-        </section>
-      )}
- 
-      <section>
-        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Retrieve</h2>
-        <div className="flex flex-wrap items-end gap-2">
-          <label className="flex flex-col gap-1 text-xs text-muted-foreground">
-            Archive
-            <select
-              aria-label="archive"
-              className="rounded-md border border-border bg-background px-2 py-1 text-sm text-foreground"
-              value={definition}
-              onChange={(event) => {
-                setDefinition(event.target.value);
-                setEntry(null);
-                setLookedUp(null);
-              }}
-            >
-              {(definitions ?? []).map((archive) => (
-                <option key={archive.name} value={archive.name}>
-                  {archive.name}
-                </option>
-              ))}
-            </select>
-          </label>
-          <label className="flex flex-col gap-1 text-xs text-muted-foreground">
-            Aggregate key
-            <input
-              aria-label="aggregate key"
-              className="w-64 rounded-md border border-border bg-background px-2 py-1 text-sm text-foreground"
-              value={key}
-              onChange={(event) => setKey(event.target.value)}
-              onKeyDown={(event) => event.key === "Enter" && lookUp()}
-            />
-          </label>
-          <button
-            className="rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-accent"
-            onClick={lookUp}
-          >
-            retrieve
-          </button>
-        </div>
-        {/* The archive is keyed, not browsable — saying so beats an empty search box. */}
-        <p className="mt-1 text-xs text-faint">
-          An archive is retrieved by key, never browsed: the contract has no listing route, and the console invents none.
-        </p>
-      </section>
- 
-      {lookedUp && !entry && (
-        <Banner tone="info">
-          No entry for “{lookedUp}” in {definition} — it may never have been archived, or it may have been purged.
-        </Banner>
-      )}
- 
-      {entry && (
-        <section data-testid="archive-entry" className="rounded-lg border border-border p-4">
-          <div className="mb-3 flex flex-wrap items-center gap-3">
-            <h2 className="text-sm font-medium">
-              {entry.definition} · <span className="font-mono">{entry.aggregateKey}</span>
-            </h2>
-            {entry.erasedAt && <StateBadge state="Erased" tone="warning" />}
-            {entry.tenant && <span className="text-xs text-faint">tenant {entry.tenant}</span>}
-            <span className="ml-auto flex flex-wrap gap-2">
-              <VerbButton
-                label="hold"
-                confirm={`Place a legal hold on ${entry.aggregateKey}? It will survive retention purges until lifted.`}
-                note={{ label: "case reference (required)", required: true }}
-                execute={(caseReference) => asOutcome(client.placeHold(entry.definition, entry.aggregateKey, caseReference ?? ""))}
-                onDone={settle}
-                quiet
-              />
-              <VerbButton
-                label="lift-hold"
-                confirm={`Lift the hold on ${entry.aggregateKey}? Retention applies again from now on.`}
-                execute={() => asOutcome(client.liftHold(entry.definition, entry.aggregateKey))}
-                onDone={settle}
-                quiet
-              />
-              <VerbButton
-                label="erase"
-                // Erasure redacts classified fields IN PLACE and re-stamps the content
-                // hash; the chain stays verifiable because the sealed hash is kept.
-                confirm={`Erase the classified fields of ${entry.aggregateKey}? This cannot be undone — the entry stays in the chain, redacted, and the erasure is recorded.`}
-                note={{ label: "subject key (required)", required: true }}
-                execute={(subjectKey) => asOutcome(client.erase(entry.definition, entry.aggregateKey, subjectKey ?? ""))}
-                onDone={settle}
-                quiet
-                destructive
-              />
-            </span>
-          </div>
- 
-          {outcome && outcome.kind !== "error" && (
-            <Banner tone={outcome.kind === "ok" ? "success" : "danger"} live={outcome.kind === "ok" ? "status" : "alert"}>
-              {outcome.message}
-            </Banner>
-          )}
-          {outcome?.kind === "error" && (
-            <Banner tone="warning">the verb did not reach the server — it may not have been applied</Banner>
-          )}
- 
-          <dl className="mt-3 grid grid-cols-2 gap-x-6 gap-y-2 text-xs sm:grid-cols-3">
-            <div>
-              <dt className="text-faint">Chain index</dt>
-              <dd>{entry.chainIndex}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Due / archived</dt>
-              <dd>
-                {entry.dueAt} → {entry.archivedAt}
-              </dd>
-            </div>
-            <div>
-              <dt className="text-faint">Schema version</dt>
-              <dd>{entry.schemaVersion}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Chain hash (sealed)</dt>
-              <dd className="font-mono break-all">{entry.chainHash}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Content hash (current)</dt>
-              <dd className="font-mono break-all">{entry.contentHash}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Previous hash</dt>
-              <dd className="font-mono break-all">{entry.previousHash || "genesis"}</dd>
-            </div>
-          </dl>
- 
-          {entry.erasedAt && (
-            // Divergence WITHOUT an erasure stamp is tamper; with one, it is the record
-            // of a redaction — the panel spells out which of the two this is.
-            <p className="mt-3 text-xs text-warning">
-              Redacted {entry.erasedAt}: the current content hash differs from the sealed one BY DESIGN
-              {entry.preErasureContentHash ? ` (pre-erasure hash ${entry.preErasureContentHash} is kept, so the chain still verifies)` : ""}.
-            </p>
-          )}
- 
-          <div className="mt-4">
-            <button
-              className="rounded-md border border-border bg-background px-3 py-1 text-xs hover:bg-accent"
-              onClick={() => setRevealDocument((shown) => !shown)}
-            >
-              {revealDocument ? "hide document" : "reveal document"}
-            </button>
-            {/* Hidden by DEFAULT: the API returns the whole archived graph, and an operator
-                opening a screen should not spray personal data across it by accident. */}
-            <span className="ml-2 text-xs text-faint">the archived graph, as stored — it may contain personal data</span>
-            {revealDocument && (
-              <pre className="mt-2 max-h-64 overflow-auto rounded-md border border-border bg-muted p-3 text-xs">
-                {entry.document}
-              </pre>
-            )}
-          </div>
-        </section>
-      )}
- 
-      <section>
-        <div className="mb-2 flex flex-wrap items-center gap-3">
-          <h2 className="text-sm font-medium text-muted-foreground">Legal holds</h2>
-          <label className="flex items-center gap-2 text-xs text-muted-foreground">
-            <input type="checkbox" checked={includeLifted} onChange={(event) => setIncludeLifted(event.target.checked)} />
-            include lifted
-          </label>
-        </div>
-        <KeysetTable<LegalHold>
-          key={`holds-${includeLifted}-${refreshToken}`}
-          columns={[
-            { header: "Archive", cell: (hold) => hold.definition },
-            { header: "Key", cell: (hold) => <span className="font-mono text-xs">{hold.aggregateKey}</span> },
-            { header: "Case", cell: (hold) => hold.caseReference },
-            { header: "Placed", cell: (hold) => `${hold.placedBy} · ${humanizeSeconds((clock.getTime() - Date.parse(hold.placedAt)) / 1000)} ago` },
-            {
-              header: "State",
-              cell: (hold) =>
-                hold.liftedAt ? (
-                  <span className="text-xs text-faint">lifted by {hold.liftedBy} at {hold.liftedAt}</span>
-                ) : (
-                  <StateBadge state="Held" tone="warning" />
-                ),
-            },
-          ]}
-          loadPage={loadHolds}
-          rowKey={(hold) => String(hold.id)}
-          emptyMessage={includeLifted ? "No holds have ever been placed." : "No active holds."}
-        />
-      </section>
- 
-      <section>
-        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Erasures</h2>
-        <KeysetTable<ErasureRecord>
-          key={`erasures-${refreshToken}`}
-          columns={[
-            { header: "Subject", cell: (record) => <span className="font-mono text-xs">{record.subjectKey}</span> },
-            { header: "Requested by", cell: (record) => record.requestedBy },
-            { header: "At", cell: (record) => record.requestedAt },
-            { header: "Entries", align: "right", cell: (record) => record.entriesAffected },
-            { header: "Detail", cell: (record) => record.detail ?? "—" },
-          ]}
-          loadPage={loadErasures}
-          rowKey={(record) => String(record.id)}
-          emptyMessage="No erasure has been performed."
-        />
-        {/* The record IS the answer to a subject request — that is why it is a list, not a log line. */}
-        <p className="mt-1 text-xs text-faint">
-          Each row is the durable answer to one erasure request: who asked, when, and how many entries it touched.
-        </p>
-      </section>
-    </div>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/console/coverage/BulkPanel.tsx.html b/ui/console/coverage/BulkPanel.tsx.html deleted file mode 100644 index b974206..0000000 --- a/ui/console/coverage/BulkPanel.tsx.html +++ /dev/null @@ -1,1159 +0,0 @@ - - - - - - Code coverage report for BulkPanel.tsx - - - - - - - - - -
-
-

All files BulkPanel.tsx

-
- -
- 100% - Statements - 279/279 -
- - -
- 86.17% - Branches - 81/94 -
- - -
- 95.23% - Functions - 20/21 -
- - -
- 100% - Lines - 279/279 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -3591x -  -  -  -  -  -  -  -  -  -5x -5x -5x -5x -  -  -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -  -  -1x -  -  -  -  -  -  -1x -76x -76x -76x -76x -76x -  -  -76x -76x -76x -76x -76x -  -76x -  -  -76x -5x -5x -5x -  -76x -23x -23x -23x -23x -22x -22x -22x -23x -23x -23x -23x -23x -76x -  -76x -76x -  -  -24x -22x -24x -76x -76x -  -  -76x -76x -15x -15x -15x -  -15x -15x -76x -76x -  -  -  -76x -27x -76x -  -76x -32x -17x -17x -17x -  -15x -15x -15x -15x -15x -15x -15x -15x -76x -  -  -  -76x -2x -2x -2x -  -  -  -1x -1x -1x -1x -1x -1x -2x -  -76x -17x -17x -  -76x -  -76x -76x -76x -  -76x -55x -55x -55x -55x -55x -55x -55x -55x -  -  -76x -76x -76x -76x -57x -57x -57x -112x -112x -112x -57x -57x -1x -  -57x -76x -76x -76x -  -76x -76x -76x -76x -  -76x -76x -76x -76x -76x -76x -  -76x -57x -57x -57x -76x -76x -76x -76x -76x -76x -  -  -76x -76x -76x -76x -4x -4x -4x -4x -4x -  -76x -76x -76x -  -76x -76x -  -76x -76x -76x -76x -  -76x -76x -76x -76x -76x -76x -1x -1x -1x -  -76x -76x -472x -472x -472x -76x -76x -76x -  -76x -76x -76x -76x -76x -76x -40x -40x -40x -  -76x -76x -76x -76x -76x -76x -76x -76x -76x -76x -76x -  -76x -20x -20x -20x -20x -20x -20x -20x -20x -20x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -17x -  -17x -17x -17x -17x -17x -17x -17x -  -20x -  -20x -  -  -8x -8x -8x -  -  -20x -2x -  -  -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -  -20x -  -  -1x -1x -1x -1x -1x -  -  -20x -20x -20x -20x -19x -19x -19x -19x -19x -19x -19x -19x -19x -19x -19x -19x -  -20x -  -76x -  -76x - 
import { useCallback, useEffect, useRef, useState } from "react";
-import { Banner, humanizeSeconds, KeysetTable, StateBadge, VerbButton } from "@goldpath/kit";
-import type { VerbOutcome } from "@goldpath/kit";
-import type { AdminClient, BulkBatchInfo, BulkDefinitionStatus, BulkRowError } from "./adminClient";
- 
-export interface BulkPanelProps {
-  client: AdminClient;
-}
- 
-/** The verb envelope, adapted to the kit's outcome type — refusals stay data. */
-async function asOutcome(call: Promise<{ ok: boolean; message: string }>): Promise<VerbOutcome> {
-  const result = await call;
-  return result.ok ? { kind: "ok", message: result.message } : { kind: "refused", message: result.message };
-}
- 
-/** The states the intake surface can filter by — the engine's own enum, in its order. */
-const STATES = [
-  "Received",
-  "Validating",
-  "Validated",
-  "Approved",
-  "Rejected",
-  "Executing",
-  "Completed",
-  "CompletedWithFailures",
-] as const;
- 
-/** The gate only opens on a validated batch; everywhere else the decision is already made. */
-const GATED = "Validated";
- 
-/**
- * The bulk intake panel (console RFC §3): upload → validation report → the four-eyes gate.
- * The run half of a batch lives in the RUN console (a batch executes as a run) — this
- * screen owns only what the intake surface owns, and links the two by run id.
- */
-export function BulkPanel({ client }: BulkPanelProps) {
-  const [definitions, setDefinitions] = useState<BulkDefinitionStatus[] | null>(null);
-  const [state, setState] = useState<string>("");
-  const [selectedId, setSelectedId] = useState<string | null>(null);
-  const [selected, setSelected] = useState<BulkBatchInfo | null>(null);
-  const [error, setError] = useState<string | null>(null);
-  // The gate's outcome lives HERE, not in the buttons: approving moves the batch out of
-  // the gated state, so the gate — and any message inside it — unmounts on the refresh.
-  const [decision, setDecision] = useState<VerbOutcome | null>(null);
-  const [refreshToken, setRefreshToken] = useState(0);
-  const fileInput = useRef<HTMLInputElement>(null);
-  const [uploadInto, setUploadInto] = useState<string>("");
-  const [file, setFile] = useState<File | null>(null);
- 
-  const refresh = () => setRefreshToken((token) => token + 1);
- 
-  /** A gate decision: keep the message, then re-read the batch it changed. */
-  const settle = (outcome: VerbOutcome) => {
-    setDecision(outcome);
-    refresh();
-  };
- 
-  useEffect(() => {
-    let live = true;
-    client
-      .bulkDefinitions()
-      .then((found) => {
-        if (!live) return;
-        setDefinitions(found);
-        setUploadInto((current) => current || found[0]?.name || "");
-      })
-      .catch(() => live && setError("the bulk definitions could not be loaded"));
-    return () => {
-      live = false;
-    };
-  }, [client, refreshToken]);
- 
-  const loadBatches = useCallback(
-    async (_cursor: string | null, take: number) => {
-      // The batch list is take-bounded, not cursor-paged (frozen contract): one page,
-      // honestly ended — the table stops instead of faking a cursor it was never given.
-      const batches = await client.bulkBatches({ state: state || undefined, take });
-      return { items: batches, nextCursor: null };
-    },
-    [client, state, refreshToken],
-  );
- 
-  // The validation report IS keyset-paged: the cursor is the last row number of the page.
-  const loadErrors = useCallback(
-    async (cursor: string | null, take: number) => {
-      if (!selectedId) return { items: [] as BulkRowError[], nextCursor: null };
-      const errors = await client.bulkErrors(selectedId, { afterRow: cursor ? Number(cursor) : 0, take });
-      const last = errors.at(-1);
-      // A short page is the end; a full page hands back the last row number as the cursor.
-      return { items: errors, nextCursor: errors.length < take || !last ? null : String(last.rowNumber) };
-    },
-    [client, selectedId, refreshToken],
-  );
- 
-  // The open batch RE-FETCHES on refresh rather than closing: a gate outcome renders
-  // inside this panel, so tearing it down would hide the message just produced.
-  useEffect(() => {
-    setDecision(null);   // a decision belongs to the batch it was made on
-  }, [selectedId]);
- 
-  useEffect(() => {
-    if (!selectedId) {
-      setSelected(null);
-      return;
-    }
- 
-    let live = true;
-    client
-      .batch(selectedId)
-      .then((batch) => live && setSelected(batch))
-      .catch(() => live && setError(`batch ${selectedId} could not be opened`));
-    return () => {
-      live = false;
-    };
-  }, [client, selectedId, refreshToken]);
- 
-  // Upload is the one intake verb that is NOT the admin envelope (it answers the batch it
-  // created), so the outcome is built here — honestly: a failed post must not read "ok".
-  const upload = async (): Promise<VerbOutcome> => {
-    if (!file || !uploadInto) return { kind: "error", status: 0 };
-    try {
-      const batch = await client.uploadBatch(uploadInto, file);
-      // The chosen file is deliberately NOT cleared here: the upload button renders only
-      // while a file is selected, so clearing it would unmount the very button whose
-      // banner carries the outcome (the U2 gate's teardown lesson, found again here).
-      setSelectedId(batch.id);
-      refresh();
-      return { kind: "ok", message: `${batch.state} — batch ${batch.id} is queued for validation` };
-    } catch {
-      return { kind: "error", status: 0 };
-    }
-  };
- 
-  if (definitions === null && !error) {
-    return <p className="text-sm text-muted-foreground">Loading bulk definitions…</p>;
-  }
- 
-  const waiting = (definitions ?? []).filter((definition) => definition.awaitingApproval > 0);
- 
-  return (
-    <div data-testid="bulk-panel" className="space-y-6">
-      {error && <Banner tone="danger">{error}</Banner>}
- 
-      {waiting.length > 0 && (
-        <Banner tone="warning" live="status">
-          {waiting
-            .map((definition) => {
-              const age = definition.oldestAwaitingApprovalSeconds;
-              return `${definition.name}: ${definition.awaitingApproval} awaiting approval${age ? ` (oldest ${humanizeSeconds(age)})` : ""}`;
-            })
-            .join(" · ")}
-        </Banner>
-      )}
- 
-      <section>
-        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Definitions</h2>
-        <ul className="space-y-2">
-          {(definitions ?? []).map((definition) => (
-            <li key={definition.name} className="flex flex-wrap items-center gap-2 rounded-md border border-border/60 px-3 py-2">
-              <span className="text-sm font-medium">{definition.name}</span>
-              {Object.entries(definition.batchesByState).map(([batchState, count]) => (
-                <span key={batchState} className="text-xs text-faint">
-                  {batchState}: {count}
-                </span>
-              ))}
-              {Object.keys(definition.batchesByState ?? {}).length === 0 && (
-                <span className="text-xs text-faint">no batches yet</span>
-              )}
-            </li>
-          ))}
-        </ul>
-      </section>
- 
-      <section>
-        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Upload</h2>
-        <div className="flex flex-wrap items-center gap-2">
-          <label className="text-xs text-muted-foreground" htmlFor="bulk-definition">
-            Definition
-          </label>
-          <select
-            id="bulk-definition"
-            className="rounded-md border border-border bg-background px-2 py-1 text-sm"
-            value={uploadInto}
-            onChange={(event) => setUploadInto(event.target.value)}
-          >
-            {(definitions ?? []).map((definition) => (
-              <option key={definition.name} value={definition.name}>
-                {definition.name}
-              </option>
-            ))}
-          </select>
-          <input
-            ref={fileInput}
-            type="file"
-            aria-label="batch file"
-            // The native control is kept (it is the accessible one); only its button half
-            // is dressed in the kit's language so it does not read as a foreign widget.
-            className="max-w-xs text-sm text-muted-foreground file:mr-3 file:rounded-md file:border file:border-border file:bg-background file:px-3 file:py-1.5 file:text-sm file:font-medium file:text-foreground hover:file:bg-accent"
-            onChange={(event) => setFile(event.target.files?.[0] ?? null)}
-          />
-          {file && (
-            <VerbButton
-              label="upload"
-              confirm={`Upload ${file.name} into ${uploadInto}?`}
-              execute={upload}
-            />
-          )}
-        </div>
-        <p className="mt-1 text-xs text-faint">
-          The file is posted as a raw body, exactly as <code>curl --data-binary</code> would — the console adds no
-          format the API does not already accept.
-        </p>
-      </section>
- 
-      <section>
-        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Batches</h2>
-        <div className="mb-2 flex flex-wrap items-center gap-2">
-          <label className="text-xs text-muted-foreground" htmlFor="bulk-state">
-            State
-          </label>
-          <select
-            id="bulk-state"
-            className="rounded-md border border-border bg-background px-2 py-1 text-sm"
-            value={state}
-            onChange={(event) => {
-              setState(event.target.value);
-              setSelectedId(null);
-            }}
-          >
-            <option value="">all states</option>
-            {STATES.map((option) => (
-              <option key={option} value={option}>
-                {option}
-              </option>
-            ))}
-          </select>
-        </div>
- 
-        <KeysetTable<BulkBatchInfo>
-          key={`${state}-${refreshToken}`}
-          columns={[
-            {
-              header: "Batch",
-              cell: (batch) => (
-                <button className="font-mono text-xs underline-offset-2 hover:underline" onClick={() => setSelectedId(batch.id)}>
-                  {batch.id}
-                </button>
-              ),
-            },
-            { header: "Definition", cell: (batch) => batch.definition },
-            { header: "State", cell: (batch) => <StateBadge state={batch.state} /> },
-            { header: "Rows", align: "right", cell: (batch) => `${batch.validRows}/${batch.totalRows}` },
-            { header: "Invalid", align: "right", cell: (batch) => batch.invalidRows },
-          ]}
-          loadPage={loadBatches}
-          rowKey={(batch) => batch.id}
-          emptyMessage="No batches in this state."
-        />
-      </section>
- 
-      {selected && (
-        <section data-testid="batch-detail" className="rounded-lg border border-border p-4">
-          <div className="mb-3 flex flex-wrap items-center gap-3">
-            <h2 className="text-sm font-medium">
-              Batch {selected.id} · {selected.definition}
-            </h2>
-            <StateBadge state={selected.state} />
-            {selected.tenant && <span className="text-xs text-faint">tenant {selected.tenant}</span>}
-            {selected.runId && <span className="text-xs text-faint">run {selected.runId}</span>}
-            {selected.state === GATED && (
-              <span className="ml-auto flex flex-wrap gap-2">
-                <VerbButton
-                  label="approve"
-                  confirm={`Approve ${selected.validRows} valid rows of this batch for execution?`}
-                  note={{ label: "note (optional)" }}
-                  execute={(note) => asOutcome(client.approveBatch(selected.id, note || undefined))}
-                  onDone={settle}
-                  quiet
-                />
-                <VerbButton
-                  label="reject"
-                  confirm="Reject this batch? Nothing will execute."
-                  // The contract makes the note MANDATORY here — it is the gate's evidence.
-                  note={{ label: "reason (required)", required: true }}
-                  execute={(note) => asOutcome(client.rejectBatch(selected.id, note ?? ""))}
-                  onDone={settle}
-                  quiet
-                  destructive
-                />
-              </span>
-            )}
-          </div>
- 
-          {decision && decision.kind !== "error" && (
-            // The engine's own words, verbatim — a refusal here teaches the fix
-            // ("invalid rows block approval…"), so it must never be paraphrased.
-            <Banner tone={decision.kind === "ok" ? "success" : "danger"} live={decision.kind === "ok" ? "status" : "alert"}>
-              {decision.message}
-            </Banner>
-          )}
- 
-          {decision?.kind === "error" && (
-            <Banner tone="warning">the decision did not reach the server — it may not have been recorded</Banner>
-          )}
- 
-          <dl className="mt-3 grid grid-cols-2 gap-x-6 gap-y-1 text-xs sm:grid-cols-4">
-            <div>
-              <dt className="text-faint">Total rows</dt>
-              <dd>{selected.totalRows}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Valid</dt>
-              <dd>{selected.validRows}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Invalid</dt>
-              <dd className={selected.invalidRows > 0 ? "text-danger" : undefined}>{selected.invalidRows}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Executed / failed</dt>
-              <dd>
-                {selected.executedRows} / <span className={selected.failedRows > 0 ? "text-danger" : undefined}>{selected.failedRows}</span>
-              </dd>
-            </div>
-          </dl>
- 
-          {selected.decidedAt && (
-            // The decision evidence, as the server recorded it — the actor comes from the
-            // token, never from this screen.
-            <p className="mt-3 text-xs text-muted-foreground">
-              {selected.state === "Rejected" ? "Rejected" : "Approved"} by {selected.decidedBy ?? "unknown"} at{" "}
-              {selected.decidedAt}
-              {selected.decisionNote ? ` — “${selected.decisionNote}”` : ""}
-            </p>
-          )}
- 
-          <h3 className="mb-1 mt-4 text-xs text-muted-foreground">
-            Validation report{selected.invalidRows === 0 ? " — no findings" : ""}
-          </h3>
-          {selected.invalidRows > 0 && (
-            <KeysetTable<BulkRowError>
-              key={`${selected.id}-${refreshToken}`}
-              columns={[
-                { header: "Row", align: "right", cell: (row) => (row.rowNumber === 0 ? "file" : row.rowNumber) },
-                { header: "Field", cell: (row) => row.field },
-                { header: "Finding", cell: (row) => row.message },
-              ]}
-              loadPage={loadErrors}
-              rowKey={(row) => String(row.id)}
-              take={100}
-              emptyMessage="No findings recorded for this batch."
-            />
-          )}
-        </section>
-      )}
-    </div>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/console/coverage/CampaignPanel.tsx.html b/ui/console/coverage/CampaignPanel.tsx.html deleted file mode 100644 index 5892847..0000000 --- a/ui/console/coverage/CampaignPanel.tsx.html +++ /dev/null @@ -1,1468 +0,0 @@ - - - - - - Code coverage report for CampaignPanel.tsx - - - - - - - - - -
-
-

All files CampaignPanel.tsx

-
- -
- 100% - Statements - 361/361 -
- - -
- 83.5% - Branches - 81/97 -
- - -
- 82.75% - Functions - 24/29 -
- - -
- 100% - Lines - 361/361 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -4621x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -5x -5x -5x -5x -  -  -1x -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -  -  -  -  -  -  -1x -115x -115x -115x -115x -115x -115x -115x -115x -115x -115x -115x -115x -115x -  -  -1x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -  -  -  -  -  -  -1x -111x -111x -111x -111x -111x -111x -111x -111x -111x -  -  -111x -  -111x -111x -5x -5x -5x -  -111x -111x -  -25x -24x -24x -25x -111x -111x -  -111x -32x -32x -111x -  -  -  -111x -38x -18x -18x -18x -18x -18x -  -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -20x -111x -  -111x -111x -  -111x -111x -111x -  -111x -111x -111x -111x -  -111x -111x -111x -111x -111x -111x -1x -1x -1x -  -111x -111x -777x -777x -777x -111x -111x -  -  -  -  -111x -111x -111x -111x -  -111x -111x -  -111x -111x -111x -111x -111x -111x -52x -52x -52x -  -111x -111x -111x -111x -111x -111x -111x -111x -111x -111x -111x -111x -111x -  -111x -29x -29x -29x -29x -29x -29x -29x -  -1x -  -29x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -  -29x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -  -29x -  -29x -  -8x -8x -8x -  -29x -2x -  -  -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -  -29x -  -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -28x -1x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -  -29x -26x -26x -  -26x -26x -  -26x -26x -26x -26x -26x -26x -78x -78x -78x -78x -78x -78x -78x -78x -78x -78x -78x -26x -  -26x -26x -26x -26x -26x -52x -52x -52x -52x -52x -52x -52x -52x -52x -52x -26x -26x -  -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -26x -  -26x -26x -26x -26x -26x -26x -26x -  -26x -26x -3x -3x -3x -3x -3x -1x -1x -1x -3x -3x -  -26x -26x -  -  -29x -29x -29x -29x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -1x -  -1x -1x -  -  -29x -  -  -  -  -  -29x -29x -1x -1x -1x -1x -1x -1x -29x -29x -29x -29x -  -111x -  -111x - 
import { useCallback, useEffect, useState } from "react";
-import { Banner, humanizeSeconds, KeysetTable, StateBadge, VerbButton } from "@goldpath/kit";
-import type { VerbOutcome } from "@goldpath/kit";
-import type {
-  AdminClient,
-  CampaignAuditEntry,
-  CampaignFailedItem,
-  CampaignInfo,
-  CampaignThrottle,
-} from "./adminClient";
- 
-export interface CampaignPanelProps {
-  client: AdminClient;
-}
- 
-/** The verb envelope, adapted to the kit's outcome type — refusals stay data. */
-async function asOutcome(call: Promise<{ ok: boolean; message: string }>): Promise<VerbOutcome> {
-  const result = await call;
-  return result.ok ? { kind: "ok", message: result.message } : { kind: "refused", message: result.message };
-}
- 
-/** The pacer's state machine, in its own order. */
-const STATES = ["Created", "Enumerating", "Running", "Paused", "Completed", "CompletedWithFailures", "Aborted"] as const;
- 
-/** Only a live campaign can be paused, resumed or aborted; the rest already ended. */
-const LIVE = new Set(["Created", "Enumerating", "Running"]);
- 
-/** The throttle form's raw text; empty means "leave this as it is" (the patch's null). */
-interface ThrottleDraft {
-  tps: string;
-  dailyQuota: string;
-  maxInFlight: string;
-  windowStart: string;
-  windowEnd: string;
-  timeZoneId: string;
-  clearDailyQuota: boolean;
-  clearWindow: boolean;
-}
- 
-const EMPTY_DRAFT: ThrottleDraft = {
-  tps: "",
-  dailyQuota: "",
-  maxInFlight: "",
-  windowStart: "",
-  windowEnd: "",
-  timeZoneId: "",
-  clearDailyQuota: false,
-  clearWindow: false,
-};
- 
-/**
- * Turns the draft into the contract's patch: an untouched field is simply ABSENT, so the
- * server keeps its current value. Clearing is explicit on purpose — "no daily quota"
- * cannot be expressed by leaving a box empty.
- */
-export function toThrottle(draft: ThrottleDraft): CampaignThrottle {
-  const patch: CampaignThrottle = {};
-  const number = (raw: string) => (raw.trim() === "" ? undefined : Number(raw));
-  const text = (raw: string) => (raw.trim() === "" ? undefined : raw.trim());
-  if (number(draft.tps) !== undefined) patch.tps = number(draft.tps);
-  if (number(draft.dailyQuota) !== undefined) patch.dailyQuota = number(draft.dailyQuota);
-  if (number(draft.maxInFlight) !== undefined) patch.maxInFlight = number(draft.maxInFlight);
-  if (text(draft.windowStart)) patch.windowStart = text(draft.windowStart);
-  if (text(draft.windowEnd)) patch.windowEnd = text(draft.windowEnd);
-  if (text(draft.timeZoneId)) patch.timeZoneId = text(draft.timeZoneId);
-  if (draft.clearDailyQuota) patch.clearDailyQuota = true;
-  if (draft.clearWindow) patch.clearWindow = true;
-  return patch;
-}
- 
-/** The confirm line: what the operator is actually about to change, field by field. */
-export function describeThrottle(patch: CampaignThrottle): string {
-  const parts: string[] = [];
-  if (patch.tps !== undefined) parts.push(`${patch.tps} tps`);
-  if (patch.dailyQuota !== undefined) parts.push(`daily quota ${patch.dailyQuota}`);
-  if (patch.maxInFlight !== undefined) parts.push(`max in-flight ${patch.maxInFlight}`);
-  if (patch.windowStart || patch.windowEnd) parts.push(`window ${patch.windowStart ?? "…"}–${patch.windowEnd ?? "…"}`);
-  if (patch.timeZoneId) parts.push(`time zone ${patch.timeZoneId}`);
-  if (patch.clearDailyQuota) parts.push("no daily quota");
-  if (patch.clearWindow) parts.push("no window (release around the clock)");
-  return parts.join(", ");
-}
- 
-/**
- * The campaign governor (console RFC §3): the pacer's numbers, the policy in force, and
- * the live verbs — pause, resume, abort, and a throttle that takes effect on the next
- * tick. Item REPLAY is deliberately absent: repair has ONE home, the run console.
- */
-export function CampaignPanel({ client }: CampaignPanelProps) {
-  const [state, setState] = useState<string>("");
-  const [selectedId, setSelectedId] = useState<string | null>(null);
-  const [selected, setSelected] = useState<CampaignInfo | null>(null);
-  const [failures, setFailures] = useState<CampaignFailedItem[]>([]);
-  const [audit, setAudit] = useState<CampaignAuditEntry[]>([]);
-  const [draft, setDraft] = useState<ThrottleDraft>(EMPTY_DRAFT);
-  const [error, setError] = useState<string | null>(null);
-  const [ready, setReady] = useState(false);
-  const [refreshToken, setRefreshToken] = useState(0);
-  // The verb outcome lives HERE: pausing or aborting moves the campaign out of the live
-  // set, so the buttons — and any message inside them — unmount on the refresh.
-  const [outcome, setOutcome] = useState<VerbOutcome | null>(null);
- 
-  const refresh = () => setRefreshToken((token) => token + 1);
-  const settle = (result: VerbOutcome) => {
-    setOutcome(result);
-    refresh();
-  };
- 
-  const loadCampaigns = useCallback(
-    async (_cursor: string | null, take: number) => {
-      // Take-bounded, not cursor-paged (frozen contract): one page, honestly ended.
-      const campaigns = await client.campaigns({ state: state || undefined, take });
-      setReady(true);
-      return { items: campaigns, nextCursor: null };
-    },
-    [client, state, refreshToken],
-  );
- 
-  useEffect(() => {
-    setOutcome(null);   // a verb's answer belongs to the campaign it was aimed at
-    setDraft(EMPTY_DRAFT);
-  }, [selectedId]);
- 
-  // The open campaign RE-FETCHES on refresh instead of closing — a governor watches
-  // numbers move, and the panel carries the outcome strip.
-  useEffect(() => {
-    if (!selectedId) {
-      setSelected(null);
-      setFailures([]);
-      setAudit([]);
-      return;
-    }
- 
-    let live = true;
-    Promise.all([client.campaign(selectedId), client.campaignFailures(selectedId), client.campaignAudit(selectedId)])
-      .then(([info, failed, entries]) => {
-        if (!live) return;
-        setSelected(info);
-        setFailures(failed);
-        setAudit(entries);
-      })
-      .catch(() => live && setError(`campaign ${selectedId} could not be opened`));
-    return () => {
-      live = false;
-    };
-  }, [client, selectedId, refreshToken]);
- 
-  const patch = toThrottle(draft);
-  const patched = Object.keys(patch).length > 0;
- 
-  return (
-    <div data-testid="campaign-panel" className="space-y-6">
-      {error && <Banner tone="danger">{error}</Banner>}
- 
-      <section>
-        <div className="mb-2 flex flex-wrap items-center gap-2">
-          <h2 className="text-sm font-medium text-muted-foreground">Campaigns</h2>
-          <label className="ml-2 text-xs text-muted-foreground" htmlFor="campaign-state">
-            State
-          </label>
-          <select
-            id="campaign-state"
-            className="rounded-md border border-border bg-background px-2 py-1 text-sm"
-            value={state}
-            onChange={(event) => {
-              setState(event.target.value);
-              setSelectedId(null);
-            }}
-          >
-            <option value="">all states</option>
-            {STATES.map((option) => (
-              <option key={option} value={option}>
-                {option}
-              </option>
-            ))}
-          </select>
-          {/*
-            A governor watches numbers that move under it: without a re-read the table
-            and the open campaign drift apart until a verb happens to refresh them.
-          */}
-          <button
-            className="ml-auto rounded-md border border-border bg-background px-3 py-1 text-sm hover:bg-accent"
-            onClick={refresh}
-          >
-            refresh
-          </button>
-        </div>
- 
-        <KeysetTable<CampaignInfo>
-          key={`${state}-${refreshToken}`}
-          columns={[
-            {
-              header: "Campaign",
-              cell: (campaign) => (
-                <button className="text-xs underline-offset-2 hover:underline" onClick={() => setSelectedId(campaign.id)}>
-                  {campaign.name}
-                </button>
-              ),
-            },
-            { header: "Type", cell: (campaign) => campaign.type },
-            { header: "State", cell: (campaign) => <StateBadge state={campaign.state} /> },
-            { header: "Released", align: "right", cell: (campaign) => campaign.releasedThrough },
-            { header: "Remaining", align: "right", cell: (campaign) => campaign.remaining },
-            { header: "Failed", align: "right", cell: (campaign) => campaign.failedCount },
-            { header: "tps", align: "right", cell: (campaign) => campaign.tps },
-          ]}
-          loadPage={loadCampaigns}
-          rowKey={(campaign) => campaign.id}
-          emptyMessage={ready ? "No campaigns in this state." : "Loading campaigns…"}
-        />
-      </section>
- 
-      {selected && (
-        <section data-testid="campaign-detail" className="rounded-lg border border-border p-4">
-          <div className="mb-3 flex flex-wrap items-center gap-3">
-            <h2 className="text-sm font-medium">
-              {selected.name} · {selected.type}
-            </h2>
-            <StateBadge state={selected.state} />
-            {!selected.windowOpenNow && (LIVE.has(selected.state) || selected.state === "Paused") && (
-              // Nothing is wrong — the policy simply says "not now".
-              <span className="text-xs text-warning">outside the release window</span>
-            )}
-            {LIVE.has(selected.state) && (
-              <span className="ml-auto flex flex-wrap gap-2">
-                <VerbButton
-                  label="pause"
-                  confirm={`Pause ${selected.name}? In-flight items drain; nothing new is released.`}
-                  execute={() => asOutcome(client.pauseCampaign(selected.id))}
-                  onDone={settle}
-                  quiet
-                />
-                <VerbButton
-                  label="abort"
-                  confirm={`Abort ${selected.name}? The ${selected.remaining} remaining items are stamped Aborted — this cannot be undone.`}
-                  note={{ label: "reason (required)", required: true }}
-                  execute={(reason) => asOutcome(client.abortCampaign(selected.id, reason ?? ""))}
-                  onDone={settle}
-                  quiet
-                  destructive
-                />
-              </span>
-            )}
-            {selected.state === "Paused" && (
-              <span className="ml-auto flex flex-wrap gap-2">
-                <VerbButton
-                  label="resume"
-                  confirm={`Resume ${selected.name}? Release continues under the policy below.`}
-                  execute={() => asOutcome(client.resumeCampaign(selected.id))}
-                  onDone={settle}
-                  quiet
-                />
-                <VerbButton
-                  label="abort"
-                  confirm={`Abort ${selected.name}? The ${selected.remaining} remaining items are stamped Aborted — this cannot be undone.`}
-                  note={{ label: "reason (required)", required: true }}
-                  execute={(reason) => asOutcome(client.abortCampaign(selected.id, reason ?? ""))}
-                  onDone={settle}
-                  quiet
-                  destructive
-                />
-              </span>
-            )}
-          </div>
- 
-          {outcome && outcome.kind !== "error" && (
-            // The pacer's own words — a refusal here explains which state it is in.
-            <Banner tone={outcome.kind === "ok" ? "success" : "danger"} live={outcome.kind === "ok" ? "status" : "alert"}>
-              {outcome.message}
-            </Banner>
-          )}
-          {outcome?.kind === "error" && (
-            <Banner tone="warning">the verb did not reach the server — it may not have been applied</Banner>
-          )}
- 
-          <dl className="mt-3 grid grid-cols-2 gap-x-6 gap-y-2 text-xs sm:grid-cols-4">
-            <div>
-              <dt className="text-faint">Released</dt>
-              <dd>
-                {selected.releasedThrough} of {selected.enumeratedThrough}
-                {!selected.enumerationComplete && <span className="text-faint"> (still enumerating)</span>}
-              </dd>
-            </div>
-            <div>
-              <dt className="text-faint">Succeeded / failed</dt>
-              <dd>
-                {selected.succeededCount} /{" "}
-                <span className={selected.failedCount > 0 ? "text-danger" : undefined}>{selected.failedCount}</span>
-              </dd>
-            </div>
-            <div>
-              <dt className="text-faint">In flight</dt>
-              <dd>
-                {selected.inFlight} of {selected.maxInFlight} allowed
-              </dd>
-            </div>
-            <div>
-              <dt className="text-faint">Remaining</dt>
-              <dd>
-                {selected.remaining}
-                {selected.etaSecondsAtCurrentTps != null && (
-                  // Honest label: this is the arithmetic at the CURRENT rate, not a promise.
-                  <span className="text-faint"> · ~{humanizeSeconds(selected.etaSecondsAtCurrentTps)} at {selected.tps} tps</span>
-                )}
-              </dd>
-            </div>
-            <div>
-              <dt className="text-faint">Daily quota</dt>
-              <dd>
-                {selected.dailyQuota == null ? "none" : `${selected.releasedToday} of ${selected.dailyQuota} today`}
-              </dd>
-            </div>
-            <div>
-              <dt className="text-faint">Window</dt>
-              <dd>
-                {selected.windowStart && selected.windowEnd
-                  ? `${selected.windowStart}–${selected.windowEnd} ${selected.timeZoneId}`
-                  : "around the clock"}
-                {" · "}
-                {selected.windowOpenNow ? "open now" : "closed now"}
-              </dd>
-            </div>
-            <div>
-              <dt className="text-faint">Created</dt>
-              <dd>
-                {selected.createdAt} by {selected.createdBy}
-              </dd>
-            </div>
-            <div>
-              <dt className="text-faint">Last verb</dt>
-              <dd>{selected.lastVerb ?? "—"}</dd>
-            </div>
-          </dl>
- 
-          {LIVE.has(selected.state) && (
-            <div className="mt-4 rounded-md border border-border/60 p-3">
-              <h3 className="mb-2 text-xs text-muted-foreground">
-                Throttle — takes effect on the next pacer tick; an empty box keeps its current value
-              </h3>
-              <div className="flex flex-wrap items-end gap-3">
-                {(
-                  [
-                    ["tps", "tps", selected.tps],
-                    ["dailyQuota", "daily quota", selected.dailyQuota],
-                    ["maxInFlight", "max in-flight", selected.maxInFlight],
-                  ] as const
-                ).map(([field, label, current]) => (
-                  <label key={field} className="flex flex-col gap-1 text-xs text-muted-foreground">
-                    {label} <span className="text-faint">(now {current ?? "none"})</span>
-                    <input
-                      type="number"
-                      min={0}
-                      aria-label={label}
-                      className="w-28 rounded-md border border-border bg-background px-2 py-1 text-sm text-foreground"
-                      value={draft[field]}
-                      onChange={(event) => setDraft({ ...draft, [field]: event.target.value })}
-                    />
-                  </label>
-                ))}
-                {(
-                  [
-                    ["windowStart", "window start"],
-                    ["windowEnd", "window end"],
-                  ] as const
-                ).map(([field, label]) => (
-                  <label key={field} className="flex flex-col gap-1 text-xs text-muted-foreground">
-                    {label}
-                    <input
-                      type="time"
-                      aria-label={label}
-                      className="rounded-md border border-border bg-background px-2 py-1 text-sm text-foreground"
-                      value={draft[field]}
-                      onChange={(event) => setDraft({ ...draft, [field]: event.target.value })}
-                    />
-                  </label>
-                ))}
-                <label className="flex flex-col gap-1 text-xs text-muted-foreground">
-                  time zone
-                  <input
-                    type="text"
-                    aria-label="time zone"
-                    placeholder={selected.timeZoneId}
-                    className="w-40 rounded-md border border-border bg-background px-2 py-1 text-sm text-foreground"
-                    value={draft.timeZoneId}
-                    onChange={(event) => setDraft({ ...draft, timeZoneId: event.target.value })}
-                  />
-                </label>
-                <label className="flex items-center gap-2 text-xs text-muted-foreground">
-                  <input
-                    type="checkbox"
-                    checked={draft.clearDailyQuota}
-                    onChange={(event) => setDraft({ ...draft, clearDailyQuota: event.target.checked })}
-                  />
-                  clear daily quota
-                </label>
-                <label className="flex items-center gap-2 text-xs text-muted-foreground">
-                  <input
-                    type="checkbox"
-                    checked={draft.clearWindow}
-                    onChange={(event) => setDraft({ ...draft, clearWindow: event.target.checked })}
-                  />
-                  clear window
-                </label>
-                {patched && (
-                  <VerbButton
-                    label="throttle"
-                    confirm={`Change the release policy of ${selected.name} to ${describeThrottle(patch)}?`}
-                    execute={() => asOutcome(client.throttleCampaign(selected.id, patch))}
-                    onDone={(result) => {
-                      if (result.kind === "ok") setDraft(EMPTY_DRAFT);
-                      settle(result);
-                    }}
-                    quiet
-                  />
-                )}
-              </div>
-            </div>
-          )}
- 
-          <h3 className="mb-1 mt-4 text-xs text-muted-foreground">
-            Failed items{failures.length === 0 ? " — none" : ` (${failures.length} shown)`}
-          </h3>
-          {failures.length > 0 && (
-            <>
-              <ul className="space-y-1">
-                {failures.map((item) => (
-                  <li key={item.seq} className="flex items-baseline gap-2 text-xs">
-                    <span className="font-mono">#{item.seq}</span>
-                    <span className="text-danger">{item.error ?? "no error recorded"}</span>
-                    {item.completedAt && <span className="text-faint">{item.completedAt}</span>}
-                  </li>
-                ))}
-              </ul>
-              <p className="mt-1 text-xs text-faint">
-                Repair has one home: replay these items from the run console, not from here.
-              </p>
-            </>
-          )}
- 
-          <h3 className="mb-1 mt-4 text-xs text-muted-foreground">Verb log</h3>
-          {/*
-            NOT the AuditBlock: that composite renders property-level old→new rows of the
-            audit-trail module. A campaign's audit is verb-level (who ran what, why), so
-            forcing it into that shape would invent fields the server never sent.
-          */}
-          <ul className="space-y-1">
-            {audit.map((entry) => (
-              <li key={entry.id} className="flex flex-wrap items-baseline gap-2 text-xs">
-                <span className="text-faint">{entry.at}</span>
-                <span className="font-medium">{entry.action}</span>
-                <span>{entry.actor}</span>
-                {entry.detail && <span className="text-muted-foreground">{entry.detail}</span>}
-              </li>
-            ))}
-            {audit.length === 0 && <li className="text-xs text-faint">No verbs recorded yet.</li>}
-          </ul>
-        </section>
-      )}
-    </div>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/console/coverage/Console.tsx.html b/ui/console/coverage/Console.tsx.html deleted file mode 100644 index ef81d16..0000000 --- a/ui/console/coverage/Console.tsx.html +++ /dev/null @@ -1,409 +0,0 @@ - - - - - - Code coverage report for Console.tsx - - - - - - - - - -
-
-

All files Console.tsx

-
- -
- 100% - Statements - 61/61 -
- - -
- 94.59% - Branches - 35/37 -
- - -
- 33.33% - Functions - 1/3 -
- - -
- 100% - Lines - 61/61 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -1091x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -1x -1x -1x -1x -1x -1x -  -  -  -  -  -  -  -  -1x -20x -20x -20x -20x -  -20x -10x -10x -10x -10x -10x -10x -10x -10x -10x -10x -20x -  -20x -10x -18x -18x -18x -10x -10x -  -20x -20x -20x -20x -20x -20x -20x -  -20x -  -20x -1x -  -1x -  -  -20x -2x -2x -2x -2x -  -  -20x -  -  -1x -1x -1x -1x -  -  -20x -2x -  -  -20x -  -20x -  -20x -  -20x -20x -  -20x - 
import { useEffect, useMemo, useState } from "react";
-import { AppShell, Banner } from "@goldpath/kit";
-import type { ShellNavItem } from "@goldpath/kit";
-import { AdminClient, MODULES, type Capability, type ModuleName } from "./adminClient";
-import { RunConsole } from "./RunConsole";
-import { BulkPanel } from "./BulkPanel";
-import { CampaignPanel } from "./CampaignPanel";
-import { NotificationPanel } from "./NotificationPanel";
-import { ArchivalPanel } from "./ArchivalPanel";
- 
-export interface ConsoleProps {
-  /** Service root; omit for same-origin (the console is served BY the app it drives). */
-  baseUrl?: string;
-  title?: string;
-  fetcher?: typeof fetch;
-  now?: Date;
-}
- 
-type Capabilities = Record<ModuleName, Capability>;
- 
-const SECTION_LABEL: Record<ModuleName, string> = {
-  jobs: "Runs",
-  archival: "Archival",
-  bulk: "Bulk intake",
-  notification: "Notifications",
-  campaign: "Campaigns",
-};
- 
-/**
- * The console shell: capability discovery decides what EXISTS, the shell renders only
- * that (console RFC §2). A module the app never composed is an absent section — never a
- * dead link, never a manifest upload. A capability that is present but REFUSING — no ops
- * role, or no tenant to scope the call to — says exactly that, in the server's words:
- * "absent" is reserved for a module the app genuinely does not compose.
- */
-export function Console({ baseUrl, title = "Goldpath console", fetcher, now }: ConsoleProps) {
-  const client = useMemo(() => new AdminClient({ baseUrl, fetcher }), [baseUrl, fetcher]);
-  const [capabilities, setCapabilities] = useState<Capabilities | null>(null);
-  const [section, setSection] = useState<ModuleName>("jobs");
-  const [collapsed, setCollapsed] = useState(false);
- 
-  useEffect(() => {
-    let live = true;
-    void client.discoverCapabilities().then((found) => {
-      if (!live) return;
-      setCapabilities(found);
-      const first = MODULES.find((module) => found[module].kind !== "absent");
-      if (first) setSection(first);
-    });
-    return () => {
-      live = false;
-    };
-  }, [client]);
- 
-  const nav: ShellNavItem[] = capabilities
-    ? MODULES.filter((module) => capabilities[module].kind !== "absent").map((module) => ({
-        id: module,
-        label: SECTION_LABEL[module],
-        onSelect: () => setSection(module),
-      }))
-    : [];
- 
-  return (
-    <AppShell
-      title={title}
-      nav={nav}
-      activeId={section}
-      collapsed={collapsed}
-      onToggleCollapsed={() => setCollapsed(!collapsed)}
-    >
-      {capabilities === null && <p className="text-sm text-muted-foreground">Discovering capabilities…</p>}
- 
-      {capabilities !== null && nav.length === 0 && (
-        <p className="text-sm text-muted-foreground">
-          No Goldpath admin surface answered here — this app composes none, or the service is unreachable.
-        </p>
-      )}
- 
-      {capabilities?.[section].kind === "forbidden" && (
-        <Banner tone="warning">
-          {SECTION_LABEL[section]} exists on this service, but your account lacks the ops role for it.
-          {capabilities[section].message ? ` The service said: “${capabilities[section].message}”` : ""}
-        </Banner>
-      )}
- 
-      {capabilities?.[section].kind === "refused" && (
-        // Composed, reachable, and REFUSING — the operator needs the server's reason
-        // (a multi-tenant app scopes admin calls to the ambient tenant), not a blank screen.
-        <Banner tone="warning">
-          {SECTION_LABEL[section]} is composed here but refused this request.
-          {capabilities[section].message ? ` The service said: “${capabilities[section].message}”` : ""}
-        </Banner>
-      )}
- 
-      {capabilities?.[section].kind === "present" && section === "jobs" && (
-        <RunConsole client={client} now={now} />
-      )}
- 
-      {capabilities?.[section].kind === "present" && section === "bulk" && <BulkPanel client={client} />}
- 
-      {capabilities?.[section].kind === "present" && section === "campaign" && <CampaignPanel client={client} />}
- 
-      {capabilities?.[section].kind === "present" && section === "notification" && <NotificationPanel client={client} />}
- 
-      {capabilities?.[section].kind === "present" && section === "archival" && <ArchivalPanel client={client} />}
-    </AppShell>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/console/coverage/NotificationPanel.tsx.html b/ui/console/coverage/NotificationPanel.tsx.html deleted file mode 100644 index 227af94..0000000 --- a/ui/console/coverage/NotificationPanel.tsx.html +++ /dev/null @@ -1,1027 +0,0 @@ - - - - - - Code coverage report for NotificationPanel.tsx - - - - - - - - - -
-
-

All files NotificationPanel.tsx

-
- -
- 99.59% - Statements - 245/246 -
- - -
- 90.78% - Branches - 69/76 -
- - -
- 92.85% - Functions - 13/14 -
- - -
- 99.59% - Lines - 245/246 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -3151x -  -  -  -  -  -  -  -  -1x -  -  -1x -1x -1x -1x -1x -  -  -  -  -  -  -  -1x -33x -32x -33x -32x -33x -33x -33x -1x -1x -  -  -  -  -  -  -  -  -1x -44x -44x -44x -44x -44x -44x -44x -44x -  -44x -  -44x -13x -13x -13x -13x -13x -13x -13x -13x -44x -  -44x -44x -  -  -19x -19x -2x -17x -2x -15x -13x -19x -44x -44x -  -  -  -44x -19x -13x -13x -13x -  -6x -6x -6x -6x -6x -6x -6x -6x -44x -  -44x -  -44x -44x -44x -  -44x -29x -29x -29x -29x -29x -  -  -44x -44x -44x -44x -29x -29x -  -29x -29x -29x -29x -29x -58x -58x -58x -29x -29x -  -  -29x -44x -44x -44x -44x -  -44x -44x -44x -132x -132x -132x -132x -132x -132x -132x -4x -4x -4x -  -132x -132x -44x -  -44x -36x -36x -  -36x -36x -36x -36x -36x -36x -1x -1x -1x -  -36x -36x -144x -144x -144x -36x -36x -  -36x -  -36x -36x -36x -36x -36x -36x -1x -1x -1x -  -36x -36x -21x -21x -21x -36x -36x -36x -  -  -44x -44x -44x -44x -  -44x -44x -  -44x -44x -44x -44x -44x -44x -29x -29x -29x -  -44x -44x -44x -44x -44x -44x -44x -44x -44x -44x -44x -4x -40x -4x -36x -  -44x -44x -  -  -44x -44x -  -44x -6x -6x -6x -6x -6x -6x -6x -6x -  -6x -6x -6x -  -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -6x -  -6x -6x -6x -1x -1x -1x -1x -  -6x -1x -1x -1x -1x -  -6x -  -6x -  -2x -2x -2x -  -6x -  -44x -  -44x - 
import { useCallback, useEffect, useState } from "react";
-import { Banner, humanizeSeconds, KeysetTable, StateBadge } from "@goldpath/kit";
-import type { AdminClient, NotificationInfo, NotificationTemplateStatus } from "./adminClient";
- 
-export interface NotificationPanelProps {
-  client: AdminClient;
-}
- 
-/** The evidence row's state machine, in its own order. */
-const STATES = ["Requested", "Suppressed", "Sent", "Failed"] as const;
- 
-/** The three lenses the contract exposes: the full list, and its two focused cuts. */
-const LENSES = [
-  { key: "all", label: "All notifications" },
-  { key: "failures", label: "Failures" },
-  { key: "suppressions", label: "Suppressions" },
-] as const;
- 
-type Lens = (typeof LENSES)[number]["key"];
- 
-/**
- * .NET serializes a TimeSpan as `d.hh:mm:ss` — shown as-is would read like a timestamp,
- * so the retention promise is spelled out in days/hours.
- */
-export function retentionWords(deleteBodyAfter: string | null | undefined): string {
-  if (!deleteBodyAfter) return "kept";
-  const match = /^(?:(\d+)\.)?(\d{2}):(\d{2}):(\d{2})/.exec(deleteBodyAfter);
-  if (!match) return deleteBodyAfter;
-  const [, days, hours, minutes] = match;
-  const totalHours = Number(days ?? 0) * 24 + Number(hours);
-  if (totalHours >= 48) return `body deleted after ${Math.round(totalHours / 24)}d`;
-  if (totalHours >= 1) return `body deleted after ${totalHours}h`;
-  return `body deleted after ${Number(minutes)}m`;
-}
- 
-/**
- * The notification evidence panel (console RFC §3). The surface is READ-ONLY by contract
- * and so is this screen: requesting belongs to the app (a console that could inject
- * messages would be an evidence hole) and re-sending belongs to the run console. What the
- * operator gets here is the evidence: who was written to (masked), which template hash
- * rendered it, when it was claimed, sent or failed, and why.
- */
-export function NotificationPanel({ client }: NotificationPanelProps) {
-  const [templates, setTemplates] = useState<NotificationTemplateStatus[] | null>(null);
-  const [lens, setLens] = useState<Lens>("all");
-  const [state, setState] = useState<string>("");
-  const [template, setTemplate] = useState<string>("");
-  const [selectedId, setSelectedId] = useState<string | null>(null);
-  const [selected, setSelected] = useState<NotificationInfo | null>(null);
-  const [error, setError] = useState<string | null>(null);
-  const [refreshToken, setRefreshToken] = useState(0);
- 
-  const refresh = () => setRefreshToken((token) => token + 1);
- 
-  useEffect(() => {
-    let live = true;
-    client
-      .notificationTemplates()
-      .then((found) => live && setTemplates(found))
-      .catch(() => live && setError("the notification templates could not be loaded"));
-    return () => {
-      live = false;
-    };
-  }, [client, refreshToken]);
- 
-  const loadRows = useCallback(
-    async (_cursor: string | null, take: number) => {
-      // Each lens is the contract's OWN route — the focused cuts are not this screen
-      // re-filtering the broad list, so a server-side change to either is visible here.
-      const rows =
-        lens === "failures"
-          ? await client.notificationFailures(take)
-          : lens === "suppressions"
-            ? await client.notificationSuppressions(take)
-            : await client.notifications({ state: state || undefined, template: template || undefined, take });
-      return { items: rows, nextCursor: null };
-    },
-    [client, lens, state, template, refreshToken],
-  );
- 
-  // The open row RE-READS by id: a notification is evidence in MOTION (Requested → Sent
-  // or Failed), so a row captured minutes ago is not what the operator should judge.
-  useEffect(() => {
-    if (!selectedId) {
-      setSelected(null);
-      return;
-    }
- 
-    let live = true;
-    client
-      .notification(selectedId)
-      .then((found) => live && setSelected(found))
-      .catch(() => live && setError(`notification ${selectedId} could not be read`));
-    return () => {
-      live = false;
-    };
-  }, [client, selectedId, refreshToken]);
- 
-  const waiting = (templates ?? []).filter((entry) => (entry.oldestRequestedSeconds ?? 0) > 0);
- 
-  return (
-    <div data-testid="notification-panel" className="space-y-6">
-      {error && <Banner tone="danger">{error}</Banner>}
- 
-      {waiting.length > 0 && (
-        <Banner tone="info" live="status">
-          {waiting
-            .map((entry) => `${entry.key}: oldest request waiting ${humanizeSeconds(entry.oldestRequestedSeconds ?? 0)}`)
-            .join(" · ")}
-        </Banner>
-      )}
- 
-      <section>
-        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Templates</h2>
-        <ul className="space-y-2">
-          {(templates ?? []).map((entry) => (
-            <li key={entry.key} className="flex flex-wrap items-center gap-2 rounded-md border border-border/60 px-3 py-2">
-              <span className="text-sm font-medium">{entry.key}</span>
-              {/* The hash is what proves WHICH text was sent — truncated for the eye, whole in the row. */}
-              <span className="font-mono text-xs text-faint" title={entry.hash}>
-                {entry.hash.slice(0, 12)}
-              </span>
-              <span className="text-xs text-faint">{retentionWords(entry.deleteBodyAfter)}</span>
-              {Object.entries(entry.byState).map(([key, count]) => (
-                <span key={key} className="text-xs text-faint">
-                  {key}: {count}
-                </span>
-              ))}
-              {Object.keys(entry.byState ?? {}).length === 0 && (
-                <span className="text-xs text-faint">nothing requested yet</span>
-              )}
-            </li>
-          ))}
-          {templates?.length === 0 && <li className="text-xs text-faint">No templates are registered in this app.</li>}
-        </ul>
-      </section>
- 
-      <section>
-        <div className="mb-2 flex flex-wrap items-center gap-2">
-          {LENSES.map((entry) => (
-            <button
-              key={entry.key}
-              aria-pressed={lens === entry.key}
-              className={`rounded-md border px-3 py-1 text-sm ${
-                lens === entry.key ? "border-border bg-primary text-primary-foreground" : "border-border bg-background hover:bg-accent"
-              }`}
-              onClick={() => {
-                setLens(entry.key);
-                setSelectedId(null);
-              }}
-            >
-              {entry.label}
-            </button>
-          ))}
- 
-          {lens === "all" && (
-            <>
-              <label className="ml-2 text-xs text-muted-foreground" htmlFor="notification-state">
-                State
-              </label>
-              <select
-                id="notification-state"
-                className="rounded-md border border-border bg-background px-2 py-1 text-sm"
-                value={state}
-                onChange={(event) => {
-                  setState(event.target.value);
-                  setSelectedId(null);
-                }}
-              >
-                <option value="">all states</option>
-                {STATES.map((option) => (
-                  <option key={option} value={option}>
-                    {option}
-                  </option>
-                ))}
-              </select>
- 
-              <label className="text-xs text-muted-foreground" htmlFor="notification-template">
-                Template
-              </label>
-              <select
-                id="notification-template"
-                className="rounded-md border border-border bg-background px-2 py-1 text-sm"
-                value={template}
-                onChange={(event) => {
-                  setTemplate(event.target.value);
-                  setSelectedId(null);
-                }}
-              >
-                <option value="">all templates</option>
-                {(templates ?? []).map((entry) => (
-                  <option key={entry.key} value={entry.key}>
-                    {entry.key}
-                  </option>
-                ))}
-              </select>
-            </>
-          )}
- 
-          <button
-            className="ml-auto rounded-md border border-border bg-background px-3 py-1 text-sm hover:bg-accent"
-            onClick={refresh}
-          >
-            refresh
-          </button>
-        </div>
- 
-        <KeysetTable<NotificationInfo>
-          key={`${lens}-${state}-${template}-${refreshToken}`}
-          columns={[
-            {
-              header: "Recipient (masked)",
-              cell: (row) => (
-                <button className="font-mono text-xs underline-offset-2 hover:underline" onClick={() => setSelectedId(row.id)}>
-                  {row.maskedRecipient}
-                </button>
-              ),
-            },
-            { header: "Template", cell: (row) => row.template },
-            { header: "Channel", cell: (row) => row.channel },
-            { header: "State", cell: (row) => <StateBadge state={row.state} /> },
-            { header: "Attempts", align: "right", cell: (row) => row.attempts },
-            { header: "Requested", cell: (row) => row.requestedAt },
-          ]}
-          loadPage={loadRows}
-          rowKey={(row) => row.id}
-          emptyMessage={
-            lens === "failures"
-              ? "No failed notifications."
-              : lens === "suppressions"
-                ? "Nothing was suppressed."
-                : "No notifications match this filter."
-          }
-        />
-        <p className="mt-1 text-xs text-faint">
-          Recipients are masked by the API, not by this screen — the full address never leaves the store. Requesting
-          belongs to the app and re-sending to the run console, so this surface has no verbs at all.
-        </p>
-      </section>
- 
-      {selected && (
-        <section data-testid="notification-detail" className="rounded-lg border border-border p-4">
-          <div className="mb-3 flex flex-wrap items-center gap-3">
-            <h2 className="text-sm font-medium">
-              {selected.template} → <span className="font-mono">{selected.maskedRecipient}</span>
-            </h2>
-            <StateBadge state={selected.state} />
-            <span className="text-xs text-faint">{selected.channel} · {selected.culture || "default culture"}</span>
-          </div>
- 
-          <dl className="grid grid-cols-2 gap-x-6 gap-y-2 text-xs sm:grid-cols-3">
-            <div>
-              <dt className="text-faint">Dedup key</dt>
-              {/* The business identity that makes a retry storm land once. */}
-              <dd className="font-mono break-all">{selected.dedupKey}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Template hash</dt>
-              <dd className="font-mono break-all">{selected.templateHash}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Attempts</dt>
-              <dd>{selected.attempts}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Requested</dt>
-              <dd>{selected.requestedAt}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Not before</dt>
-              <dd>{selected.notBefore ?? "—"}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Claimed</dt>
-              <dd>{selected.claimedAt ?? "—"}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Sent</dt>
-              <dd>{selected.sentAt ?? "—"}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Failed</dt>
-              <dd className={selected.failedAt ? "text-danger" : undefined}>{selected.failedAt ?? "—"}</dd>
-            </div>
-            <div>
-              <dt className="text-faint">Body</dt>
-              {/* Retention is a promise the module keeps; the row records when it was kept. */}
-              <dd>{selected.bodyDeletedAt ? `deleted ${selected.bodyDeletedAt}` : "retained"}</dd>
-            </div>
-            {selected.tenant && (
-              <div>
-                <dt className="text-faint">Tenant</dt>
-                <dd>{selected.tenant}</dd>
-              </div>
-            )}
-            {selected.correlationId && (
-              <div>
-                <dt className="text-faint">Correlation</dt>
-                <dd className="font-mono break-all">{selected.correlationId}</dd>
-              </div>
-            )}
-          </dl>
- 
-          {selected.detail && (
-            // The server's own words: the transport's refusal, or why it was suppressed.
-            <p className={`mt-3 text-xs ${selected.state === "Failed" ? "text-danger" : "text-muted-foreground"}`}>
-              {selected.detail}
-            </p>
-          )}
-        </section>
-      )}
-    </div>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/console/coverage/RunConsole.tsx.html b/ui/console/coverage/RunConsole.tsx.html deleted file mode 100644 index de0073b..0000000 --- a/ui/console/coverage/RunConsole.tsx.html +++ /dev/null @@ -1,787 +0,0 @@ - - - - - - Code coverage report for RunConsole.tsx - - - - - - - - - -
-
-

All files RunConsole.tsx

-
- -
- 100% - Statements - 186/186 -
- - -
- 91.22% - Branches - 52/57 -
- - -
- 87.5% - Functions - 14/16 -
- - -
- 100% - Lines - 186/186 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -2351x -  -  -  -  -  -  -  -  -  -  -  -4x -4x -4x -4x -  -  -  -  -  -  -1x -48x -48x -48x -48x -48x -48x -48x -  -48x -11x -11x -11x -11x -10x -10x -10x -11x -11x -11x -11x -11x -48x -  -48x -25x -14x -14x -14x -14x -14x -14x -14x -14x -48x -  -48x -48x -  -  -14x -14x -14x -48x -48x -  -48x -  -  -  -  -48x -20x -15x -15x -15x -  -5x -5x -5x -5x -5x -5x -5x -5x -48x -  -48x -  -48x -11x -11x -  -37x -37x -48x -  -48x -48x -48x -48x -43x -43x -43x -43x -43x -43x -43x -1x -1x -1x -  -43x -43x -43x -48x -48x -48x -  -48x -36x -36x -36x -36x -27x -27x -27x -27x -27x -27x -27x -27x -27x -27x -27x -27x -3x -3x -3x -3x -3x -3x -  -24x -24x -24x -24x -24x -24x -24x -  -27x -27x -36x -36x -36x -  -  -48x -36x -36x -36x -36x -36x -36x -20x -20x -20x -36x -36x -36x -36x -36x -36x -36x -36x -36x -36x -  -  -48x -7x -7x -7x -7x -7x -7x -7x -7x -7x -7x -7x -6x -6x -  -  -6x -6x -6x -6x -  -7x -7x -  -7x -  -7x -7x -7x -14x -14x -14x -7x -7x -  -7x -7x -7x -7x -7x -6x -6x -6x -6x -6x -7x -7x -7x -  -48x -  -48x - 
import { useCallback, useEffect, useState } from "react";
-import { Banner, KeysetTable, RunProgress, StateBadge, VerbButton } from "@goldpath/kit";
-import type { VerbOutcome } from "@goldpath/kit";
-import type { AdminClient, FleetInfo, JobInfo, RunDetail, RunSummary } from "./adminClient";
- 
-export interface RunConsoleProps {
-  client: AdminClient;
-  /** Injected in tests; the composite reads the clock only for rate/prediction display. */
-  now?: Date;
-}
- 
-/** The verb envelope, adapted to the kit's outcome type — refusals stay data. */
-async function asOutcome(call: Promise<{ ok: boolean; message: string }>): Promise<VerbOutcome> {
-  const result = await call;
-  return result.ok ? { kind: "ok", message: result.message } : { kind: "refused", message: result.message };
-}
- 
-/**
- * The run console (console RFC §2, the core screen): fleets → jobs → runs → chunk
- * breakdown → repair queue. Everything is a client of the frozen contract; the screen
- * holds no state the API does not own.
- */
-export function RunConsole({ client, now }: RunConsoleProps) {
-  const [fleets, setFleets] = useState<FleetInfo[]>([]);
-  const [fleet, setFleet] = useState<string | null>(null);
-  const [jobs, setJobs] = useState<JobInfo[]>([]);
-  const [selectedRunId, setSelectedRunId] = useState<string | null>(null);
-  const [selectedRun, setSelectedRun] = useState<RunDetail | null>(null);
-  const [error, setError] = useState<string | null>(null);
-  const [refreshToken, setRefreshToken] = useState(0);
- 
-  useEffect(() => {
-    let live = true;
-    client
-      .fleets()
-      .then((found) => {
-        if (!live) return;
-        setFleets(found);
-        setFleet((current) => current ?? found[0]?.schedulerName ?? null);
-      })
-      .catch(() => live && setError("the fleet list could not be loaded"));
-    return () => {
-      live = false;
-    };
-  }, [client]);
- 
-  useEffect(() => {
-    if (!fleet) return;
-    let live = true;
-    client
-      .jobs(fleet)
-      .then((found) => live && setJobs(found))
-      .catch(() => live && setError(`the jobs of ${fleet} could not be loaded`));
-    return () => {
-      live = false;
-    };
-  }, [client, fleet, refreshToken]);
- 
-  const loadRuns = useCallback(
-    async (_cursor: string | null, take: number) => {
-      // The runs surface is take-bounded, not cursor-paged (frozen contract): one page,
-      // honestly ended — the table's walk stops immediately instead of faking a cursor.
-      const runs = fleet ? await client.runs(fleet, { take }) : [];
-      return { items: runs, nextCursor: null };
-    },
-    [client, fleet, refreshToken],
-  );
- 
-  const openRun = (run: RunSummary) => setSelectedRunId(run.id);
- 
-  // The open run RE-FETCHES on every refresh instead of closing: a verb's outcome strip
-  // lives inside the panel, so tearing the panel down would hide the very message the
-  // operator just triggered (found by the U2 Playwright gate).
-  useEffect(() => {
-    if (!selectedRunId) {
-      setSelectedRun(null);
-      return;
-    }
- 
-    let live = true;
-    client
-      .run(selectedRunId)
-      .then((detail) => live && setSelectedRun(detail))
-      .catch(() => live && setError(`run ${selectedRunId} could not be opened`));
-    return () => {
-      live = false;
-    };
-  }, [client, selectedRunId, refreshToken]);
- 
-  const refresh = () => setRefreshToken((token) => token + 1);
- 
-  if (fleets.length === 0 && !error) {
-    return <p className="text-sm text-muted-foreground">Discovering fleets…</p>;
-  }
- 
-  return (
-    <div data-testid="run-console" className="space-y-6">
-      {error && <Banner tone="danger">{error}</Banner>}
- 
-      <section>
-        <h2 className="mb-2 text-sm font-medium text-muted-foreground">Fleets</h2>
-        <div className="flex flex-wrap gap-2">
-          {fleets.map((entry) => (
-            <button
-              key={entry.schedulerName}
-              aria-pressed={entry.schedulerName === fleet}
-              className={`rounded-md border px-3 py-1.5 text-sm ${
-                entry.schedulerName === fleet ? "border-border bg-primary text-primary-foreground" : "border-border bg-background hover:bg-accent"
-              }`}
-              onClick={() => {
-                setFleet(entry.schedulerName);
-                setSelectedRunId(null);
-              }}
-            >
-              {entry.schedulerName}
-              <span className="ml-2 text-xs opacity-70">{entry.jobCount} jobs · {entry.nodes?.length ?? 0} nodes</span>
-            </button>
-          ))}
-        </div>
-      </section>
- 
-      {fleet && (
-        <section>
-          <h2 className="mb-2 text-sm font-medium text-muted-foreground">Jobs in {fleet}</h2>
-          <ul className="space-y-2">
-            {jobs.map((job) => (
-              <li key={job.name} className="flex flex-wrap items-center gap-3 rounded-md border border-border/60 px-3 py-2">
-                <span className="text-sm font-medium">{job.name}</span>
-                {job.paused && <StateBadge state="Suppressed" />}
-                {job.nextFireTime && <span className="text-xs text-faint">next {job.nextFireTime}</span>}
-                <span className="ml-auto flex gap-2">
-                  <VerbButton
-                    label="trigger"
-                    confirm={`Trigger ${job.name} now?`}
-                    execute={() => asOutcome(client.triggerJob(fleet, job.name))}
-                    onDone={refresh}
-                  />
-                  {job.paused ? (
-                    <VerbButton
-                      label="resume"
-                      confirm={`Resume ${job.name}?`}
-                      execute={() => asOutcome(client.resumeJob(fleet, job.name))}
-                      onDone={refresh}
-                    />
-                  ) : (
-                    <VerbButton
-                      label="pause"
-                      confirm={`Pause ${job.name}?`}
-                      execute={() => asOutcome(client.pauseJob(fleet, job.name))}
-                      onDone={refresh}
-                      destructive
-                    />
-                  )}
-                </span>
-              </li>
-            ))}
-          </ul>
-        </section>
-      )}
- 
-      {fleet && (
-        <section>
-          <h2 className="mb-2 text-sm font-medium text-muted-foreground">Runs</h2>
-          <KeysetTable<RunSummary>
-            key={`${fleet}-${refreshToken}`}
-            columns={[
-              { header: "Run", cell: (run) => (
-                <button className="font-mono text-xs underline-offset-2 hover:underline" onClick={() => openRun(run)}>
-                  {run.id}
-                </button>
-              ) },
-              { header: "Job", cell: (run) => run.jobName },
-              { header: "State", cell: (run) => <StateBadge state={run.status} /> },
-              { header: "Chunks", align: "right", cell: (run) => `${run.completedChunks}/${run.totalChunks}` },
-            ]}
-            loadPage={loadRuns}
-            rowKey={(run) => run.id}
-            emptyMessage="No runs recorded for this fleet yet."
-          />
-        </section>
-      )}
- 
-      {selectedRun && (
-        <section data-testid="run-detail" className="rounded-lg border border-border p-4">
-          <div className="mb-3 flex items-center justify-between">
-            <h2 className="text-sm font-medium">Run {selectedRun.run.id} · {selectedRun.run.jobName}</h2>
-            <span className="flex gap-2">
-              <VerbButton
-                label="rerun"
-                confirm={`Rerun ${selectedRun.run.id}?`}
-                execute={() => asOutcome(client.rerun(selectedRun.run.id))}
-                onDone={refresh}
-              />
-              {selectedRun.openFailures.length > 0 && (
-                <VerbButton
-                  label="replay-items"
-                  // The verb redrives ALL open items; the listed failures are a capped
-                  // VIEW, so a count here would understate what the operator triggers.
-                  confirm="Replay all open repair items of this run?"
-                  execute={() => asOutcome(client.replayItems(selectedRun.run.id))}
-                  onDone={refresh}
-                />
-              )}
-            </span>
-          </div>
- 
-          <RunProgress run={selectedRun.run} now={now} />
- 
-          <h3 className="mb-1 mt-4 text-xs text-muted-foreground">Chunks by status</h3>
-          <div className="flex flex-wrap gap-1">
-            {Object.entries(selectedRun.chunksByStatus).map(([status, count]) => (
-              <span key={status} className="rounded border border-border px-1.5 py-0.5 text-[11px]">
-                {status}: {count}
-              </span>
-            ))}
-          </div>
- 
-          <h3 className="mb-1 mt-4 text-xs text-muted-foreground">
-            Repair queue{selectedRun.openFailures.length === 0 ? " — empty" : ` (${selectedRun.openFailures.length} shown)`}
-          </h3>
-          <ul className="space-y-1">
-            {selectedRun.openFailures.map((failure) => (
-              <li key={failure.id} className="flex items-baseline gap-2 text-xs">
-                <span className="font-mono">{failure.itemKey}</span>
-                <span className="text-faint">chunk {failure.chunkIndex}</span>
-                <span className="text-danger">{failure.reason}</span>
-              </li>
-            ))}
-          </ul>
-        </section>
-      )}
-    </div>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/console/coverage/adminClient.ts.html b/ui/console/coverage/adminClient.ts.html deleted file mode 100644 index 2c91a7f..0000000 --- a/ui/console/coverage/adminClient.ts.html +++ /dev/null @@ -1,1909 +0,0 @@ - - - - - - Code coverage report for adminClient.ts - - - - - - - - - -
-
-

All files adminClient.ts

-
- -
- 100% - Statements - 236/236 -
- - -
- 86.81% - Branches - 79/91 -
- - -
- 100% - Functions - 44/44 -
- - -
- 100% - Lines - 236/236 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -1x -1x -1x -1x -1x -1x -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -16x -16x -16x -16x -16x -4x -4x -16x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -1x -20x -20x -20x -1x -  -1x -1x -94x -  -1x -94x -  -  -  -  -94x -94x -  -1x -313x -313x -313x -313x -313x -300x -313x -  -  -  -  -  -  -  -  -  -  -  -  -1x -15x -15x -75x -75x -75x -75x -75x -75x -75x -8x -8x -  -75x -8x -8x -  -75x -75x -5x -5x -15x -15x -15x -15x -  -1x -12x -12x -  -1x -15x -15x -  -1x -16x -16x -  -16x -16x -16x -16x -16x -  -1x -5x -5x -  -  -1x -25x -25x -25x -25x -25x -25x -25x -20x -20x -  -5x -25x -  -1x -4x -4x -  -1x -1x -1x -  -1x -1x -1x -  -1x -2x -2x -  -  -  -  -  -  -1x -1x -1x -  -1x -23x -23x -  -  -  -  -  -  -  -  -1x -24x -24x -24x -24x -24x -  -  -1x -15x -15x -15x -15x -15x -15x -15x -  -1x -4x -4x -  -1x -  -1x -1x -  -  -  -  -  -1x -2x -2x -2x -2x -2x -2x -2x -2x -2x -2x -1x -2x -  -1x -15x -15x -  -1x -25x -25x -25x -25x -25x -  -1x -20x -20x -  -  -1x -20x -20x -20x -20x -  -1x -20x -20x -20x -20x -  -1x -4x -4x -  -1x -1x -1x -  -1x -  -1x -1x -  -1x -1x -1x -  -1x -13x -13x -  -1x -15x -15x -15x -15x -15x -15x -  -1x -7x -7x -  -  -1x -2x -2x -  -1x -2x -2x -  -1x -21x -21x -  -  -1x -14x -14x -14x -14x -14x -14x -14x -13x -14x -  -1x -22x -22x -22x -  -1x -21x -21x -  -1x -  -1x -1x -  -1x -2x -2x -  -1x -1x -1x -1x -1x -1x -  -  -  -  -  -1x -4x -4x -4x -4x -4x -4x -4x -3x -4x -1x - 
/**
- * The console's ONLY door to a service: the FROZEN admin contract
- * (docs/rfc/goldpath-admin-contract.md). Every call carries the operator's credentials —
- * the console is a well-dressed client of the same API adopters script, nothing more.
- */
-export interface AdminClientOptions {
-  /** Service root, e.g. "" for same-origin or "https://payments.internal". */
-  baseUrl?: string;
-  fetcher?: typeof fetch;
-}
- 
-/** The five module surfaces of the frozen contract. */
-export const MODULES = ["jobs", "archival", "bulk", "notification", "campaign"] as const;
-export type ModuleName = (typeof MODULES)[number];
- 
-/**
- * The probe route per module — the contract's own list root. A 404 means the module was
- * never composed into this app, so the panel does not exist (console RFC §2: no manifest
- * upload, no config drift — the API is the truth here too).
- */
-const PROBE: Record<ModuleName, string> = {
-  jobs: "/goldpath/admin/jobs/fleets",
-  archival: "/goldpath/admin/archival/definitions",
-  bulk: "/goldpath/admin/bulk/definitions",
-  notification: "/goldpath/admin/notification/templates",
-  campaign: "/goldpath/admin/campaign/",
-};
- 
-/**
- * What a probe learned about one module. A refusal carries the SERVER's words: the
- * console repeats them rather than inventing its own explanation.
- */
-export type Capability =
-  | { kind: "present" }
-  | { kind: "absent" }
-  | { kind: "forbidden"; message?: string }
-  | { kind: "refused"; message?: string };
- 
-/**
- * Pulls the human sentence out of a refusal. Goldpath's own envelope says `message`;
- * ASP.NET's ProblemDetails (what tenant resolution answers with) says `title`/`detail`.
- * Neither is guessed at — an unreadable body simply yields nothing.
- */
-async function refusalMessage(response: Response): Promise<string | undefined> {
-  try {
-    const body = (await response.clone().json()) as { message?: string; detail?: string; title?: string };
-    return body.message ?? body.detail ?? body.title;
-  } catch {
-    return undefined;
-  }
-}
- 
-export interface FleetInfo {
-  schedulerName: string;
-  jobCount: number;
-  nodes: { instanceId: string; isClustered?: boolean }[];
-}
- 
-export interface JobInfo {
-  name: string;
-  group?: string;
-  requestsRecovery?: boolean;
-  paused?: boolean;
-  nextFireTime?: string | null;
-}
- 
-export interface RunSummary {
-  id: string;
-  jobName: string;
-  status: string;
-  startedAt: string;
-  finishedAt?: string | null;
-  deadlineAt?: string | null;
-  predictedFinishAt?: string | null;
-  totalChunks: number;
-  completedChunks: number;
-  failedChunks: number;
-  totalItems?: number | null;
-  itemFailures: number;
-}
- 
-/**
- * The run detail as the contract actually returns it — a NESTED record
- * (`GoldpathRunDetail(Run, ChunksByStatus, OpenFailures)`), not a flattened row:
- * chunks arrive as counts per status, and open failures are capped at 200 server-side.
- */
-export interface RunDetail {
-  run: RunSummary;
-  chunksByStatus: Record<string, number>;
-  openFailures: {
-    id: number;
-    runId: string;
-    chunkIndex: number;
-    itemKey: string;
-    reason: string;
-    failedAt: string;
-    redrivenAt?: string | null;
-  }[];
-}
- 
-/** Intake numbers per definition — the panel's headline row. */
-export interface BulkDefinitionStatus {
-  name: string;
-  batchesByState: Record<string, number>;
-  awaitingApproval: number;
-  oldestAwaitingApprovalSeconds?: number | null;
-}
- 
-/** One batch over the wire: the state machine's public face. */
-export interface BulkBatchInfo {
-  id: string;
-  definition: string;
-  state: string;
-  tenant?: string | null;
-  totalRows: number;
-  validRows: number;
-  invalidRows: number;
-  executedRows: number;
-  failedRows: number;
-  runId?: string | null;
-  receivedAt: string;
-  validatedAt?: string | null;
-  decidedAt?: string | null;
-  decidedBy?: string | null;
-  decisionNote?: string | null;
-  completedAt?: string | null;
-}
- 
-/** One validation finding — teaching text, value-free by contract. */
-export interface BulkRowError {
-  id: number;
-  batchId: string;
-  rowNumber: number;
-  field: string;
-  message: string;
-}
- 
-/** A campaign as the governor sees it: pacer counters + the live policy in force. */
-export interface CampaignInfo {
-  id: string;
-  type: string;
-  name: string;
-  state: string;
-  enumeratedThrough: number;
-  enumerationComplete: boolean;
-  releasedThrough: number;
-  succeededCount: number;
-  failedCount: number;
-  inFlight: number;
-  remaining: number;
-  tps: number;
-  dailyQuota?: number | null;
-  releasedToday: number;
-  maxInFlight: number;
-  windowStart?: string | null;
-  windowEnd?: string | null;
-  timeZoneId: string;
-  windowOpenNow: boolean;
-  etaSecondsAtCurrentTps?: number | null;
-  createdAt: string;
-  createdBy: string;
-  completedAt?: string | null;
-  lastVerb?: string | null;
-  tenant?: string | null;
-}
- 
-/** One failed item — the drill-down; REPLAY belongs to the jobs console. */
-export interface CampaignFailedItem {
-  seq: number;
-  error?: string | null;
-  completedAt?: string | null;
-}
- 
-/** One audited verb against a campaign (who did what, newest first). */
-export interface CampaignAuditEntry {
-  id: number;
-  at: string;
-  actor: string;
-  action: string;
-  campaignId: string;
-  detail?: string | null;
-}
- 
-/**
- * The LIVE policy patch: every field is optional and a null one KEEPS its current value,
- * so the console sends only what the operator actually changed. Clearing is explicit —
- * `clearDailyQuota` / `clearWindow` exist because "no quota" cannot be said with a null.
- */
-export interface CampaignThrottle {
-  tps?: number;
-  dailyQuota?: number;
-  maxInFlight?: number;
-  windowStart?: string;
-  windowEnd?: string;
-  timeZoneId?: string;
-  clearDailyQuota?: boolean;
-  clearWindow?: boolean;
-}
- 
-/** One template with its live queue numbers and its retention promise. */
-export interface NotificationTemplateStatus {
-  key: string;
-  hash: string;
-  /** ISO-8601 duration or null — how long the rendered body survives (D4 retention). */
-  deleteBodyAfter?: string | null;
-  byState: Record<string, number>;
-  oldestRequestedSeconds?: number | null;
-}
- 
-/**
- * One notification as the ADMIN surface returns it. The recipient arrives MASKED from the
- * server (first character + domain hint); the console never has the full address and must
- * never present this field as if it were one.
- */
-export interface NotificationInfo {
-  id: string;
-  dedupKey: string;
-  template: string;
-  templateHash: string;
-  channel: string;
-  maskedRecipient: string;
-  culture: string;
-  state: string;
-  attempts: number;
-  detail?: string | null;
-  requestedAt: string;
-  notBefore?: string | null;
-  claimedAt?: string | null;
-  sentAt?: string | null;
-  failedAt?: string | null;
-  bodyDeletedAt?: string | null;
-  tenant?: string | null;
-  correlationId?: string | null;
-}
- 
-/** One archive definition with the numbers that decide whether it is healthy. */
-export interface ArchiveDefinitionStatus {
-  name: string;
-  entries: number;
-  dueBacklog: number;
-  activeHolds: number;
-  chainHead: number;
-  purgedThrough: number;
-}
- 
-/** One archived entry: the document plus the tamper-evidence around it. */
-export interface ArchiveEntry {
-  id: number;
-  definition: string;
-  aggregateKey: string;
-  tenant?: string | null;
-  document: string;
-  schemaVersion: number;
-  dueAt: string;
-  archivedAt: string;
-  chainIndex: number;
-  contentHash: string;
-  chainHash: string;
-  previousHash: string;
-  erasedAt?: string | null;
-  preErasureContentHash?: string | null;
-}
- 
-/** A legal hold — the row IS its own audit. */
-export interface LegalHold {
-  id: number;
-  definition: string;
-  aggregateKey: string;
-  caseReference: string;
-  placedBy: string;
-  placedAt: string;
-  liftedBy?: string | null;
-  liftedAt?: string | null;
-}
- 
-/** An erasure record — the row IS the answer to the subject's request. */
-export interface ErasureRecord {
-  id: number;
-  subjectKey: string;
-  requestedBy: string;
-  requestedAt: string;
-  entriesAffected: number;
-  detail?: string | null;
-}
- 
-/** One thing the chain verifier found wrong. An empty list is the good news. */
-export interface ChainFinding {
-  definition: string;
-  chainIndex: number;
-  aggregateKey: string;
-  problem: string;
-}
- 
-export interface AdminResult {
-  ok: boolean;
-  message: string;
-}
- 
-/** Thrown for transport/status failures the caller must surface, never swallow. */
-export class AdminHttpError extends Error {
-  constructor(readonly status: number, readonly route: string) {
-    super(`${route} answered ${status}`);
-    this.name = "AdminHttpError";
-  }
-}
- 
-export class AdminClient {
-  private readonly baseUrl: string;
-  private readonly fetcher: typeof fetch;
- 
-  constructor(options: AdminClientOptions = {}) {
-    this.baseUrl = (options.baseUrl ?? "").replace(/\/$/, "");
-    // BIND the default: a bare `fetch` stored on an object and called as `this.fetcher(...)`
-    // loses its receiver and throws "Illegal invocation" in a real browser — which the
-    // discovery catch would have silently turned into "no capabilities" (found by the U2
-    // Playwright gate; jsdom does not reproduce it, so the unit tests were green).
-    this.fetcher = options.fetcher ?? ((input, init) => globalThis.fetch(input, init));
-  }
- 
-  private async get<T>(route: string): Promise<T> {
-    const response = await this.fetcher(`${this.baseUrl}${route}`, {
-      headers: { accept: "application/json" },
-      credentials: "include",
-    });
-    if (!response.ok) throw new AdminHttpError(response.status, route);
-    return (await response.json()) as T;
-  }
- 
-  /**
-   * Capability discovery: probe each module's list root ONCE.
-   *
-   * - 404 → `absent`: the module was never composed into this app.
-   * - 401/403 → `forbidden`: it exists, this operator may not see it.
-   * - 400 → `refused`: it exists and answered, but the request could not be SCOPED — a
-   *   multi-tenant app refuses an admin call that carries no ambient tenant (contract
-   *   revision R1). Reading that as "absent" would tell the operator the module is not
-   *   composed, which is a lie the console must never tell.
-   * - anything else non-ok → `absent`, honestly: nothing usable answered.
-   */
-  async discoverCapabilities(): Promise<Record<ModuleName, Capability>> {
-    const entries = await Promise.all(
-      MODULES.map(async (module) => {
-        try {
-          const response = await this.fetcher(`${this.baseUrl}${PROBE[module]}`, {
-            headers: { accept: "application/json" },
-            credentials: "include",
-          });
-          if (response.status === 404) return [module, { kind: "absent" } as Capability] as const;
-          if (response.status === 401 || response.status === 403) {
-            return [module, { kind: "forbidden", message: await refusalMessage(response) } as Capability] as const;
-          }
- 
-          if (response.status === 400) {
-            return [module, { kind: "refused", message: await refusalMessage(response) } as Capability] as const;
-          }
- 
-          return [module, { kind: response.ok ? "present" : "absent" } as Capability] as const;
-        } catch {
-          return [module, { kind: "absent" } as Capability] as const;   // unreachable: no panel, no crash
-        }
-      }),
-    );
-    return Object.fromEntries(entries) as Record<ModuleName, Capability>;
-  }
- 
-  fleets(): Promise<FleetInfo[]> {
-    return this.get<FleetInfo[]>("/goldpath/admin/jobs/fleets");
-  }
- 
-  jobs(fleet: string): Promise<JobInfo[]> {
-    return this.get<JobInfo[]>(`/goldpath/admin/jobs/fleets/${encodeURIComponent(fleet)}/jobs`);
-  }
- 
-  runs(fleet: string, options: { job?: string; take?: number } = {}): Promise<RunSummary[]> {
-    const query = new URLSearchParams();
-    if (options.job) query.set("job", options.job);
-    // The contract clamps take to [1,500]; the console never asks for more.
-    query.set("take", String(Math.min(500, Math.max(1, options.take ?? 50))));
-    return this.get<RunSummary[]>(
-      `/goldpath/admin/jobs/fleets/${encodeURIComponent(fleet)}/runs?${query.toString()}`,
-    );
-  }
- 
-  run(runId: string): Promise<RunDetail> {
-    return this.get<RunDetail>(`/goldpath/admin/jobs/runs/${encodeURIComponent(runId)}`);
-  }
- 
-  /** Every mutating verb answers the frozen envelope — 200 ok, 400 refusal, both typed. */
-  async verb(route: string, body?: unknown): Promise<AdminResult> {
-    const response = await this.fetcher(`${this.baseUrl}${route}`, {
-      method: "POST",
-      credentials: "include",
-      headers: body === undefined ? { accept: "application/json" } : { accept: "application/json", "content-type": "application/json" },
-      body: body === undefined ? undefined : JSON.stringify(body),
-    });
-    if (response.status === 200 || response.status === 400) {
-      return (await response.json()) as AdminResult;
-    }
- 
-    throw new AdminHttpError(response.status, route);
-  }
- 
-  triggerJob(fleet: string, job: string): Promise<AdminResult> {
-    return this.verb(`/goldpath/admin/jobs/fleets/${encodeURIComponent(fleet)}/jobs/${encodeURIComponent(job)}/trigger`);
-  }
- 
-  pauseJob(fleet: string, job: string): Promise<AdminResult> {
-    return this.verb(`/goldpath/admin/jobs/fleets/${encodeURIComponent(fleet)}/jobs/${encodeURIComponent(job)}/pause`);
-  }
- 
-  resumeJob(fleet: string, job: string): Promise<AdminResult> {
-    return this.verb(`/goldpath/admin/jobs/fleets/${encodeURIComponent(fleet)}/jobs/${encodeURIComponent(job)}/resume`);
-  }
- 
-  rerun(runId: string): Promise<AdminResult> {
-    return this.verb(`/goldpath/admin/jobs/runs/${encodeURIComponent(runId)}/rerun`);
-  }
- 
-  /**
-   * Redrives EVERY open repair item of the run — the frozen verb takes no body and
-   * scopes itself server-side (`RedrivenAt == null`). The console must not pretend to
-   * select items it cannot select (review R1 on the U2 slice-1 PR).
-   */
-  replayItems(runId: string): Promise<AdminResult> {
-    return this.verb(`/goldpath/admin/jobs/runs/${encodeURIComponent(runId)}/replay-items`);
-  }
- 
-  bulkDefinitions(): Promise<BulkDefinitionStatus[]> {
-    return this.get<BulkDefinitionStatus[]>("/goldpath/admin/bulk/definitions");
-  }
- 
-  /**
-   * The batch list. The frozen surface filters by STATE (and tenant) only — there is no
-   * `definition` parameter, and the panel does NOT fake one client-side: narrowing the
-   * take-bounded page the server returned would read as "no batches" while plenty exist.
-   * The per-definition counts come from `/definitions`; issue #72 tracks adding the
-   * server-side filter.
-   */
-  bulkBatches(options: { state?: string; take?: number } = {}): Promise<BulkBatchInfo[]> {
-    const query = new URLSearchParams();
-    if (options.state) query.set("state", options.state);
-    query.set("take", String(Math.min(500, Math.max(1, options.take ?? 50))));
-    return this.get<BulkBatchInfo[]>(`/goldpath/admin/bulk/batches?${query.toString()}`);
-  }
- 
-  /** The VALIDATION report — keyset-paged by row number (the contract's own cursor). */
-  bulkErrors(batchId: string, options: { afterRow?: number; take?: number } = {}): Promise<BulkRowError[]> {
-    const query = new URLSearchParams();
-    query.set("afterRow", String(options.afterRow ?? 0));
-    query.set("take", String(Math.min(500, Math.max(1, options.take ?? 100))));
-    return this.get<BulkRowError[]>(
-      `/goldpath/admin/bulk/batches/${encodeURIComponent(batchId)}/errors?${query.toString()}`,
-    );
-  }
- 
-  approveBatch(batchId: string, note?: string): Promise<AdminResult> {
-    return this.verb(`/goldpath/admin/bulk/batches/${encodeURIComponent(batchId)}/approve`, { note: note ?? null });
-  }
- 
-  rejectBatch(batchId: string, note: string): Promise<AdminResult> {
-    // The contract makes the note MANDATORY on reject — the refusal must teach later readers.
-    return this.verb(`/goldpath/admin/bulk/batches/${encodeURIComponent(batchId)}/reject`, { note });
-  }
- 
-  /**
-   * Intake upload. The contract takes a RAW body on purpose (`curl --data-binary @file.csv`)
-   * — no multipart, no antiforgery coupling — so the console posts the file bytes as-is.
-   */
-  async uploadBatch(definition: string, file: File, tenant?: string): Promise<BulkBatchInfo> {
-    const query = new URLSearchParams({ fileName: file.name });
-    if (tenant) query.set("tenant", tenant);
-    const route = `/goldpath/admin/bulk/batches/${encodeURIComponent(definition)}?${query.toString()}`;
-    const response = await this.fetcher(`${this.baseUrl}${route}`, {
-      method: "POST",
-      credentials: "include",
-      headers: { accept: "application/json", "content-type": "application/octet-stream" },
-      body: file,
-    });
-    if (!response.ok) throw new AdminHttpError(response.status, route);
-    return (await response.json()) as BulkBatchInfo;
-  }
- 
-  batch(batchId: string): Promise<BulkBatchInfo> {
-    return this.get<BulkBatchInfo>(`/goldpath/admin/bulk/batches/${encodeURIComponent(batchId)}`);
-  }
- 
-  campaigns(options: { state?: string; take?: number } = {}): Promise<CampaignInfo[]> {
-    const query = new URLSearchParams();
-    if (options.state) query.set("state", options.state);
-    query.set("take", String(Math.min(500, Math.max(1, options.take ?? 50))));
-    return this.get<CampaignInfo[]>(`/goldpath/admin/campaign/?${query.toString()}`);
-  }
- 
-  campaign(id: string): Promise<CampaignInfo> {
-    return this.get<CampaignInfo>(`/goldpath/admin/campaign/${encodeURIComponent(id)}`);
-  }
- 
-  /** Execution failures — one noun across modules (bulk's `/errors` is validation). */
-  campaignFailures(id: string, take = 100): Promise<CampaignFailedItem[]> {
-    return this.get<CampaignFailedItem[]>(
-      `/goldpath/admin/campaign/${encodeURIComponent(id)}/failures?take=${Math.min(500, Math.max(1, take))}`,
-    );
-  }
- 
-  campaignAudit(id: string, take = 100): Promise<CampaignAuditEntry[]> {
-    return this.get<CampaignAuditEntry[]>(
-      `/goldpath/admin/campaign/${encodeURIComponent(id)}/audit?take=${Math.min(500, Math.max(1, take))}`,
-    );
-  }
- 
-  pauseCampaign(id: string): Promise<AdminResult> {
-    return this.verb(`/goldpath/admin/campaign/${encodeURIComponent(id)}/pause`, {});
-  }
- 
-  resumeCampaign(id: string): Promise<AdminResult> {
-    return this.verb(`/goldpath/admin/campaign/${encodeURIComponent(id)}/resume`, {});
-  }
- 
-  abortCampaign(id: string, reason: string): Promise<AdminResult> {
-    // The reason is the evidence — the contract binds the body, so it is never optional.
-    return this.verb(`/goldpath/admin/campaign/${encodeURIComponent(id)}/abort`, { reason });
-  }
- 
-  throttleCampaign(id: string, patch: CampaignThrottle): Promise<AdminResult> {
-    return this.verb(`/goldpath/admin/campaign/${encodeURIComponent(id)}/throttle`, patch);
-  }
- 
-  notificationTemplates(): Promise<NotificationTemplateStatus[]> {
-    return this.get<NotificationTemplateStatus[]>("/goldpath/admin/notification/templates");
-  }
- 
-  notifications(options: { state?: string; template?: string; take?: number } = {}): Promise<NotificationInfo[]> {
-    const query = new URLSearchParams();
-    if (options.state) query.set("state", options.state);
-    if (options.template) query.set("template", options.template);
-    query.set("take", String(Math.min(500, Math.max(1, options.take ?? 50))));
-    return this.get<NotificationInfo[]>(`/goldpath/admin/notification/notifications?${query.toString()}`);
-  }
- 
-  notification(id: string): Promise<NotificationInfo> {
-    return this.get<NotificationInfo>(`/goldpath/admin/notification/notifications/${encodeURIComponent(id)}`);
-  }
- 
-  /** The two focused lists the contract exposes in their own right. */
-  notificationSuppressions(take = 100): Promise<NotificationInfo[]> {
-    return this.get<NotificationInfo[]>(`/goldpath/admin/notification/suppressions?take=${Math.min(500, Math.max(1, take))}`);
-  }
- 
-  notificationFailures(take = 100): Promise<NotificationInfo[]> {
-    return this.get<NotificationInfo[]>(`/goldpath/admin/notification/failures?take=${Math.min(500, Math.max(1, take))}`);
-  }
- 
-  archiveDefinitions(): Promise<ArchiveDefinitionStatus[]> {
-    return this.get<ArchiveDefinitionStatus[]>("/goldpath/admin/archival/definitions");
-  }
- 
-  /** Retrieval is by (definition, key) — the archive has no browse route by design. */
-  async archiveEntry(definition: string, key: string): Promise<ArchiveEntry | null> {
-    const route = `/goldpath/admin/archival/entries/${encodeURIComponent(definition)}/${encodeURIComponent(key)}`;
-    const response = await this.fetcher(`${this.baseUrl}${route}`, {
-      headers: { accept: "application/json" },
-      credentials: "include",
-    });
-    if (response.status === 404) return null;   // "no such entry" is an answer, not a failure
-    if (!response.ok) throw new AdminHttpError(response.status, route);
-    return (await response.json()) as ArchiveEntry;
-  }
- 
-  holds(includeLifted = false, take = 100): Promise<LegalHold[]> {
-    const query = new URLSearchParams({ includeLifted: String(includeLifted), take: String(Math.min(500, Math.max(1, take))) });
-    return this.get<LegalHold[]>(`/goldpath/admin/archival/holds?${query.toString()}`);
-  }
- 
-  erasures(take = 100): Promise<ErasureRecord[]> {
-    return this.get<ErasureRecord[]>(`/goldpath/admin/archival/erasures?take=${Math.min(500, Math.max(1, take))}`);
-  }
- 
-  placeHold(definition: string, key: string, caseReference: string): Promise<AdminResult> {
-    // The case reference is mandatory: a hold that cannot be justified later is not a hold.
-    return this.verb(`/goldpath/admin/archival/entries/${encodeURIComponent(definition)}/${encodeURIComponent(key)}/hold`, { caseReference });
-  }
- 
-  liftHold(definition: string, key: string): Promise<AdminResult> {
-    return this.verb(`/goldpath/admin/archival/entries/${encodeURIComponent(definition)}/${encodeURIComponent(key)}/lift-hold`, {});
-  }
- 
-  erase(definition: string, key: string, subjectKey: string, detail?: string): Promise<AdminResult> {
-    return this.verb(
-      `/goldpath/admin/archival/entries/${encodeURIComponent(definition)}/${encodeURIComponent(key)}/erase`,
-      { subjectKey, detail: detail ?? null },
-    );
-  }
- 
-  /**
-   * Chain verification. This POST does NOT answer the verb envelope — it returns the
-   * FINDINGS themselves, and an empty list is the good news.
-   */
-  async verifyChain(definition: string): Promise<ChainFinding[]> {
-    const route = `/goldpath/admin/archival/definitions/${encodeURIComponent(definition)}/verify`;
-    const response = await this.fetcher(`${this.baseUrl}${route}`, {
-      method: "POST",
-      credentials: "include",
-      headers: { accept: "application/json" },
-    });
-    if (!response.ok) throw new AdminHttpError(response.status, route);
-    return (await response.json()) as ChainFinding[];
-  }
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/console/coverage/base.css b/ui/console/coverage/base.css deleted file mode 100644 index f418035..0000000 --- a/ui/console/coverage/base.css +++ /dev/null @@ -1,224 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* yellow */ -.cbranch-no { background: yellow !important; color: #111; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -.highlighted, -.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ - background: #C21F39 !important; -} -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -.medium .chart { border:1px solid #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } - -.coverage-summary td.empty { - opacity: .5; - padding-top: 4px; - padding-bottom: 4px; - line-height: 1; - color: #888; -} - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/ui/console/coverage/block-navigation.js b/ui/console/coverage/block-navigation.js deleted file mode 100644 index 530d1ed..0000000 --- a/ui/console/coverage/block-navigation.js +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable */ -var jumpToCode = (function init() { - // Classes of code we would like to highlight in the file view - var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; - - // Elements to highlight in the file listing view - var fileListingElements = ['td.pct.low']; - - // We don't want to select elements that are direct descendants of another match - var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` - - // Selector that finds elements on the page to which we can jump - var selector = - fileListingElements.join(', ') + - ', ' + - notSelector + - missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` - - // The NodeList of matching elements - var missingCoverageElements = document.querySelectorAll(selector); - - var currentIndex; - - function toggleClass(index) { - missingCoverageElements - .item(currentIndex) - .classList.remove('highlighted'); - missingCoverageElements.item(index).classList.add('highlighted'); - } - - function makeCurrent(index) { - toggleClass(index); - currentIndex = index; - missingCoverageElements.item(index).scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); - } - - function goToPrevious() { - var nextIndex = 0; - if (typeof currentIndex !== 'number' || currentIndex === 0) { - nextIndex = missingCoverageElements.length - 1; - } else if (missingCoverageElements.length > 1) { - nextIndex = currentIndex - 1; - } - - makeCurrent(nextIndex); - } - - function goToNext() { - var nextIndex = 0; - - if ( - typeof currentIndex === 'number' && - currentIndex < missingCoverageElements.length - 1 - ) { - nextIndex = currentIndex + 1; - } - - makeCurrent(nextIndex); - } - - return function jump(event) { - if ( - document.getElementById('fileSearch') === document.activeElement && - document.activeElement != null - ) { - // if we're currently focused on the search input, we don't want to navigate - return; - } - - switch (event.which) { - case 78: // n - case 74: // j - goToNext(); - break; - case 66: // b - case 75: // k - case 80: // p - goToPrevious(); - break; - } - }; -})(); -window.addEventListener('keydown', jumpToCode); diff --git a/ui/console/coverage/clover.xml b/ui/console/coverage/clover.xml deleted file mode 100644 index 8bf4fe5..0000000 --- a/ui/console/coverage/clover.xml +++ /dev/null @@ -1,1704 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ui/console/coverage/coverage-final.json b/ui/console/coverage/coverage-final.json deleted file mode 100644 index e1fbef8..0000000 --- a/ui/console/coverage/coverage-final.json +++ /dev/null @@ -1,8 +0,0 @@ -{"/Users/omercelik/Repositories/goldpath/ui/console/src/ArchivalPanel.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/ArchivalPanel.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":57}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":97}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":28}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":108}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":1}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":68}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":89}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":59}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":45}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":64}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":64}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":62}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":106}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":72}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":60}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":58}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":54}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":67}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":62}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":43}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":23}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":14}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":4}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":19}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":20}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":10}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":27}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":24}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":26}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":30}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":68}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":8}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":84}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":18}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":19}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":6}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":29}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":19}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":41}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":20}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":10}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":41}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":47}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":76}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":18}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":19}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":6}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":51}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":32}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":123}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":42}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":4}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":35}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":111}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":27}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":4}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":24}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":31}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":25}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":21}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":29}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":19}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":25}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":4}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":64}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":22}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":26}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":9}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":51}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":57}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":31}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":78}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":96}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":13}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":28}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":42}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":5}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":4}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":34}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":10}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":60}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":55}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":15}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":84}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":34}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":49}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":126}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":73}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":83}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":100}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":51}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":21}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":92}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":129}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":40}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":27}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":50}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":98}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":54}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":23}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":18}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":21}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":17}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":13}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":117}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":13}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":16}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":24}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":44}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":108}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":17}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":20}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":46}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":45}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":49}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":97}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":21}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":14}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":49}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":105}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":23}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":45}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":53}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":130}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":76}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":77}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":74}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":23}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":19}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":19}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":15}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":18}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":15}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":84}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":56}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":79}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":19}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":34}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":105}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":32}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":36}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":50}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":31}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":34}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":16}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":53}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":64}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":32}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":25}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":17}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":21}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":18}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":79}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":18}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":40}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":110}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":25}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":62}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":70}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":14}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":18}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":17}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":105}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":28}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":11}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":19}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":14}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":47}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":12}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":16}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":30}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":28}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":114}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":17}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":17}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":93}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":66}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":48}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":90}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":17}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":76}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":95}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":59}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":25}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":28}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":119}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":77}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":131}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":31}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":21}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":16}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":25}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":33}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":104}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":96}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":31}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":21}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":16}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":25}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":29}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":174}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":74}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":121}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":31}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":21}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":27}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":16}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":19}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":16}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":51}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":122}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":31}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":21}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":41}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":108}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":87}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":17}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":57}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":41}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":18}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":17}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":60}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":18}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":50}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":19}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":18}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":17}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":60}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":44}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":18}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":17}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":65}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":72}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":18}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":17}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":68}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":74}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":18}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":17}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":59}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":88}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":18}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":15}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":30}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":53}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":103}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":141}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":16}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":32}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":19}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":105}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":66}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":68}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":21}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":121}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":32}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":112}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":32}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":20}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":16}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":18}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":15}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":64}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":84}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":83}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":122}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":18}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":14}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":31}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":56}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":20}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":67}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":110}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":67}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":148}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":13}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":30}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":29}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":33}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":106}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":60}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":14}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":12}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":30}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":44}},"364":{"start":{"line":365,"column":0},"end":{"line":365,"column":95}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":10}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":16}},"368":{"start":{"line":369,"column":0},"end":{"line":369,"column":15}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":84}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":35}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":42}},"372":{"start":{"line":373,"column":0},"end":{"line":373,"column":20}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":116}},"374":{"start":{"line":375,"column":0},"end":{"line":375,"column":77}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":67}},"376":{"start":{"line":377,"column":0},"end":{"line":377,"column":92}},"377":{"start":{"line":378,"column":0},"end":{"line":378,"column":73}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":12}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":33}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":48}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":55}},"382":{"start":{"line":383,"column":0},"end":{"line":383,"column":10}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":47}},"386":{"start":{"line":387,"column":0},"end":{"line":387,"column":12}},"387":{"start":{"line":388,"column":0},"end":{"line":388,"column":16}},"388":{"start":{"line":389,"column":0},"end":{"line":389,"column":10}},"390":{"start":{"line":391,"column":0},"end":{"line":391,"column":1}}},"s":{"0":1,"19":4,"20":4,"21":4,"22":4,"30":1,"31":118,"32":118,"33":118,"34":118,"35":118,"36":118,"37":118,"39":118,"40":118,"41":118,"42":118,"45":118,"47":118,"48":118,"49":4,"50":4,"51":4,"53":118,"54":21,"55":21,"56":21,"57":21,"58":20,"59":20,"60":20,"61":21,"62":21,"63":21,"64":21,"65":21,"66":118,"69":118,"70":46,"71":13,"72":13,"73":13,"74":13,"75":13,"76":13,"77":13,"78":13,"79":118,"81":118,"82":118,"83":118,"84":118,"86":118,"87":118,"88":118,"89":118,"91":118,"92":9,"93":9,"94":9,"95":9,"96":9,"97":9,"98":9,"100":118,"102":4,"103":4,"104":4,"105":4,"106":3,"108":3,"109":2,"110":1,"111":4,"112":1,"113":1,"114":1,"115":4,"117":118,"119":118,"120":118,"121":118,"123":118,"124":118,"125":118,"126":118,"127":108,"128":108,"129":108,"130":108,"131":108,"132":108,"133":108,"135":108,"136":108,"137":108,"138":108,"139":108,"140":108,"142":108,"143":108,"144":108,"145":108,"146":118,"147":118,"148":118,"149":118,"151":118,"152":1,"153":1,"154":1,"157":118,"158":6,"159":6,"160":4,"161":4,"162":4,"164":2,"165":2,"166":2,"167":2,"168":2,"169":2,"170":2,"171":2,"172":2,"173":2,"174":2,"175":2,"176":2,"177":2,"179":6,"182":118,"183":118,"184":118,"185":118,"187":118,"188":118,"189":118,"190":118,"191":118,"192":1,"193":1,"194":1,"195":1,"197":118,"198":108,"199":108,"200":108,"201":118,"202":118,"203":118,"204":118,"206":118,"207":118,"208":118,"209":118,"210":118,"211":118,"212":118,"213":118,"214":118,"215":118,"216":118,"217":118,"219":118,"220":118,"222":118,"224":118,"225":118,"227":118,"228":10,"229":10,"230":10,"233":118,"234":17,"235":17,"236":17,"237":17,"238":17,"239":17,"240":17,"241":17,"242":17,"243":17,"244":17,"245":17,"246":17,"247":17,"248":17,"249":17,"250":17,"251":17,"252":17,"253":17,"254":17,"255":17,"256":17,"257":17,"258":17,"261":17,"262":17,"263":17,"264":17,"265":17,"266":17,"267":17,"268":17,"269":17,"271":17,"272":6,"273":6,"274":6,"276":17,"277":2,"280":17,"281":17,"282":17,"283":17,"284":17,"285":17,"286":17,"287":17,"288":17,"289":17,"290":17,"291":17,"292":17,"293":17,"294":17,"295":17,"296":17,"297":17,"298":17,"299":17,"300":17,"301":17,"302":17,"303":17,"304":17,"305":17,"306":17,"307":17,"309":17,"312":1,"313":1,"314":1,"315":1,"318":17,"319":17,"320":17,"321":17,"323":17,"324":17,"327":17,"328":17,"329":1,"330":1,"331":1,"333":17,"334":17,"337":118,"338":118,"339":118,"340":118,"341":118,"343":118,"344":118,"345":118,"346":118,"347":118,"348":118,"349":118,"350":118,"351":118,"352":118,"353":118,"354":118,"355":88,"356":1,"358":87,"360":118,"361":118,"362":118,"363":118,"364":118,"365":118,"366":118,"368":118,"369":118,"370":118,"371":118,"372":118,"373":118,"374":118,"375":118,"376":118,"377":118,"378":118,"379":118,"380":118,"381":118,"382":118,"384":118,"386":118,"387":118,"388":118,"390":118},"branchMap":{"0":{"type":"branch","line":20,"loc":{"start":{"line":20,"column":0},"end":{"line":23,"column":1}},"locations":[{"start":{"line":20,"column":0},"end":{"line":23,"column":1}}]},"1":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":23},"end":{"line":22,"column":21}},"locations":[{"start":{"line":21,"column":23},"end":{"line":22,"column":21}}]},"2":{"type":"branch","line":22,"loc":{"start":{"line":22,"column":16},"end":{"line":22,"column":63}},"locations":[{"start":{"line":22,"column":16},"end":{"line":22,"column":63}}]},"3":{"type":"branch","line":22,"loc":{"start":{"line":22,"column":59},"end":{"line":22,"column":108}},"locations":[{"start":{"line":22,"column":59},"end":{"line":22,"column":108}}]},"4":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":7},"end":{"line":391,"column":1}},"locations":[{"start":{"line":31,"column":7},"end":{"line":391,"column":1}}]},"5":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":16},"end":{"line":118,"column":34}},"locations":[{"start":{"line":118,"column":16},"end":{"line":118,"column":34}}]},"6":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":7},"end":{"line":122,"column":55}},"locations":[{"start":{"line":122,"column":7},"end":{"line":122,"column":55}}]},"7":{"type":"branch","line":127,"loc":{"start":{"line":127,"column":12},"end":{"line":127,"column":31}},"locations":[{"start":{"line":127,"column":12},"end":{"line":127,"column":31}}]},"8":{"type":"branch","line":148,"loc":{"start":{"line":148,"column":11},"end":{"line":148,"column":35}},"locations":[{"start":{"line":148,"column":11},"end":{"line":148,"column":35}}]},"9":{"type":"branch","line":148,"loc":{"start":{"line":148,"column":35},"end":{"line":148,"column":117}},"locations":[{"start":{"line":148,"column":35},"end":{"line":148,"column":117}}]},"10":{"type":"branch","line":152,"loc":{"start":{"line":152,"column":7},"end":{"line":155,"column":17}},"locations":[{"start":{"line":152,"column":7},"end":{"line":155,"column":17}}]},"11":{"type":"branch","line":158,"loc":{"start":{"line":158,"column":7},"end":{"line":180,"column":18}},"locations":[{"start":{"line":158,"column":7},"end":{"line":180,"column":18}}]},"12":{"type":"branch","line":160,"loc":{"start":{"line":160,"column":40},"end":{"line":163,"column":21}},"locations":[{"start":{"line":160,"column":40},"end":{"line":163,"column":21}}]},"13":{"type":"branch","line":163,"loc":{"start":{"line":163,"column":12},"end":{"line":178,"column":15}},"locations":[{"start":{"line":163,"column":12},"end":{"line":178,"column":15}}]},"14":{"type":"branch","line":198,"loc":{"start":{"line":198,"column":16},"end":{"line":198,"column":35}},"locations":[{"start":{"line":198,"column":16},"end":{"line":198,"column":35}}]},"15":{"type":"branch","line":228,"loc":{"start":{"line":228,"column":7},"end":{"line":228,"column":30}},"locations":[{"start":{"line":228,"column":7},"end":{"line":228,"column":30}}]},"16":{"type":"branch","line":228,"loc":{"start":{"line":228,"column":20},"end":{"line":231,"column":17}},"locations":[{"start":{"line":228,"column":20},"end":{"line":231,"column":17}}]},"17":{"type":"branch","line":234,"loc":{"start":{"line":234,"column":7},"end":{"line":335,"column":18}},"locations":[{"start":{"line":234,"column":7},"end":{"line":335,"column":18}}]},"18":{"type":"branch","line":240,"loc":{"start":{"line":240,"column":19},"end":{"line":240,"column":76}},"locations":[{"start":{"line":240,"column":19},"end":{"line":240,"column":76}}]},"19":{"type":"branch","line":272,"loc":{"start":{"line":272,"column":11},"end":{"line":272,"column":51}},"locations":[{"start":{"line":272,"column":11},"end":{"line":272,"column":51}}]},"20":{"type":"branch","line":272,"loc":{"start":{"line":272,"column":39},"end":{"line":275,"column":21}},"locations":[{"start":{"line":272,"column":39},"end":{"line":275,"column":21}}]},"21":{"type":"branch","line":273,"loc":{"start":{"line":273,"column":43},"end":{"line":273,"column":62}},"locations":[{"start":{"line":273,"column":43},"end":{"line":273,"column":62}}]},"22":{"type":"branch","line":273,"loc":{"start":{"line":273,"column":50},"end":{"line":273,"column":72}},"locations":[{"start":{"line":273,"column":50},"end":{"line":273,"column":72}}]},"23":{"type":"branch","line":273,"loc":{"start":{"line":273,"column":95},"end":{"line":273,"column":113}},"locations":[{"start":{"line":273,"column":95},"end":{"line":273,"column":113}}]},"24":{"type":"branch","line":273,"loc":{"start":{"line":273,"column":102},"end":{"line":273,"column":122}},"locations":[{"start":{"line":273,"column":102},"end":{"line":273,"column":122}}]},"25":{"type":"branch","line":277,"loc":{"start":{"line":277,"column":11},"end":{"line":277,"column":29}},"locations":[{"start":{"line":277,"column":11},"end":{"line":277,"column":29}}]},"26":{"type":"branch","line":277,"loc":{"start":{"line":277,"column":29},"end":{"line":278,"column":108}},"locations":[{"start":{"line":277,"column":29},"end":{"line":278,"column":108}}]},"27":{"type":"branch","line":306,"loc":{"start":{"line":306,"column":57},"end":{"line":306,"column":83}},"locations":[{"start":{"line":306,"column":57},"end":{"line":306,"column":83}}]},"28":{"type":"branch","line":310,"loc":{"start":{"line":310,"column":17},"end":{"line":316,"column":16}},"locations":[{"start":{"line":310,"column":17},"end":{"line":316,"column":16}}]},"29":{"type":"branch","line":315,"loc":{"start":{"line":315,"column":94},"end":{"line":315,"column":140}},"locations":[{"start":{"line":315,"column":94},"end":{"line":315,"column":140}}]},"30":{"type":"branch","line":324,"loc":{"start":{"line":324,"column":15},"end":{"line":324,"column":50}},"locations":[{"start":{"line":324,"column":15},"end":{"line":324,"column":50}}]},"31":{"type":"branch","line":324,"loc":{"start":{"line":324,"column":32},"end":{"line":324,"column":68}},"locations":[{"start":{"line":324,"column":32},"end":{"line":324,"column":68}}]},"32":{"type":"branch","line":329,"loc":{"start":{"line":329,"column":13},"end":{"line":332,"column":20}},"locations":[{"start":{"line":329,"column":13},"end":{"line":332,"column":20}}]},"33":{"type":"branch","line":365,"loc":{"start":{"line":365,"column":24},"end":{"line":365,"column":76}},"locations":[{"start":{"line":365,"column":24},"end":{"line":365,"column":76}}]},"34":{"type":"branch","line":365,"loc":{"start":{"line":365,"column":40},"end":{"line":365,"column":95}},"locations":[{"start":{"line":365,"column":40},"end":{"line":365,"column":95}}]},"35":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":18},"end":{"line":48,"column":62}},"locations":[{"start":{"line":48,"column":18},"end":{"line":48,"column":62}}]},"36":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":40},"end":{"line":48,"column":60}},"locations":[{"start":{"line":48,"column":40},"end":{"line":48,"column":60}}]},"37":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":17},"end":{"line":52,"column":4}},"locations":[{"start":{"line":49,"column":17},"end":{"line":52,"column":4}}]},"38":{"type":"branch","line":54,"loc":{"start":{"line":54,"column":12},"end":{"line":67,"column":5}},"locations":[{"start":{"line":54,"column":12},"end":{"line":67,"column":5}}]},"39":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":12},"end":{"line":62,"column":7}},"locations":[{"start":{"line":58,"column":12},"end":{"line":62,"column":7}}]},"40":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":19},"end":{"line":59,"column":26}},"locations":[{"start":{"line":59,"column":19},"end":{"line":59,"column":26}}]},"41":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":22},"end":{"line":61,"column":66}},"locations":[{"start":{"line":61,"column":22},"end":{"line":61,"column":66}}]},"42":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":35},"end":{"line":61,"column":64}},"locations":[{"start":{"line":61,"column":35},"end":{"line":61,"column":64}}]},"43":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":56},"end":{"line":61,"column":66}},"locations":[{"start":{"line":61,"column":56},"end":{"line":61,"column":66}}]},"44":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":13},"end":{"line":63,"column":82}},"locations":[{"start":{"line":63,"column":13},"end":{"line":63,"column":82}}]},"45":{"type":"branch","line":64,"loc":{"start":{"line":64,"column":11},"end":{"line":66,"column":6}},"locations":[{"start":{"line":64,"column":11},"end":{"line":66,"column":6}}]},"46":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":12},"end":{"line":80,"column":5}},"locations":[{"start":{"line":70,"column":12},"end":{"line":80,"column":5}}]},"47":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":9},"end":{"line":71,"column":34}},"locations":[{"start":{"line":71,"column":9},"end":{"line":71,"column":34}}]},"48":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":34},"end":{"line":71,"column":41}},"locations":[{"start":{"line":71,"column":34},"end":{"line":71,"column":41}}]},"49":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":34},"end":{"line":79,"column":6}},"locations":[{"start":{"line":71,"column":34},"end":{"line":79,"column":6}}]},"50":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":12},"end":{"line":75,"column":46}},"locations":[{"start":{"line":75,"column":12},"end":{"line":75,"column":46}}]},"51":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":11},"end":{"line":79,"column":6}},"locations":[{"start":{"line":77,"column":11},"end":{"line":79,"column":6}}]},"52":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":4},"end":{"line":83,"column":123}},"locations":[{"start":{"line":83,"column":4},"end":{"line":83,"column":123}}]},"53":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":100},"end":{"line":83,"column":123}},"locations":[{"start":{"line":83,"column":100},"end":{"line":83,"column":123}}]},"54":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":4},"end":{"line":88,"column":111}},"locations":[{"start":{"line":88,"column":4},"end":{"line":88,"column":111}}]},"55":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":88},"end":{"line":88,"column":111}},"locations":[{"start":{"line":88,"column":88},"end":{"line":88,"column":111}}]},"56":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":17},"end":{"line":99,"column":4}},"locations":[{"start":{"line":92,"column":17},"end":{"line":99,"column":4}}]},"57":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":18},"end":{"line":94,"column":25}},"locations":[{"start":{"line":94,"column":18},"end":{"line":94,"column":25}}]},"58":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":17},"end":{"line":116,"column":4}},"locations":[{"start":{"line":101,"column":17},"end":{"line":116,"column":4}}]},"59":{"type":"branch","line":106,"loc":{"start":{"line":106,"column":49},"end":{"line":109,"column":31}},"locations":[{"start":{"line":106,"column":49},"end":{"line":109,"column":31}}]},"60":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":30},"end":{"line":110,"column":78}},"locations":[{"start":{"line":109,"column":30},"end":{"line":110,"column":78}}]},"61":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":77},"end":{"line":111,"column":96}},"locations":[{"start":{"line":110,"column":77},"end":{"line":111,"column":96}}]},"62":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":4},"end":{"line":115,"column":5}},"locations":[{"start":{"line":112,"column":4},"end":{"line":115,"column":5}}]},"63":{"type":"branch","line":127,"loc":{"start":{"line":127,"column":35},"end":{"line":146,"column":17}},"locations":[{"start":{"line":127,"column":35},"end":{"line":146,"column":17}}]},"64":{"type":"branch","line":131,"loc":{"start":{"line":131,"column":63},"end":{"line":131,"column":84}},"locations":[{"start":{"line":131,"column":63},"end":{"line":131,"column":84}}]},"65":{"type":"branch","line":131,"loc":{"start":{"line":131,"column":67},"end":{"line":131,"column":96}},"locations":[{"start":{"line":131,"column":67},"end":{"line":131,"column":96}}]},"66":{"type":"branch","line":141,"loc":{"start":{"line":141,"column":27},"end":{"line":141,"column":54}},"locations":[{"start":{"line":141,"column":27},"end":{"line":141,"column":54}}]},"67":{"type":"branch","line":170,"loc":{"start":{"line":170,"column":39},"end":{"line":175,"column":23}},"locations":[{"start":{"line":170,"column":39},"end":{"line":175,"column":23}}]},"68":{"type":"branch","line":192,"loc":{"start":{"line":192,"column":24},"end":{"line":196,"column":16}},"locations":[{"start":{"line":192,"column":24},"end":{"line":196,"column":16}}]},"69":{"type":"branch","line":198,"loc":{"start":{"line":198,"column":39},"end":{"line":201,"column":25}},"locations":[{"start":{"line":198,"column":39},"end":{"line":201,"column":25}}]},"70":{"type":"branch","line":211,"loc":{"start":{"line":211,"column":24},"end":{"line":211,"column":62}},"locations":[{"start":{"line":211,"column":24},"end":{"line":211,"column":62}}]},"71":{"type":"branch","line":212,"loc":{"start":{"line":212,"column":25},"end":{"line":212,"column":70}},"locations":[{"start":{"line":212,"column":25},"end":{"line":212,"column":70}}]},"72":{"type":"branch","line":212,"loc":{"start":{"line":212,"column":50},"end":{"line":212,"column":70}},"locations":[{"start":{"line":212,"column":50},"end":{"line":212,"column":70}}]},"73":{"type":"branch","line":247,"loc":{"start":{"line":247,"column":25},"end":{"line":247,"column":131}},"locations":[{"start":{"line":247,"column":25},"end":{"line":247,"column":131}}]},"74":{"type":"branch","line":247,"loc":{"start":{"line":247,"column":109},"end":{"line":247,"column":128}},"locations":[{"start":{"line":247,"column":109},"end":{"line":247,"column":128}}]},"75":{"type":"branch","line":254,"loc":{"start":{"line":254,"column":25},"end":{"line":254,"column":96}},"locations":[{"start":{"line":254,"column":25},"end":{"line":254,"column":96}}]},"76":{"type":"branch","line":264,"loc":{"start":{"line":264,"column":25},"end":{"line":264,"column":121}},"locations":[{"start":{"line":264,"column":25},"end":{"line":264,"column":121}}]},"77":{"type":"branch","line":264,"loc":{"start":{"line":264,"column":102},"end":{"line":264,"column":118}},"locations":[{"start":{"line":264,"column":102},"end":{"line":264,"column":118}}]},"78":{"type":"branch","line":322,"loc":{"start":{"line":322,"column":23},"end":{"line":322,"column":66}},"locations":[{"start":{"line":322,"column":23},"end":{"line":322,"column":66}}]},"79":{"type":"branch","line":322,"loc":{"start":{"line":322,"column":47},"end":{"line":322,"column":64}},"locations":[{"start":{"line":322,"column":47},"end":{"line":322,"column":64}}]},"80":{"type":"branch","line":342,"loc":{"start":{"line":342,"column":69},"end":{"line":342,"column":120}},"locations":[{"start":{"line":342,"column":69},"end":{"line":342,"column":120}}]},"81":{"type":"branch","line":349,"loc":{"start":{"line":349,"column":39},"end":{"line":349,"column":65}},"locations":[{"start":{"line":349,"column":39},"end":{"line":349,"column":65}}]},"82":{"type":"branch","line":350,"loc":{"start":{"line":350,"column":35},"end":{"line":350,"column":108}},"locations":[{"start":{"line":350,"column":35},"end":{"line":350,"column":108}}]},"83":{"type":"branch","line":351,"loc":{"start":{"line":351,"column":36},"end":{"line":351,"column":65}},"locations":[{"start":{"line":351,"column":36},"end":{"line":351,"column":65}}]},"84":{"type":"branch","line":352,"loc":{"start":{"line":352,"column":38},"end":{"line":352,"column":146}},"locations":[{"start":{"line":352,"column":38},"end":{"line":352,"column":146}}]},"85":{"type":"branch","line":355,"loc":{"start":{"line":355,"column":20},"end":{"line":359,"column":60}},"locations":[{"start":{"line":355,"column":20},"end":{"line":359,"column":60}}]},"86":{"type":"branch","line":356,"loc":{"start":{"line":356,"column":21},"end":{"line":357,"column":106}},"locations":[{"start":{"line":356,"column":21},"end":{"line":357,"column":106}}]},"87":{"type":"branch","line":357,"loc":{"start":{"line":357,"column":99},"end":{"line":359,"column":60}},"locations":[{"start":{"line":357,"column":99},"end":{"line":359,"column":60}}]},"88":{"type":"branch","line":364,"loc":{"start":{"line":364,"column":18},"end":{"line":364,"column":44}},"locations":[{"start":{"line":364,"column":18},"end":{"line":364,"column":44}}]}},"b":{"0":[4],"1":[3],"2":[2],"3":[1],"4":[118],"5":[1],"6":[1],"7":[18],"8":[100],"9":[0],"10":[1],"11":[6],"12":[4],"13":[2],"14":[18],"15":[27],"16":[10],"17":[17],"18":[1],"19":[8],"20":[6],"21":[4],"22":[2],"23":[4],"24":[2],"25":[8],"26":[2],"27":[0],"28":[1],"29":[0],"30":[1],"31":[16],"32":[1],"33":[1],"34":[117],"35":[4],"36":[4],"37":[4],"38":[21],"39":[20],"40":[0],"41":[19],"42":[15],"43":[0],"44":[1],"45":[21],"46":[46],"47":[13],"48":[33],"49":[13],"50":[13],"51":[13],"52":[22],"53":[20],"54":[21],"55":[19],"56":[9],"57":[0],"58":[4],"59":[3],"60":[2],"61":[1],"62":[1],"63":[108],"64":[87],"65":[21],"66":[4],"67":[2],"68":[1],"69":[108],"70":[48],"71":[48],"72":[0],"73":[1],"74":[0],"75":[2],"76":[1],"77":[0],"78":[1],"79":[1],"80":[1],"81":[88],"82":[88],"83":[88],"84":[88],"85":[88],"86":[1],"87":[87],"88":[88]},"fnMap":{"0":{"name":"asOutcome","decl":{"start":{"line":20,"column":0},"end":{"line":23,"column":1}},"loc":{"start":{"line":20,"column":0},"end":{"line":23,"column":1}},"line":20},"1":{"name":"ArchivalPanel","decl":{"start":{"line":31,"column":7},"end":{"line":391,"column":1}},"loc":{"start":{"line":31,"column":7},"end":{"line":391,"column":1}},"line":31},"2":{"name":"refresh","decl":{"start":{"line":48,"column":18},"end":{"line":48,"column":62}},"loc":{"start":{"line":48,"column":18},"end":{"line":48,"column":62}},"line":48},"3":{"name":"settle","decl":{"start":{"line":49,"column":17},"end":{"line":52,"column":4}},"loc":{"start":{"line":49,"column":17},"end":{"line":52,"column":4}},"line":49},"4":{"name":"lookUp","decl":{"start":{"line":92,"column":17},"end":{"line":99,"column":4}},"loc":{"start":{"line":92,"column":17},"end":{"line":99,"column":4}},"line":92},"5":{"name":"verify","decl":{"start":{"line":101,"column":17},"end":{"line":116,"column":4}},"loc":{"start":{"line":101,"column":17},"end":{"line":116,"column":4}},"line":101},"6":{"name":"execute","decl":{"start":{"line":141,"column":27},"end":{"line":141,"column":54}},"loc":{"start":{"line":141,"column":27},"end":{"line":141,"column":54}},"line":141},"7":{"name":"onChange","decl":{"start":{"line":192,"column":24},"end":{"line":196,"column":16}},"loc":{"start":{"line":192,"column":24},"end":{"line":196,"column":16}},"line":192},"8":{"name":"onChange","decl":{"start":{"line":211,"column":24},"end":{"line":211,"column":62}},"loc":{"start":{"line":211,"column":24},"end":{"line":211,"column":62}},"line":211},"9":{"name":"onKeyDown","decl":{"start":{"line":212,"column":25},"end":{"line":212,"column":70}},"loc":{"start":{"line":212,"column":25},"end":{"line":212,"column":70}},"line":212},"10":{"name":"execute","decl":{"start":{"line":247,"column":25},"end":{"line":247,"column":131}},"loc":{"start":{"line":247,"column":25},"end":{"line":247,"column":131}},"line":247},"11":{"name":"execute","decl":{"start":{"line":254,"column":25},"end":{"line":254,"column":96}},"loc":{"start":{"line":254,"column":25},"end":{"line":254,"column":96}},"line":254},"12":{"name":"execute","decl":{"start":{"line":264,"column":25},"end":{"line":264,"column":121}},"loc":{"start":{"line":264,"column":25},"end":{"line":264,"column":121}},"line":264},"13":{"name":"onClick","decl":{"start":{"line":322,"column":23},"end":{"line":322,"column":66}},"loc":{"start":{"line":322,"column":23},"end":{"line":322,"column":66}},"line":322},"14":{"name":"onChange","decl":{"start":{"line":342,"column":69},"end":{"line":342,"column":120}},"loc":{"start":{"line":342,"column":69},"end":{"line":342,"column":120}},"line":342},"15":{"name":"cell","decl":{"start":{"line":349,"column":39},"end":{"line":349,"column":65}},"loc":{"start":{"line":349,"column":39},"end":{"line":349,"column":65}},"line":349},"16":{"name":"cell","decl":{"start":{"line":350,"column":35},"end":{"line":350,"column":108}},"loc":{"start":{"line":350,"column":35},"end":{"line":350,"column":108}},"line":350},"17":{"name":"cell","decl":{"start":{"line":351,"column":36},"end":{"line":351,"column":65}},"loc":{"start":{"line":351,"column":36},"end":{"line":351,"column":65}},"line":351},"18":{"name":"cell","decl":{"start":{"line":352,"column":38},"end":{"line":352,"column":146}},"loc":{"start":{"line":352,"column":38},"end":{"line":352,"column":146}},"line":352},"19":{"name":"cell","decl":{"start":{"line":355,"column":20},"end":{"line":359,"column":60}},"loc":{"start":{"line":355,"column":20},"end":{"line":359,"column":60}},"line":355},"20":{"name":"rowKey","decl":{"start":{"line":364,"column":18},"end":{"line":364,"column":44}},"loc":{"start":{"line":364,"column":18},"end":{"line":364,"column":44}},"line":364},"21":{"name":"cell","decl":{"start":{"line":374,"column":39},"end":{"line":374,"column":114}},"loc":{"start":{"line":374,"column":39},"end":{"line":374,"column":114}},"line":374},"22":{"name":"cell","decl":{"start":{"line":375,"column":44},"end":{"line":375,"column":75}},"loc":{"start":{"line":375,"column":44},"end":{"line":375,"column":75}},"line":375},"23":{"name":"cell","decl":{"start":{"line":376,"column":34},"end":{"line":376,"column":65}},"loc":{"start":{"line":376,"column":34},"end":{"line":376,"column":65}},"line":376},"24":{"name":"cell","decl":{"start":{"line":377,"column":55},"end":{"line":377,"column":90}},"loc":{"start":{"line":377,"column":55},"end":{"line":377,"column":90}},"line":377},"25":{"name":"cell","decl":{"start":{"line":378,"column":38},"end":{"line":378,"column":71}},"loc":{"start":{"line":378,"column":38},"end":{"line":378,"column":71}},"line":378},"26":{"name":"rowKey","decl":{"start":{"line":381,"column":18},"end":{"line":381,"column":48}},"loc":{"start":{"line":381,"column":18},"end":{"line":381,"column":48}},"line":381}},"f":{"0":4,"1":118,"2":4,"3":4,"4":9,"5":4,"6":4,"7":1,"8":48,"9":48,"10":1,"11":2,"12":1,"13":1,"14":1,"15":88,"16":88,"17":88,"18":88,"19":88,"20":88,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0}} -,"/Users/omercelik/Repositories/goldpath/ui/console/src/BulkPanel.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/BulkPanel.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":65}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":97}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":28}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":108}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":1}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":16}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":13}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":15}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":14}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":13}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":13}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":14}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":14}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":26}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":11}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":26}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":55}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":86}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":49}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":68}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":71}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":58}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":69}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":54}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":51}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":59}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":54}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":62}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":44}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":25}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":14}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":4}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":19}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":20}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":10}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":24}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":24}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":26}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":30}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":68}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":8}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":81}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":18}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":19}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":6}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":29}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":34}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":53}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":84}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":50}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":6}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":34}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":4}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":33}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":52}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":80}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":106}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":33}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":106}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":6}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":39}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":4}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":19}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":74}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":19}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":19}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":22}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":24}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":13}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":5}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":20}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":10}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":24}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":50}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":80}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":18}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":19}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":6}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":41}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":52}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":66}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":9}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":63}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":30}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":16}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":100}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":13}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":42}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":5}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":4}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":39}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":86}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":3}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":94}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":10}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":56}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":55}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":30}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":45}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":18}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":34}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":67}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":141}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":14}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":25}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":17}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":15}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":87}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":34}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":52}},"158":{"start":{"line":159,"column":0},"end":{"line":159,"column":129}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":76}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":87}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":70}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":39}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":23}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":17}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":77}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":74}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":17}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":13}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":13}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":16}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":15}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":82}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":59}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":85}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":18}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":17}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":32}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":87}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":30}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":67}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":54}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":68}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":33}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":23}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":15}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":19}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":16}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":27}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":23}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":35}},"197":{"start":{"line":198,"column":0},"end":{"line":198,"column":232}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":74}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":12}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":20}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":23}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":28}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":65}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":30}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":14}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":14}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":47}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":114}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":12}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":16}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":15}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":83}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":64}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":80}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":18}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":17}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":27}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":87}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":25}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":34}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":43}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":34}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":14}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":48}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":37}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":50}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":24}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":23}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":15}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":19}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":14}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":35}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":42}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":20}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":13}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":30}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":32}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":129}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":28}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":25}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":14}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":72}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":85}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":105}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":86}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":12}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":32}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":38}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":50}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":10}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":16}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":20}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":92}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":66}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":48}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":57}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":17}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":49}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":101}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":96}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":42}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":61}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":27}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":33}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":99}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":53}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":100}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":33}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":23}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":18}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":27}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":32}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":68}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":71}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":92}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":33}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":23}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":29}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":18}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":21}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":16}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":53}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":124}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":32}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":21}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":42}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":113}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":87}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":17}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":56}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":43}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":18}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":17}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":51}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":43}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":18}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":17}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":53}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":110}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":18}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":17}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":63}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":18}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":140}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":19}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":18}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":15}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":34}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":62}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":116}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":34}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":76}},"333":{"start":{"line":334,"column":0},"end":{"line":334,"column":16}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":66}},"337":{"start":{"line":338,"column":0},"end":{"line":338,"column":81}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":15}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":40}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":38}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":52}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":24}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":113}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":62}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":66}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":16}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":35}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":46}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":24}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":65}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":14}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":18}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":10}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":1}}},"s":{"0":1,"10":5,"11":5,"12":5,"13":5,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"28":1,"35":1,"36":76,"37":76,"38":76,"39":76,"40":76,"43":76,"44":76,"45":76,"46":76,"47":76,"49":76,"52":76,"53":5,"54":5,"55":5,"57":76,"58":23,"59":23,"60":23,"61":23,"62":22,"63":22,"64":22,"65":23,"66":23,"67":23,"68":23,"69":23,"70":76,"72":76,"73":76,"76":24,"77":22,"78":24,"79":76,"80":76,"83":76,"84":76,"85":15,"86":15,"87":15,"89":15,"90":15,"91":76,"92":76,"96":76,"97":27,"98":76,"100":76,"101":32,"102":17,"103":17,"104":17,"106":15,"107":15,"108":15,"109":15,"110":15,"111":15,"112":15,"113":15,"114":76,"118":76,"119":2,"120":2,"121":2,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":2,"133":76,"134":17,"135":17,"137":76,"139":76,"140":76,"141":76,"143":76,"144":55,"145":55,"146":55,"147":55,"148":55,"149":55,"150":55,"151":55,"154":76,"155":76,"156":76,"157":76,"158":57,"159":57,"160":57,"161":112,"162":112,"163":112,"164":57,"165":57,"166":1,"168":57,"169":76,"170":76,"171":76,"173":76,"174":76,"175":76,"176":76,"178":76,"179":76,"180":76,"181":76,"182":76,"183":76,"185":76,"186":57,"187":57,"188":57,"189":76,"190":76,"191":76,"192":76,"193":76,"194":76,"197":76,"198":76,"199":76,"200":76,"201":4,"202":4,"203":4,"204":4,"205":4,"207":76,"208":76,"209":76,"211":76,"212":76,"214":76,"215":76,"216":76,"217":76,"219":76,"220":76,"221":76,"222":76,"223":76,"224":76,"225":1,"226":1,"227":1,"229":76,"230":76,"231":472,"232":472,"233":472,"234":76,"235":76,"236":76,"238":76,"239":76,"240":76,"241":76,"242":76,"243":76,"244":40,"245":40,"246":40,"248":76,"249":76,"250":76,"251":76,"252":76,"253":76,"254":76,"255":76,"256":76,"257":76,"258":76,"260":76,"261":20,"262":20,"263":20,"264":20,"265":20,"266":20,"267":20,"268":20,"269":20,"270":17,"271":17,"272":17,"273":17,"274":17,"275":17,"276":17,"277":17,"278":17,"279":17,"280":17,"281":17,"283":17,"284":17,"285":17,"286":17,"287":17,"288":17,"289":17,"291":20,"293":20,"296":8,"297":8,"298":8,"301":20,"302":2,"305":20,"306":20,"307":20,"308":20,"309":20,"310":20,"311":20,"312":20,"313":20,"314":20,"315":20,"316":20,"317":20,"318":20,"319":20,"320":20,"321":20,"322":20,"323":20,"324":20,"326":20,"329":1,"330":1,"331":1,"332":1,"333":1,"336":20,"337":20,"338":20,"339":20,"340":19,"341":19,"342":19,"343":19,"344":19,"345":19,"346":19,"347":19,"348":19,"349":19,"350":19,"351":19,"353":20,"355":76,"357":76},"branchMap":{"0":{"type":"branch","line":11,"loc":{"start":{"line":11,"column":0},"end":{"line":14,"column":1}},"locations":[{"start":{"line":11,"column":0},"end":{"line":14,"column":1}}]},"1":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":23},"end":{"line":13,"column":21}},"locations":[{"start":{"line":12,"column":23},"end":{"line":13,"column":21}}]},"2":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":16},"end":{"line":13,"column":63}},"locations":[{"start":{"line":13,"column":16},"end":{"line":13,"column":63}}]},"3":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":59},"end":{"line":13,"column":108}},"locations":[{"start":{"line":13,"column":59},"end":{"line":13,"column":108}}]},"4":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":7},"end":{"line":358,"column":1}},"locations":[{"start":{"line":36,"column":7},"end":{"line":358,"column":1}}]},"5":{"type":"branch","line":134,"loc":{"start":{"line":134,"column":22},"end":{"line":134,"column":38}},"locations":[{"start":{"line":134,"column":22},"end":{"line":134,"column":38}}]},"6":{"type":"branch","line":134,"loc":{"start":{"line":134,"column":38},"end":{"line":138,"column":34}},"locations":[{"start":{"line":134,"column":38},"end":{"line":138,"column":34}}]},"7":{"type":"branch","line":134,"loc":{"start":{"line":134,"column":38},"end":{"line":136,"column":3}},"locations":[{"start":{"line":134,"column":38},"end":{"line":136,"column":3}}]},"8":{"type":"branch","line":136,"loc":{"start":{"line":136,"column":2},"end":{"line":138,"column":34}},"locations":[{"start":{"line":136,"column":2},"end":{"line":138,"column":34}}]},"9":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":19},"end":{"line":138,"column":38}},"locations":[{"start":{"line":138,"column":19},"end":{"line":138,"column":38}}]},"10":{"type":"branch","line":142,"loc":{"start":{"line":142,"column":7},"end":{"line":142,"column":55}},"locations":[{"start":{"line":142,"column":7},"end":{"line":142,"column":55}}]},"11":{"type":"branch","line":144,"loc":{"start":{"line":144,"column":24},"end":{"line":152,"column":17}},"locations":[{"start":{"line":144,"column":24},"end":{"line":152,"column":17}}]},"12":{"type":"branch","line":158,"loc":{"start":{"line":158,"column":12},"end":{"line":158,"column":31}},"locations":[{"start":{"line":158,"column":12},"end":{"line":158,"column":31}}]},"13":{"type":"branch","line":186,"loc":{"start":{"line":186,"column":14},"end":{"line":186,"column":33}},"locations":[{"start":{"line":186,"column":14},"end":{"line":186,"column":33}}]},"14":{"type":"branch","line":201,"loc":{"start":{"line":201,"column":11},"end":{"line":206,"column":14}},"locations":[{"start":{"line":201,"column":11},"end":{"line":206,"column":14}}]},"15":{"type":"branch","line":261,"loc":{"start":{"line":261,"column":7},"end":{"line":354,"column":18}},"locations":[{"start":{"line":261,"column":7},"end":{"line":354,"column":18}}]},"16":{"type":"branch","line":269,"loc":{"start":{"line":269,"column":22},"end":{"line":269,"column":96}},"locations":[{"start":{"line":269,"column":22},"end":{"line":269,"column":96}}]},"17":{"type":"branch","line":270,"loc":{"start":{"line":270,"column":32},"end":{"line":290,"column":21}},"locations":[{"start":{"line":270,"column":32},"end":{"line":290,"column":21}}]},"18":{"type":"branch","line":294,"loc":{"start":{"line":294,"column":11},"end":{"line":294,"column":53}},"locations":[{"start":{"line":294,"column":11},"end":{"line":294,"column":53}}]},"19":{"type":"branch","line":294,"loc":{"start":{"line":294,"column":41},"end":{"line":299,"column":21}},"locations":[{"start":{"line":294,"column":41},"end":{"line":299,"column":21}}]},"20":{"type":"branch","line":297,"loc":{"start":{"line":297,"column":44},"end":{"line":297,"column":63}},"locations":[{"start":{"line":297,"column":44},"end":{"line":297,"column":63}}]},"21":{"type":"branch","line":297,"loc":{"start":{"line":297,"column":51},"end":{"line":297,"column":73}},"locations":[{"start":{"line":297,"column":51},"end":{"line":297,"column":73}}]},"22":{"type":"branch","line":297,"loc":{"start":{"line":297,"column":97},"end":{"line":297,"column":115}},"locations":[{"start":{"line":297,"column":97},"end":{"line":297,"column":115}}]},"23":{"type":"branch","line":297,"loc":{"start":{"line":297,"column":104},"end":{"line":297,"column":124}},"locations":[{"start":{"line":297,"column":104},"end":{"line":297,"column":124}}]},"24":{"type":"branch","line":302,"loc":{"start":{"line":302,"column":11},"end":{"line":302,"column":30}},"locations":[{"start":{"line":302,"column":11},"end":{"line":302,"column":30}}]},"25":{"type":"branch","line":302,"loc":{"start":{"line":302,"column":30},"end":{"line":303,"column":113}},"locations":[{"start":{"line":302,"column":30},"end":{"line":303,"column":113}}]},"26":{"type":"branch","line":317,"loc":{"start":{"line":317,"column":52},"end":{"line":317,"column":72}},"locations":[{"start":{"line":317,"column":52},"end":{"line":317,"column":72}}]},"27":{"type":"branch","line":317,"loc":{"start":{"line":317,"column":56},"end":{"line":317,"column":84}},"locations":[{"start":{"line":317,"column":56},"end":{"line":317,"column":84}}]},"28":{"type":"branch","line":322,"loc":{"start":{"line":322,"column":81},"end":{"line":322,"column":101}},"locations":[{"start":{"line":322,"column":81},"end":{"line":322,"column":101}}]},"29":{"type":"branch","line":327,"loc":{"start":{"line":327,"column":20},"end":{"line":334,"column":16}},"locations":[{"start":{"line":327,"column":20},"end":{"line":334,"column":16}}]},"30":{"type":"branch","line":331,"loc":{"start":{"line":331,"column":47},"end":{"line":331,"column":71}},"locations":[{"start":{"line":331,"column":47},"end":{"line":331,"column":71}}]},"31":{"type":"branch","line":331,"loc":{"start":{"line":331,"column":85},"end":{"line":331,"column":108}},"locations":[{"start":{"line":331,"column":85},"end":{"line":331,"column":108}}]},"32":{"type":"branch","line":333,"loc":{"start":{"line":333,"column":67},"end":{"line":333,"column":76}},"locations":[{"start":{"line":333,"column":67},"end":{"line":333,"column":76}}]},"33":{"type":"branch","line":338,"loc":{"start":{"line":338,"column":55},"end":{"line":338,"column":78}},"locations":[{"start":{"line":338,"column":55},"end":{"line":338,"column":78}}]},"34":{"type":"branch","line":338,"loc":{"start":{"line":338,"column":59},"end":{"line":338,"column":81}},"locations":[{"start":{"line":338,"column":59},"end":{"line":338,"column":81}}]},"35":{"type":"branch","line":340,"loc":{"start":{"line":340,"column":34},"end":{"line":352,"column":14}},"locations":[{"start":{"line":340,"column":34},"end":{"line":352,"column":14}}]},"36":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":18},"end":{"line":50,"column":62}},"locations":[{"start":{"line":50,"column":18},"end":{"line":50,"column":62}}]},"37":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":40},"end":{"line":50,"column":60}},"locations":[{"start":{"line":50,"column":40},"end":{"line":50,"column":60}}]},"38":{"type":"branch","line":53,"loc":{"start":{"line":53,"column":17},"end":{"line":56,"column":4}},"locations":[{"start":{"line":53,"column":17},"end":{"line":56,"column":4}}]},"39":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":12},"end":{"line":71,"column":5}},"locations":[{"start":{"line":58,"column":12},"end":{"line":71,"column":5}}]},"40":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":12},"end":{"line":66,"column":7}},"locations":[{"start":{"line":62,"column":12},"end":{"line":66,"column":7}}]},"41":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":19},"end":{"line":63,"column":26}},"locations":[{"start":{"line":63,"column":19},"end":{"line":63,"column":26}}]},"42":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":22},"end":{"line":65,"column":66}},"locations":[{"start":{"line":65,"column":22},"end":{"line":65,"column":66}}]},"43":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":35},"end":{"line":65,"column":64}},"locations":[{"start":{"line":65,"column":35},"end":{"line":65,"column":64}}]},"44":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":53},"end":{"line":65,"column":64}},"locations":[{"start":{"line":65,"column":53},"end":{"line":65,"column":64}}]},"45":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":56},"end":{"line":65,"column":66}},"locations":[{"start":{"line":65,"column":56},"end":{"line":65,"column":66}}]},"46":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":13},"end":{"line":67,"column":79}},"locations":[{"start":{"line":67,"column":13},"end":{"line":67,"column":79}}]},"47":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":11},"end":{"line":70,"column":6}},"locations":[{"start":{"line":68,"column":11},"end":{"line":70,"column":6}}]},"48":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":4},"end":{"line":79,"column":6}},"locations":[{"start":{"line":74,"column":4},"end":{"line":79,"column":6}}]},"49":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":56},"end":{"line":77,"column":76}},"locations":[{"start":{"line":77,"column":56},"end":{"line":77,"column":76}}]},"50":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":82},"end":{"line":78,"column":50}},"locations":[{"start":{"line":77,"column":82},"end":{"line":78,"column":50}}]},"51":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":4},"end":{"line":91,"column":6}},"locations":[{"start":{"line":85,"column":4},"end":{"line":91,"column":6}}]},"52":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":23},"end":{"line":86,"column":80}},"locations":[{"start":{"line":86,"column":23},"end":{"line":86,"column":80}}]},"53":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":69},"end":{"line":87,"column":95}},"locations":[{"start":{"line":87,"column":69},"end":{"line":87,"column":95}}]},"54":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":91},"end":{"line":87,"column":98}},"locations":[{"start":{"line":87,"column":91},"end":{"line":87,"column":98}}]},"55":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":58},"end":{"line":90,"column":74}},"locations":[{"start":{"line":90,"column":58},"end":{"line":90,"column":74}}]},"56":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":67},"end":{"line":90,"column":81}},"locations":[{"start":{"line":90,"column":67},"end":{"line":90,"column":81}}]},"57":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":74},"end":{"line":90,"column":104}},"locations":[{"start":{"line":90,"column":74},"end":{"line":90,"column":104}}]},"58":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":12},"end":{"line":99,"column":5}},"locations":[{"start":{"line":97,"column":12},"end":{"line":99,"column":5}}]},"59":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":12},"end":{"line":115,"column":5}},"locations":[{"start":{"line":101,"column":12},"end":{"line":115,"column":5}}]},"60":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":21},"end":{"line":105,"column":5}},"locations":[{"start":{"line":102,"column":21},"end":{"line":105,"column":5}}]},"61":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":4},"end":{"line":114,"column":6}},"locations":[{"start":{"line":105,"column":4},"end":{"line":114,"column":6}}]},"62":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":12},"end":{"line":110,"column":49}},"locations":[{"start":{"line":110,"column":12},"end":{"line":110,"column":49}}]},"63":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":11},"end":{"line":114,"column":6}},"locations":[{"start":{"line":112,"column":11},"end":{"line":114,"column":6}}]},"64":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":17},"end":{"line":132,"column":4}},"locations":[{"start":{"line":119,"column":17},"end":{"line":132,"column":4}}]},"65":{"type":"branch","line":120,"loc":{"start":{"line":120,"column":30},"end":{"line":120,"column":66}},"locations":[{"start":{"line":120,"column":30},"end":{"line":120,"column":66}}]},"66":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":61},"end":{"line":131,"column":5}},"locations":[{"start":{"line":122,"column":61},"end":{"line":131,"column":5}}]},"67":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":45},"end":{"line":138,"column":92}},"locations":[{"start":{"line":138,"column":45},"end":{"line":138,"column":92}}]},"68":{"type":"branch","line":147,"loc":{"start":{"line":147,"column":17},"end":{"line":150,"column":13}},"locations":[{"start":{"line":147,"column":17},"end":{"line":150,"column":13}}]},"69":{"type":"branch","line":149,"loc":{"start":{"line":149,"column":130},"end":{"line":149,"column":138}},"locations":[{"start":{"line":149,"column":130},"end":{"line":149,"column":138}}]},"70":{"type":"branch","line":158,"loc":{"start":{"line":158,"column":35},"end":{"line":169,"column":17}},"locations":[{"start":{"line":158,"column":35},"end":{"line":169,"column":17}}]},"71":{"type":"branch","line":166,"loc":{"start":{"line":166,"column":38},"end":{"line":166,"column":58}},"locations":[{"start":{"line":166,"column":38},"end":{"line":166,"column":58}}]},"72":{"type":"branch","line":166,"loc":{"start":{"line":166,"column":71},"end":{"line":167,"column":74}},"locations":[{"start":{"line":166,"column":71},"end":{"line":167,"column":74}}]},"73":{"type":"branch","line":161,"loc":{"start":{"line":161,"column":61},"end":{"line":164,"column":23}},"locations":[{"start":{"line":161,"column":61},"end":{"line":164,"column":23}}]},"74":{"type":"branch","line":186,"loc":{"start":{"line":186,"column":37},"end":{"line":189,"column":23}},"locations":[{"start":{"line":186,"column":37},"end":{"line":189,"column":23}}]},"75":{"type":"branch","line":199,"loc":{"start":{"line":199,"column":22},"end":{"line":199,"column":74}},"locations":[{"start":{"line":199,"column":22},"end":{"line":199,"column":74}}]},"76":{"type":"branch","line":199,"loc":{"start":{"line":199,"column":63},"end":{"line":199,"column":72}},"locations":[{"start":{"line":199,"column":63},"end":{"line":199,"column":72}}]},"77":{"type":"branch","line":225,"loc":{"start":{"line":225,"column":22},"end":{"line":228,"column":14}},"locations":[{"start":{"line":225,"column":22},"end":{"line":228,"column":14}}]},"78":{"type":"branch","line":231,"loc":{"start":{"line":231,"column":24},"end":{"line":234,"column":23}},"locations":[{"start":{"line":231,"column":24},"end":{"line":234,"column":23}}]},"79":{"type":"branch","line":244,"loc":{"start":{"line":244,"column":20},"end":{"line":247,"column":25}},"locations":[{"start":{"line":244,"column":20},"end":{"line":247,"column":25}}]},"80":{"type":"branch","line":245,"loc":{"start":{"line":245,"column":98},"end":{"line":245,"column":129}},"locations":[{"start":{"line":245,"column":98},"end":{"line":245,"column":129}}]},"81":{"type":"branch","line":250,"loc":{"start":{"line":250,"column":42},"end":{"line":250,"column":70}},"locations":[{"start":{"line":250,"column":42},"end":{"line":250,"column":70}}]},"82":{"type":"branch","line":251,"loc":{"start":{"line":251,"column":37},"end":{"line":251,"column":83}},"locations":[{"start":{"line":251,"column":37},"end":{"line":251,"column":83}}]},"83":{"type":"branch","line":252,"loc":{"start":{"line":252,"column":52},"end":{"line":252,"column":103}},"locations":[{"start":{"line":252,"column":52},"end":{"line":252,"column":103}}]},"84":{"type":"branch","line":253,"loc":{"start":{"line":253,"column":55},"end":{"line":253,"column":84}},"locations":[{"start":{"line":253,"column":55},"end":{"line":253,"column":84}}]},"85":{"type":"branch","line":256,"loc":{"start":{"line":256,"column":18},"end":{"line":256,"column":38}},"locations":[{"start":{"line":256,"column":18},"end":{"line":256,"column":38}}]},"86":{"type":"branch","line":276,"loc":{"start":{"line":276,"column":27},"end":{"line":276,"column":100}},"locations":[{"start":{"line":276,"column":27},"end":{"line":276,"column":100}}]},"87":{"type":"branch","line":285,"loc":{"start":{"line":285,"column":27},"end":{"line":285,"column":92}},"locations":[{"start":{"line":285,"column":27},"end":{"line":285,"column":92}}]},"88":{"type":"branch","line":285,"loc":{"start":{"line":285,"column":79},"end":{"line":285,"column":89}},"locations":[{"start":{"line":285,"column":79},"end":{"line":285,"column":89}}]},"89":{"type":"branch","line":344,"loc":{"start":{"line":344,"column":55},"end":{"line":344,"column":111}},"locations":[{"start":{"line":344,"column":55},"end":{"line":344,"column":111}}]},"90":{"type":"branch","line":344,"loc":{"start":{"line":344,"column":83},"end":{"line":344,"column":96}},"locations":[{"start":{"line":344,"column":83},"end":{"line":344,"column":96}}]},"91":{"type":"branch","line":345,"loc":{"start":{"line":345,"column":41},"end":{"line":345,"column":60}},"locations":[{"start":{"line":345,"column":41},"end":{"line":345,"column":60}}]},"92":{"type":"branch","line":346,"loc":{"start":{"line":346,"column":43},"end":{"line":346,"column":64}},"locations":[{"start":{"line":346,"column":43},"end":{"line":346,"column":64}}]},"93":{"type":"branch","line":349,"loc":{"start":{"line":349,"column":22},"end":{"line":349,"column":46}},"locations":[{"start":{"line":349,"column":22},"end":{"line":349,"column":46}}]}},"b":{"0":[5],"1":[4],"2":[3],"3":[1],"4":[76],"5":[18],"6":[75],"7":[17],"8":[59],"9":[1],"10":[1],"11":[55],"12":[1],"13":[1],"14":[4],"15":[20],"16":[0],"17":[17],"18":[10],"19":[8],"20":[6],"21":[2],"22":[6],"23":[2],"24":[10],"25":[2],"26":[19],"27":[1],"28":[0],"29":[1],"30":[0],"31":[0],"32":[0],"33":[1],"34":[19],"35":[19],"36":[6],"37":[6],"38":[5],"39":[23],"40":[22],"41":[0],"42":[22],"43":[16],"44":[15],"45":[1],"46":[1],"47":[23],"48":[24],"49":[23],"50":[22],"51":[15],"52":[0],"53":[1],"54":[14],"55":[1],"56":[14],"57":[1],"58":[27],"59":[32],"60":[17],"61":[15],"62":[15],"63":[15],"64":[2],"65":[0],"66":[1],"67":[57],"68":[55],"69":[0],"70":[57],"71":[0],"72":[1],"73":[112],"74":[57],"75":[2],"76":[0],"77":[1],"78":[472],"79":[40],"80":[9],"81":[40],"82":[40],"83":[40],"84":[40],"85":[40],"86":[4],"87":[1],"88":[0],"89":[323],"90":[0],"91":[323],"92":[323],"93":[323]},"fnMap":{"0":{"name":"asOutcome","decl":{"start":{"line":11,"column":0},"end":{"line":14,"column":1}},"loc":{"start":{"line":11,"column":0},"end":{"line":14,"column":1}},"line":11},"1":{"name":"BulkPanel","decl":{"start":{"line":36,"column":7},"end":{"line":358,"column":1}},"loc":{"start":{"line":36,"column":7},"end":{"line":358,"column":1}},"line":36},"2":{"name":"refresh","decl":{"start":{"line":50,"column":18},"end":{"line":50,"column":62}},"loc":{"start":{"line":50,"column":18},"end":{"line":50,"column":62}},"line":50},"3":{"name":"settle","decl":{"start":{"line":53,"column":17},"end":{"line":56,"column":4}},"loc":{"start":{"line":53,"column":17},"end":{"line":56,"column":4}},"line":53},"4":{"name":"upload","decl":{"start":{"line":119,"column":17},"end":{"line":132,"column":4}},"loc":{"start":{"line":119,"column":17},"end":{"line":132,"column":4}},"line":119},"5":{"name":"onChange","decl":{"start":{"line":184,"column":22},"end":{"line":184,"column":67}},"loc":{"start":{"line":184,"column":22},"end":{"line":184,"column":67}},"line":184},"6":{"name":"onChange","decl":{"start":{"line":199,"column":22},"end":{"line":199,"column":74}},"loc":{"start":{"line":199,"column":22},"end":{"line":199,"column":74}},"line":199},"7":{"name":"onChange","decl":{"start":{"line":225,"column":22},"end":{"line":228,"column":14}},"loc":{"start":{"line":225,"column":22},"end":{"line":228,"column":14}},"line":225},"8":{"name":"cell","decl":{"start":{"line":244,"column":20},"end":{"line":247,"column":25}},"loc":{"start":{"line":244,"column":20},"end":{"line":247,"column":25}},"line":244},"9":{"name":"onClick","decl":{"start":{"line":245,"column":98},"end":{"line":245,"column":129}},"loc":{"start":{"line":245,"column":98},"end":{"line":245,"column":129}},"line":245},"10":{"name":"cell","decl":{"start":{"line":250,"column":42},"end":{"line":250,"column":70}},"loc":{"start":{"line":250,"column":42},"end":{"line":250,"column":70}},"line":250},"11":{"name":"cell","decl":{"start":{"line":251,"column":37},"end":{"line":251,"column":83}},"loc":{"start":{"line":251,"column":37},"end":{"line":251,"column":83}},"line":251},"12":{"name":"cell","decl":{"start":{"line":252,"column":52},"end":{"line":252,"column":103}},"loc":{"start":{"line":252,"column":52},"end":{"line":252,"column":103}},"line":252},"13":{"name":"cell","decl":{"start":{"line":253,"column":55},"end":{"line":253,"column":84}},"loc":{"start":{"line":253,"column":55},"end":{"line":253,"column":84}},"line":253},"14":{"name":"rowKey","decl":{"start":{"line":256,"column":18},"end":{"line":256,"column":38}},"loc":{"start":{"line":256,"column":18},"end":{"line":256,"column":38}},"line":256},"15":{"name":"execute","decl":{"start":{"line":276,"column":27},"end":{"line":276,"column":100}},"loc":{"start":{"line":276,"column":27},"end":{"line":276,"column":100}},"line":276},"16":{"name":"execute","decl":{"start":{"line":285,"column":27},"end":{"line":285,"column":92}},"loc":{"start":{"line":285,"column":27},"end":{"line":285,"column":92}},"line":285},"17":{"name":"cell","decl":{"start":{"line":344,"column":55},"end":{"line":344,"column":111}},"loc":{"start":{"line":344,"column":55},"end":{"line":344,"column":111}},"line":344},"18":{"name":"cell","decl":{"start":{"line":345,"column":41},"end":{"line":345,"column":60}},"loc":{"start":{"line":345,"column":41},"end":{"line":345,"column":60}},"line":345},"19":{"name":"cell","decl":{"start":{"line":346,"column":43},"end":{"line":346,"column":64}},"loc":{"start":{"line":346,"column":43},"end":{"line":346,"column":64}},"line":346},"20":{"name":"rowKey","decl":{"start":{"line":349,"column":22},"end":{"line":349,"column":46}},"loc":{"start":{"line":349,"column":22},"end":{"line":349,"column":46}},"line":349}},"f":{"0":5,"1":76,"2":6,"3":5,"4":2,"5":0,"6":2,"7":1,"8":40,"9":9,"10":40,"11":40,"12":40,"13":40,"14":40,"15":4,"16":1,"17":323,"18":323,"19":323,"20":323}} -,"/Users/omercelik/Repositories/goldpath/ui/console/src/CampaignPanel.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/CampaignPanel.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":57}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":97}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":28}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":108}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":1}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":121}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":60}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":36}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":10}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":17}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":18}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":18}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":16}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":17}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":25}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":21}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":2}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":68}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":37}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":80}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":77}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":69}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":90}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":93}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":75}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":69}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":72}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":58}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":50}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":15}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":1}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":67}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":29}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":62}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":84}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":88}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":119}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":68}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":58}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":76}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":26}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":1}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":63}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":49}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":68}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":70}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":69}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":63}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":65}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":58}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":44}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":54}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":67}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":62}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":43}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":23}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":14}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":4}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":36}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":53}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":84}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":21}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":52}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":6}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":34}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":4}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":19}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":82}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":26}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":19}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":19}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":22}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":24}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":22}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":19}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":13}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":5}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":20}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":117}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":42}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":26}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":26}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":28}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":26}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":8}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":83}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":18}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":19}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":6}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":41}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":34}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":48}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":10}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":60}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":55}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":15}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":64}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":82}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":89}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":18}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":17}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":31}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":87}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":25}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":34}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":43}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":34}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":14}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":48}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":37}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":50}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":24}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":23}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":15}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":19}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":17}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":111}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":29}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":11}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":19}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":14}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":34}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":42}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":20}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":13}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":33}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":35}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":122}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":33}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":25}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":14}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":66}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":91}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":97}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":92}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":91}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":80}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":12}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":34}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":44}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":85}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":10}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":16}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":20}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":95}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":66}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":48}},"216":{"start":{"line":217,"column":0},"end":{"line":217,"column":47}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":17}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":49}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":102}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":86}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":42}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":61}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":27}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":31}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":101}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":78}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":33}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":23}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":18}},"232":{"start":{"line":233,"column":0},"end":{"line":233,"column":27}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":31}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":140}},"235":{"start":{"line":236,"column":0},"end":{"line":236,"column":71}},"236":{"start":{"line":237,"column":0},"end":{"line":237,"column":98}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":33}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":23}},"239":{"start":{"line":240,"column":0},"end":{"line":240,"column":29}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":18}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":21}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":45}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":61}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":27}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":32}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":96}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":79}},"249":{"start":{"line":250,"column":0},"end":{"line":250,"column":33}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":23}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":18}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":27}},"253":{"start":{"line":254,"column":0},"end":{"line":254,"column":31}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":140}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":71}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":98}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":33}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":23}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":29}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":18}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":21}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":16}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":51}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":122}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":31}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":21}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":41}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":108}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":87}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":17}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":54}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":18}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":74}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":107}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":19}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":18}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":17}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":64}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":18}},"286":{"start":{"line":287,"column":0},"end":{"line":287,"column":48}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":116}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":19}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":18}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":17}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":55}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":18}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":69}},"294":{"start":{"line":295,"column":0},"end":{"line":295,"column":19}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":18}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":17}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":55}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":18}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":36}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":61}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":130}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":19}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":18}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":17}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":57}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":18}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":116}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":19}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":18}},"312":{"start":{"line":313,"column":0},"end":{"line":313,"column":17}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":52}},"314":{"start":{"line":315,"column":0},"end":{"line":315,"column":18}},"315":{"start":{"line":316,"column":0},"end":{"line":316,"column":59}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":90}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":39}},"318":{"start":{"line":319,"column":0},"end":{"line":319,"column":23}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":68}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":19}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":18}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":17}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":53}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":18}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":60}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":19}},"327":{"start":{"line":328,"column":0},"end":{"line":328,"column":18}},"328":{"start":{"line":329,"column":0},"end":{"line":329,"column":17}},"329":{"start":{"line":330,"column":0},"end":{"line":330,"column":55}},"330":{"start":{"line":331,"column":0},"end":{"line":331,"column":49}},"331":{"start":{"line":332,"column":0},"end":{"line":332,"column":18}},"332":{"start":{"line":333,"column":0},"end":{"line":333,"column":15}},"334":{"start":{"line":335,"column":0},"end":{"line":335,"column":40}},"335":{"start":{"line":336,"column":0},"end":{"line":336,"column":73}},"336":{"start":{"line":337,"column":0},"end":{"line":337,"column":65}},"338":{"start":{"line":339,"column":0},"end":{"line":339,"column":19}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":62}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":19}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":49}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":71}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":75}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":28}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":52}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":99}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":89}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":26}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":35}},"351":{"start":{"line":352,"column":0},"end":{"line":352,"column":29}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":40}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":118}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":42}},"355":{"start":{"line":356,"column":0},"end":{"line":356,"column":95}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":22}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":26}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":19}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":19}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":52}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":48}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":28}},"364":{"start":{"line":365,"column":0},"end":{"line":365,"column":43}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":99}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":27}},"367":{"start":{"line":368,"column":0},"end":{"line":368,"column":26}},"368":{"start":{"line":369,"column":0},"end":{"line":369,"column":33}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":40}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":113}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":42}},"372":{"start":{"line":373,"column":0},"end":{"line":373,"column":95}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":22}},"374":{"start":{"line":375,"column":0},"end":{"line":375,"column":26}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":19}},"376":{"start":{"line":377,"column":0},"end":{"line":377,"column":85}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":24}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":31}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":42}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":53}},"382":{"start":{"line":383,"column":0},"end":{"line":383,"column":116}},"383":{"start":{"line":384,"column":0},"end":{"line":384,"column":44}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":96}},"385":{"start":{"line":386,"column":0},"end":{"line":386,"column":20}},"386":{"start":{"line":387,"column":0},"end":{"line":387,"column":24}},"387":{"start":{"line":388,"column":0},"end":{"line":388,"column":89}},"388":{"start":{"line":389,"column":0},"end":{"line":389,"column":24}},"389":{"start":{"line":390,"column":0},"end":{"line":390,"column":35}},"390":{"start":{"line":391,"column":0},"end":{"line":391,"column":51}},"391":{"start":{"line":392,"column":0},"end":{"line":392,"column":103}},"392":{"start":{"line":393,"column":0},"end":{"line":393,"column":20}},"394":{"start":{"line":395,"column":0},"end":{"line":395,"column":24}},"395":{"start":{"line":396,"column":0},"end":{"line":396,"column":89}},"396":{"start":{"line":397,"column":0},"end":{"line":397,"column":24}},"397":{"start":{"line":398,"column":0},"end":{"line":398,"column":35}},"398":{"start":{"line":399,"column":0},"end":{"line":399,"column":47}},"399":{"start":{"line":400,"column":0},"end":{"line":400,"column":99}},"400":{"start":{"line":401,"column":0},"end":{"line":401,"column":20}},"402":{"start":{"line":403,"column":0},"end":{"line":403,"column":24}},"403":{"start":{"line":404,"column":0},"end":{"line":404,"column":29}},"404":{"start":{"line":405,"column":0},"end":{"line":405,"column":29}},"405":{"start":{"line":406,"column":0},"end":{"line":406,"column":36}},"406":{"start":{"line":407,"column":0},"end":{"line":407,"column":108}},"407":{"start":{"line":408,"column":0},"end":{"line":408,"column":90}},"408":{"start":{"line":409,"column":0},"end":{"line":409,"column":41}},"409":{"start":{"line":410,"column":0},"end":{"line":410,"column":70}},"410":{"start":{"line":411,"column":0},"end":{"line":411,"column":37}},"411":{"start":{"line":412,"column":0},"end":{"line":412,"column":22}},"412":{"start":{"line":413,"column":0},"end":{"line":413,"column":25}},"413":{"start":{"line":414,"column":0},"end":{"line":414,"column":20}},"415":{"start":{"line":416,"column":0},"end":{"line":416,"column":20}},"416":{"start":{"line":417,"column":0},"end":{"line":417,"column":18}},"419":{"start":{"line":420,"column":0},"end":{"line":420,"column":66}},"420":{"start":{"line":421,"column":0},"end":{"line":421,"column":91}},"421":{"start":{"line":422,"column":0},"end":{"line":422,"column":15}},"422":{"start":{"line":423,"column":0},"end":{"line":423,"column":35}},"423":{"start":{"line":424,"column":0},"end":{"line":424,"column":14}},"424":{"start":{"line":425,"column":0},"end":{"line":425,"column":40}},"425":{"start":{"line":426,"column":0},"end":{"line":426,"column":41}},"426":{"start":{"line":427,"column":0},"end":{"line":427,"column":83}},"427":{"start":{"line":428,"column":0},"end":{"line":428,"column":66}},"428":{"start":{"line":429,"column":0},"end":{"line":429,"column":92}},"429":{"start":{"line":430,"column":0},"end":{"line":430,"column":96}},"430":{"start":{"line":431,"column":0},"end":{"line":431,"column":23}},"431":{"start":{"line":432,"column":0},"end":{"line":432,"column":19}},"432":{"start":{"line":433,"column":0},"end":{"line":433,"column":19}},"433":{"start":{"line":434,"column":0},"end":{"line":434,"column":53}},"435":{"start":{"line":436,"column":0},"end":{"line":436,"column":18}},"436":{"start":{"line":437,"column":0},"end":{"line":437,"column":15}},"439":{"start":{"line":440,"column":0},"end":{"line":440,"column":79}},"445":{"start":{"line":446,"column":0},"end":{"line":446,"column":36}},"446":{"start":{"line":447,"column":0},"end":{"line":447,"column":35}},"447":{"start":{"line":448,"column":0},"end":{"line":448,"column":89}},"448":{"start":{"line":449,"column":0},"end":{"line":449,"column":62}},"449":{"start":{"line":450,"column":0},"end":{"line":450,"column":67}},"450":{"start":{"line":451,"column":0},"end":{"line":451,"column":42}},"451":{"start":{"line":452,"column":0},"end":{"line":452,"column":95}},"452":{"start":{"line":453,"column":0},"end":{"line":453,"column":19}},"453":{"start":{"line":454,"column":0},"end":{"line":454,"column":15}},"454":{"start":{"line":455,"column":0},"end":{"line":455,"column":98}},"455":{"start":{"line":456,"column":0},"end":{"line":456,"column":15}},"456":{"start":{"line":457,"column":0},"end":{"line":457,"column":18}},"458":{"start":{"line":459,"column":0},"end":{"line":459,"column":10}},"460":{"start":{"line":461,"column":0},"end":{"line":461,"column":1}}},"s":{"0":1,"16":5,"17":5,"18":5,"19":5,"22":1,"25":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"55":1,"56":115,"57":115,"58":115,"59":115,"60":115,"61":115,"62":115,"63":115,"64":115,"65":115,"66":115,"67":115,"68":115,"71":1,"72":4,"73":4,"74":4,"75":4,"76":4,"77":4,"78":4,"79":4,"80":4,"81":4,"88":1,"89":111,"90":111,"91":111,"92":111,"93":111,"94":111,"95":111,"96":111,"97":111,"100":111,"102":111,"103":111,"104":5,"105":5,"106":5,"108":111,"109":111,"111":25,"112":24,"113":24,"114":25,"115":111,"116":111,"118":111,"119":32,"120":32,"121":111,"125":111,"126":38,"127":18,"128":18,"129":18,"130":18,"131":18,"133":20,"134":20,"135":20,"136":20,"137":20,"138":20,"139":20,"140":20,"141":20,"142":20,"143":20,"144":20,"145":111,"147":111,"148":111,"150":111,"151":111,"152":111,"154":111,"155":111,"156":111,"157":111,"159":111,"160":111,"161":111,"162":111,"163":111,"164":111,"165":1,"166":1,"167":1,"169":111,"170":111,"171":777,"172":777,"173":777,"174":111,"175":111,"180":111,"181":111,"182":111,"183":111,"185":111,"186":111,"188":111,"189":111,"190":111,"191":111,"192":111,"193":111,"194":52,"195":52,"196":52,"198":111,"199":111,"200":111,"201":111,"202":111,"203":111,"204":111,"205":111,"206":111,"207":111,"208":111,"209":111,"210":111,"212":111,"213":29,"214":29,"215":29,"216":29,"217":29,"218":29,"219":29,"221":1,"223":29,"224":26,"225":26,"226":26,"227":26,"228":26,"229":26,"230":26,"231":26,"232":26,"233":26,"234":26,"235":26,"236":26,"237":26,"238":26,"239":26,"240":26,"241":26,"243":29,"244":2,"245":2,"246":2,"247":2,"248":2,"249":2,"250":2,"251":2,"252":2,"253":2,"254":2,"255":2,"256":2,"257":2,"258":2,"259":2,"260":2,"261":2,"263":29,"265":29,"267":8,"268":8,"269":8,"271":29,"272":2,"275":29,"276":29,"277":29,"278":29,"279":29,"280":29,"281":29,"282":29,"283":29,"284":29,"285":29,"286":29,"287":29,"288":29,"289":29,"290":29,"291":29,"292":29,"293":29,"294":29,"295":29,"296":29,"297":29,"298":29,"299":29,"300":29,"302":29,"304":29,"305":29,"306":29,"307":29,"308":29,"309":29,"310":29,"311":29,"312":29,"313":29,"314":29,"315":29,"316":28,"317":1,"318":29,"319":29,"320":29,"321":29,"322":29,"323":29,"324":29,"325":29,"326":29,"327":29,"328":29,"329":29,"330":29,"331":29,"332":29,"334":29,"335":26,"336":26,"338":26,"339":26,"341":26,"342":26,"343":26,"344":26,"345":26,"346":26,"347":78,"348":78,"349":78,"350":78,"351":78,"352":78,"353":78,"354":78,"355":78,"356":78,"357":78,"358":26,"360":26,"361":26,"362":26,"363":26,"364":26,"365":52,"366":52,"367":52,"368":52,"369":52,"370":52,"371":52,"372":52,"373":52,"374":52,"375":26,"376":26,"378":26,"379":26,"380":26,"381":26,"382":26,"383":26,"384":26,"385":26,"386":26,"387":26,"388":26,"389":26,"390":26,"391":26,"392":26,"394":26,"395":26,"396":26,"397":26,"398":26,"399":26,"400":26,"402":26,"403":26,"404":3,"405":3,"406":3,"407":3,"408":3,"409":1,"410":1,"411":1,"412":3,"413":3,"415":26,"416":26,"419":29,"420":29,"421":29,"422":29,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"431":1,"432":1,"433":1,"435":1,"436":1,"439":29,"445":29,"446":29,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":29,"454":29,"455":29,"456":29,"458":111,"460":111},"branchMap":{"0":{"type":"branch","line":17,"loc":{"start":{"line":17,"column":0},"end":{"line":20,"column":1}},"locations":[{"start":{"line":17,"column":0},"end":{"line":20,"column":1}}]},"1":{"type":"branch","line":18,"loc":{"start":{"line":18,"column":23},"end":{"line":19,"column":21}},"locations":[{"start":{"line":18,"column":23},"end":{"line":19,"column":21}}]},"2":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":16},"end":{"line":19,"column":63}},"locations":[{"start":{"line":19,"column":16},"end":{"line":19,"column":63}}]},"3":{"type":"branch","line":19,"loc":{"start":{"line":19,"column":59},"end":{"line":19,"column":108}},"locations":[{"start":{"line":19,"column":59},"end":{"line":19,"column":108}}]},"4":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":7},"end":{"line":69,"column":1}},"locations":[{"start":{"line":56,"column":7},"end":{"line":69,"column":1}}]},"5":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":39},"end":{"line":60,"column":69}},"locations":[{"start":{"line":60,"column":39},"end":{"line":60,"column":69}}]},"6":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":46},"end":{"line":61,"column":90}},"locations":[{"start":{"line":61,"column":46},"end":{"line":61,"column":90}}]},"7":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":47},"end":{"line":62,"column":93}},"locations":[{"start":{"line":62,"column":47},"end":{"line":62,"column":93}}]},"8":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":31},"end":{"line":63,"column":75}},"locations":[{"start":{"line":63,"column":31},"end":{"line":63,"column":75}}]},"9":{"type":"branch","line":64,"loc":{"start":{"line":64,"column":29},"end":{"line":64,"column":69}},"locations":[{"start":{"line":64,"column":29},"end":{"line":64,"column":69}}]},"10":{"type":"branch","line":65,"loc":{"start":{"line":65,"column":30},"end":{"line":65,"column":72}},"locations":[{"start":{"line":65,"column":30},"end":{"line":65,"column":72}}]},"11":{"type":"branch","line":66,"loc":{"start":{"line":66,"column":29},"end":{"line":66,"column":58}},"locations":[{"start":{"line":66,"column":29},"end":{"line":66,"column":58}}]},"12":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":25},"end":{"line":67,"column":50}},"locations":[{"start":{"line":67,"column":25},"end":{"line":67,"column":50}}]},"13":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":17},"end":{"line":58,"column":80}},"locations":[{"start":{"line":58,"column":17},"end":{"line":58,"column":80}}]},"14":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":50},"end":{"line":58,"column":67}},"locations":[{"start":{"line":58,"column":50},"end":{"line":58,"column":67}}]},"15":{"type":"branch","line":58,"loc":{"start":{"line":58,"column":55},"end":{"line":58,"column":80}},"locations":[{"start":{"line":58,"column":55},"end":{"line":58,"column":80}}]},"16":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":15},"end":{"line":59,"column":77}},"locations":[{"start":{"line":59,"column":15},"end":{"line":59,"column":77}}]},"17":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":48},"end":{"line":59,"column":65}},"locations":[{"start":{"line":59,"column":48},"end":{"line":59,"column":65}}]},"18":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":53},"end":{"line":59,"column":77}},"locations":[{"start":{"line":59,"column":53},"end":{"line":59,"column":77}}]},"19":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":7},"end":{"line":82,"column":1}},"locations":[{"start":{"line":72,"column":7},"end":{"line":82,"column":1}}]},"20":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":38},"end":{"line":75,"column":84}},"locations":[{"start":{"line":75,"column":38},"end":{"line":75,"column":84}}]},"21":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":39},"end":{"line":76,"column":88}},"locations":[{"start":{"line":76,"column":39},"end":{"line":76,"column":88}}]},"22":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":44},"end":{"line":77,"column":119}},"locations":[{"start":{"line":77,"column":44},"end":{"line":77,"column":119}}]},"23":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":24},"end":{"line":78,"column":68}},"locations":[{"start":{"line":78,"column":24},"end":{"line":78,"column":68}}]},"24":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":29},"end":{"line":79,"column":58}},"locations":[{"start":{"line":79,"column":29},"end":{"line":79,"column":58}}]},"25":{"type":"branch","line":80,"loc":{"start":{"line":80,"column":25},"end":{"line":80,"column":76}},"locations":[{"start":{"line":80,"column":25},"end":{"line":80,"column":76}}]},"26":{"type":"branch","line":89,"loc":{"start":{"line":89,"column":7},"end":{"line":461,"column":1}},"locations":[{"start":{"line":89,"column":7},"end":{"line":461,"column":1}}]},"27":{"type":"branch","line":153,"loc":{"start":{"line":153,"column":7},"end":{"line":153,"column":55}},"locations":[{"start":{"line":153,"column":7},"end":{"line":153,"column":55}}]},"28":{"type":"branch","line":209,"loc":{"start":{"line":209,"column":24},"end":{"line":209,"column":64}},"locations":[{"start":{"line":209,"column":24},"end":{"line":209,"column":64}}]},"29":{"type":"branch","line":209,"loc":{"start":{"line":209,"column":32},"end":{"line":209,"column":85}},"locations":[{"start":{"line":209,"column":32},"end":{"line":209,"column":85}}]},"30":{"type":"branch","line":213,"loc":{"start":{"line":213,"column":7},"end":{"line":457,"column":18}},"locations":[{"start":{"line":213,"column":7},"end":{"line":457,"column":18}}]},"31":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":23},"end":{"line":220,"column":102}},"locations":[{"start":{"line":220,"column":23},"end":{"line":220,"column":102}}]},"32":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":64},"end":{"line":220,"column":102}},"locations":[{"start":{"line":220,"column":64},"end":{"line":220,"column":102}}]},"33":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":88},"end":{"line":222,"column":86}},"locations":[{"start":{"line":220,"column":88},"end":{"line":222,"column":86}}]},"34":{"type":"branch","line":224,"loc":{"start":{"line":224,"column":36},"end":{"line":242,"column":21}},"locations":[{"start":{"line":224,"column":36},"end":{"line":242,"column":21}}]},"35":{"type":"branch","line":244,"loc":{"start":{"line":244,"column":32},"end":{"line":262,"column":21}},"locations":[{"start":{"line":244,"column":32},"end":{"line":262,"column":21}}]},"36":{"type":"branch","line":266,"loc":{"start":{"line":266,"column":11},"end":{"line":266,"column":51}},"locations":[{"start":{"line":266,"column":11},"end":{"line":266,"column":51}}]},"37":{"type":"branch","line":266,"loc":{"start":{"line":266,"column":39},"end":{"line":270,"column":21}},"locations":[{"start":{"line":266,"column":39},"end":{"line":270,"column":21}}]},"38":{"type":"branch","line":268,"loc":{"start":{"line":268,"column":43},"end":{"line":268,"column":62}},"locations":[{"start":{"line":268,"column":43},"end":{"line":268,"column":62}}]},"39":{"type":"branch","line":268,"loc":{"start":{"line":268,"column":50},"end":{"line":268,"column":72}},"locations":[{"start":{"line":268,"column":50},"end":{"line":268,"column":72}}]},"40":{"type":"branch","line":268,"loc":{"start":{"line":268,"column":95},"end":{"line":268,"column":113}},"locations":[{"start":{"line":268,"column":95},"end":{"line":268,"column":113}}]},"41":{"type":"branch","line":268,"loc":{"start":{"line":268,"column":102},"end":{"line":268,"column":122}},"locations":[{"start":{"line":268,"column":102},"end":{"line":268,"column":122}}]},"42":{"type":"branch","line":272,"loc":{"start":{"line":272,"column":11},"end":{"line":272,"column":29}},"locations":[{"start":{"line":272,"column":11},"end":{"line":272,"column":29}}]},"43":{"type":"branch","line":272,"loc":{"start":{"line":272,"column":29},"end":{"line":273,"column":108}},"locations":[{"start":{"line":272,"column":29},"end":{"line":273,"column":108}}]},"44":{"type":"branch","line":281,"loc":{"start":{"line":281,"column":27},"end":{"line":281,"column":107}},"locations":[{"start":{"line":281,"column":27},"end":{"line":281,"column":107}}]},"45":{"type":"branch","line":288,"loc":{"start":{"line":288,"column":60},"end":{"line":288,"column":88}},"locations":[{"start":{"line":288,"column":60},"end":{"line":288,"column":88}}]},"46":{"type":"branch","line":310,"loc":{"start":{"line":310,"column":40},"end":{"line":310,"column":56}},"locations":[{"start":{"line":310,"column":40},"end":{"line":310,"column":56}}]},"47":{"type":"branch","line":310,"loc":{"start":{"line":310,"column":47},"end":{"line":310,"column":116}},"locations":[{"start":{"line":310,"column":47},"end":{"line":310,"column":116}}]},"48":{"type":"branch","line":316,"loc":{"start":{"line":316,"column":26},"end":{"line":316,"column":59}},"locations":[{"start":{"line":316,"column":26},"end":{"line":316,"column":59}}]},"49":{"type":"branch","line":316,"loc":{"start":{"line":316,"column":50},"end":{"line":317,"column":90}},"locations":[{"start":{"line":316,"column":50},"end":{"line":317,"column":90}}]},"50":{"type":"branch","line":317,"loc":{"start":{"line":317,"column":88},"end":{"line":318,"column":39}},"locations":[{"start":{"line":317,"column":88},"end":{"line":318,"column":39}}]},"51":{"type":"branch","line":320,"loc":{"start":{"line":320,"column":26},"end":{"line":320,"column":55}},"locations":[{"start":{"line":320,"column":26},"end":{"line":320,"column":55}}]},"52":{"type":"branch","line":320,"loc":{"start":{"line":320,"column":42},"end":{"line":320,"column":68}},"locations":[{"start":{"line":320,"column":42},"end":{"line":320,"column":68}}]},"53":{"type":"branch","line":331,"loc":{"start":{"line":331,"column":28},"end":{"line":331,"column":44}},"locations":[{"start":{"line":331,"column":28},"end":{"line":331,"column":44}}]},"54":{"type":"branch","line":335,"loc":{"start":{"line":335,"column":34},"end":{"line":417,"column":18}},"locations":[{"start":{"line":335,"column":34},"end":{"line":417,"column":18}}]},"55":{"type":"branch","line":404,"loc":{"start":{"line":404,"column":17},"end":{"line":414,"column":20}},"locations":[{"start":{"line":404,"column":17},"end":{"line":414,"column":20}}]},"56":{"type":"branch","line":421,"loc":{"start":{"line":421,"column":45},"end":{"line":421,"column":61}},"locations":[{"start":{"line":421,"column":45},"end":{"line":421,"column":61}}]},"57":{"type":"branch","line":421,"loc":{"start":{"line":421,"column":49},"end":{"line":421,"column":91}},"locations":[{"start":{"line":421,"column":49},"end":{"line":421,"column":91}}]},"58":{"type":"branch","line":423,"loc":{"start":{"line":423,"column":29},"end":{"line":437,"column":15}},"locations":[{"start":{"line":423,"column":29},"end":{"line":437,"column":15}}]},"59":{"type":"branch","line":455,"loc":{"start":{"line":455,"column":30},"end":{"line":455,"column":98}},"locations":[{"start":{"line":455,"column":30},"end":{"line":455,"column":98}}]},"60":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":18},"end":{"line":103,"column":62}},"locations":[{"start":{"line":103,"column":18},"end":{"line":103,"column":62}}]},"61":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":40},"end":{"line":103,"column":60}},"locations":[{"start":{"line":103,"column":40},"end":{"line":103,"column":60}}]},"62":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":17},"end":{"line":107,"column":4}},"locations":[{"start":{"line":104,"column":17},"end":{"line":107,"column":4}}]},"63":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":4},"end":{"line":115,"column":6}},"locations":[{"start":{"line":110,"column":4},"end":{"line":115,"column":6}}]},"64":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":56},"end":{"line":112,"column":76}},"locations":[{"start":{"line":112,"column":56},"end":{"line":112,"column":76}}]},"65":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":82},"end":{"line":114,"column":52}},"locations":[{"start":{"line":112,"column":82},"end":{"line":114,"column":52}}]},"66":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":12},"end":{"line":122,"column":5}},"locations":[{"start":{"line":119,"column":12},"end":{"line":122,"column":5}}]},"67":{"type":"branch","line":126,"loc":{"start":{"line":126,"column":12},"end":{"line":146,"column":5}},"locations":[{"start":{"line":126,"column":12},"end":{"line":146,"column":5}}]},"68":{"type":"branch","line":127,"loc":{"start":{"line":127,"column":21},"end":{"line":132,"column":5}},"locations":[{"start":{"line":127,"column":21},"end":{"line":132,"column":5}}]},"69":{"type":"branch","line":132,"loc":{"start":{"line":132,"column":4},"end":{"line":145,"column":6}},"locations":[{"start":{"line":132,"column":4},"end":{"line":145,"column":6}}]},"70":{"type":"branch","line":136,"loc":{"start":{"line":136,"column":12},"end":{"line":141,"column":7}},"locations":[{"start":{"line":136,"column":12},"end":{"line":141,"column":7}}]},"71":{"type":"branch","line":137,"loc":{"start":{"line":137,"column":19},"end":{"line":137,"column":26}},"locations":[{"start":{"line":137,"column":19},"end":{"line":137,"column":26}}]},"72":{"type":"branch","line":143,"loc":{"start":{"line":143,"column":11},"end":{"line":145,"column":6}},"locations":[{"start":{"line":143,"column":11},"end":{"line":145,"column":6}}]},"73":{"type":"branch","line":165,"loc":{"start":{"line":165,"column":22},"end":{"line":168,"column":14}},"locations":[{"start":{"line":165,"column":22},"end":{"line":168,"column":14}}]},"74":{"type":"branch","line":171,"loc":{"start":{"line":171,"column":24},"end":{"line":174,"column":23}},"locations":[{"start":{"line":171,"column":24},"end":{"line":174,"column":23}}]},"75":{"type":"branch","line":194,"loc":{"start":{"line":194,"column":20},"end":{"line":197,"column":25}},"locations":[{"start":{"line":194,"column":20},"end":{"line":197,"column":25}}]},"76":{"type":"branch","line":195,"loc":{"start":{"line":195,"column":88},"end":{"line":195,"column":122}},"locations":[{"start":{"line":195,"column":88},"end":{"line":195,"column":122}}]},"77":{"type":"branch","line":200,"loc":{"start":{"line":200,"column":36},"end":{"line":200,"column":64}},"locations":[{"start":{"line":200,"column":36},"end":{"line":200,"column":64}}]},"78":{"type":"branch","line":201,"loc":{"start":{"line":201,"column":37},"end":{"line":201,"column":89}},"locations":[{"start":{"line":201,"column":37},"end":{"line":201,"column":89}}]},"79":{"type":"branch","line":202,"loc":{"start":{"line":202,"column":56},"end":{"line":202,"column":95}},"locations":[{"start":{"line":202,"column":56},"end":{"line":202,"column":95}}]},"80":{"type":"branch","line":203,"loc":{"start":{"line":203,"column":57},"end":{"line":203,"column":90}},"locations":[{"start":{"line":203,"column":57},"end":{"line":203,"column":90}}]},"81":{"type":"branch","line":204,"loc":{"start":{"line":204,"column":54},"end":{"line":204,"column":89}},"locations":[{"start":{"line":204,"column":54},"end":{"line":204,"column":89}}]},"82":{"type":"branch","line":205,"loc":{"start":{"line":205,"column":51},"end":{"line":205,"column":78}},"locations":[{"start":{"line":205,"column":51},"end":{"line":205,"column":78}}]},"83":{"type":"branch","line":208,"loc":{"start":{"line":208,"column":18},"end":{"line":208,"column":44}},"locations":[{"start":{"line":208,"column":18},"end":{"line":208,"column":44}}]},"84":{"type":"branch","line":229,"loc":{"start":{"line":229,"column":27},"end":{"line":229,"column":78}},"locations":[{"start":{"line":229,"column":27},"end":{"line":229,"column":78}}]},"85":{"type":"branch","line":237,"loc":{"start":{"line":237,"column":27},"end":{"line":237,"column":98}},"locations":[{"start":{"line":237,"column":27},"end":{"line":237,"column":98}}]},"86":{"type":"branch","line":237,"loc":{"start":{"line":237,"column":83},"end":{"line":237,"column":95}},"locations":[{"start":{"line":237,"column":83},"end":{"line":237,"column":95}}]},"87":{"type":"branch","line":347,"loc":{"start":{"line":347,"column":22},"end":{"line":358,"column":26}},"locations":[{"start":{"line":347,"column":22},"end":{"line":358,"column":26}}]},"88":{"type":"branch","line":349,"loc":{"start":{"line":349,"column":63},"end":{"line":349,"column":81}},"locations":[{"start":{"line":349,"column":63},"end":{"line":349,"column":81}}]},"89":{"type":"branch","line":356,"loc":{"start":{"line":356,"column":32},"end":{"line":356,"column":95}},"locations":[{"start":{"line":356,"column":32},"end":{"line":356,"column":95}}]},"90":{"type":"branch","line":365,"loc":{"start":{"line":365,"column":22},"end":{"line":375,"column":26}},"locations":[{"start":{"line":365,"column":22},"end":{"line":375,"column":26}}]},"91":{"type":"branch","line":392,"loc":{"start":{"line":392,"column":30},"end":{"line":392,"column":103}},"locations":[{"start":{"line":392,"column":30},"end":{"line":392,"column":103}}]},"92":{"type":"branch","line":408,"loc":{"start":{"line":408,"column":29},"end":{"line":408,"column":90}},"locations":[{"start":{"line":408,"column":29},"end":{"line":408,"column":90}}]},"93":{"type":"branch","line":409,"loc":{"start":{"line":409,"column":28},"end":{"line":412,"column":22}},"locations":[{"start":{"line":409,"column":28},"end":{"line":412,"column":22}}]},"94":{"type":"branch","line":426,"loc":{"start":{"line":426,"column":30},"end":{"line":431,"column":23}},"locations":[{"start":{"line":426,"column":30},"end":{"line":431,"column":23}}]},"95":{"type":"branch","line":429,"loc":{"start":{"line":429,"column":56},"end":{"line":429,"column":85}},"locations":[{"start":{"line":429,"column":56},"end":{"line":429,"column":85}}]},"96":{"type":"branch","line":447,"loc":{"start":{"line":447,"column":23},"end":{"line":453,"column":19}},"locations":[{"start":{"line":447,"column":23},"end":{"line":453,"column":19}}]}},"b":{"0":[5],"1":[4],"2":[3],"3":[1],"4":[115],"5":[5],"6":[0],"7":[0],"8":[0],"9":[0],"10":[1],"11":[2],"12":[1],"13":[350],"14":[340],"15":[10],"16":[346],"17":[344],"18":[2],"19":[4],"20":[0],"21":[0],"22":[0],"23":[0],"24":[1],"25":[1],"26":[111],"27":[0],"28":[76],"29":[35],"30":[29],"31":[1],"32":[0],"33":[1],"34":[26],"35":[2],"36":[10],"37":[8],"38":[6],"39":[2],"40":[6],"41":[2],"42":[10],"43":[2],"44":[0],"45":[0],"46":[1],"47":[28],"48":[28],"49":[28],"50":[1],"51":[28],"52":[1],"53":[0],"54":[26],"55":[3],"56":[28],"57":[1],"58":[1],"59":[28],"60":[6],"61":[6],"62":[5],"63":[25],"64":[24],"65":[24],"66":[32],"67":[38],"68":[18],"69":[20],"70":[20],"71":[0],"72":[20],"73":[1],"74":[777],"75":[52],"76":[14],"77":[52],"78":[52],"79":[52],"80":[52],"81":[52],"82":[52],"83":[52],"84":[3],"85":[1],"86":[0],"87":[78],"88":[1],"89":[2],"90":[52],"91":[1],"92":[1],"93":[1],"94":[1],"95":[0],"96":[1]},"fnMap":{"0":{"name":"asOutcome","decl":{"start":{"line":17,"column":0},"end":{"line":20,"column":1}},"loc":{"start":{"line":17,"column":0},"end":{"line":20,"column":1}},"line":17},"1":{"name":"toThrottle","decl":{"start":{"line":56,"column":7},"end":{"line":69,"column":1}},"loc":{"start":{"line":56,"column":7},"end":{"line":69,"column":1}},"line":56},"2":{"name":"number","decl":{"start":{"line":58,"column":17},"end":{"line":58,"column":80}},"loc":{"start":{"line":58,"column":17},"end":{"line":58,"column":80}},"line":58},"3":{"name":"text","decl":{"start":{"line":59,"column":15},"end":{"line":59,"column":77}},"loc":{"start":{"line":59,"column":15},"end":{"line":59,"column":77}},"line":59},"4":{"name":"describeThrottle","decl":{"start":{"line":72,"column":7},"end":{"line":82,"column":1}},"loc":{"start":{"line":72,"column":7},"end":{"line":82,"column":1}},"line":72},"5":{"name":"CampaignPanel","decl":{"start":{"line":89,"column":7},"end":{"line":461,"column":1}},"loc":{"start":{"line":89,"column":7},"end":{"line":461,"column":1}},"line":89},"6":{"name":"refresh","decl":{"start":{"line":103,"column":18},"end":{"line":103,"column":62}},"loc":{"start":{"line":103,"column":18},"end":{"line":103,"column":62}},"line":103},"7":{"name":"settle","decl":{"start":{"line":104,"column":17},"end":{"line":107,"column":4}},"loc":{"start":{"line":104,"column":17},"end":{"line":107,"column":4}},"line":104},"8":{"name":"onChange","decl":{"start":{"line":165,"column":22},"end":{"line":168,"column":14}},"loc":{"start":{"line":165,"column":22},"end":{"line":168,"column":14}},"line":165},"9":{"name":"cell","decl":{"start":{"line":194,"column":20},"end":{"line":197,"column":25}},"loc":{"start":{"line":194,"column":20},"end":{"line":197,"column":25}},"line":194},"10":{"name":"onClick","decl":{"start":{"line":195,"column":88},"end":{"line":195,"column":122}},"loc":{"start":{"line":195,"column":88},"end":{"line":195,"column":122}},"line":195},"11":{"name":"cell","decl":{"start":{"line":200,"column":36},"end":{"line":200,"column":64}},"loc":{"start":{"line":200,"column":36},"end":{"line":200,"column":64}},"line":200},"12":{"name":"cell","decl":{"start":{"line":201,"column":37},"end":{"line":201,"column":89}},"loc":{"start":{"line":201,"column":37},"end":{"line":201,"column":89}},"line":201},"13":{"name":"cell","decl":{"start":{"line":202,"column":56},"end":{"line":202,"column":95}},"loc":{"start":{"line":202,"column":56},"end":{"line":202,"column":95}},"line":202},"14":{"name":"cell","decl":{"start":{"line":203,"column":57},"end":{"line":203,"column":90}},"loc":{"start":{"line":203,"column":57},"end":{"line":203,"column":90}},"line":203},"15":{"name":"cell","decl":{"start":{"line":204,"column":54},"end":{"line":204,"column":89}},"loc":{"start":{"line":204,"column":54},"end":{"line":204,"column":89}},"line":204},"16":{"name":"cell","decl":{"start":{"line":205,"column":51},"end":{"line":205,"column":78}},"loc":{"start":{"line":205,"column":51},"end":{"line":205,"column":78}},"line":205},"17":{"name":"rowKey","decl":{"start":{"line":208,"column":18},"end":{"line":208,"column":44}},"loc":{"start":{"line":208,"column":18},"end":{"line":208,"column":44}},"line":208},"18":{"name":"execute","decl":{"start":{"line":229,"column":27},"end":{"line":229,"column":78}},"loc":{"start":{"line":229,"column":27},"end":{"line":229,"column":78}},"line":229},"19":{"name":"execute","decl":{"start":{"line":237,"column":27},"end":{"line":237,"column":98}},"loc":{"start":{"line":237,"column":27},"end":{"line":237,"column":98}},"line":237},"20":{"name":"execute","decl":{"start":{"line":249,"column":27},"end":{"line":249,"column":79}},"loc":{"start":{"line":249,"column":27},"end":{"line":249,"column":79}},"line":249},"21":{"name":"execute","decl":{"start":{"line":257,"column":27},"end":{"line":257,"column":98}},"loc":{"start":{"line":257,"column":27},"end":{"line":257,"column":98}},"line":257},"22":{"name":"onChange","decl":{"start":{"line":356,"column":32},"end":{"line":356,"column":95}},"loc":{"start":{"line":356,"column":32},"end":{"line":356,"column":95}},"line":356},"23":{"name":"onChange","decl":{"start":{"line":373,"column":32},"end":{"line":373,"column":95}},"loc":{"start":{"line":373,"column":32},"end":{"line":373,"column":95}},"line":373},"24":{"name":"onChange","decl":{"start":{"line":385,"column":30},"end":{"line":385,"column":96}},"loc":{"start":{"line":385,"column":30},"end":{"line":385,"column":96}},"line":385},"25":{"name":"onChange","decl":{"start":{"line":392,"column":30},"end":{"line":392,"column":103}},"loc":{"start":{"line":392,"column":30},"end":{"line":392,"column":103}},"line":392},"26":{"name":"onChange","decl":{"start":{"line":400,"column":30},"end":{"line":400,"column":99}},"loc":{"start":{"line":400,"column":30},"end":{"line":400,"column":99}},"line":400},"27":{"name":"execute","decl":{"start":{"line":408,"column":29},"end":{"line":408,"column":90}},"loc":{"start":{"line":408,"column":29},"end":{"line":408,"column":90}},"line":408},"28":{"name":"onDone","decl":{"start":{"line":409,"column":28},"end":{"line":412,"column":22}},"loc":{"start":{"line":409,"column":28},"end":{"line":412,"column":22}},"line":409}},"f":{"0":5,"1":115,"2":350,"3":346,"4":4,"5":111,"6":6,"7":5,"8":1,"9":52,"10":14,"11":52,"12":52,"13":52,"14":52,"15":52,"16":52,"17":52,"18":3,"19":1,"20":0,"21":0,"22":2,"23":0,"24":0,"25":1,"26":0,"27":1,"28":1}} -,"/Users/omercelik/Repositories/goldpath/ui/console/src/Console.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/Console.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":53}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":51}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":15}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":23}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":22}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":32}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":24}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":2}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":94}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":90}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":78}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":61}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":52}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":19}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":20}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":56}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":24}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":29}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":78}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":35}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":7}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":18}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":19}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":6}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":15}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":42}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":91}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":19}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":37}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":43}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":9}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":9}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":10}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":13}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":19}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":15}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":24}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":27}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":56}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":107}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":53}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":53}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":12}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":56}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":31}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":102}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":104}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":17}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":54}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":31}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":77}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":104}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":17}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":76}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":48}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":105}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":113}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":121}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":113}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":15}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":1}}},"s":{"0":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"35":1,"36":20,"37":20,"38":20,"39":20,"41":20,"42":10,"43":10,"44":10,"45":10,"46":10,"47":10,"48":10,"49":10,"50":10,"51":10,"52":20,"54":20,"55":10,"56":18,"57":18,"58":18,"59":10,"60":10,"62":20,"63":20,"64":20,"65":20,"66":20,"67":20,"68":20,"70":20,"72":20,"73":1,"75":1,"78":20,"79":2,"80":2,"81":2,"82":2,"85":20,"88":1,"89":1,"90":1,"91":1,"94":20,"95":2,"98":20,"100":20,"102":20,"104":20,"105":20,"107":20},"branchMap":{"0":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":7},"end":{"line":108,"column":1}},"locations":[{"start":{"line":36,"column":7},"end":{"line":108,"column":1}}]},"1":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":30},"end":{"line":60,"column":9}},"locations":[{"start":{"line":55,"column":30},"end":{"line":60,"column":9}}]},"2":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":8},"end":{"line":61,"column":9}},"locations":[{"start":{"line":60,"column":8},"end":{"line":61,"column":9}}]},"3":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":24},"end":{"line":71,"column":107}},"locations":[{"start":{"line":71,"column":24},"end":{"line":71,"column":107}}]},"4":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":24},"end":{"line":73,"column":53}},"locations":[{"start":{"line":73,"column":24},"end":{"line":73,"column":53}}]},"5":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":47},"end":{"line":76,"column":12}},"locations":[{"start":{"line":73,"column":47},"end":{"line":76,"column":12}}]},"6":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":7},"end":{"line":79,"column":31}},"locations":[{"start":{"line":79,"column":7},"end":{"line":79,"column":31}}]},"7":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":40},"end":{"line":83,"column":17}},"locations":[{"start":{"line":79,"column":40},"end":{"line":83,"column":17}}]},"8":{"type":"branch","line":82,"loc":{"start":{"line":82,"column":33},"end":{"line":82,"column":101}},"locations":[{"start":{"line":82,"column":33},"end":{"line":82,"column":101}}]},"9":{"type":"branch","line":82,"loc":{"start":{"line":82,"column":95},"end":{"line":82,"column":104}},"locations":[{"start":{"line":82,"column":95},"end":{"line":82,"column":104}}]},"10":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":7},"end":{"line":86,"column":31}},"locations":[{"start":{"line":86,"column":7},"end":{"line":86,"column":31}}]},"11":{"type":"branch","line":86,"loc":{"start":{"line":86,"column":40},"end":{"line":92,"column":17}},"locations":[{"start":{"line":86,"column":40},"end":{"line":92,"column":17}}]},"12":{"type":"branch","line":91,"loc":{"start":{"line":91,"column":95},"end":{"line":91,"column":104}},"locations":[{"start":{"line":91,"column":95},"end":{"line":91,"column":104}}]},"13":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":7},"end":{"line":95,"column":31}},"locations":[{"start":{"line":95,"column":7},"end":{"line":95,"column":31}}]},"14":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":40},"end":{"line":95,"column":76}},"locations":[{"start":{"line":95,"column":40},"end":{"line":95,"column":76}}]},"15":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":65},"end":{"line":96,"column":48}},"locations":[{"start":{"line":95,"column":65},"end":{"line":96,"column":48}}]},"16":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":7},"end":{"line":99,"column":31}},"locations":[{"start":{"line":99,"column":7},"end":{"line":99,"column":31}}]},"17":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":40},"end":{"line":99,"column":75}},"locations":[{"start":{"line":99,"column":40},"end":{"line":99,"column":75}}]},"18":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":65},"end":{"line":99,"column":105}},"locations":[{"start":{"line":99,"column":65},"end":{"line":99,"column":105}}]},"19":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":7},"end":{"line":101,"column":31}},"locations":[{"start":{"line":101,"column":7},"end":{"line":101,"column":31}}]},"20":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":40},"end":{"line":101,"column":79}},"locations":[{"start":{"line":101,"column":40},"end":{"line":101,"column":79}}]},"21":{"type":"branch","line":101,"loc":{"start":{"line":101,"column":65},"end":{"line":101,"column":113}},"locations":[{"start":{"line":101,"column":65},"end":{"line":101,"column":113}}]},"22":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":7},"end":{"line":103,"column":31}},"locations":[{"start":{"line":103,"column":7},"end":{"line":103,"column":31}}]},"23":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":40},"end":{"line":103,"column":83}},"locations":[{"start":{"line":103,"column":40},"end":{"line":103,"column":83}}]},"24":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":65},"end":{"line":103,"column":121}},"locations":[{"start":{"line":103,"column":65},"end":{"line":103,"column":121}}]},"25":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":7},"end":{"line":105,"column":31}},"locations":[{"start":{"line":105,"column":7},"end":{"line":105,"column":31}}]},"26":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":40},"end":{"line":105,"column":79}},"locations":[{"start":{"line":105,"column":40},"end":{"line":105,"column":79}}]},"27":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":65},"end":{"line":105,"column":113}},"locations":[{"start":{"line":105,"column":65},"end":{"line":105,"column":113}}]},"28":{"type":"branch","line":37,"loc":{"start":{"line":37,"column":25},"end":{"line":37,"column":70}},"locations":[{"start":{"line":37,"column":25},"end":{"line":37,"column":70}}]},"29":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":12},"end":{"line":53,"column":5}},"locations":[{"start":{"line":42,"column":12},"end":{"line":53,"column":5}}]},"30":{"type":"branch","line":44,"loc":{"start":{"line":44,"column":44},"end":{"line":49,"column":5}},"locations":[{"start":{"line":44,"column":44},"end":{"line":49,"column":5}}]},"31":{"type":"branch","line":45,"loc":{"start":{"line":45,"column":17},"end":{"line":45,"column":24}},"locations":[{"start":{"line":45,"column":17},"end":{"line":45,"column":24}}]},"32":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":17},"end":{"line":48,"column":35}},"locations":[{"start":{"line":48,"column":17},"end":{"line":48,"column":35}}]},"33":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":33},"end":{"line":47,"column":76}},"locations":[{"start":{"line":47,"column":33},"end":{"line":47,"column":76}}]},"34":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":11},"end":{"line":52,"column":6}},"locations":[{"start":{"line":50,"column":11},"end":{"line":52,"column":6}}]},"35":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":21},"end":{"line":56,"column":71}},"locations":[{"start":{"line":56,"column":21},"end":{"line":56,"column":71}}]},"36":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":77},"end":{"line":60,"column":8}},"locations":[{"start":{"line":56,"column":77},"end":{"line":60,"column":8}}]}},"b":{"0":[20],"1":[10],"2":[10],"3":[10],"4":[10],"5":[1],"6":[10],"7":[2],"8":[1],"9":[1],"10":[10],"11":[1],"12":[0],"13":[10],"14":[6],"15":[2],"16":[10],"17":[6],"18":[1],"19":[10],"20":[6],"21":[1],"22":[10],"23":[6],"24":[1],"25":[10],"26":[6],"27":[1],"28":[10],"29":[10],"30":[10],"31":[0],"32":[9],"33":[24],"34":[10],"35":[50],"36":[18]},"fnMap":{"0":{"name":"Console","decl":{"start":{"line":36,"column":7},"end":{"line":108,"column":1}},"loc":{"start":{"line":36,"column":7},"end":{"line":108,"column":1}},"line":36},"1":{"name":"onSelect","decl":{"start":{"line":59,"column":18},"end":{"line":59,"column":43}},"loc":{"start":{"line":59,"column":18},"end":{"line":59,"column":43}},"line":59},"2":{"name":"onToggleCollapsed","decl":{"start":{"line":69,"column":25},"end":{"line":69,"column":56}},"loc":{"start":{"line":69,"column":25},"end":{"line":69,"column":56}},"line":69}},"f":{"0":20,"1":0,"2":0}} -,"/Users/omercelik/Repositories/goldpath/ui/console/src/NotificationPanel.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/NotificationPanel.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":57}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":70}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":16}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":45}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":41}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":49}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":11}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":84}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":38}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":77}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":37}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":41}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":60}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":84}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":66}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":50}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":1}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":71}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":88}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":48}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":49}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":55}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":68}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":74}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":58}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":54}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":62}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":19}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":20}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":10}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":30}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":51}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":87}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":18}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":19}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":6}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":29}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":31}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":53}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":18}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":27}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":51}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":35}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":57}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":111}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":47}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":6}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":50}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":4}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":19}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":22}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":24}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":13}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":5}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":20}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":10}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":31}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":50}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":85}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":18}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":19}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":6}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":41}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":95}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":10}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":64}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":55}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":30}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":42}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":18}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":121}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":25}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":17}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":15}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":85}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":34}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":45}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":123}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":70}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":80}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":41}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":21}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":97}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":68}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":63}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":32}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":23}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":17}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":65}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":81}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":17}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":13}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":119}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":13}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":16}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":15}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":64}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":34}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":19}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":29}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":47}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":64}},"144":{"start":{"line":145,"column":0},"end":{"line":145,"column":135}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":17}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":30}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":35}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":36}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":16}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":27}},"152":{"start":{"line":153,"column":0},"end":{"line":153,"column":21}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":13}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":30}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":14}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":97}},"159":{"start":{"line":160,"column":0},"end":{"line":160,"column":22}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":21}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":39}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":91}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":29}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":38}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":47}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":38}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":18}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":52}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":41}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":54}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":28}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":27}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":19}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":23}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":95}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":22}},"180":{"start":{"line":181,"column":0},"end":{"line":181,"column":21}},"181":{"start":{"line":182,"column":0},"end":{"line":182,"column":42}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":91}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":32}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":38}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":50}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":38}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":18}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":55}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":51}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":60}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":31}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":27}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":19}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":23}},"196":{"start":{"line":197,"column":0},"end":{"line":197,"column":15}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":17}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":111}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":29}},"202":{"start":{"line":203,"column":0},"end":{"line":203,"column":11}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":19}},"205":{"start":{"line":206,"column":0},"end":{"line":206,"column":14}},"207":{"start":{"line":208,"column":0},"end":{"line":208,"column":38}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":62}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":20}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":13}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":43}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":30}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":127}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":39}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":25}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":14}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":64}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":62}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":81}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":80}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":68}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":12}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":29}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":34}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":24}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":31}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":42}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":39}},"230":{"start":{"line":231,"column":0},"end":{"line":231,"column":43}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":55}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":10}},"234":{"start":{"line":235,"column":0},"end":{"line":235,"column":47}},"237":{"start":{"line":238,"column":0},"end":{"line":238,"column":12}},"238":{"start":{"line":239,"column":0},"end":{"line":239,"column":16}},"240":{"start":{"line":241,"column":0},"end":{"line":241,"column":20}},"241":{"start":{"line":242,"column":0},"end":{"line":242,"column":99}},"242":{"start":{"line":243,"column":0},"end":{"line":243,"column":66}},"243":{"start":{"line":244,"column":0},"end":{"line":244,"column":48}},"244":{"start":{"line":245,"column":0},"end":{"line":245,"column":97}},"245":{"start":{"line":246,"column":0},"end":{"line":246,"column":17}},"246":{"start":{"line":247,"column":0},"end":{"line":247,"column":49}},"247":{"start":{"line":248,"column":0},"end":{"line":248,"column":116}},"248":{"start":{"line":249,"column":0},"end":{"line":249,"column":16}},"250":{"start":{"line":251,"column":0},"end":{"line":251,"column":82}},"251":{"start":{"line":252,"column":0},"end":{"line":252,"column":17}},"252":{"start":{"line":253,"column":0},"end":{"line":253,"column":55}},"254":{"start":{"line":255,"column":0},"end":{"line":255,"column":74}},"255":{"start":{"line":256,"column":0},"end":{"line":256,"column":18}},"256":{"start":{"line":257,"column":0},"end":{"line":257,"column":17}},"257":{"start":{"line":258,"column":0},"end":{"line":258,"column":59}},"258":{"start":{"line":259,"column":0},"end":{"line":259,"column":78}},"259":{"start":{"line":260,"column":0},"end":{"line":260,"column":18}},"260":{"start":{"line":261,"column":0},"end":{"line":261,"column":17}},"261":{"start":{"line":262,"column":0},"end":{"line":262,"column":54}},"262":{"start":{"line":263,"column":0},"end":{"line":263,"column":42}},"263":{"start":{"line":264,"column":0},"end":{"line":264,"column":18}},"264":{"start":{"line":265,"column":0},"end":{"line":265,"column":17}},"265":{"start":{"line":266,"column":0},"end":{"line":266,"column":55}},"266":{"start":{"line":267,"column":0},"end":{"line":267,"column":45}},"267":{"start":{"line":268,"column":0},"end":{"line":268,"column":18}},"268":{"start":{"line":269,"column":0},"end":{"line":269,"column":17}},"269":{"start":{"line":270,"column":0},"end":{"line":270,"column":56}},"270":{"start":{"line":271,"column":0},"end":{"line":271,"column":50}},"271":{"start":{"line":272,"column":0},"end":{"line":272,"column":18}},"272":{"start":{"line":273,"column":0},"end":{"line":273,"column":17}},"273":{"start":{"line":274,"column":0},"end":{"line":274,"column":53}},"274":{"start":{"line":275,"column":0},"end":{"line":275,"column":50}},"275":{"start":{"line":276,"column":0},"end":{"line":276,"column":18}},"276":{"start":{"line":277,"column":0},"end":{"line":277,"column":17}},"277":{"start":{"line":278,"column":0},"end":{"line":278,"column":50}},"278":{"start":{"line":279,"column":0},"end":{"line":279,"column":47}},"279":{"start":{"line":280,"column":0},"end":{"line":280,"column":18}},"280":{"start":{"line":281,"column":0},"end":{"line":281,"column":17}},"281":{"start":{"line":282,"column":0},"end":{"line":282,"column":52}},"282":{"start":{"line":283,"column":0},"end":{"line":283,"column":107}},"283":{"start":{"line":284,"column":0},"end":{"line":284,"column":18}},"284":{"start":{"line":285,"column":0},"end":{"line":285,"column":17}},"285":{"start":{"line":286,"column":0},"end":{"line":286,"column":50}},"287":{"start":{"line":288,"column":0},"end":{"line":288,"column":98}},"288":{"start":{"line":289,"column":0},"end":{"line":289,"column":18}},"289":{"start":{"line":290,"column":0},"end":{"line":290,"column":33}},"290":{"start":{"line":291,"column":0},"end":{"line":291,"column":19}},"291":{"start":{"line":292,"column":0},"end":{"line":292,"column":54}},"292":{"start":{"line":293,"column":0},"end":{"line":293,"column":42}},"293":{"start":{"line":294,"column":0},"end":{"line":294,"column":20}},"295":{"start":{"line":296,"column":0},"end":{"line":296,"column":40}},"296":{"start":{"line":297,"column":0},"end":{"line":297,"column":19}},"297":{"start":{"line":298,"column":0},"end":{"line":298,"column":59}},"298":{"start":{"line":299,"column":0},"end":{"line":299,"column":81}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":20}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":15}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":31}},"305":{"start":{"line":306,"column":0},"end":{"line":306,"column":115}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":31}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":16}},"309":{"start":{"line":310,"column":0},"end":{"line":310,"column":18}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":10}},"313":{"start":{"line":314,"column":0},"end":{"line":314,"column":1}}},"s":{"0":1,"9":1,"12":1,"13":1,"14":1,"15":1,"16":1,"24":1,"25":33,"26":32,"27":33,"28":32,"29":33,"30":33,"31":33,"32":1,"33":1,"42":1,"43":44,"44":44,"45":44,"46":44,"47":44,"48":44,"49":44,"50":44,"52":44,"54":44,"55":13,"56":13,"57":13,"58":13,"59":13,"60":13,"61":13,"62":13,"63":44,"65":44,"66":44,"69":19,"70":19,"71":2,"72":17,"73":2,"74":15,"75":13,"76":19,"77":44,"78":44,"82":44,"83":19,"84":13,"85":13,"86":13,"88":6,"89":6,"90":6,"91":6,"92":6,"93":6,"94":6,"95":6,"96":44,"98":44,"100":44,"101":44,"102":44,"104":44,"105":29,"106":29,"107":29,"108":29,"109":29,"112":44,"113":44,"114":44,"115":44,"116":29,"117":29,"119":29,"120":29,"121":29,"122":29,"123":29,"124":58,"125":58,"126":58,"127":29,"128":29,"129":0,"131":29,"132":44,"133":44,"134":44,"135":44,"137":44,"138":44,"139":44,"140":132,"141":132,"142":132,"143":132,"144":132,"145":132,"146":132,"147":4,"148":4,"149":4,"151":132,"152":132,"153":44,"155":44,"156":36,"157":36,"159":36,"160":36,"161":36,"162":36,"163":36,"164":36,"165":1,"166":1,"167":1,"169":36,"170":36,"171":144,"172":144,"173":144,"174":36,"175":36,"177":36,"179":36,"180":36,"181":36,"182":36,"183":36,"184":36,"185":1,"186":1,"187":1,"189":36,"190":36,"191":21,"192":21,"193":21,"194":36,"195":36,"196":36,"199":44,"200":44,"201":44,"202":44,"204":44,"205":44,"207":44,"208":44,"209":44,"210":44,"211":44,"212":44,"213":29,"214":29,"215":29,"217":44,"218":44,"219":44,"220":44,"221":44,"222":44,"223":44,"224":44,"225":44,"226":44,"227":44,"228":4,"229":40,"230":4,"231":36,"233":44,"234":44,"237":44,"238":44,"240":44,"241":6,"242":6,"243":6,"244":6,"245":6,"246":6,"247":6,"248":6,"250":6,"251":6,"252":6,"254":6,"255":6,"256":6,"257":6,"258":6,"259":6,"260":6,"261":6,"262":6,"263":6,"264":6,"265":6,"266":6,"267":6,"268":6,"269":6,"270":6,"271":6,"272":6,"273":6,"274":6,"275":6,"276":6,"277":6,"278":6,"279":6,"280":6,"281":6,"282":6,"283":6,"284":6,"285":6,"287":6,"288":6,"289":6,"290":1,"291":1,"292":1,"293":1,"295":6,"296":1,"297":1,"298":1,"299":1,"301":6,"303":6,"305":2,"306":2,"307":2,"309":6,"311":44,"313":44},"branchMap":{"0":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":7},"end":{"line":34,"column":1}},"locations":[{"start":{"line":25,"column":7},"end":{"line":34,"column":1}}]},"1":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":24},"end":{"line":26,"column":38}},"locations":[{"start":{"line":26,"column":24},"end":{"line":26,"column":38}}]},"2":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":31},"end":{"line":28,"column":21}},"locations":[{"start":{"line":26,"column":31},"end":{"line":28,"column":21}}]},"3":{"type":"branch","line":28,"loc":{"start":{"line":28,"column":14},"end":{"line":28,"column":37}},"locations":[{"start":{"line":28,"column":14},"end":{"line":28,"column":37}}]},"4":{"type":"branch","line":28,"loc":{"start":{"line":28,"column":21},"end":{"line":30,"column":36}},"locations":[{"start":{"line":28,"column":21},"end":{"line":30,"column":36}}]},"5":{"type":"branch","line":30,"loc":{"start":{"line":30,"column":28},"end":{"line":30,"column":37}},"locations":[{"start":{"line":30,"column":28},"end":{"line":30,"column":37}}]},"6":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":24},"end":{"line":31,"column":84}},"locations":[{"start":{"line":31,"column":24},"end":{"line":31,"column":84}}]},"7":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":80},"end":{"line":32,"column":30}},"locations":[{"start":{"line":31,"column":80},"end":{"line":32,"column":30}}]},"8":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":23},"end":{"line":34,"column":1}},"locations":[{"start":{"line":32,"column":23},"end":{"line":34,"column":1}}]},"9":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":7},"end":{"line":314,"column":1}},"locations":[{"start":{"line":43,"column":7},"end":{"line":314,"column":1}}]},"10":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":19},"end":{"line":99,"column":36}},"locations":[{"start":{"line":99,"column":19},"end":{"line":99,"column":36}}]},"11":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":7},"end":{"line":103,"column":55}},"locations":[{"start":{"line":103,"column":7},"end":{"line":103,"column":55}}]},"12":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":24},"end":{"line":110,"column":17}},"locations":[{"start":{"line":105,"column":24},"end":{"line":110,"column":17}}]},"13":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":12},"end":{"line":116,"column":29}},"locations":[{"start":{"line":116,"column":12},"end":{"line":116,"column":29}}]},"14":{"type":"branch","line":134,"loc":{"start":{"line":134,"column":11},"end":{"line":134,"column":33}},"locations":[{"start":{"line":134,"column":11},"end":{"line":134,"column":33}}]},"15":{"type":"branch","line":134,"loc":{"start":{"line":134,"column":33},"end":{"line":134,"column":119}},"locations":[{"start":{"line":134,"column":33},"end":{"line":134,"column":119}}]},"16":{"type":"branch","line":156,"loc":{"start":{"line":156,"column":20},"end":{"line":197,"column":15}},"locations":[{"start":{"line":156,"column":20},"end":{"line":197,"column":15}}]},"17":{"type":"branch","line":191,"loc":{"start":{"line":191,"column":18},"end":{"line":191,"column":35}},"locations":[{"start":{"line":191,"column":18},"end":{"line":191,"column":35}}]},"18":{"type":"branch","line":228,"loc":{"start":{"line":228,"column":21},"end":{"line":229,"column":42}},"locations":[{"start":{"line":228,"column":21},"end":{"line":229,"column":42}}]},"19":{"type":"branch","line":229,"loc":{"start":{"line":229,"column":16},"end":{"line":232,"column":55}},"locations":[{"start":{"line":229,"column":16},"end":{"line":232,"column":55}}]},"20":{"type":"branch","line":230,"loc":{"start":{"line":230,"column":25},"end":{"line":231,"column":43}},"locations":[{"start":{"line":230,"column":25},"end":{"line":231,"column":43}}]},"21":{"type":"branch","line":231,"loc":{"start":{"line":231,"column":18},"end":{"line":232,"column":55}},"locations":[{"start":{"line":231,"column":18},"end":{"line":232,"column":55}}]},"22":{"type":"branch","line":241,"loc":{"start":{"line":241,"column":7},"end":{"line":310,"column":18}},"locations":[{"start":{"line":241,"column":7},"end":{"line":310,"column":18}}]},"23":{"type":"branch","line":248,"loc":{"start":{"line":248,"column":80},"end":{"line":248,"column":109}},"locations":[{"start":{"line":248,"column":80},"end":{"line":248,"column":109}}]},"24":{"type":"branch","line":279,"loc":{"start":{"line":279,"column":28},"end":{"line":279,"column":42}},"locations":[{"start":{"line":279,"column":28},"end":{"line":279,"column":42}}]},"25":{"type":"branch","line":283,"loc":{"start":{"line":283,"column":38},"end":{"line":283,"column":65}},"locations":[{"start":{"line":283,"column":38},"end":{"line":283,"column":65}}]},"26":{"type":"branch","line":283,"loc":{"start":{"line":283,"column":49},"end":{"line":283,"column":77}},"locations":[{"start":{"line":283,"column":49},"end":{"line":283,"column":77}}]},"27":{"type":"branch","line":283,"loc":{"start":{"line":283,"column":86},"end":{"line":283,"column":102}},"locations":[{"start":{"line":283,"column":86},"end":{"line":283,"column":102}}]},"28":{"type":"branch","line":288,"loc":{"start":{"line":288,"column":28},"end":{"line":288,"column":82}},"locations":[{"start":{"line":288,"column":28},"end":{"line":288,"column":82}}]},"29":{"type":"branch","line":288,"loc":{"start":{"line":288,"column":77},"end":{"line":288,"column":93}},"locations":[{"start":{"line":288,"column":77},"end":{"line":288,"column":93}}]},"30":{"type":"branch","line":290,"loc":{"start":{"line":290,"column":22},"end":{"line":294,"column":20}},"locations":[{"start":{"line":290,"column":22},"end":{"line":294,"column":20}}]},"31":{"type":"branch","line":296,"loc":{"start":{"line":296,"column":22},"end":{"line":300,"column":20}},"locations":[{"start":{"line":296,"column":22},"end":{"line":300,"column":20}}]},"32":{"type":"branch","line":304,"loc":{"start":{"line":304,"column":20},"end":{"line":308,"column":16}},"locations":[{"start":{"line":304,"column":20},"end":{"line":308,"column":16}}]},"33":{"type":"branch","line":306,"loc":{"start":{"line":306,"column":61},"end":{"line":306,"column":88}},"locations":[{"start":{"line":306,"column":61},"end":{"line":306,"column":88}}]},"34":{"type":"branch","line":306,"loc":{"start":{"line":306,"column":72},"end":{"line":306,"column":111}},"locations":[{"start":{"line":306,"column":72},"end":{"line":306,"column":111}}]},"35":{"type":"branch","line":55,"loc":{"start":{"line":55,"column":12},"end":{"line":64,"column":5}},"locations":[{"start":{"line":55,"column":12},"end":{"line":64,"column":5}}]},"36":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":12},"end":{"line":59,"column":50}},"locations":[{"start":{"line":59,"column":12},"end":{"line":59,"column":50}}]},"37":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":13},"end":{"line":60,"column":85}},"locations":[{"start":{"line":60,"column":13},"end":{"line":60,"column":85}}]},"38":{"type":"branch","line":61,"loc":{"start":{"line":61,"column":11},"end":{"line":63,"column":6}},"locations":[{"start":{"line":61,"column":11},"end":{"line":63,"column":6}}]},"39":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":4},"end":{"line":77,"column":6}},"locations":[{"start":{"line":67,"column":4},"end":{"line":77,"column":6}}]},"40":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":17},"end":{"line":72,"column":51}},"locations":[{"start":{"line":71,"column":17},"end":{"line":72,"column":51}}]},"41":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":50},"end":{"line":75,"column":111}},"locations":[{"start":{"line":72,"column":50},"end":{"line":75,"column":111}}]},"42":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":21},"end":{"line":74,"column":57}},"locations":[{"start":{"line":73,"column":21},"end":{"line":74,"column":57}}]},"43":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":56},"end":{"line":75,"column":111}},"locations":[{"start":{"line":74,"column":56},"end":{"line":75,"column":111}}]},"44":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":50},"end":{"line":75,"column":70}},"locations":[{"start":{"line":75,"column":50},"end":{"line":75,"column":70}}]},"45":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":80},"end":{"line":75,"column":103}},"locations":[{"start":{"line":75,"column":80},"end":{"line":75,"column":103}}]},"46":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":109},"end":{"line":76,"column":47}},"locations":[{"start":{"line":75,"column":109},"end":{"line":76,"column":47}}]},"47":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":12},"end":{"line":97,"column":5}},"locations":[{"start":{"line":83,"column":12},"end":{"line":97,"column":5}}]},"48":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":21},"end":{"line":87,"column":5}},"locations":[{"start":{"line":84,"column":21},"end":{"line":87,"column":5}}]},"49":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":4},"end":{"line":96,"column":6}},"locations":[{"start":{"line":87,"column":4},"end":{"line":96,"column":6}}]},"50":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":12},"end":{"line":92,"column":49}},"locations":[{"start":{"line":92,"column":12},"end":{"line":92,"column":49}}]},"51":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":11},"end":{"line":96,"column":6}},"locations":[{"start":{"line":94,"column":11},"end":{"line":96,"column":6}}]},"52":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":43},"end":{"line":99,"column":93}},"locations":[{"start":{"line":99,"column":43},"end":{"line":99,"column":93}}]},"53":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":61},"end":{"line":99,"column":92}},"locations":[{"start":{"line":99,"column":61},"end":{"line":99,"column":92}}]},"54":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":17},"end":{"line":108,"column":120}},"locations":[{"start":{"line":108,"column":17},"end":{"line":108,"column":120}}]},"55":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":90},"end":{"line":108,"column":117}},"locations":[{"start":{"line":108,"column":90},"end":{"line":108,"column":117}}]},"56":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":33},"end":{"line":132,"column":17}},"locations":[{"start":{"line":116,"column":33},"end":{"line":132,"column":17}}]},"57":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":33},"end":{"line":129,"column":46}},"locations":[{"start":{"line":129,"column":33},"end":{"line":129,"column":46}}]},"58":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":59},"end":{"line":130,"column":81}},"locations":[{"start":{"line":129,"column":59},"end":{"line":130,"column":81}}]},"59":{"type":"branch","line":124,"loc":{"start":{"line":124,"column":49},"end":{"line":127,"column":23}},"locations":[{"start":{"line":124,"column":49},"end":{"line":127,"column":23}}]},"60":{"type":"branch","line":140,"loc":{"start":{"line":140,"column":22},"end":{"line":153,"column":21}},"locations":[{"start":{"line":140,"column":22},"end":{"line":153,"column":21}}]},"61":{"type":"branch","line":145,"loc":{"start":{"line":145,"column":31},"end":{"line":145,"column":90}},"locations":[{"start":{"line":145,"column":31},"end":{"line":145,"column":90}}]},"62":{"type":"branch","line":145,"loc":{"start":{"line":145,"column":37},"end":{"line":145,"column":135}},"locations":[{"start":{"line":145,"column":37},"end":{"line":145,"column":135}}]},"63":{"type":"branch","line":147,"loc":{"start":{"line":147,"column":23},"end":{"line":150,"column":16}},"locations":[{"start":{"line":147,"column":23},"end":{"line":150,"column":16}}]},"64":{"type":"branch","line":165,"loc":{"start":{"line":165,"column":26},"end":{"line":168,"column":18}},"locations":[{"start":{"line":165,"column":26},"end":{"line":168,"column":18}}]},"65":{"type":"branch","line":171,"loc":{"start":{"line":171,"column":28},"end":{"line":174,"column":27}},"locations":[{"start":{"line":171,"column":28},"end":{"line":174,"column":27}}]},"66":{"type":"branch","line":185,"loc":{"start":{"line":185,"column":26},"end":{"line":188,"column":18}},"locations":[{"start":{"line":185,"column":26},"end":{"line":188,"column":18}}]},"67":{"type":"branch","line":191,"loc":{"start":{"line":191,"column":39},"end":{"line":194,"column":27}},"locations":[{"start":{"line":191,"column":39},"end":{"line":194,"column":27}}]},"68":{"type":"branch","line":213,"loc":{"start":{"line":213,"column":20},"end":{"line":216,"column":25}},"locations":[{"start":{"line":213,"column":20},"end":{"line":216,"column":25}}]},"69":{"type":"branch","line":214,"loc":{"start":{"line":214,"column":98},"end":{"line":214,"column":127}},"locations":[{"start":{"line":214,"column":98},"end":{"line":214,"column":127}}]},"70":{"type":"branch","line":219,"loc":{"start":{"line":219,"column":40},"end":{"line":219,"column":62}},"locations":[{"start":{"line":219,"column":40},"end":{"line":219,"column":62}}]},"71":{"type":"branch","line":220,"loc":{"start":{"line":220,"column":39},"end":{"line":220,"column":60}},"locations":[{"start":{"line":220,"column":39},"end":{"line":220,"column":60}}]},"72":{"type":"branch","line":221,"loc":{"start":{"line":221,"column":37},"end":{"line":221,"column":79}},"locations":[{"start":{"line":221,"column":37},"end":{"line":221,"column":79}}]},"73":{"type":"branch","line":222,"loc":{"start":{"line":222,"column":56},"end":{"line":222,"column":78}},"locations":[{"start":{"line":222,"column":56},"end":{"line":222,"column":78}}]},"74":{"type":"branch","line":223,"loc":{"start":{"line":223,"column":41},"end":{"line":223,"column":66}},"locations":[{"start":{"line":223,"column":41},"end":{"line":223,"column":66}}]},"75":{"type":"branch","line":226,"loc":{"start":{"line":226,"column":18},"end":{"line":226,"column":34}},"locations":[{"start":{"line":226,"column":18},"end":{"line":226,"column":34}}]}},"b":{"0":[33],"1":[1],"2":[32],"3":[0],"4":[32],"5":[2],"6":[30],"7":[2],"8":[1],"9":[44],"10":[14],"11":[1],"12":[29],"13":[14],"14":[30],"15":[1],"16":[36],"17":[14],"18":[4],"19":[40],"20":[4],"21":[36],"22":[6],"23":[0],"24":[0],"25":[1],"26":[5],"27":[5],"28":[1],"29":[5],"30":[1],"31":[1],"32":[2],"33":[1],"34":[1],"35":[13],"36":[12],"37":[1],"38":[13],"39":[19],"40":[2],"41":[17],"42":[2],"43":[15],"44":[13],"45":[14],"46":[13],"47":[19],"48":[13],"49":[6],"50":[6],"51":[6],"52":[29],"53":[0],"54":[29],"55":[0],"56":[29],"57":[0],"58":[0],"59":[58],"60":[132],"61":[44],"62":[88],"63":[4],"64":[1],"65":[144],"66":[1],"67":[21],"68":[29],"69":[6],"70":[29],"71":[29],"72":[29],"73":[29],"74":[29],"75":[29]},"fnMap":{"0":{"name":"retentionWords","decl":{"start":{"line":25,"column":7},"end":{"line":34,"column":1}},"loc":{"start":{"line":25,"column":7},"end":{"line":34,"column":1}},"line":25},"1":{"name":"NotificationPanel","decl":{"start":{"line":43,"column":7},"end":{"line":314,"column":1}},"loc":{"start":{"line":43,"column":7},"end":{"line":314,"column":1}},"line":43},"2":{"name":"refresh","decl":{"start":{"line":53,"column":18},"end":{"line":53,"column":62}},"loc":{"start":{"line":53,"column":18},"end":{"line":53,"column":62}},"line":53},"3":{"name":"onClick","decl":{"start":{"line":147,"column":23},"end":{"line":150,"column":16}},"loc":{"start":{"line":147,"column":23},"end":{"line":150,"column":16}},"line":147},"4":{"name":"onChange","decl":{"start":{"line":165,"column":26},"end":{"line":168,"column":18}},"loc":{"start":{"line":165,"column":26},"end":{"line":168,"column":18}},"line":165},"5":{"name":"onChange","decl":{"start":{"line":185,"column":26},"end":{"line":188,"column":18}},"loc":{"start":{"line":185,"column":26},"end":{"line":188,"column":18}},"line":185},"6":{"name":"cell","decl":{"start":{"line":213,"column":20},"end":{"line":216,"column":25}},"loc":{"start":{"line":213,"column":20},"end":{"line":216,"column":25}},"line":213},"7":{"name":"onClick","decl":{"start":{"line":214,"column":98},"end":{"line":214,"column":127}},"loc":{"start":{"line":214,"column":98},"end":{"line":214,"column":127}},"line":214},"8":{"name":"cell","decl":{"start":{"line":219,"column":40},"end":{"line":219,"column":62}},"loc":{"start":{"line":219,"column":40},"end":{"line":219,"column":62}},"line":219},"9":{"name":"cell","decl":{"start":{"line":220,"column":39},"end":{"line":220,"column":60}},"loc":{"start":{"line":220,"column":39},"end":{"line":220,"column":60}},"line":220},"10":{"name":"cell","decl":{"start":{"line":221,"column":37},"end":{"line":221,"column":79}},"loc":{"start":{"line":221,"column":37},"end":{"line":221,"column":79}},"line":221},"11":{"name":"cell","decl":{"start":{"line":222,"column":56},"end":{"line":222,"column":78}},"loc":{"start":{"line":222,"column":56},"end":{"line":222,"column":78}},"line":222},"12":{"name":"cell","decl":{"start":{"line":223,"column":41},"end":{"line":223,"column":66}},"loc":{"start":{"line":223,"column":41},"end":{"line":223,"column":66}},"line":223},"13":{"name":"rowKey","decl":{"start":{"line":226,"column":18},"end":{"line":226,"column":34}},"loc":{"start":{"line":226,"column":18},"end":{"line":226,"column":34}},"line":226}},"f":{"0":33,"1":44,"2":0,"3":4,"4":1,"5":1,"6":29,"7":6,"8":29,"9":29,"10":29,"11":29,"12":29,"13":29}} -,"/Users/omercelik/Repositories/goldpath/ui/console/src/RunConsole.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/RunConsole.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":57}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":97}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":28}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":108}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":1}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":62}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":56}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":58}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":50}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":74}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":73}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":58}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":54}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":19}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":20}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":10}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":15}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":24}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":26}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":25}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":74}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":8}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":75}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":18}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":19}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":6}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":15}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":19}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":23}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":20}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":10}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":18}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":46}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":81}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":18}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":19}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":6}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":36}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":31}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":53}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":67}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":47}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":6}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":34}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":4}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":64}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":19}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":25}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":27}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":13}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":5}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":20}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":10}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":25}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":55}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":81}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":18}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":19}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":6}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":44}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":62}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":38}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":80}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":3}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":10}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":57}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":55}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":15}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":82}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":46}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":34}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":19}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":39}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":58}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":66}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":146}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":17}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":30}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":46}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":39}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":16}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":35}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":119}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":21}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":13}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":14}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":16}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":17}},"122":{"start":{"line":123,"column":0},"end":{"line":123,"column":17}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":93}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":36}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":32}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":124}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":71}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":65}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":105}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":53}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":29}},"132":{"start":{"line":133,"column":0},"end":{"line":133,"column":35}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":56}},"134":{"start":{"line":135,"column":0},"end":{"line":135,"column":81}},"135":{"start":{"line":136,"column":0},"end":{"line":136,"column":36}},"136":{"start":{"line":137,"column":0},"end":{"line":137,"column":20}},"137":{"start":{"line":138,"column":0},"end":{"line":138,"column":33}},"138":{"start":{"line":139,"column":0},"end":{"line":139,"column":31}},"139":{"start":{"line":140,"column":0},"end":{"line":140,"column":36}},"140":{"start":{"line":141,"column":0},"end":{"line":141,"column":53}},"141":{"start":{"line":142,"column":0},"end":{"line":142,"column":82}},"142":{"start":{"line":143,"column":0},"end":{"line":143,"column":38}},"143":{"start":{"line":144,"column":0},"end":{"line":144,"column":22}},"145":{"start":{"line":146,"column":0},"end":{"line":146,"column":31}},"146":{"start":{"line":147,"column":0},"end":{"line":147,"column":35}},"147":{"start":{"line":148,"column":0},"end":{"line":148,"column":52}},"148":{"start":{"line":149,"column":0},"end":{"line":149,"column":81}},"149":{"start":{"line":150,"column":0},"end":{"line":150,"column":38}},"150":{"start":{"line":151,"column":0},"end":{"line":151,"column":33}},"151":{"start":{"line":152,"column":0},"end":{"line":152,"column":22}},"153":{"start":{"line":154,"column":0},"end":{"line":154,"column":23}},"154":{"start":{"line":155,"column":0},"end":{"line":155,"column":19}},"155":{"start":{"line":156,"column":0},"end":{"line":156,"column":15}},"156":{"start":{"line":157,"column":0},"end":{"line":157,"column":15}},"157":{"start":{"line":158,"column":0},"end":{"line":158,"column":18}},"160":{"start":{"line":161,"column":0},"end":{"line":161,"column":17}},"161":{"start":{"line":162,"column":0},"end":{"line":162,"column":17}},"162":{"start":{"line":163,"column":0},"end":{"line":163,"column":82}},"163":{"start":{"line":164,"column":0},"end":{"line":164,"column":34}},"164":{"start":{"line":165,"column":0},"end":{"line":165,"column":44}},"165":{"start":{"line":166,"column":0},"end":{"line":166,"column":22}},"166":{"start":{"line":167,"column":0},"end":{"line":167,"column":47}},"167":{"start":{"line":168,"column":0},"end":{"line":168,"column":118}},"168":{"start":{"line":169,"column":0},"end":{"line":169,"column":26}},"169":{"start":{"line":170,"column":0},"end":{"line":170,"column":25}},"170":{"start":{"line":171,"column":0},"end":{"line":171,"column":18}},"171":{"start":{"line":172,"column":0},"end":{"line":172,"column":60}},"172":{"start":{"line":173,"column":0},"end":{"line":173,"column":84}},"173":{"start":{"line":174,"column":0},"end":{"line":174,"column":111}},"174":{"start":{"line":175,"column":0},"end":{"line":175,"column":14}},"175":{"start":{"line":176,"column":0},"end":{"line":176,"column":31}},"176":{"start":{"line":177,"column":0},"end":{"line":177,"column":36}},"177":{"start":{"line":178,"column":0},"end":{"line":178,"column":63}},"178":{"start":{"line":179,"column":0},"end":{"line":179,"column":12}},"179":{"start":{"line":180,"column":0},"end":{"line":180,"column":18}},"182":{"start":{"line":183,"column":0},"end":{"line":183,"column":23}},"183":{"start":{"line":184,"column":0},"end":{"line":184,"column":90}},"184":{"start":{"line":185,"column":0},"end":{"line":185,"column":66}},"185":{"start":{"line":186,"column":0},"end":{"line":186,"column":105}},"186":{"start":{"line":187,"column":0},"end":{"line":187,"column":41}},"187":{"start":{"line":188,"column":0},"end":{"line":188,"column":25}},"188":{"start":{"line":189,"column":0},"end":{"line":189,"column":29}},"189":{"start":{"line":190,"column":0},"end":{"line":190,"column":56}},"190":{"start":{"line":191,"column":0},"end":{"line":191,"column":75}},"191":{"start":{"line":192,"column":0},"end":{"line":192,"column":32}},"192":{"start":{"line":193,"column":0},"end":{"line":193,"column":16}},"193":{"start":{"line":194,"column":0},"end":{"line":194,"column":55}},"194":{"start":{"line":195,"column":0},"end":{"line":195,"column":27}},"195":{"start":{"line":196,"column":0},"end":{"line":196,"column":38}},"198":{"start":{"line":199,"column":0},"end":{"line":199,"column":69}},"199":{"start":{"line":200,"column":0},"end":{"line":200,"column":83}},"200":{"start":{"line":201,"column":0},"end":{"line":201,"column":34}},"201":{"start":{"line":202,"column":0},"end":{"line":202,"column":18}},"203":{"start":{"line":204,"column":0},"end":{"line":204,"column":19}},"204":{"start":{"line":205,"column":0},"end":{"line":205,"column":16}},"206":{"start":{"line":207,"column":0},"end":{"line":207,"column":57}},"208":{"start":{"line":209,"column":0},"end":{"line":209,"column":87}},"209":{"start":{"line":210,"column":0},"end":{"line":210,"column":48}},"210":{"start":{"line":211,"column":0},"end":{"line":211,"column":82}},"211":{"start":{"line":212,"column":0},"end":{"line":212,"column":100}},"212":{"start":{"line":213,"column":0},"end":{"line":213,"column":33}},"213":{"start":{"line":214,"column":0},"end":{"line":214,"column":21}},"214":{"start":{"line":215,"column":0},"end":{"line":215,"column":15}},"215":{"start":{"line":216,"column":0},"end":{"line":216,"column":16}},"217":{"start":{"line":218,"column":0},"end":{"line":218,"column":66}},"218":{"start":{"line":219,"column":0},"end":{"line":219,"column":124}},"219":{"start":{"line":220,"column":0},"end":{"line":220,"column":15}},"220":{"start":{"line":221,"column":0},"end":{"line":221,"column":36}},"221":{"start":{"line":222,"column":0},"end":{"line":222,"column":56}},"222":{"start":{"line":223,"column":0},"end":{"line":223,"column":81}},"223":{"start":{"line":224,"column":0},"end":{"line":224,"column":68}},"224":{"start":{"line":225,"column":0},"end":{"line":225,"column":78}},"225":{"start":{"line":226,"column":0},"end":{"line":226,"column":69}},"226":{"start":{"line":227,"column":0},"end":{"line":227,"column":19}},"227":{"start":{"line":228,"column":0},"end":{"line":228,"column":15}},"228":{"start":{"line":229,"column":0},"end":{"line":229,"column":15}},"229":{"start":{"line":230,"column":0},"end":{"line":230,"column":18}},"231":{"start":{"line":232,"column":0},"end":{"line":232,"column":10}},"233":{"start":{"line":234,"column":0},"end":{"line":234,"column":1}}},"s":{"0":1,"12":4,"13":4,"14":4,"15":4,"22":1,"23":48,"24":48,"25":48,"26":48,"27":48,"28":48,"29":48,"31":48,"32":11,"33":11,"34":11,"35":11,"36":10,"37":10,"38":10,"39":11,"40":11,"41":11,"42":11,"43":11,"44":48,"46":48,"47":25,"48":14,"49":14,"50":14,"51":14,"52":14,"53":14,"54":14,"55":14,"56":48,"58":48,"59":48,"62":14,"63":14,"64":14,"65":48,"66":48,"68":48,"73":48,"74":20,"75":15,"76":15,"77":15,"79":5,"80":5,"81":5,"82":5,"83":5,"84":5,"85":5,"86":5,"87":48,"89":48,"91":48,"92":11,"93":11,"95":37,"96":37,"97":48,"99":48,"100":48,"101":48,"102":48,"103":43,"104":43,"105":43,"106":43,"107":43,"108":43,"109":43,"110":1,"111":1,"112":1,"114":43,"115":43,"116":43,"117":48,"118":48,"119":48,"121":48,"122":36,"123":36,"124":36,"125":36,"126":27,"127":27,"128":27,"129":27,"130":27,"131":27,"132":27,"133":27,"134":27,"135":27,"136":27,"137":27,"138":3,"139":3,"140":3,"141":3,"142":3,"143":3,"145":24,"146":24,"147":24,"148":24,"149":24,"150":24,"151":24,"153":27,"154":27,"155":36,"156":36,"157":36,"160":48,"161":36,"162":36,"163":36,"164":36,"165":36,"166":36,"167":20,"168":20,"169":20,"170":36,"171":36,"172":36,"173":36,"174":36,"175":36,"176":36,"177":36,"178":36,"179":36,"182":48,"183":7,"184":7,"185":7,"186":7,"187":7,"188":7,"189":7,"190":7,"191":7,"192":7,"193":7,"194":6,"195":6,"198":6,"199":6,"200":6,"201":6,"203":7,"204":7,"206":7,"208":7,"209":7,"210":7,"211":14,"212":14,"213":14,"214":7,"215":7,"217":7,"218":7,"219":7,"220":7,"221":7,"222":6,"223":6,"224":6,"225":6,"226":6,"227":7,"228":7,"229":7,"231":48,"233":48},"branchMap":{"0":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":0},"end":{"line":16,"column":1}},"locations":[{"start":{"line":13,"column":0},"end":{"line":16,"column":1}}]},"1":{"type":"branch","line":15,"loc":{"start":{"line":15,"column":16},"end":{"line":15,"column":63}},"locations":[{"start":{"line":15,"column":16},"end":{"line":15,"column":63}}]},"2":{"type":"branch","line":15,"loc":{"start":{"line":15,"column":59},"end":{"line":15,"column":108}},"locations":[{"start":{"line":15,"column":59},"end":{"line":15,"column":108}}]},"3":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":7},"end":{"line":234,"column":1}},"locations":[{"start":{"line":23,"column":7},"end":{"line":234,"column":1}}]},"4":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":24},"end":{"line":92,"column":37}},"locations":[{"start":{"line":92,"column":24},"end":{"line":92,"column":37}}]},"5":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":37},"end":{"line":94,"column":3}},"locations":[{"start":{"line":92,"column":37},"end":{"line":94,"column":3}}]},"6":{"type":"branch","line":94,"loc":{"start":{"line":94,"column":2},"end":{"line":98,"column":16}},"locations":[{"start":{"line":94,"column":2},"end":{"line":98,"column":16}}]},"7":{"type":"branch","line":98,"loc":{"start":{"line":98,"column":7},"end":{"line":98,"column":55}},"locations":[{"start":{"line":98,"column":7},"end":{"line":98,"column":55}}]},"8":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":7},"end":{"line":158,"column":18}},"locations":[{"start":{"line":122,"column":7},"end":{"line":158,"column":18}}]},"9":{"type":"branch","line":161,"loc":{"start":{"line":161,"column":7},"end":{"line":180,"column":18}},"locations":[{"start":{"line":161,"column":7},"end":{"line":180,"column":18}}]},"10":{"type":"branch","line":183,"loc":{"start":{"line":183,"column":7},"end":{"line":230,"column":18}},"locations":[{"start":{"line":183,"column":7},"end":{"line":230,"column":18}}]},"11":{"type":"branch","line":194,"loc":{"start":{"line":194,"column":49},"end":{"line":202,"column":18}},"locations":[{"start":{"line":194,"column":49},"end":{"line":202,"column":18}}]},"12":{"type":"branch","line":219,"loc":{"start":{"line":219,"column":61},"end":{"line":219,"column":78}},"locations":[{"start":{"line":219,"column":61},"end":{"line":219,"column":78}}]},"13":{"type":"branch","line":219,"loc":{"start":{"line":219,"column":65},"end":{"line":219,"column":124}},"locations":[{"start":{"line":219,"column":65},"end":{"line":219,"column":124}}]},"14":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":12},"end":{"line":45,"column":5}},"locations":[{"start":{"line":32,"column":12},"end":{"line":45,"column":5}}]},"15":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":12},"end":{"line":40,"column":7}},"locations":[{"start":{"line":36,"column":12},"end":{"line":40,"column":7}}]},"16":{"type":"branch","line":37,"loc":{"start":{"line":37,"column":19},"end":{"line":37,"column":26}},"locations":[{"start":{"line":37,"column":19},"end":{"line":37,"column":26}}]},"17":{"type":"branch","line":39,"loc":{"start":{"line":39,"column":17},"end":{"line":39,"column":72}},"locations":[{"start":{"line":39,"column":17},"end":{"line":39,"column":72}}]},"18":{"type":"branch","line":39,"loc":{"start":{"line":39,"column":51},"end":{"line":39,"column":72}},"locations":[{"start":{"line":39,"column":51},"end":{"line":39,"column":72}}]},"19":{"type":"branch","line":41,"loc":{"start":{"line":41,"column":13},"end":{"line":41,"column":73}},"locations":[{"start":{"line":41,"column":13},"end":{"line":41,"column":73}}]},"20":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":11},"end":{"line":44,"column":6}},"locations":[{"start":{"line":42,"column":11},"end":{"line":44,"column":6}}]},"21":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":12},"end":{"line":57,"column":5}},"locations":[{"start":{"line":47,"column":12},"end":{"line":57,"column":5}}]},"22":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":16},"end":{"line":48,"column":23}},"locations":[{"start":{"line":48,"column":16},"end":{"line":48,"column":23}}]},"23":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":16},"end":{"line":56,"column":6}},"locations":[{"start":{"line":48,"column":16},"end":{"line":56,"column":6}}]},"24":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":12},"end":{"line":52,"column":45}},"locations":[{"start":{"line":52,"column":12},"end":{"line":52,"column":45}}]},"25":{"type":"branch","line":54,"loc":{"start":{"line":54,"column":11},"end":{"line":56,"column":6}},"locations":[{"start":{"line":54,"column":11},"end":{"line":56,"column":6}}]},"26":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":4},"end":{"line":65,"column":6}},"locations":[{"start":{"line":60,"column":4},"end":{"line":65,"column":6}}]},"27":{"type":"branch","line":63,"loc":{"start":{"line":63,"column":60},"end":{"line":63,"column":67}},"locations":[{"start":{"line":63,"column":60},"end":{"line":63,"column":67}}]},"28":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":18},"end":{"line":69,"column":64}},"locations":[{"start":{"line":69,"column":18},"end":{"line":69,"column":64}}]},"29":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":12},"end":{"line":88,"column":5}},"locations":[{"start":{"line":74,"column":12},"end":{"line":88,"column":5}}]},"30":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":24},"end":{"line":78,"column":5}},"locations":[{"start":{"line":75,"column":24},"end":{"line":78,"column":5}}]},"31":{"type":"branch","line":78,"loc":{"start":{"line":78,"column":4},"end":{"line":87,"column":6}},"locations":[{"start":{"line":78,"column":4},"end":{"line":87,"column":6}}]},"32":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":12},"end":{"line":83,"column":54}},"locations":[{"start":{"line":83,"column":12},"end":{"line":83,"column":54}}]},"33":{"type":"branch","line":85,"loc":{"start":{"line":85,"column":11},"end":{"line":87,"column":6}},"locations":[{"start":{"line":85,"column":11},"end":{"line":87,"column":6}}]},"34":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":18},"end":{"line":90,"column":62}},"locations":[{"start":{"line":90,"column":18},"end":{"line":90,"column":62}}]},"35":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":40},"end":{"line":90,"column":60}},"locations":[{"start":{"line":90,"column":40},"end":{"line":90,"column":60}}]},"36":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":22},"end":{"line":117,"column":21}},"locations":[{"start":{"line":103,"column":22},"end":{"line":117,"column":21}}]},"37":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":40},"end":{"line":108,"column":101}},"locations":[{"start":{"line":108,"column":40},"end":{"line":108,"column":101}}]},"38":{"type":"branch","line":108,"loc":{"start":{"line":108,"column":48},"end":{"line":108,"column":146}},"locations":[{"start":{"line":108,"column":48},"end":{"line":108,"column":146}}]},"39":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":94},"end":{"line":116,"column":106}},"locations":[{"start":{"line":116,"column":94},"end":{"line":116,"column":106}}]},"40":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":23},"end":{"line":113,"column":16}},"locations":[{"start":{"line":110,"column":23},"end":{"line":113,"column":16}}]},"41":{"type":"branch","line":126,"loc":{"start":{"line":126,"column":22},"end":{"line":155,"column":19}},"locations":[{"start":{"line":126,"column":22},"end":{"line":155,"column":19}}]},"42":{"type":"branch","line":129,"loc":{"start":{"line":129,"column":21},"end":{"line":129,"column":65}},"locations":[{"start":{"line":129,"column":21},"end":{"line":129,"column":65}}]},"43":{"type":"branch","line":130,"loc":{"start":{"line":130,"column":21},"end":{"line":130,"column":105}},"locations":[{"start":{"line":130,"column":21},"end":{"line":130,"column":105}}]},"44":{"type":"branch","line":138,"loc":{"start":{"line":138,"column":23},"end":{"line":144,"column":22}},"locations":[{"start":{"line":138,"column":23},"end":{"line":144,"column":22}}]},"45":{"type":"branch","line":144,"loc":{"start":{"line":144,"column":20},"end":{"line":152,"column":22}},"locations":[{"start":{"line":144,"column":20},"end":{"line":152,"column":22}}]},"46":{"type":"branch","line":135,"loc":{"start":{"line":135,"column":29},"end":{"line":135,"column":81}},"locations":[{"start":{"line":135,"column":29},"end":{"line":135,"column":81}}]},"47":{"type":"branch","line":142,"loc":{"start":{"line":142,"column":31},"end":{"line":142,"column":82}},"locations":[{"start":{"line":142,"column":31},"end":{"line":142,"column":82}}]},"48":{"type":"branch","line":167,"loc":{"start":{"line":167,"column":37},"end":{"line":170,"column":25}},"locations":[{"start":{"line":167,"column":37},"end":{"line":170,"column":25}}]},"49":{"type":"branch","line":168,"loc":{"start":{"line":168,"column":98},"end":{"line":168,"column":118}},"locations":[{"start":{"line":168,"column":98},"end":{"line":168,"column":118}}]},"50":{"type":"branch","line":172,"loc":{"start":{"line":172,"column":37},"end":{"line":172,"column":58}},"locations":[{"start":{"line":172,"column":37},"end":{"line":172,"column":58}}]},"51":{"type":"branch","line":173,"loc":{"start":{"line":173,"column":39},"end":{"line":173,"column":82}},"locations":[{"start":{"line":173,"column":39},"end":{"line":173,"column":82}}]},"52":{"type":"branch","line":174,"loc":{"start":{"line":174,"column":56},"end":{"line":174,"column":109}},"locations":[{"start":{"line":174,"column":56},"end":{"line":174,"column":109}}]},"53":{"type":"branch","line":177,"loc":{"start":{"line":177,"column":20},"end":{"line":177,"column":36}},"locations":[{"start":{"line":177,"column":20},"end":{"line":177,"column":36}}]},"54":{"type":"branch","line":200,"loc":{"start":{"line":200,"column":27},"end":{"line":200,"column":83}},"locations":[{"start":{"line":200,"column":27},"end":{"line":200,"column":83}}]},"55":{"type":"branch","line":211,"loc":{"start":{"line":211,"column":60},"end":{"line":214,"column":21}},"locations":[{"start":{"line":211,"column":60},"end":{"line":214,"column":21}}]},"56":{"type":"branch","line":222,"loc":{"start":{"line":222,"column":42},"end":{"line":227,"column":19}},"locations":[{"start":{"line":222,"column":42},"end":{"line":227,"column":19}}]}},"b":{"0":[4],"1":[3],"2":[1],"3":[48],"4":[12],"5":[11],"6":[37],"7":[1],"8":[36],"9":[36],"10":[7],"11":[6],"12":[1],"13":[6],"14":[11],"15":[10],"16":[0],"17":[9],"18":[0],"19":[1],"20":[11],"21":[25],"22":[11],"23":[14],"24":[14],"25":[14],"26":[14],"27":[0],"28":[4],"29":[20],"30":[15],"31":[5],"32":[5],"33":[5],"34":[4],"35":[4],"36":[43],"37":[36],"38":[7],"39":[0],"40":[1],"41":[27],"42":[3],"43":[0],"44":[3],"45":[24],"46":[2],"47":[1],"48":[20],"49":[4],"50":[20],"51":[20],"52":[20],"53":[20],"54":[1],"55":[14],"56":[6]},"fnMap":{"0":{"name":"asOutcome","decl":{"start":{"line":13,"column":0},"end":{"line":16,"column":1}},"loc":{"start":{"line":13,"column":0},"end":{"line":16,"column":1}},"line":13},"1":{"name":"RunConsole","decl":{"start":{"line":23,"column":7},"end":{"line":234,"column":1}},"loc":{"start":{"line":23,"column":7},"end":{"line":234,"column":1}},"line":23},"2":{"name":"openRun","decl":{"start":{"line":69,"column":18},"end":{"line":69,"column":64}},"loc":{"start":{"line":69,"column":18},"end":{"line":69,"column":64}},"line":69},"3":{"name":"refresh","decl":{"start":{"line":90,"column":18},"end":{"line":90,"column":62}},"loc":{"start":{"line":90,"column":18},"end":{"line":90,"column":62}},"line":90},"4":{"name":"onClick","decl":{"start":{"line":110,"column":23},"end":{"line":113,"column":16}},"loc":{"start":{"line":110,"column":23},"end":{"line":113,"column":16}},"line":110},"5":{"name":"execute","decl":{"start":{"line":135,"column":29},"end":{"line":135,"column":81}},"loc":{"start":{"line":135,"column":29},"end":{"line":135,"column":81}},"line":135},"6":{"name":"execute","decl":{"start":{"line":142,"column":31},"end":{"line":142,"column":82}},"loc":{"start":{"line":142,"column":31},"end":{"line":142,"column":82}},"line":142},"7":{"name":"execute","decl":{"start":{"line":149,"column":31},"end":{"line":149,"column":81}},"loc":{"start":{"line":149,"column":31},"end":{"line":149,"column":81}},"line":149},"8":{"name":"cell","decl":{"start":{"line":167,"column":37},"end":{"line":170,"column":25}},"loc":{"start":{"line":167,"column":37},"end":{"line":170,"column":25}},"line":167},"9":{"name":"onClick","decl":{"start":{"line":168,"column":98},"end":{"line":168,"column":118}},"loc":{"start":{"line":168,"column":98},"end":{"line":168,"column":118}},"line":168},"10":{"name":"cell","decl":{"start":{"line":172,"column":37},"end":{"line":172,"column":58}},"loc":{"start":{"line":172,"column":37},"end":{"line":172,"column":58}},"line":172},"11":{"name":"cell","decl":{"start":{"line":173,"column":39},"end":{"line":173,"column":82}},"loc":{"start":{"line":173,"column":39},"end":{"line":173,"column":82}},"line":173},"12":{"name":"cell","decl":{"start":{"line":174,"column":56},"end":{"line":174,"column":109}},"loc":{"start":{"line":174,"column":56},"end":{"line":174,"column":109}},"line":174},"13":{"name":"rowKey","decl":{"start":{"line":177,"column":20},"end":{"line":177,"column":36}},"loc":{"start":{"line":177,"column":20},"end":{"line":177,"column":36}},"line":177},"14":{"name":"execute","decl":{"start":{"line":191,"column":25},"end":{"line":191,"column":75}},"loc":{"start":{"line":191,"column":25},"end":{"line":191,"column":75}},"line":191},"15":{"name":"execute","decl":{"start":{"line":200,"column":27},"end":{"line":200,"column":83}},"loc":{"start":{"line":200,"column":27},"end":{"line":200,"column":83}},"line":200}},"f":{"0":4,"1":48,"2":4,"3":4,"4":1,"5":2,"6":1,"7":0,"8":20,"9":4,"10":20,"11":20,"12":20,"13":20,"14":0,"15":1}} -,"/Users/omercelik/Repositories/goldpath/ui/console/src/adminClient.ts": {"path":"/Users/omercelik/Repositories/goldpath/ui/console/src/adminClient.ts","all":false,"statementMap":{"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":89}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":43}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":38}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":51}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":43}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":57}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":40}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":2}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":80}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":7}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":106}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":53}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":11}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":21}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":3}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":1}},"299":{"start":{"line":300,"column":0},"end":{"line":300,"column":43}},"300":{"start":{"line":301,"column":0},"end":{"line":301,"column":64}},"301":{"start":{"line":302,"column":0},"end":{"line":302,"column":41}},"302":{"start":{"line":303,"column":0},"end":{"line":303,"column":33}},"303":{"start":{"line":304,"column":0},"end":{"line":304,"column":3}},"304":{"start":{"line":305,"column":0},"end":{"line":305,"column":1}},"306":{"start":{"line":307,"column":0},"end":{"line":307,"column":26}},"307":{"start":{"line":308,"column":0},"end":{"line":308,"column":35}},"308":{"start":{"line":309,"column":0},"end":{"line":309,"column":41}},"310":{"start":{"line":311,"column":0},"end":{"line":311,"column":49}},"311":{"start":{"line":312,"column":0},"end":{"line":312,"column":62}},"316":{"start":{"line":317,"column":0},"end":{"line":317,"column":87}},"317":{"start":{"line":318,"column":0},"end":{"line":318,"column":3}},"319":{"start":{"line":320,"column":0},"end":{"line":320,"column":51}},"320":{"start":{"line":321,"column":0},"end":{"line":321,"column":68}},"321":{"start":{"line":322,"column":0},"end":{"line":322,"column":46}},"322":{"start":{"line":323,"column":0},"end":{"line":323,"column":29}},"323":{"start":{"line":324,"column":0},"end":{"line":324,"column":7}},"324":{"start":{"line":325,"column":0},"end":{"line":325,"column":71}},"325":{"start":{"line":326,"column":0},"end":{"line":326,"column":40}},"326":{"start":{"line":327,"column":0},"end":{"line":327,"column":3}},"339":{"start":{"line":340,"column":0},"end":{"line":340,"column":73}},"340":{"start":{"line":341,"column":0},"end":{"line":341,"column":38}},"341":{"start":{"line":342,"column":0},"end":{"line":342,"column":37}},"342":{"start":{"line":343,"column":0},"end":{"line":343,"column":13}},"343":{"start":{"line":344,"column":0},"end":{"line":344,"column":82}},"344":{"start":{"line":345,"column":0},"end":{"line":345,"column":52}},"345":{"start":{"line":346,"column":0},"end":{"line":346,"column":35}},"346":{"start":{"line":347,"column":0},"end":{"line":347,"column":13}},"347":{"start":{"line":348,"column":0},"end":{"line":348,"column":98}},"348":{"start":{"line":349,"column":0},"end":{"line":349,"column":67}},"349":{"start":{"line":350,"column":0},"end":{"line":350,"column":115}},"350":{"start":{"line":351,"column":0},"end":{"line":351,"column":11}},"352":{"start":{"line":353,"column":0},"end":{"line":353,"column":40}},"353":{"start":{"line":354,"column":0},"end":{"line":354,"column":113}},"354":{"start":{"line":355,"column":0},"end":{"line":355,"column":11}},"356":{"start":{"line":357,"column":0},"end":{"line":357,"column":95}},"357":{"start":{"line":358,"column":0},"end":{"line":358,"column":17}},"358":{"start":{"line":359,"column":0},"end":{"line":359,"column":106}},"359":{"start":{"line":360,"column":0},"end":{"line":360,"column":9}},"360":{"start":{"line":361,"column":0},"end":{"line":361,"column":9}},"361":{"start":{"line":362,"column":0},"end":{"line":362,"column":6}},"362":{"start":{"line":363,"column":0},"end":{"line":363,"column":73}},"363":{"start":{"line":364,"column":0},"end":{"line":364,"column":3}},"365":{"start":{"line":366,"column":0},"end":{"line":366,"column":34}},"366":{"start":{"line":367,"column":0},"end":{"line":367,"column":64}},"367":{"start":{"line":368,"column":0},"end":{"line":368,"column":3}},"369":{"start":{"line":370,"column":0},"end":{"line":370,"column":43}},"370":{"start":{"line":371,"column":0},"end":{"line":371,"column":96}},"371":{"start":{"line":372,"column":0},"end":{"line":372,"column":3}},"373":{"start":{"line":374,"column":0},"end":{"line":374,"column":93}},"374":{"start":{"line":375,"column":0},"end":{"line":375,"column":40}},"375":{"start":{"line":376,"column":0},"end":{"line":376,"column":51}},"377":{"start":{"line":378,"column":0},"end":{"line":378,"column":78}},"378":{"start":{"line":379,"column":0},"end":{"line":379,"column":34}},"379":{"start":{"line":380,"column":0},"end":{"line":380,"column":90}},"380":{"start":{"line":381,"column":0},"end":{"line":381,"column":6}},"381":{"start":{"line":382,"column":0},"end":{"line":382,"column":3}},"383":{"start":{"line":384,"column":0},"end":{"line":384,"column":42}},"384":{"start":{"line":385,"column":0},"end":{"line":385,"column":89}},"385":{"start":{"line":386,"column":0},"end":{"line":386,"column":3}},"388":{"start":{"line":389,"column":0},"end":{"line":389,"column":67}},"389":{"start":{"line":390,"column":0},"end":{"line":390,"column":68}},"390":{"start":{"line":391,"column":0},"end":{"line":391,"column":21}},"391":{"start":{"line":392,"column":0},"end":{"line":392,"column":29}},"392":{"start":{"line":393,"column":0},"end":{"line":393,"column":136}},"393":{"start":{"line":394,"column":0},"end":{"line":394,"column":66}},"394":{"start":{"line":395,"column":0},"end":{"line":395,"column":7}},"395":{"start":{"line":396,"column":0},"end":{"line":396,"column":61}},"396":{"start":{"line":397,"column":0},"end":{"line":397,"column":52}},"397":{"start":{"line":398,"column":0},"end":{"line":398,"column":5}},"399":{"start":{"line":400,"column":0},"end":{"line":400,"column":53}},"400":{"start":{"line":401,"column":0},"end":{"line":401,"column":3}},"402":{"start":{"line":403,"column":0},"end":{"line":403,"column":64}},"403":{"start":{"line":404,"column":0},"end":{"line":404,"column":121}},"404":{"start":{"line":405,"column":0},"end":{"line":405,"column":3}},"406":{"start":{"line":407,"column":0},"end":{"line":407,"column":62}},"407":{"start":{"line":408,"column":0},"end":{"line":408,"column":119}},"408":{"start":{"line":409,"column":0},"end":{"line":409,"column":3}},"410":{"start":{"line":411,"column":0},"end":{"line":411,"column":63}},"411":{"start":{"line":412,"column":0},"end":{"line":412,"column":120}},"412":{"start":{"line":413,"column":0},"end":{"line":413,"column":3}},"414":{"start":{"line":415,"column":0},"end":{"line":415,"column":46}},"415":{"start":{"line":416,"column":0},"end":{"line":416,"column":85}},"416":{"start":{"line":417,"column":0},"end":{"line":417,"column":3}},"423":{"start":{"line":424,"column":0},"end":{"line":424,"column":52}},"424":{"start":{"line":425,"column":0},"end":{"line":425,"column":92}},"425":{"start":{"line":426,"column":0},"end":{"line":426,"column":3}},"427":{"start":{"line":428,"column":0},"end":{"line":428,"column":54}},"428":{"start":{"line":429,"column":0},"end":{"line":429,"column":80}},"429":{"start":{"line":430,"column":0},"end":{"line":430,"column":3}},"438":{"start":{"line":439,"column":0},"end":{"line":439,"column":90}},"439":{"start":{"line":440,"column":0},"end":{"line":440,"column":40}},"440":{"start":{"line":441,"column":0},"end":{"line":441,"column":57}},"441":{"start":{"line":442,"column":0},"end":{"line":442,"column":78}},"442":{"start":{"line":443,"column":0},"end":{"line":443,"column":89}},"443":{"start":{"line":444,"column":0},"end":{"line":444,"column":3}},"446":{"start":{"line":447,"column":0},"end":{"line":447,"column":108}},"447":{"start":{"line":448,"column":0},"end":{"line":448,"column":40}},"448":{"start":{"line":449,"column":0},"end":{"line":449,"column":57}},"449":{"start":{"line":450,"column":0},"end":{"line":450,"column":79}},"450":{"start":{"line":451,"column":0},"end":{"line":451,"column":36}},"451":{"start":{"line":452,"column":0},"end":{"line":452,"column":95}},"452":{"start":{"line":453,"column":0},"end":{"line":453,"column":6}},"453":{"start":{"line":454,"column":0},"end":{"line":454,"column":3}},"455":{"start":{"line":456,"column":0},"end":{"line":456,"column":70}},"456":{"start":{"line":457,"column":0},"end":{"line":457,"column":116}},"457":{"start":{"line":458,"column":0},"end":{"line":458,"column":3}},"459":{"start":{"line":460,"column":0},"end":{"line":460,"column":68}},"461":{"start":{"line":462,"column":0},"end":{"line":462,"column":101}},"462":{"start":{"line":463,"column":0},"end":{"line":463,"column":3}},"468":{"start":{"line":469,"column":0},"end":{"line":469,"column":94}},"469":{"start":{"line":470,"column":0},"end":{"line":470,"column":63}},"470":{"start":{"line":471,"column":0},"end":{"line":471,"column":44}},"471":{"start":{"line":472,"column":0},"end":{"line":472,"column":103}},"472":{"start":{"line":473,"column":0},"end":{"line":473,"column":68}},"473":{"start":{"line":474,"column":0},"end":{"line":474,"column":21}},"474":{"start":{"line":475,"column":0},"end":{"line":475,"column":29}},"475":{"start":{"line":476,"column":0},"end":{"line":476,"column":90}},"476":{"start":{"line":477,"column":0},"end":{"line":477,"column":17}},"477":{"start":{"line":478,"column":0},"end":{"line":478,"column":7}},"478":{"start":{"line":479,"column":0},"end":{"line":479,"column":71}},"479":{"start":{"line":480,"column":0},"end":{"line":480,"column":52}},"480":{"start":{"line":481,"column":0},"end":{"line":481,"column":3}},"482":{"start":{"line":483,"column":0},"end":{"line":483,"column":50}},"483":{"start":{"line":484,"column":0},"end":{"line":484,"column":98}},"484":{"start":{"line":485,"column":0},"end":{"line":485,"column":3}},"486":{"start":{"line":487,"column":0},"end":{"line":487,"column":87}},"487":{"start":{"line":488,"column":0},"end":{"line":488,"column":40}},"488":{"start":{"line":489,"column":0},"end":{"line":489,"column":57}},"489":{"start":{"line":490,"column":0},"end":{"line":490,"column":78}},"490":{"start":{"line":491,"column":0},"end":{"line":491,"column":85}},"491":{"start":{"line":492,"column":0},"end":{"line":492,"column":3}},"493":{"start":{"line":494,"column":0},"end":{"line":494,"column":47}},"494":{"start":{"line":495,"column":0},"end":{"line":495,"column":88}},"495":{"start":{"line":496,"column":0},"end":{"line":496,"column":3}},"498":{"start":{"line":499,"column":0},"end":{"line":499,"column":75}},"499":{"start":{"line":500,"column":0},"end":{"line":500,"column":42}},"500":{"start":{"line":501,"column":0},"end":{"line":501,"column":109}},"501":{"start":{"line":502,"column":0},"end":{"line":502,"column":6}},"502":{"start":{"line":503,"column":0},"end":{"line":503,"column":3}},"504":{"start":{"line":505,"column":0},"end":{"line":505,"column":72}},"505":{"start":{"line":506,"column":0},"end":{"line":506,"column":42}},"506":{"start":{"line":507,"column":0},"end":{"line":507,"column":106}},"507":{"start":{"line":508,"column":0},"end":{"line":508,"column":6}},"508":{"start":{"line":509,"column":0},"end":{"line":509,"column":3}},"510":{"start":{"line":511,"column":0},"end":{"line":511,"column":51}},"511":{"start":{"line":512,"column":0},"end":{"line":512,"column":85}},"512":{"start":{"line":513,"column":0},"end":{"line":513,"column":3}},"514":{"start":{"line":515,"column":0},"end":{"line":515,"column":52}},"515":{"start":{"line":516,"column":0},"end":{"line":516,"column":86}},"516":{"start":{"line":517,"column":0},"end":{"line":517,"column":3}},"518":{"start":{"line":519,"column":0},"end":{"line":519,"column":67}},"520":{"start":{"line":521,"column":0},"end":{"line":521,"column":93}},"521":{"start":{"line":522,"column":0},"end":{"line":522,"column":3}},"523":{"start":{"line":524,"column":0},"end":{"line":524,"column":79}},"524":{"start":{"line":525,"column":0},"end":{"line":525,"column":91}},"525":{"start":{"line":526,"column":0},"end":{"line":526,"column":3}},"527":{"start":{"line":528,"column":0},"end":{"line":528,"column":66}},"528":{"start":{"line":529,"column":0},"end":{"line":529,"column":92}},"529":{"start":{"line":530,"column":0},"end":{"line":530,"column":3}},"531":{"start":{"line":532,"column":0},"end":{"line":532,"column":114}},"532":{"start":{"line":533,"column":0},"end":{"line":533,"column":40}},"533":{"start":{"line":534,"column":0},"end":{"line":534,"column":57}},"534":{"start":{"line":535,"column":0},"end":{"line":535,"column":66}},"535":{"start":{"line":536,"column":0},"end":{"line":536,"column":78}},"536":{"start":{"line":537,"column":0},"end":{"line":537,"column":106}},"537":{"start":{"line":538,"column":0},"end":{"line":538,"column":3}},"539":{"start":{"line":540,"column":0},"end":{"line":540,"column":55}},"540":{"start":{"line":541,"column":0},"end":{"line":541,"column":110}},"541":{"start":{"line":542,"column":0},"end":{"line":542,"column":3}},"544":{"start":{"line":545,"column":0},"end":{"line":545,"column":69}},"545":{"start":{"line":546,"column":0},"end":{"line":546,"column":126}},"546":{"start":{"line":547,"column":0},"end":{"line":547,"column":3}},"548":{"start":{"line":549,"column":0},"end":{"line":549,"column":65}},"549":{"start":{"line":550,"column":0},"end":{"line":550,"column":122}},"550":{"start":{"line":551,"column":0},"end":{"line":551,"column":3}},"552":{"start":{"line":553,"column":0},"end":{"line":553,"column":60}},"553":{"start":{"line":554,"column":0},"end":{"line":554,"column":87}},"554":{"start":{"line":555,"column":0},"end":{"line":555,"column":3}},"557":{"start":{"line":558,"column":0},"end":{"line":558,"column":85}},"558":{"start":{"line":559,"column":0},"end":{"line":559,"column":114}},"559":{"start":{"line":560,"column":0},"end":{"line":560,"column":68}},"560":{"start":{"line":561,"column":0},"end":{"line":561,"column":46}},"561":{"start":{"line":562,"column":0},"end":{"line":562,"column":29}},"562":{"start":{"line":563,"column":0},"end":{"line":563,"column":7}},"563":{"start":{"line":564,"column":0},"end":{"line":564,"column":94}},"564":{"start":{"line":565,"column":0},"end":{"line":565,"column":71}},"565":{"start":{"line":566,"column":0},"end":{"line":566,"column":51}},"566":{"start":{"line":567,"column":0},"end":{"line":567,"column":3}},"568":{"start":{"line":569,"column":0},"end":{"line":569,"column":66}},"569":{"start":{"line":570,"column":0},"end":{"line":570,"column":128}},"570":{"start":{"line":571,"column":0},"end":{"line":571,"column":87}},"571":{"start":{"line":572,"column":0},"end":{"line":572,"column":3}},"573":{"start":{"line":574,"column":0},"end":{"line":574,"column":50}},"574":{"start":{"line":575,"column":0},"end":{"line":575,"column":115}},"575":{"start":{"line":576,"column":0},"end":{"line":576,"column":3}},"577":{"start":{"line":578,"column":0},"end":{"line":578,"column":91}},"579":{"start":{"line":580,"column":0},"end":{"line":580,"column":142}},"580":{"start":{"line":581,"column":0},"end":{"line":581,"column":3}},"582":{"start":{"line":583,"column":0},"end":{"line":583,"column":67}},"583":{"start":{"line":584,"column":0},"end":{"line":584,"column":132}},"584":{"start":{"line":585,"column":0},"end":{"line":585,"column":3}},"586":{"start":{"line":587,"column":0},"end":{"line":587,"column":101}},"587":{"start":{"line":588,"column":0},"end":{"line":588,"column":21}},"588":{"start":{"line":589,"column":0},"end":{"line":589,"column":108}},"589":{"start":{"line":590,"column":0},"end":{"line":590,"column":45}},"590":{"start":{"line":591,"column":0},"end":{"line":591,"column":6}},"591":{"start":{"line":592,"column":0},"end":{"line":592,"column":3}},"597":{"start":{"line":598,"column":0},"end":{"line":598,"column":66}},"598":{"start":{"line":599,"column":0},"end":{"line":599,"column":98}},"599":{"start":{"line":600,"column":0},"end":{"line":600,"column":68}},"600":{"start":{"line":601,"column":0},"end":{"line":601,"column":21}},"601":{"start":{"line":602,"column":0},"end":{"line":602,"column":29}},"602":{"start":{"line":603,"column":0},"end":{"line":603,"column":46}},"603":{"start":{"line":604,"column":0},"end":{"line":604,"column":7}},"604":{"start":{"line":605,"column":0},"end":{"line":605,"column":71}},"605":{"start":{"line":606,"column":0},"end":{"line":606,"column":53}},"606":{"start":{"line":607,"column":0},"end":{"line":607,"column":3}},"607":{"start":{"line":608,"column":0},"end":{"line":608,"column":1}}},"s":{"12":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"43":16,"44":16,"45":16,"46":16,"47":16,"48":4,"49":4,"50":16,"299":1,"300":1,"301":20,"302":20,"303":20,"304":1,"306":1,"307":1,"308":94,"310":1,"311":94,"316":94,"317":94,"319":1,"320":313,"321":313,"322":313,"323":313,"324":313,"325":300,"326":313,"339":1,"340":15,"341":15,"342":75,"343":75,"344":75,"345":75,"346":75,"347":75,"348":75,"349":8,"350":8,"352":75,"353":8,"354":8,"356":75,"357":75,"358":5,"359":5,"360":15,"361":15,"362":15,"363":15,"365":1,"366":12,"367":12,"369":1,"370":15,"371":15,"373":1,"374":16,"375":16,"377":16,"378":16,"379":16,"380":16,"381":16,"383":1,"384":5,"385":5,"388":1,"389":25,"390":25,"391":25,"392":25,"393":25,"394":25,"395":25,"396":20,"397":20,"399":5,"400":25,"402":1,"403":4,"404":4,"406":1,"407":1,"408":1,"410":1,"411":1,"412":1,"414":1,"415":2,"416":2,"423":1,"424":1,"425":1,"427":1,"428":23,"429":23,"438":1,"439":24,"440":24,"441":24,"442":24,"443":24,"446":1,"447":15,"448":15,"449":15,"450":15,"451":15,"452":15,"453":15,"455":1,"456":4,"457":4,"459":1,"461":1,"462":1,"468":1,"469":2,"470":2,"471":2,"472":2,"473":2,"474":2,"475":2,"476":2,"477":2,"478":2,"479":1,"480":2,"482":1,"483":15,"484":15,"486":1,"487":25,"488":25,"489":25,"490":25,"491":25,"493":1,"494":20,"495":20,"498":1,"499":20,"500":20,"501":20,"502":20,"504":1,"505":20,"506":20,"507":20,"508":20,"510":1,"511":4,"512":4,"514":1,"515":1,"516":1,"518":1,"520":1,"521":1,"523":1,"524":1,"525":1,"527":1,"528":13,"529":13,"531":1,"532":15,"533":15,"534":15,"535":15,"536":15,"537":15,"539":1,"540":7,"541":7,"544":1,"545":2,"546":2,"548":1,"549":2,"550":2,"552":1,"553":21,"554":21,"557":1,"558":14,"559":14,"560":14,"561":14,"562":14,"563":14,"564":14,"565":13,"566":14,"568":1,"569":22,"570":22,"571":22,"573":1,"574":21,"575":21,"577":1,"579":1,"580":1,"582":1,"583":2,"584":2,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"597":1,"598":4,"599":4,"600":4,"601":4,"602":4,"603":4,"604":4,"605":3,"606":4,"607":1},"branchMap":{"0":{"type":"branch","line":44,"loc":{"start":{"line":44,"column":0},"end":{"line":51,"column":1}},"locations":[{"start":{"line":44,"column":0},"end":{"line":51,"column":1}}]},"1":{"type":"branch","line":46,"loc":{"start":{"line":46,"column":46},"end":{"line":47,"column":27}},"locations":[{"start":{"line":46,"column":46},"end":{"line":47,"column":27}}]},"2":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":16},"end":{"line":47,"column":42}},"locations":[{"start":{"line":47,"column":16},"end":{"line":47,"column":42}}]},"3":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":32},"end":{"line":47,"column":53}},"locations":[{"start":{"line":47,"column":32},"end":{"line":47,"column":53}}]},"4":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":2},"end":{"line":50,"column":3}},"locations":[{"start":{"line":48,"column":2},"end":{"line":50,"column":3}}]},"5":{"type":"branch","line":301,"loc":{"start":{"line":301,"column":2},"end":{"line":304,"column":3}},"locations":[{"start":{"line":301,"column":2},"end":{"line":304,"column":3}}]},"6":{"type":"branch","line":308,"loc":{"start":{"line":308,"column":19},"end":{"line":309,"column":41}},"locations":[{"start":{"line":308,"column":19},"end":{"line":309,"column":41}}]},"7":{"type":"branch","line":311,"loc":{"start":{"line":311,"column":2},"end":{"line":318,"column":3}},"locations":[{"start":{"line":311,"column":2},"end":{"line":318,"column":3}}]},"8":{"type":"branch","line":317,"loc":{"start":{"line":317,"column":27},"end":{"line":317,"column":87}},"locations":[{"start":{"line":317,"column":27},"end":{"line":317,"column":87}}]},"9":{"type":"branch","line":317,"loc":{"start":{"line":317,"column":39},"end":{"line":317,"column":87}},"locations":[{"start":{"line":317,"column":39},"end":{"line":317,"column":87}}]},"10":{"type":"branch","line":320,"loc":{"start":{"line":320,"column":2},"end":{"line":327,"column":3}},"locations":[{"start":{"line":320,"column":2},"end":{"line":327,"column":3}}]},"11":{"type":"branch","line":325,"loc":{"start":{"line":325,"column":22},"end":{"line":325,"column":71}},"locations":[{"start":{"line":325,"column":22},"end":{"line":325,"column":71}}]},"12":{"type":"branch","line":325,"loc":{"start":{"line":325,"column":69},"end":{"line":326,"column":40}},"locations":[{"start":{"line":325,"column":69},"end":{"line":326,"column":40}}]},"13":{"type":"branch","line":340,"loc":{"start":{"line":340,"column":2},"end":{"line":364,"column":3}},"locations":[{"start":{"line":340,"column":2},"end":{"line":364,"column":3}}]},"14":{"type":"branch","line":342,"loc":{"start":{"line":342,"column":18},"end":{"line":361,"column":7}},"locations":[{"start":{"line":342,"column":18},"end":{"line":361,"column":7}}]},"15":{"type":"branch","line":347,"loc":{"start":{"line":347,"column":11},"end":{"line":348,"column":46}},"locations":[{"start":{"line":347,"column":11},"end":{"line":348,"column":46}}]},"16":{"type":"branch","line":348,"loc":{"start":{"line":348,"column":39},"end":{"line":348,"column":98}},"locations":[{"start":{"line":348,"column":39},"end":{"line":348,"column":98}}]},"17":{"type":"branch","line":348,"loc":{"start":{"line":348,"column":87},"end":{"line":349,"column":66}},"locations":[{"start":{"line":348,"column":87},"end":{"line":349,"column":66}}]},"18":{"type":"branch","line":348,"loc":{"start":{"line":348,"column":87},"end":{"line":349,"column":41}},"locations":[{"start":{"line":348,"column":87},"end":{"line":349,"column":41}}]},"19":{"type":"branch","line":349,"loc":{"start":{"line":349,"column":34},"end":{"line":349,"column":66}},"locations":[{"start":{"line":349,"column":34},"end":{"line":349,"column":66}}]},"20":{"type":"branch","line":349,"loc":{"start":{"line":349,"column":66},"end":{"line":351,"column":11}},"locations":[{"start":{"line":349,"column":66},"end":{"line":351,"column":11}}]},"21":{"type":"branch","line":351,"loc":{"start":{"line":351,"column":10},"end":{"line":353,"column":39}},"locations":[{"start":{"line":351,"column":10},"end":{"line":353,"column":39}}]},"22":{"type":"branch","line":353,"loc":{"start":{"line":353,"column":39},"end":{"line":357,"column":60}},"locations":[{"start":{"line":353,"column":39},"end":{"line":357,"column":60}}]},"23":{"type":"branch","line":353,"loc":{"start":{"line":353,"column":39},"end":{"line":355,"column":11}},"locations":[{"start":{"line":353,"column":39},"end":{"line":355,"column":11}}]},"24":{"type":"branch","line":355,"loc":{"start":{"line":355,"column":10},"end":{"line":357,"column":60}},"locations":[{"start":{"line":355,"column":10},"end":{"line":357,"column":60}}]},"25":{"type":"branch","line":357,"loc":{"start":{"line":357,"column":48},"end":{"line":357,"column":69}},"locations":[{"start":{"line":357,"column":48},"end":{"line":357,"column":69}}]},"26":{"type":"branch","line":358,"loc":{"start":{"line":358,"column":8},"end":{"line":360,"column":9}},"locations":[{"start":{"line":358,"column":8},"end":{"line":360,"column":9}}]},"27":{"type":"branch","line":366,"loc":{"start":{"line":366,"column":2},"end":{"line":368,"column":3}},"locations":[{"start":{"line":366,"column":2},"end":{"line":368,"column":3}}]},"28":{"type":"branch","line":370,"loc":{"start":{"line":370,"column":2},"end":{"line":372,"column":3}},"locations":[{"start":{"line":370,"column":2},"end":{"line":372,"column":3}}]},"29":{"type":"branch","line":374,"loc":{"start":{"line":374,"column":2},"end":{"line":382,"column":3}},"locations":[{"start":{"line":374,"column":2},"end":{"line":382,"column":3}}]},"30":{"type":"branch","line":376,"loc":{"start":{"line":376,"column":21},"end":{"line":376,"column":51}},"locations":[{"start":{"line":376,"column":21},"end":{"line":376,"column":51}}]},"31":{"type":"branch","line":378,"loc":{"start":{"line":378,"column":63},"end":{"line":378,"column":73}},"locations":[{"start":{"line":378,"column":63},"end":{"line":378,"column":73}}]},"32":{"type":"branch","line":384,"loc":{"start":{"line":384,"column":2},"end":{"line":386,"column":3}},"locations":[{"start":{"line":384,"column":2},"end":{"line":386,"column":3}}]},"33":{"type":"branch","line":389,"loc":{"start":{"line":389,"column":2},"end":{"line":401,"column":3}},"locations":[{"start":{"line":389,"column":2},"end":{"line":401,"column":3}}]},"34":{"type":"branch","line":393,"loc":{"start":{"line":393,"column":24},"end":{"line":393,"column":69}},"locations":[{"start":{"line":393,"column":24},"end":{"line":393,"column":69}}]},"35":{"type":"branch","line":393,"loc":{"start":{"line":393,"column":65},"end":{"line":393,"column":136}},"locations":[{"start":{"line":393,"column":65},"end":{"line":393,"column":136}}]},"36":{"type":"branch","line":394,"loc":{"start":{"line":394,"column":21},"end":{"line":394,"column":45}},"locations":[{"start":{"line":394,"column":21},"end":{"line":394,"column":45}}]},"37":{"type":"branch","line":394,"loc":{"start":{"line":394,"column":33},"end":{"line":394,"column":66}},"locations":[{"start":{"line":394,"column":33},"end":{"line":394,"column":66}}]},"38":{"type":"branch","line":396,"loc":{"start":{"line":396,"column":28},"end":{"line":396,"column":60}},"locations":[{"start":{"line":396,"column":28},"end":{"line":396,"column":60}}]},"39":{"type":"branch","line":396,"loc":{"start":{"line":396,"column":60},"end":{"line":398,"column":5}},"locations":[{"start":{"line":396,"column":60},"end":{"line":398,"column":5}}]},"40":{"type":"branch","line":398,"loc":{"start":{"line":398,"column":4},"end":{"line":400,"column":53}},"locations":[{"start":{"line":398,"column":4},"end":{"line":400,"column":53}}]},"41":{"type":"branch","line":403,"loc":{"start":{"line":403,"column":2},"end":{"line":405,"column":3}},"locations":[{"start":{"line":403,"column":2},"end":{"line":405,"column":3}}]},"42":{"type":"branch","line":407,"loc":{"start":{"line":407,"column":2},"end":{"line":409,"column":3}},"locations":[{"start":{"line":407,"column":2},"end":{"line":409,"column":3}}]},"43":{"type":"branch","line":411,"loc":{"start":{"line":411,"column":2},"end":{"line":413,"column":3}},"locations":[{"start":{"line":411,"column":2},"end":{"line":413,"column":3}}]},"44":{"type":"branch","line":415,"loc":{"start":{"line":415,"column":2},"end":{"line":417,"column":3}},"locations":[{"start":{"line":415,"column":2},"end":{"line":417,"column":3}}]},"45":{"type":"branch","line":424,"loc":{"start":{"line":424,"column":2},"end":{"line":426,"column":3}},"locations":[{"start":{"line":424,"column":2},"end":{"line":426,"column":3}}]},"46":{"type":"branch","line":428,"loc":{"start":{"line":428,"column":2},"end":{"line":430,"column":3}},"locations":[{"start":{"line":428,"column":2},"end":{"line":430,"column":3}}]},"47":{"type":"branch","line":439,"loc":{"start":{"line":439,"column":2},"end":{"line":444,"column":3}},"locations":[{"start":{"line":439,"column":2},"end":{"line":444,"column":3}}]},"48":{"type":"branch","line":441,"loc":{"start":{"line":441,"column":23},"end":{"line":441,"column":57}},"locations":[{"start":{"line":441,"column":23},"end":{"line":441,"column":57}}]},"49":{"type":"branch","line":442,"loc":{"start":{"line":442,"column":63},"end":{"line":442,"column":73}},"locations":[{"start":{"line":442,"column":63},"end":{"line":442,"column":73}}]},"50":{"type":"branch","line":447,"loc":{"start":{"line":447,"column":2},"end":{"line":454,"column":3}},"locations":[{"start":{"line":447,"column":2},"end":{"line":454,"column":3}}]},"51":{"type":"branch","line":449,"loc":{"start":{"line":449,"column":41},"end":{"line":449,"column":54}},"locations":[{"start":{"line":449,"column":41},"end":{"line":449,"column":54}}]},"52":{"type":"branch","line":450,"loc":{"start":{"line":450,"column":63},"end":{"line":450,"column":74}},"locations":[{"start":{"line":450,"column":63},"end":{"line":450,"column":74}}]},"53":{"type":"branch","line":456,"loc":{"start":{"line":456,"column":2},"end":{"line":458,"column":3}},"locations":[{"start":{"line":456,"column":2},"end":{"line":458,"column":3}}]},"54":{"type":"branch","line":460,"loc":{"start":{"line":460,"column":2},"end":{"line":463,"column":3}},"locations":[{"start":{"line":460,"column":2},"end":{"line":463,"column":3}}]},"55":{"type":"branch","line":469,"loc":{"start":{"line":469,"column":2},"end":{"line":481,"column":3}},"locations":[{"start":{"line":469,"column":2},"end":{"line":481,"column":3}}]},"56":{"type":"branch","line":471,"loc":{"start":{"line":471,"column":16},"end":{"line":471,"column":44}},"locations":[{"start":{"line":471,"column":16},"end":{"line":471,"column":44}}]},"57":{"type":"branch","line":479,"loc":{"start":{"line":479,"column":22},"end":{"line":480,"column":52}},"locations":[{"start":{"line":479,"column":22},"end":{"line":480,"column":52}}]},"58":{"type":"branch","line":483,"loc":{"start":{"line":483,"column":2},"end":{"line":485,"column":3}},"locations":[{"start":{"line":483,"column":2},"end":{"line":485,"column":3}}]},"59":{"type":"branch","line":487,"loc":{"start":{"line":487,"column":2},"end":{"line":492,"column":3}},"locations":[{"start":{"line":487,"column":2},"end":{"line":492,"column":3}}]},"60":{"type":"branch","line":489,"loc":{"start":{"line":489,"column":23},"end":{"line":489,"column":57}},"locations":[{"start":{"line":489,"column":23},"end":{"line":489,"column":57}}]},"61":{"type":"branch","line":490,"loc":{"start":{"line":490,"column":63},"end":{"line":490,"column":73}},"locations":[{"start":{"line":490,"column":63},"end":{"line":490,"column":73}}]},"62":{"type":"branch","line":494,"loc":{"start":{"line":494,"column":2},"end":{"line":496,"column":3}},"locations":[{"start":{"line":494,"column":2},"end":{"line":496,"column":3}}]},"63":{"type":"branch","line":499,"loc":{"start":{"line":499,"column":2},"end":{"line":503,"column":3}},"locations":[{"start":{"line":499,"column":2},"end":{"line":503,"column":3}}]},"64":{"type":"branch","line":505,"loc":{"start":{"line":505,"column":2},"end":{"line":509,"column":3}},"locations":[{"start":{"line":505,"column":2},"end":{"line":509,"column":3}}]},"65":{"type":"branch","line":511,"loc":{"start":{"line":511,"column":2},"end":{"line":513,"column":3}},"locations":[{"start":{"line":511,"column":2},"end":{"line":513,"column":3}}]},"66":{"type":"branch","line":515,"loc":{"start":{"line":515,"column":2},"end":{"line":517,"column":3}},"locations":[{"start":{"line":515,"column":2},"end":{"line":517,"column":3}}]},"67":{"type":"branch","line":519,"loc":{"start":{"line":519,"column":2},"end":{"line":522,"column":3}},"locations":[{"start":{"line":519,"column":2},"end":{"line":522,"column":3}}]},"68":{"type":"branch","line":524,"loc":{"start":{"line":524,"column":2},"end":{"line":526,"column":3}},"locations":[{"start":{"line":524,"column":2},"end":{"line":526,"column":3}}]},"69":{"type":"branch","line":528,"loc":{"start":{"line":528,"column":2},"end":{"line":530,"column":3}},"locations":[{"start":{"line":528,"column":2},"end":{"line":530,"column":3}}]},"70":{"type":"branch","line":532,"loc":{"start":{"line":532,"column":2},"end":{"line":538,"column":3}},"locations":[{"start":{"line":532,"column":2},"end":{"line":538,"column":3}}]},"71":{"type":"branch","line":534,"loc":{"start":{"line":534,"column":23},"end":{"line":534,"column":57}},"locations":[{"start":{"line":534,"column":23},"end":{"line":534,"column":57}}]},"72":{"type":"branch","line":535,"loc":{"start":{"line":535,"column":26},"end":{"line":535,"column":66}},"locations":[{"start":{"line":535,"column":26},"end":{"line":535,"column":66}}]},"73":{"type":"branch","line":536,"loc":{"start":{"line":536,"column":63},"end":{"line":536,"column":73}},"locations":[{"start":{"line":536,"column":63},"end":{"line":536,"column":73}}]},"74":{"type":"branch","line":540,"loc":{"start":{"line":540,"column":2},"end":{"line":542,"column":3}},"locations":[{"start":{"line":540,"column":2},"end":{"line":542,"column":3}}]},"75":{"type":"branch","line":545,"loc":{"start":{"line":545,"column":2},"end":{"line":547,"column":3}},"locations":[{"start":{"line":545,"column":2},"end":{"line":547,"column":3}}]},"76":{"type":"branch","line":549,"loc":{"start":{"line":549,"column":2},"end":{"line":551,"column":3}},"locations":[{"start":{"line":549,"column":2},"end":{"line":551,"column":3}}]},"77":{"type":"branch","line":553,"loc":{"start":{"line":553,"column":2},"end":{"line":555,"column":3}},"locations":[{"start":{"line":553,"column":2},"end":{"line":555,"column":3}}]},"78":{"type":"branch","line":558,"loc":{"start":{"line":558,"column":2},"end":{"line":567,"column":3}},"locations":[{"start":{"line":558,"column":2},"end":{"line":567,"column":3}}]},"79":{"type":"branch","line":564,"loc":{"start":{"line":564,"column":33},"end":{"line":564,"column":94}},"locations":[{"start":{"line":564,"column":33},"end":{"line":564,"column":94}}]},"80":{"type":"branch","line":564,"loc":{"start":{"line":564,"column":40},"end":{"line":565,"column":28}},"locations":[{"start":{"line":564,"column":40},"end":{"line":565,"column":28}}]},"81":{"type":"branch","line":565,"loc":{"start":{"line":565,"column":22},"end":{"line":565,"column":71}},"locations":[{"start":{"line":565,"column":22},"end":{"line":565,"column":71}}]},"82":{"type":"branch","line":565,"loc":{"start":{"line":565,"column":69},"end":{"line":566,"column":51}},"locations":[{"start":{"line":565,"column":69},"end":{"line":566,"column":51}}]},"83":{"type":"branch","line":569,"loc":{"start":{"line":569,"column":2},"end":{"line":572,"column":3}},"locations":[{"start":{"line":569,"column":2},"end":{"line":572,"column":3}}]},"84":{"type":"branch","line":574,"loc":{"start":{"line":574,"column":2},"end":{"line":576,"column":3}},"locations":[{"start":{"line":574,"column":2},"end":{"line":576,"column":3}}]},"85":{"type":"branch","line":578,"loc":{"start":{"line":578,"column":2},"end":{"line":581,"column":3}},"locations":[{"start":{"line":578,"column":2},"end":{"line":581,"column":3}}]},"86":{"type":"branch","line":583,"loc":{"start":{"line":583,"column":2},"end":{"line":585,"column":3}},"locations":[{"start":{"line":583,"column":2},"end":{"line":585,"column":3}}]},"87":{"type":"branch","line":587,"loc":{"start":{"line":587,"column":2},"end":{"line":592,"column":3}},"locations":[{"start":{"line":587,"column":2},"end":{"line":592,"column":3}}]},"88":{"type":"branch","line":598,"loc":{"start":{"line":598,"column":2},"end":{"line":607,"column":3}},"locations":[{"start":{"line":598,"column":2},"end":{"line":607,"column":3}}]},"89":{"type":"branch","line":605,"loc":{"start":{"line":605,"column":22},"end":{"line":605,"column":71}},"locations":[{"start":{"line":605,"column":22},"end":{"line":605,"column":71}}]},"90":{"type":"branch","line":605,"loc":{"start":{"line":605,"column":69},"end":{"line":606,"column":53}},"locations":[{"start":{"line":605,"column":69},"end":{"line":606,"column":53}}]}},"b":{"0":[16],"1":[12],"2":[6],"3":[6],"4":[4],"5":[20],"6":[94],"7":[94],"8":[0],"9":[0],"10":[313],"11":[13],"12":[300],"13":[15],"14":[75],"15":[70],"16":[44],"17":[43],"18":[26],"19":[25],"20":[8],"21":[18],"22":[53],"23":[8],"24":[10],"25":[0],"26":[5],"27":[12],"28":[15],"29":[16],"30":[0],"31":[0],"32":[5],"33":[25],"34":[9],"35":[16],"36":[9],"37":[16],"38":[10],"39":[20],"40":[5],"41":[4],"42":[1],"43":[1],"44":[2],"45":[1],"46":[23],"47":[24],"48":[1],"49":[0],"50":[15],"51":[0],"52":[0],"53":[4],"54":[1],"55":[2],"56":[0],"57":[1],"58":[15],"59":[25],"60":[1],"61":[0],"62":[20],"63":[20],"64":[20],"65":[4],"66":[1],"67":[1],"68":[1],"69":[13],"70":[15],"71":[2],"72":[1],"73":[0],"74":[7],"75":[2],"76":[2],"77":[21],"78":[14],"79":[1],"80":[13],"81":[0],"82":[13],"83":[22],"84":[21],"85":[1],"86":[2],"87":[1],"88":[4],"89":[1],"90":[3]},"fnMap":{"0":{"name":"refusalMessage","decl":{"start":{"line":44,"column":0},"end":{"line":51,"column":1}},"loc":{"start":{"line":44,"column":0},"end":{"line":51,"column":1}},"line":44},"1":{"name":"AdminHttpError","decl":{"start":{"line":301,"column":2},"end":{"line":304,"column":3}},"loc":{"start":{"line":301,"column":2},"end":{"line":304,"column":3}},"line":301},"2":{"name":"","decl":{"start":{"line":308,"column":19},"end":{"line":309,"column":41}},"loc":{"start":{"line":308,"column":19},"end":{"line":309,"column":41}},"line":308},"3":{"name":"AdminClient","decl":{"start":{"line":311,"column":2},"end":{"line":318,"column":3}},"loc":{"start":{"line":311,"column":2},"end":{"line":318,"column":3}},"line":311},"4":{"name":"get","decl":{"start":{"line":320,"column":2},"end":{"line":327,"column":3}},"loc":{"start":{"line":320,"column":2},"end":{"line":327,"column":3}},"line":320},"5":{"name":"discoverCapabilities","decl":{"start":{"line":340,"column":2},"end":{"line":364,"column":3}},"loc":{"start":{"line":340,"column":2},"end":{"line":364,"column":3}},"line":340},"6":{"name":"fleets","decl":{"start":{"line":366,"column":2},"end":{"line":368,"column":3}},"loc":{"start":{"line":366,"column":2},"end":{"line":368,"column":3}},"line":366},"7":{"name":"jobs","decl":{"start":{"line":370,"column":2},"end":{"line":372,"column":3}},"loc":{"start":{"line":370,"column":2},"end":{"line":372,"column":3}},"line":370},"8":{"name":"runs","decl":{"start":{"line":374,"column":2},"end":{"line":382,"column":3}},"loc":{"start":{"line":374,"column":2},"end":{"line":382,"column":3}},"line":374},"9":{"name":"run","decl":{"start":{"line":384,"column":2},"end":{"line":386,"column":3}},"loc":{"start":{"line":384,"column":2},"end":{"line":386,"column":3}},"line":384},"10":{"name":"verb","decl":{"start":{"line":389,"column":2},"end":{"line":401,"column":3}},"loc":{"start":{"line":389,"column":2},"end":{"line":401,"column":3}},"line":389},"11":{"name":"triggerJob","decl":{"start":{"line":403,"column":2},"end":{"line":405,"column":3}},"loc":{"start":{"line":403,"column":2},"end":{"line":405,"column":3}},"line":403},"12":{"name":"pauseJob","decl":{"start":{"line":407,"column":2},"end":{"line":409,"column":3}},"loc":{"start":{"line":407,"column":2},"end":{"line":409,"column":3}},"line":407},"13":{"name":"resumeJob","decl":{"start":{"line":411,"column":2},"end":{"line":413,"column":3}},"loc":{"start":{"line":411,"column":2},"end":{"line":413,"column":3}},"line":411},"14":{"name":"rerun","decl":{"start":{"line":415,"column":2},"end":{"line":417,"column":3}},"loc":{"start":{"line":415,"column":2},"end":{"line":417,"column":3}},"line":415},"15":{"name":"replayItems","decl":{"start":{"line":424,"column":2},"end":{"line":426,"column":3}},"loc":{"start":{"line":424,"column":2},"end":{"line":426,"column":3}},"line":424},"16":{"name":"bulkDefinitions","decl":{"start":{"line":428,"column":2},"end":{"line":430,"column":3}},"loc":{"start":{"line":428,"column":2},"end":{"line":430,"column":3}},"line":428},"17":{"name":"bulkBatches","decl":{"start":{"line":439,"column":2},"end":{"line":444,"column":3}},"loc":{"start":{"line":439,"column":2},"end":{"line":444,"column":3}},"line":439},"18":{"name":"bulkErrors","decl":{"start":{"line":447,"column":2},"end":{"line":454,"column":3}},"loc":{"start":{"line":447,"column":2},"end":{"line":454,"column":3}},"line":447},"19":{"name":"approveBatch","decl":{"start":{"line":456,"column":2},"end":{"line":458,"column":3}},"loc":{"start":{"line":456,"column":2},"end":{"line":458,"column":3}},"line":456},"20":{"name":"rejectBatch","decl":{"start":{"line":460,"column":2},"end":{"line":463,"column":3}},"loc":{"start":{"line":460,"column":2},"end":{"line":463,"column":3}},"line":460},"21":{"name":"uploadBatch","decl":{"start":{"line":469,"column":2},"end":{"line":481,"column":3}},"loc":{"start":{"line":469,"column":2},"end":{"line":481,"column":3}},"line":469},"22":{"name":"batch","decl":{"start":{"line":483,"column":2},"end":{"line":485,"column":3}},"loc":{"start":{"line":483,"column":2},"end":{"line":485,"column":3}},"line":483},"23":{"name":"campaigns","decl":{"start":{"line":487,"column":2},"end":{"line":492,"column":3}},"loc":{"start":{"line":487,"column":2},"end":{"line":492,"column":3}},"line":487},"24":{"name":"campaign","decl":{"start":{"line":494,"column":2},"end":{"line":496,"column":3}},"loc":{"start":{"line":494,"column":2},"end":{"line":496,"column":3}},"line":494},"25":{"name":"campaignFailures","decl":{"start":{"line":499,"column":2},"end":{"line":503,"column":3}},"loc":{"start":{"line":499,"column":2},"end":{"line":503,"column":3}},"line":499},"26":{"name":"campaignAudit","decl":{"start":{"line":505,"column":2},"end":{"line":509,"column":3}},"loc":{"start":{"line":505,"column":2},"end":{"line":509,"column":3}},"line":505},"27":{"name":"pauseCampaign","decl":{"start":{"line":511,"column":2},"end":{"line":513,"column":3}},"loc":{"start":{"line":511,"column":2},"end":{"line":513,"column":3}},"line":511},"28":{"name":"resumeCampaign","decl":{"start":{"line":515,"column":2},"end":{"line":517,"column":3}},"loc":{"start":{"line":515,"column":2},"end":{"line":517,"column":3}},"line":515},"29":{"name":"abortCampaign","decl":{"start":{"line":519,"column":2},"end":{"line":522,"column":3}},"loc":{"start":{"line":519,"column":2},"end":{"line":522,"column":3}},"line":519},"30":{"name":"throttleCampaign","decl":{"start":{"line":524,"column":2},"end":{"line":526,"column":3}},"loc":{"start":{"line":524,"column":2},"end":{"line":526,"column":3}},"line":524},"31":{"name":"notificationTemplates","decl":{"start":{"line":528,"column":2},"end":{"line":530,"column":3}},"loc":{"start":{"line":528,"column":2},"end":{"line":530,"column":3}},"line":528},"32":{"name":"notifications","decl":{"start":{"line":532,"column":2},"end":{"line":538,"column":3}},"loc":{"start":{"line":532,"column":2},"end":{"line":538,"column":3}},"line":532},"33":{"name":"notification","decl":{"start":{"line":540,"column":2},"end":{"line":542,"column":3}},"loc":{"start":{"line":540,"column":2},"end":{"line":542,"column":3}},"line":540},"34":{"name":"notificationSuppressions","decl":{"start":{"line":545,"column":2},"end":{"line":547,"column":3}},"loc":{"start":{"line":545,"column":2},"end":{"line":547,"column":3}},"line":545},"35":{"name":"notificationFailures","decl":{"start":{"line":549,"column":2},"end":{"line":551,"column":3}},"loc":{"start":{"line":549,"column":2},"end":{"line":551,"column":3}},"line":549},"36":{"name":"archiveDefinitions","decl":{"start":{"line":553,"column":2},"end":{"line":555,"column":3}},"loc":{"start":{"line":553,"column":2},"end":{"line":555,"column":3}},"line":553},"37":{"name":"archiveEntry","decl":{"start":{"line":558,"column":2},"end":{"line":567,"column":3}},"loc":{"start":{"line":558,"column":2},"end":{"line":567,"column":3}},"line":558},"38":{"name":"holds","decl":{"start":{"line":569,"column":2},"end":{"line":572,"column":3}},"loc":{"start":{"line":569,"column":2},"end":{"line":572,"column":3}},"line":569},"39":{"name":"erasures","decl":{"start":{"line":574,"column":2},"end":{"line":576,"column":3}},"loc":{"start":{"line":574,"column":2},"end":{"line":576,"column":3}},"line":574},"40":{"name":"placeHold","decl":{"start":{"line":578,"column":2},"end":{"line":581,"column":3}},"loc":{"start":{"line":578,"column":2},"end":{"line":581,"column":3}},"line":578},"41":{"name":"liftHold","decl":{"start":{"line":583,"column":2},"end":{"line":585,"column":3}},"loc":{"start":{"line":583,"column":2},"end":{"line":585,"column":3}},"line":583},"42":{"name":"erase","decl":{"start":{"line":587,"column":2},"end":{"line":592,"column":3}},"loc":{"start":{"line":587,"column":2},"end":{"line":592,"column":3}},"line":587},"43":{"name":"verifyChain","decl":{"start":{"line":598,"column":2},"end":{"line":607,"column":3}},"loc":{"start":{"line":598,"column":2},"end":{"line":607,"column":3}},"line":598}},"f":{"0":16,"1":20,"2":94,"3":94,"4":313,"5":15,"6":12,"7":15,"8":16,"9":5,"10":25,"11":4,"12":1,"13":1,"14":2,"15":1,"16":23,"17":24,"18":15,"19":4,"20":1,"21":2,"22":15,"23":25,"24":20,"25":20,"26":20,"27":4,"28":1,"29":1,"30":1,"31":13,"32":15,"33":7,"34":2,"35":2,"36":21,"37":14,"38":22,"39":21,"40":1,"41":2,"42":1,"43":4}} -} diff --git a/ui/console/coverage/favicon.png b/ui/console/coverage/favicon.png deleted file mode 100644 index c1525b811a167671e9de1fa78aab9f5c0b61cef7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> - - - - Code coverage report for All files - - - - - - - - - -
-
-

All files

-
- -
- 99.94% - Statements - 1676/1677 -
- - -
- 88.17% - Branches - 477/541 -
- - -
- 88.96% - Functions - 137/154 -
- - -
- 99.94% - Lines - 1676/1677 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
ArchivalPanel.tsx -
-
100%308/30889.88%80/8977.77%21/27100%308/308
BulkPanel.tsx -
-
100%279/27986.17%81/9495.23%20/21100%279/279
CampaignPanel.tsx -
-
100%361/36183.5%81/9782.75%24/29100%361/361
Console.tsx -
-
100%61/6194.59%35/3733.33%1/3100%61/61
NotificationPanel.tsx -
-
99.59%245/24690.78%69/7692.85%13/1499.59%245/246
RunConsole.tsx -
-
100%186/18691.22%52/5787.5%14/16100%186/186
adminClient.ts -
-
100%236/23686.81%79/91100%44/44100%236/236
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/ui/console/coverage/prettify.css b/ui/console/coverage/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/ui/console/coverage/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/ui/console/coverage/prettify.js b/ui/console/coverage/prettify.js deleted file mode 100644 index b322523..0000000 --- a/ui/console/coverage/prettify.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/ui/console/coverage/sort-arrow-sprite.png b/ui/console/coverage/sort-arrow-sprite.png deleted file mode 100644 index 6ed68316eb3f65dec9063332d2f69bf3093bbfab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc diff --git a/ui/console/coverage/sorter.js b/ui/console/coverage/sorter.js deleted file mode 100644 index 4ed70ae..0000000 --- a/ui/console/coverage/sorter.js +++ /dev/null @@ -1,210 +0,0 @@ -/* eslint-disable */ -var addSorting = (function() { - 'use strict'; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { - return document.querySelector('.coverage-summary'); - } - // returns the thead element of the summary table - function getTableHeader() { - return getTable().querySelector('thead tr'); - } - // returns the tbody element of the summary table - function getTableBody() { - return getTable().querySelector('tbody'); - } - // returns the th element for nth column - function getNthColumn(n) { - return getTableHeader().querySelectorAll('th')[n]; - } - - function onFilterInput() { - const searchValue = document.getElementById('fileSearch').value; - const rows = document.getElementsByTagName('tbody')[0].children; - - // Try to create a RegExp from the searchValue. If it fails (invalid regex), - // it will be treated as a plain text search - let searchRegex; - try { - searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive - } catch (error) { - searchRegex = null; - } - - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - let isMatch = false; - - if (searchRegex) { - // If a valid regex was created, use it for matching - isMatch = searchRegex.test(row.textContent); - } else { - // Otherwise, fall back to the original plain text search - isMatch = row.textContent - .toLowerCase() - .includes(searchValue.toLowerCase()); - } - - row.style.display = isMatch ? '' : 'none'; - } - } - - // loads the search box - function addSearchBox() { - var template = document.getElementById('filterTemplate'); - var templateClone = template.content.cloneNode(true); - templateClone.getElementById('fileSearch').oninput = onFilterInput; - template.parentElement.appendChild(templateClone); - } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = - colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function() { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSearchBox(); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/ui/kit/coverage/base.css b/ui/kit/coverage/base.css deleted file mode 100644 index f418035..0000000 --- a/ui/kit/coverage/base.css +++ /dev/null @@ -1,224 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* yellow */ -.cbranch-no { background: yellow !important; color: #111; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -.highlighted, -.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ - background: #C21F39 !important; -} -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -.medium .chart { border:1px solid #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } - -.coverage-summary td.empty { - opacity: .5; - padding-top: 4px; - padding-bottom: 4px; - line-height: 1; - color: #888; -} - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/ui/kit/coverage/block-navigation.js b/ui/kit/coverage/block-navigation.js deleted file mode 100644 index 530d1ed..0000000 --- a/ui/kit/coverage/block-navigation.js +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable */ -var jumpToCode = (function init() { - // Classes of code we would like to highlight in the file view - var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; - - // Elements to highlight in the file listing view - var fileListingElements = ['td.pct.low']; - - // We don't want to select elements that are direct descendants of another match - var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` - - // Selector that finds elements on the page to which we can jump - var selector = - fileListingElements.join(', ') + - ', ' + - notSelector + - missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` - - // The NodeList of matching elements - var missingCoverageElements = document.querySelectorAll(selector); - - var currentIndex; - - function toggleClass(index) { - missingCoverageElements - .item(currentIndex) - .classList.remove('highlighted'); - missingCoverageElements.item(index).classList.add('highlighted'); - } - - function makeCurrent(index) { - toggleClass(index); - currentIndex = index; - missingCoverageElements.item(index).scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); - } - - function goToPrevious() { - var nextIndex = 0; - if (typeof currentIndex !== 'number' || currentIndex === 0) { - nextIndex = missingCoverageElements.length - 1; - } else if (missingCoverageElements.length > 1) { - nextIndex = currentIndex - 1; - } - - makeCurrent(nextIndex); - } - - function goToNext() { - var nextIndex = 0; - - if ( - typeof currentIndex === 'number' && - currentIndex < missingCoverageElements.length - 1 - ) { - nextIndex = currentIndex + 1; - } - - makeCurrent(nextIndex); - } - - return function jump(event) { - if ( - document.getElementById('fileSearch') === document.activeElement && - document.activeElement != null - ) { - // if we're currently focused on the search input, we don't want to navigate - return; - } - - switch (event.which) { - case 78: // n - case 74: // j - goToNext(); - break; - case 66: // b - case 75: // k - case 80: // p - goToPrevious(); - break; - } - }; -})(); -window.addEventListener('keydown', jumpToCode); diff --git a/ui/kit/coverage/clover.xml b/ui/kit/coverage/clover.xml deleted file mode 100644 index 092dc5a..0000000 --- a/ui/kit/coverage/clover.xml +++ /dev/null @@ -1,464 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ui/kit/coverage/coverage-final.json b/ui/kit/coverage/coverage-final.json deleted file mode 100644 index b5910f3..0000000 --- a/ui/kit/coverage/coverage-final.json +++ /dev/null @@ -1,11 +0,0 @@ -{"/Users/omercelik/Repositories/goldpath/ui/kit/src/adminResult.ts": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/adminResult.ts","all":false,"statementMap":{"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":34}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":14}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":20}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":32}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":25}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":67}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":59}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":66}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":110}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":3}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":52}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":1}}},"s":{"14":3,"15":3,"16":3,"17":3,"18":3,"19":3,"20":3,"21":2,"22":2,"23":2,"25":1,"26":1},"branchMap":{"0":{"type":"branch","line":15,"loc":{"start":{"line":15,"column":0},"end":{"line":27,"column":1}},"locations":[{"start":{"line":15,"column":0},"end":{"line":27,"column":1}}]},"1":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":26},"end":{"line":21,"column":58}},"locations":[{"start":{"line":21,"column":26},"end":{"line":21,"column":58}}]},"2":{"type":"branch","line":21,"loc":{"start":{"line":21,"column":58},"end":{"line":24,"column":3}},"locations":[{"start":{"line":21,"column":58},"end":{"line":24,"column":3}}]},"3":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":18},"end":{"line":23,"column":65}},"locations":[{"start":{"line":23,"column":18},"end":{"line":23,"column":65}}]},"4":{"type":"branch","line":23,"loc":{"start":{"line":23,"column":61},"end":{"line":23,"column":110}},"locations":[{"start":{"line":23,"column":61},"end":{"line":23,"column":110}}]},"5":{"type":"branch","line":24,"loc":{"start":{"line":24,"column":2},"end":{"line":27,"column":1}},"locations":[{"start":{"line":24,"column":2},"end":{"line":27,"column":1}}]}},"b":{"0":[3],"1":[2],"2":[2],"3":[1],"4":[1],"5":[1]},"fnMap":{"0":{"name":"executeVerb","decl":{"start":{"line":15,"column":0},"end":{"line":27,"column":1}},"loc":{"start":{"line":15,"column":0},"end":{"line":27,"column":1}},"line":15}},"f":{"0":3}} -,"/Users/omercelik/Repositories/goldpath/ui/kit/src/duration.ts": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/duration.ts","all":false,"statementMap":{"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":58}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":37}},"11":{"start":{"line":12,"column":0},"end":{"line":12,"column":49}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":85}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":83}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":42}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":1}}},"s":{"9":1,"10":6,"11":6,"12":6,"13":6,"14":1,"15":1},"branchMap":{"0":{"type":"branch","line":10,"loc":{"start":{"line":10,"column":7},"end":{"line":16,"column":1}},"locations":[{"start":{"line":10,"column":7},"end":{"line":16,"column":1}}]},"1":{"type":"branch","line":12,"loc":{"start":{"line":12,"column":18},"end":{"line":13,"column":27}},"locations":[{"start":{"line":12,"column":18},"end":{"line":13,"column":27}}]},"2":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":20},"end":{"line":13,"column":85}},"locations":[{"start":{"line":13,"column":20},"end":{"line":13,"column":85}}]},"3":{"type":"branch","line":13,"loc":{"start":{"line":13,"column":52},"end":{"line":14,"column":30}},"locations":[{"start":{"line":13,"column":52},"end":{"line":14,"column":30}}]},"4":{"type":"branch","line":14,"loc":{"start":{"line":14,"column":23},"end":{"line":16,"column":1}},"locations":[{"start":{"line":14,"column":23},"end":{"line":16,"column":1}}]}},"b":{"0":[6],"1":[3],"2":[1],"3":[2],"4":[1]},"fnMap":{"0":{"name":"humanizeSeconds","decl":{"start":{"line":10,"column":7},"end":{"line":16,"column":1}},"loc":{"start":{"line":10,"column":7},"end":{"line":16,"column":1}},"line":10}},"f":{"0":6}} -,"/Users/omercelik/Repositories/goldpath/ui/kit/src/status.ts": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/status.ts","all":false,"statementMap":{"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":41}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":23}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":18}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":19}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":23}},"10":{"start":{"line":11,"column":0},"end":{"line":11,"column":20}},"12":{"start":{"line":13,"column":0},"end":{"line":13,"column":19}},"13":{"start":{"line":14,"column":0},"end":{"line":14,"column":21}},"14":{"start":{"line":15,"column":0},"end":{"line":15,"column":44}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":87}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":20}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":34}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":21}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":64}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":82}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":20}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":20}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":18}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":24}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":20}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":29}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":22}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":2}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":64}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":91}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":51}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":1}}},"s":{"4":1,"6":1,"7":1,"8":1,"9":1,"10":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"20":1,"21":1,"22":1,"24":1,"25":1,"26":1,"28":1,"29":1,"30":1,"31":1,"34":1,"41":1,"42":16,"43":16},"branchMap":{"0":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":7},"end":{"line":44,"column":1}},"locations":[{"start":{"line":42,"column":7},"end":{"line":44,"column":1}}]},"1":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":18},"end":{"line":43,"column":41}},"locations":[{"start":{"line":43,"column":18},"end":{"line":43,"column":41}}]},"2":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":23},"end":{"line":43,"column":41}},"locations":[{"start":{"line":43,"column":23},"end":{"line":43,"column":41}}]},"3":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":36},"end":{"line":43,"column":51}},"locations":[{"start":{"line":43,"column":36},"end":{"line":43,"column":51}}]}},"b":{"0":[16],"1":[2],"2":[1],"3":[1]},"fnMap":{"0":{"name":"statusTone","decl":{"start":{"line":42,"column":7},"end":{"line":44,"column":1}},"loc":{"start":{"line":42,"column":7},"end":{"line":44,"column":1}},"line":42}},"f":{"0":16}} -,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/AppShell.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/AppShell.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":39}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":26}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":8}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":6}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":11}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":11}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":11}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":16}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":20}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":20}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":9}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":19}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":10}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":79}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":12}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":34}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":109}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":12}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":34}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":39}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":80}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":71}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":91}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":35}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":21}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":84}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":42}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":95}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":43}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":39}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":23}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":16}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":61}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":39}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":98}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":21}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":37}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":103}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":57}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":101}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":44}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":89}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":19}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":23}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":18}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":30}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":48}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":20}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":21}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":29}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":58}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":58}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":93}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":83}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":19}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":39}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":88}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":101}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":78}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":113}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":23}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":13}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":82}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":14}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":14}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":47}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":13}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":37}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":104}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":56}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":20}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":15}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":12}},"131":{"start":{"line":132,"column":0},"end":{"line":132,"column":10}},"133":{"start":{"line":134,"column":0},"end":{"line":134,"column":1}}},"s":{"0":1,"41":1,"42":14,"43":14,"44":14,"45":14,"46":14,"47":14,"48":14,"49":14,"50":14,"51":14,"52":14,"53":14,"54":14,"55":14,"56":14,"61":14,"62":14,"63":14,"64":14,"66":14,"67":14,"68":14,"69":2,"70":2,"71":2,"72":2,"73":2,"75":2,"76":2,"78":14,"80":14,"81":2,"82":2,"83":2,"84":2,"85":2,"86":2,"87":2,"89":2,"90":4,"91":2,"92":2,"93":2,"96":14,"97":39,"98":39,"99":39,"100":39,"101":39,"102":39,"103":39,"104":39,"105":39,"106":39,"108":39,"109":39,"110":39,"111":1,"113":39,"115":14,"117":14,"118":14,"119":14,"121":14,"123":14,"124":14,"125":14,"126":14,"128":14,"129":14,"130":14,"131":14,"133":14},"branchMap":{"0":{"type":"branch","line":42,"loc":{"start":{"line":42,"column":7},"end":{"line":134,"column":1}},"locations":[{"start":{"line":42,"column":7},"end":{"line":134,"column":1}}]},"1":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":70},"end":{"line":57,"column":95}},"locations":[{"start":{"line":57,"column":70},"end":{"line":57,"column":95}}]},"2":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":82},"end":{"line":57,"column":106}},"locations":[{"start":{"line":57,"column":82},"end":{"line":57,"column":106}}]},"3":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":14},"end":{"line":68,"column":91}},"locations":[{"start":{"line":68,"column":14},"end":{"line":68,"column":91}}]},"4":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":13},"end":{"line":77,"column":23}},"locations":[{"start":{"line":69,"column":13},"end":{"line":77,"column":23}}]},"5":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":28},"end":{"line":71,"column":62}},"locations":[{"start":{"line":71,"column":28},"end":{"line":71,"column":62}}]},"6":{"type":"branch","line":71,"loc":{"start":{"line":71,"column":40},"end":{"line":71,"column":84}},"locations":[{"start":{"line":71,"column":40},"end":{"line":71,"column":84}}]},"7":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":17},"end":{"line":76,"column":35}},"locations":[{"start":{"line":76,"column":17},"end":{"line":76,"column":35}}]},"8":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":29},"end":{"line":76,"column":39}},"locations":[{"start":{"line":76,"column":29},"end":{"line":76,"column":39}}]},"9":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":11},"end":{"line":81,"column":46}},"locations":[{"start":{"line":81,"column":11},"end":{"line":81,"column":46}}]},"10":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":41},"end":{"line":81,"column":61}},"locations":[{"start":{"line":81,"column":41},"end":{"line":81,"column":61}}]},"11":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":47},"end":{"line":94,"column":18}},"locations":[{"start":{"line":81,"column":47},"end":{"line":94,"column":18}}]},"12":{"type":"branch","line":87,"loc":{"start":{"line":87,"column":23},"end":{"line":87,"column":57}},"locations":[{"start":{"line":87,"column":23},"end":{"line":87,"column":57}}]},"13":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":11},"end":{"line":118,"column":82}},"locations":[{"start":{"line":118,"column":11},"end":{"line":118,"column":82}}]},"14":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":26},"end":{"line":88,"column":101}},"locations":[{"start":{"line":88,"column":26},"end":{"line":88,"column":101}}]},"15":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":51},"end":{"line":88,"column":87}},"locations":[{"start":{"line":88,"column":51},"end":{"line":88,"column":87}}]},"16":{"type":"branch","line":90,"loc":{"start":{"line":90,"column":30},"end":{"line":91,"column":89}},"locations":[{"start":{"line":90,"column":30},"end":{"line":91,"column":89}}]},"17":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":19},"end":{"line":116,"column":11}},"locations":[{"start":{"line":97,"column":19},"end":{"line":116,"column":11}}]},"18":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":30},"end":{"line":102,"column":48}},"locations":[{"start":{"line":102,"column":30},"end":{"line":102,"column":48}}]},"19":{"type":"branch","line":102,"loc":{"start":{"line":102,"column":39},"end":{"line":102,"column":58}},"locations":[{"start":{"line":102,"column":39},"end":{"line":102,"column":58}}]},"20":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":23},"end":{"line":103,"column":48}},"locations":[{"start":{"line":103,"column":23},"end":{"line":103,"column":48}}]},"21":{"type":"branch","line":103,"loc":{"start":{"line":103,"column":40},"end":{"line":103,"column":58}},"locations":[{"start":{"line":103,"column":40},"end":{"line":103,"column":58}}]},"22":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":18},"end":{"line":105,"column":66}},"locations":[{"start":{"line":105,"column":18},"end":{"line":105,"column":66}}]},"23":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":27},"end":{"line":105,"column":83}},"locations":[{"start":{"line":105,"column":27},"end":{"line":105,"column":83}}]},"24":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":33},"end":{"line":109,"column":57}},"locations":[{"start":{"line":109,"column":33},"end":{"line":109,"column":57}}]},"25":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":45},"end":{"line":109,"column":70}},"locations":[{"start":{"line":109,"column":45},"end":{"line":109,"column":70}}]},"26":{"type":"branch","line":110,"loc":{"start":{"line":110,"column":17},"end":{"line":110,"column":101}},"locations":[{"start":{"line":110,"column":17},"end":{"line":110,"column":101}}]},"27":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":32},"end":{"line":111,"column":63}},"locations":[{"start":{"line":111,"column":32},"end":{"line":111,"column":63}}]},"28":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":58},"end":{"line":111,"column":78}},"locations":[{"start":{"line":111,"column":58},"end":{"line":111,"column":78}}]},"29":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":64},"end":{"line":112,"column":113}},"locations":[{"start":{"line":111,"column":64},"end":{"line":112,"column":113}}]}},"b":{"0":[14],"1":[2],"2":[12],"3":[12],"4":[2],"5":[1],"6":[1],"7":[1],"8":[1],"9":[2],"10":[2],"11":[2],"12":[1],"13":[2],"14":[2],"15":[4],"16":[4],"17":[39],"18":[13],"19":[26],"20":[2],"21":[37],"22":[13],"23":[26],"24":[2],"25":[37],"26":[2],"27":[2],"28":[1],"29":[1]},"fnMap":{"0":{"name":"AppShell","decl":{"start":{"line":42,"column":7},"end":{"line":134,"column":1}},"loc":{"start":{"line":42,"column":7},"end":{"line":134,"column":1}},"line":42},"1":{"name":"onChange","decl":{"start":{"line":88,"column":26},"end":{"line":88,"column":101}},"loc":{"start":{"line":88,"column":26},"end":{"line":88,"column":101}},"line":88}},"f":{"0":14,"1":2}} -,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/AuditBlock.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/AuditBlock.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":64}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":37}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":95}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":96}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":1}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":22}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":90}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":15}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":115}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":3}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":46}},"36":{"start":{"line":37,"column":0},"end":{"line":37,"column":99}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":3}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":60}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":1}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":108}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":29}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":92}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":3}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":10}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":57}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":31}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":68}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":16}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":129}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":59}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":97}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":76}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":18}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":17}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":69}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":73}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":64}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":71}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":23}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":84}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":20}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":72}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":64}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":61}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":64}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":20}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":39}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":105}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":18}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":16}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":9}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":10}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":1}}},"s":{"0":1,"22":1,"24":1,"25":8,"26":8,"28":1,"30":8,"31":8,"32":2,"33":2,"35":8,"36":1,"37":1,"39":5,"40":5,"48":1,"49":5,"50":1,"51":1,"53":4,"54":4,"55":4,"56":4,"57":4,"58":4,"59":4,"60":4,"61":4,"62":4,"63":4,"64":4,"65":4,"66":4,"67":4,"68":4,"69":4,"70":4,"71":4,"72":4,"73":4,"74":4,"75":4,"76":4,"77":4,"79":4,"80":4,"82":4,"83":4,"85":4},"branchMap":{"0":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":7},"end":{"line":27,"column":1}},"locations":[{"start":{"line":25,"column":7},"end":{"line":27,"column":1}}]},"1":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":9},"end":{"line":26,"column":26}},"locations":[{"start":{"line":26,"column":9},"end":{"line":26,"column":26}}]},"2":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":85},"end":{"line":26,"column":96}},"locations":[{"start":{"line":26,"column":85},"end":{"line":26,"column":96}}]},"3":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":26},"end":{"line":26,"column":85}},"locations":[{"start":{"line":26,"column":26},"end":{"line":26,"column":85}}]},"4":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":0},"end":{"line":41,"column":1}},"locations":[{"start":{"line":31,"column":0},"end":{"line":41,"column":1}}]},"5":{"type":"branch","line":32,"loc":{"start":{"line":32,"column":14},"end":{"line":34,"column":3}},"locations":[{"start":{"line":32,"column":14},"end":{"line":34,"column":3}}]},"6":{"type":"branch","line":34,"loc":{"start":{"line":34,"column":2},"end":{"line":36,"column":24}},"locations":[{"start":{"line":34,"column":2},"end":{"line":36,"column":24}}]},"7":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":16},"end":{"line":36,"column":45}},"locations":[{"start":{"line":36,"column":16},"end":{"line":36,"column":45}}]},"8":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":45},"end":{"line":38,"column":3}},"locations":[{"start":{"line":36,"column":45},"end":{"line":38,"column":3}}]},"9":{"type":"branch","line":38,"loc":{"start":{"line":38,"column":2},"end":{"line":41,"column":1}},"locations":[{"start":{"line":38,"column":2},"end":{"line":41,"column":1}}]},"10":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":7},"end":{"line":86,"column":1}},"locations":[{"start":{"line":49,"column":7},"end":{"line":86,"column":1}}]},"11":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":28},"end":{"line":52,"column":3}},"locations":[{"start":{"line":50,"column":28},"end":{"line":52,"column":3}}]},"12":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":2},"end":{"line":86,"column":1}},"locations":[{"start":{"line":52,"column":2},"end":{"line":86,"column":1}}]},"13":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":19},"end":{"line":83,"column":7}},"locations":[{"start":{"line":56,"column":19},"end":{"line":83,"column":7}}]},"14":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":49},"end":{"line":62,"column":70}},"locations":[{"start":{"line":62,"column":49},"end":{"line":62,"column":70}}]},"15":{"type":"branch","line":70,"loc":{"start":{"line":70,"column":17},"end":{"line":70,"column":84}},"locations":[{"start":{"line":70,"column":17},"end":{"line":70,"column":84}}]}},"b":{"0":[8],"1":[4],"2":[4],"3":[4],"4":[8],"5":[2],"6":[6],"7":[5],"8":[1],"9":[5],"10":[5],"11":[1],"12":[4],"13":[4],"14":[1],"15":[1]},"fnMap":{"0":{"name":"isClassified","decl":{"start":{"line":25,"column":7},"end":{"line":27,"column":1}},"loc":{"start":{"line":25,"column":7},"end":{"line":27,"column":1}},"line":25},"1":{"name":"Value","decl":{"start":{"line":31,"column":0},"end":{"line":41,"column":1}},"loc":{"start":{"line":31,"column":0},"end":{"line":41,"column":1}},"line":31},"2":{"name":"AuditBlock","decl":{"start":{"line":49,"column":7},"end":{"line":86,"column":1}},"loc":{"start":{"line":49,"column":7},"end":{"line":86,"column":1}},"line":49}},"f":{"0":8,"1":8,"2":5}} -,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/Banner.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/Banner.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":39}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":42}},"17":{"start":{"line":18,"column":0},"end":{"line":18,"column":62}},"18":{"start":{"line":19,"column":0},"end":{"line":19,"column":50}},"19":{"start":{"line":20,"column":0},"end":{"line":20,"column":62}},"20":{"start":{"line":21,"column":0},"end":{"line":21,"column":58}},"21":{"start":{"line":22,"column":0},"end":{"line":22,"column":58}},"22":{"start":{"line":23,"column":0},"end":{"line":23,"column":58}},"23":{"start":{"line":24,"column":0},"end":{"line":24,"column":2}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":88}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":10}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":8}},"33":{"start":{"line":34,"column":0},"end":{"line":34,"column":17}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":22}},"35":{"start":{"line":36,"column":0},"end":{"line":36,"column":106}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":16}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":10}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":1}}},"s":{"0":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"30":1,"31":14,"32":14,"33":14,"34":14,"35":14,"37":14,"38":14,"40":14},"branchMap":{"0":{"type":"branch","line":31,"loc":{"start":{"line":31,"column":7},"end":{"line":41,"column":1}},"locations":[{"start":{"line":31,"column":7},"end":{"line":41,"column":1}}]},"1":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":52},"end":{"line":36,"column":84}},"locations":[{"start":{"line":36,"column":52},"end":{"line":36,"column":84}}]},"2":{"type":"branch","line":36,"loc":{"start":{"line":36,"column":60},"end":{"line":36,"column":103}},"locations":[{"start":{"line":36,"column":60},"end":{"line":36,"column":103}}]}},"b":{"0":[14],"1":[9],"2":[5]},"fnMap":{"0":{"name":"Banner","decl":{"start":{"line":31,"column":7},"end":{"line":41,"column":1}},"loc":{"start":{"line":31,"column":7},"end":{"line":41,"column":1}},"line":31}},"f":{"0":14}} -,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/KeysetTable.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/KeysetTable.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":81}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":49}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":40}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":54}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":1}},"37":{"start":{"line":38,"column":0},"end":{"line":38,"column":131}},"38":{"start":{"line":39,"column":0},"end":{"line":39,"column":44}},"39":{"start":{"line":40,"column":0},"end":{"line":40,"column":60}},"40":{"start":{"line":41,"column":0},"end":{"line":41,"column":44}},"41":{"start":{"line":42,"column":0},"end":{"line":42,"column":59}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":31}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":32}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":52}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":40}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":26}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":11}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":59}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":86}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":83}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":35}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":43}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":25}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":15}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":48}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":26}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":7}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":6}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":21}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":4}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":19}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":31}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":18}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":10}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":36}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":40}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":15}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":89}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":38}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":122}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":31}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":19}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":15}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":15}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":16}},"79":{"start":{"line":80,"column":0},"end":{"line":80,"column":15}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":30}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":90}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":40}},"83":{"start":{"line":84,"column":0},"end":{"line":84,"column":112}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":36}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":21}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":17}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":17}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":13}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":16}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":14}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":58}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":88}},"98":{"start":{"line":99,"column":0},"end":{"line":99,"column":29}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":30}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":32}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":19}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":112}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":98}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":13}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":21}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":19}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":14}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":62}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":45}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":53}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":15}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":41}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":17}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":125}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":42}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":57}},"123":{"start":{"line":124,"column":0},"end":{"line":124,"column":60}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":19}},"126":{"start":{"line":127,"column":0},"end":{"line":127,"column":12}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":10}},"129":{"start":{"line":130,"column":0},"end":{"line":130,"column":1}}},"s":{"0":1,"25":1,"26":19,"27":18,"28":18,"37":1,"38":29,"39":29,"40":29,"41":29,"42":29,"44":29,"45":29,"46":15,"47":15,"48":15,"49":15,"50":13,"51":12,"52":12,"53":12,"54":12,"55":15,"56":2,"57":2,"58":2,"59":15,"60":29,"61":29,"63":29,"64":10,"65":29,"67":29,"68":29,"69":29,"70":29,"71":29,"72":29,"73":29,"74":29,"75":29,"76":29,"77":29,"78":29,"79":29,"80":29,"81":18,"82":18,"83":18,"84":18,"85":18,"86":18,"87":18,"88":29,"89":29,"90":29,"92":29,"95":2,"98":29,"99":2,"100":2,"102":2,"103":2,"104":2,"105":2,"107":2,"108":2,"109":2,"112":29,"113":29,"115":29,"116":29,"117":29,"118":19,"119":19,"120":19,"121":19,"123":19,"124":19,"126":29,"127":29,"129":29},"branchMap":{"0":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":7},"end":{"line":29,"column":1}},"locations":[{"start":{"line":26,"column":7},"end":{"line":29,"column":1}}]},"1":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":30},"end":{"line":27,"column":40}},"locations":[{"start":{"line":27,"column":30},"end":{"line":27,"column":40}}]},"2":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":37},"end":{"line":29,"column":1}},"locations":[{"start":{"line":27,"column":37},"end":{"line":29,"column":1}}]},"3":{"type":"branch","line":38,"loc":{"start":{"line":38,"column":7},"end":{"line":130,"column":1}},"locations":[{"start":{"line":38,"column":7},"end":{"line":130,"column":1}}]},"4":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":17},"end":{"line":93,"column":48}},"locations":[{"start":{"line":93,"column":17},"end":{"line":93,"column":48}}]},"5":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":43},"end":{"line":93,"column":58}},"locations":[{"start":{"line":93,"column":43},"end":{"line":93,"column":58}}]},"6":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":48},"end":{"line":96,"column":88}},"locations":[{"start":{"line":93,"column":48},"end":{"line":96,"column":88}}]},"7":{"type":"branch","line":99,"loc":{"start":{"line":99,"column":17},"end":{"line":110,"column":14}},"locations":[{"start":{"line":99,"column":17},"end":{"line":110,"column":14}}]},"8":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":31},"end":{"line":116,"column":50}},"locations":[{"start":{"line":116,"column":31},"end":{"line":116,"column":50}}]},"9":{"type":"branch","line":116,"loc":{"start":{"line":116,"column":39},"end":{"line":116,"column":53}},"locations":[{"start":{"line":116,"column":39},"end":{"line":116,"column":53}}]},"10":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":10},"end":{"line":118,"column":41}},"locations":[{"start":{"line":118,"column":10},"end":{"line":118,"column":41}}]},"11":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":29},"end":{"line":125,"column":19}},"locations":[{"start":{"line":118,"column":29},"end":{"line":125,"column":19}}]},"12":{"type":"branch","line":124,"loc":{"start":{"line":124,"column":23},"end":{"line":124,"column":48}},"locations":[{"start":{"line":124,"column":23},"end":{"line":124,"column":48}}]},"13":{"type":"branch","line":124,"loc":{"start":{"line":124,"column":35},"end":{"line":124,"column":60}},"locations":[{"start":{"line":124,"column":35},"end":{"line":124,"column":60}}]},"14":{"type":"branch","line":46,"loc":{"start":{"line":46,"column":4},"end":{"line":60,"column":6}},"locations":[{"start":{"line":46,"column":4},"end":{"line":60,"column":6}}]},"15":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":57},"end":{"line":51,"column":86}},"locations":[{"start":{"line":50,"column":57},"end":{"line":51,"column":86}}]},"16":{"type":"branch","line":51,"loc":{"start":{"line":51,"column":41},"end":{"line":51,"column":86}},"locations":[{"start":{"line":51,"column":41},"end":{"line":51,"column":86}}]},"17":{"type":"branch","line":51,"loc":{"start":{"line":51,"column":41},"end":{"line":56,"column":14}},"locations":[{"start":{"line":51,"column":41},"end":{"line":56,"column":14}}]},"18":{"type":"branch","line":56,"loc":{"start":{"line":56,"column":6},"end":{"line":59,"column":7}},"locations":[{"start":{"line":56,"column":6},"end":{"line":59,"column":7}}]},"19":{"type":"branch","line":57,"loc":{"start":{"line":57,"column":41},"end":{"line":57,"column":48}},"locations":[{"start":{"line":57,"column":41},"end":{"line":57,"column":48}}]},"20":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":16},"end":{"line":52,"column":81}},"locations":[{"start":{"line":52,"column":16},"end":{"line":52,"column":81}}]},"21":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":31},"end":{"line":52,"column":52}},"locations":[{"start":{"line":52,"column":31},"end":{"line":52,"column":52}}]},"22":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":44},"end":{"line":52,"column":81}},"locations":[{"start":{"line":52,"column":44},"end":{"line":52,"column":81}}]},"23":{"type":"branch","line":64,"loc":{"start":{"line":64,"column":12},"end":{"line":66,"column":5}},"locations":[{"start":{"line":64,"column":12},"end":{"line":66,"column":5}}]},"24":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":25},"end":{"line":76,"column":19}},"locations":[{"start":{"line":73,"column":25},"end":{"line":76,"column":19}}]},"25":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":91},"end":{"line":74,"column":116}},"locations":[{"start":{"line":74,"column":91},"end":{"line":74,"column":116}}]},"26":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":101},"end":{"line":74,"column":118}},"locations":[{"start":{"line":74,"column":101},"end":{"line":74,"column":118}}]},"27":{"type":"branch","line":81,"loc":{"start":{"line":81,"column":20},"end":{"line":88,"column":17}},"locations":[{"start":{"line":81,"column":20},"end":{"line":88,"column":17}}]},"28":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":27},"end":{"line":86,"column":21}},"locations":[{"start":{"line":83,"column":27},"end":{"line":86,"column":21}}]},"29":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":81},"end":{"line":84,"column":106}},"locations":[{"start":{"line":84,"column":81},"end":{"line":84,"column":106}}]},"30":{"type":"branch","line":84,"loc":{"start":{"line":84,"column":91},"end":{"line":84,"column":108}},"locations":[{"start":{"line":84,"column":91},"end":{"line":84,"column":108}}]},"31":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":23},"end":{"line":105,"column":98}},"locations":[{"start":{"line":105,"column":23},"end":{"line":105,"column":98}}]},"32":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":60},"end":{"line":105,"column":71}},"locations":[{"start":{"line":105,"column":60},"end":{"line":105,"column":71}}]},"33":{"type":"branch","line":105,"loc":{"start":{"line":105,"column":64},"end":{"line":105,"column":79}},"locations":[{"start":{"line":105,"column":64},"end":{"line":105,"column":79}}]},"34":{"type":"branch","line":122,"loc":{"start":{"line":122,"column":21},"end":{"line":122,"column":57}},"locations":[{"start":{"line":122,"column":21},"end":{"line":122,"column":57}}]}},"b":{"0":[19],"1":[1],"2":[18],"3":[29],"4":[12],"5":[3],"6":[2],"7":[2],"8":[8],"9":[21],"10":[21],"11":[19],"12":[15],"13":[4],"14":[15],"15":[13],"16":[1],"17":[12],"18":[2],"19":[0],"20":[12],"21":[9],"22":[3],"23":[10],"24":[29],"25":[2],"26":[27],"27":[18],"28":[18],"29":[1],"30":[17],"31":[2],"32":[1],"33":[1],"34":[3]},"fnMap":{"0":{"name":"clampTake","decl":{"start":{"line":26,"column":7},"end":{"line":29,"column":1}},"loc":{"start":{"line":26,"column":7},"end":{"line":29,"column":1}},"line":26},"1":{"name":"KeysetTable","decl":{"start":{"line":38,"column":7},"end":{"line":130,"column":1}},"loc":{"start":{"line":38,"column":7},"end":{"line":130,"column":1}},"line":38},"2":{"name":"onClick","decl":{"start":{"line":105,"column":23},"end":{"line":105,"column":98}},"loc":{"start":{"line":105,"column":23},"end":{"line":105,"column":98}},"line":105},"3":{"name":"onClick","decl":{"start":{"line":122,"column":21},"end":{"line":122,"column":57}},"loc":{"start":{"line":122,"column":21},"end":{"line":122,"column":57}},"line":122}},"f":{"0":19,"1":29,"2":2,"3":3}} -,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/RunProgress.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/RunProgress.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":42}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":80}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":87}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":62}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":77}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":61}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":72}},"30":{"start":{"line":31,"column":0},"end":{"line":31,"column":24}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":1}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":96}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":37}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":54}},"46":{"start":{"line":47,"column":0},"end":{"line":47,"column":100}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":49}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":48}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":97}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":1}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":72}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":25}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":46}},"55":{"start":{"line":56,"column":0},"end":{"line":56,"column":34}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":2}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":43}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":100}},"60":{"start":{"line":61,"column":0},"end":{"line":61,"column":1}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":74}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":98}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":40}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":44}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":17}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":49}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":19}},"74":{"start":{"line":75,"column":0},"end":{"line":75,"column":39}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":22}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":23}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":100}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":10}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":58}},"86":{"start":{"line":87,"column":0},"end":{"line":87,"column":47}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":58}},"88":{"start":{"line":89,"column":0},"end":{"line":89,"column":56}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":56}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":15}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":34}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":80}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":34}},"95":{"start":{"line":96,"column":0},"end":{"line":96,"column":89}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":12}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":10}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":26}},"101":{"start":{"line":102,"column":0},"end":{"line":102,"column":27}},"102":{"start":{"line":103,"column":0},"end":{"line":103,"column":25}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":27}},"104":{"start":{"line":105,"column":0},"end":{"line":105,"column":68}},"106":{"start":{"line":107,"column":0},"end":{"line":107,"column":76}},"107":{"start":{"line":108,"column":0},"end":{"line":108,"column":12}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":97}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":27}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":58}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":96}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":32}},"114":{"start":{"line":115,"column":0},"end":{"line":115,"column":15}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":34}},"116":{"start":{"line":117,"column":0},"end":{"line":117,"column":23}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":35}},"118":{"start":{"line":119,"column":0},"end":{"line":119,"column":31}},"119":{"start":{"line":120,"column":0},"end":{"line":120,"column":49}},"120":{"start":{"line":121,"column":0},"end":{"line":121,"column":34}},"121":{"start":{"line":122,"column":0},"end":{"line":122,"column":34}},"124":{"start":{"line":125,"column":0},"end":{"line":125,"column":35}},"125":{"start":{"line":126,"column":0},"end":{"line":126,"column":17}},"127":{"start":{"line":128,"column":0},"end":{"line":128,"column":12}},"128":{"start":{"line":129,"column":0},"end":{"line":129,"column":10}},"130":{"start":{"line":131,"column":0},"end":{"line":131,"column":1}}},"s":{"0":1,"24":1,"25":12,"26":12,"27":12,"28":12,"29":6,"30":6,"31":6,"43":1,"44":14,"45":11,"46":14,"47":14,"48":14,"49":14,"50":14,"52":1,"53":1,"54":1,"55":1,"56":1,"58":4,"59":4,"60":4,"67":1,"68":7,"69":7,"70":7,"71":7,"72":7,"73":2,"74":5,"75":3,"76":2,"82":7,"84":7,"85":7,"86":7,"87":7,"88":7,"89":7,"90":7,"91":7,"92":1,"94":7,"95":1,"97":7,"99":7,"100":7,"101":7,"102":7,"103":7,"104":7,"106":7,"107":7,"109":7,"110":7,"111":7,"112":7,"113":7,"114":5,"115":5,"116":5,"117":5,"118":1,"119":4,"120":3,"121":1,"124":5,"125":5,"127":7,"128":7,"130":7},"branchMap":{"0":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":7},"end":{"line":32,"column":1}},"locations":[{"start":{"line":25,"column":7},"end":{"line":32,"column":1}}]},"1":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":29},"end":{"line":26,"column":58}},"locations":[{"start":{"line":26,"column":29},"end":{"line":26,"column":58}}]},"2":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":53},"end":{"line":26,"column":75}},"locations":[{"start":{"line":26,"column":53},"end":{"line":26,"column":75}}]},"3":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":75},"end":{"line":26,"column":87}},"locations":[{"start":{"line":26,"column":75},"end":{"line":26,"column":87}}]},"4":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":82},"end":{"line":27,"column":31}},"locations":[{"start":{"line":26,"column":82},"end":{"line":27,"column":31}}]},"5":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":18},"end":{"line":27,"column":58}},"locations":[{"start":{"line":27,"column":18},"end":{"line":27,"column":58}}]},"6":{"type":"branch","line":27,"loc":{"start":{"line":27,"column":54},"end":{"line":27,"column":62}},"locations":[{"start":{"line":27,"column":54},"end":{"line":27,"column":62}}]},"7":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":30},"end":{"line":29,"column":49}},"locations":[{"start":{"line":29,"column":30},"end":{"line":29,"column":49}}]},"8":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":49},"end":{"line":29,"column":61}},"locations":[{"start":{"line":29,"column":49},"end":{"line":29,"column":61}}]},"9":{"type":"branch","line":29,"loc":{"start":{"line":29,"column":56},"end":{"line":32,"column":1}},"locations":[{"start":{"line":29,"column":56},"end":{"line":32,"column":1}}]},"10":{"type":"branch","line":44,"loc":{"start":{"line":44,"column":7},"end":{"line":51,"column":1}},"locations":[{"start":{"line":44,"column":7},"end":{"line":51,"column":1}}]},"11":{"type":"branch","line":45,"loc":{"start":{"line":45,"column":23},"end":{"line":45,"column":37}},"locations":[{"start":{"line":45,"column":23},"end":{"line":45,"column":37}}]},"12":{"type":"branch","line":45,"loc":{"start":{"line":45,"column":30},"end":{"line":47,"column":29}},"locations":[{"start":{"line":45,"column":30},"end":{"line":47,"column":29}}]},"13":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":22},"end":{"line":47,"column":100}},"locations":[{"start":{"line":47,"column":22},"end":{"line":47,"column":100}}]},"14":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":66},"end":{"line":47,"column":89}},"locations":[{"start":{"line":47,"column":66},"end":{"line":47,"column":89}}]},"15":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":77},"end":{"line":47,"column":100}},"locations":[{"start":{"line":47,"column":77},"end":{"line":47,"column":100}}]},"16":{"type":"branch","line":47,"loc":{"start":{"line":47,"column":89},"end":{"line":48,"column":39}},"locations":[{"start":{"line":47,"column":89},"end":{"line":48,"column":39}}]},"17":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":32},"end":{"line":48,"column":49}},"locations":[{"start":{"line":48,"column":32},"end":{"line":48,"column":49}}]},"18":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":39},"end":{"line":49,"column":37}},"locations":[{"start":{"line":48,"column":39},"end":{"line":49,"column":37}}]},"19":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":30},"end":{"line":49,"column":48}},"locations":[{"start":{"line":49,"column":30},"end":{"line":49,"column":48}}]},"20":{"type":"branch","line":49,"loc":{"start":{"line":49,"column":37},"end":{"line":50,"column":86}},"locations":[{"start":{"line":49,"column":37},"end":{"line":50,"column":86}}]},"21":{"type":"branch","line":50,"loc":{"start":{"line":50,"column":64},"end":{"line":50,"column":97}},"locations":[{"start":{"line":50,"column":64},"end":{"line":50,"column":97}}]},"22":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":0},"end":{"line":61,"column":1}},"locations":[{"start":{"line":59,"column":0},"end":{"line":61,"column":1}}]},"23":{"type":"branch","line":60,"loc":{"start":{"line":60,"column":58},"end":{"line":60,"column":100}},"locations":[{"start":{"line":60,"column":58},"end":{"line":60,"column":100}}]},"24":{"type":"branch","line":68,"loc":{"start":{"line":68,"column":7},"end":{"line":131,"column":1}},"locations":[{"start":{"line":68,"column":7},"end":{"line":131,"column":1}}]},"25":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":32},"end":{"line":69,"column":96}},"locations":[{"start":{"line":69,"column":32},"end":{"line":69,"column":96}}]},"26":{"type":"branch","line":69,"loc":{"start":{"line":69,"column":92},"end":{"line":69,"column":98}},"locations":[{"start":{"line":69,"column":92},"end":{"line":69,"column":98}}]},"27":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":16},"end":{"line":73,"column":49}},"locations":[{"start":{"line":73,"column":16},"end":{"line":73,"column":49}}]},"28":{"type":"branch","line":73,"loc":{"start":{"line":73,"column":48},"end":{"line":74,"column":19}},"locations":[{"start":{"line":73,"column":48},"end":{"line":74,"column":19}}]},"29":{"type":"branch","line":74,"loc":{"start":{"line":74,"column":8},"end":{"line":77,"column":23}},"locations":[{"start":{"line":74,"column":8},"end":{"line":77,"column":23}}]},"30":{"type":"branch","line":75,"loc":{"start":{"line":75,"column":20},"end":{"line":76,"column":22}},"locations":[{"start":{"line":75,"column":20},"end":{"line":76,"column":22}}]},"31":{"type":"branch","line":76,"loc":{"start":{"line":76,"column":10},"end":{"line":77,"column":23}},"locations":[{"start":{"line":76,"column":10},"end":{"line":77,"column":23}}]},"32":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":56},"end":{"line":83,"column":90}},"locations":[{"start":{"line":83,"column":56},"end":{"line":83,"column":90}}]},"33":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":78},"end":{"line":83,"column":100}},"locations":[{"start":{"line":83,"column":78},"end":{"line":83,"column":100}}]},"34":{"type":"branch","line":92,"loc":{"start":{"line":92,"column":28},"end":{"line":93,"column":80}},"locations":[{"start":{"line":92,"column":28},"end":{"line":93,"column":80}}]},"35":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":28},"end":{"line":96,"column":89}},"locations":[{"start":{"line":95,"column":28},"end":{"line":96,"column":89}}]},"36":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":18},"end":{"line":112,"column":58}},"locations":[{"start":{"line":112,"column":18},"end":{"line":112,"column":58}}]},"37":{"type":"branch","line":113,"loc":{"start":{"line":113,"column":27},"end":{"line":113,"column":96}},"locations":[{"start":{"line":113,"column":27},"end":{"line":113,"column":96}}]},"38":{"type":"branch","line":114,"loc":{"start":{"line":114,"column":21},"end":{"line":126,"column":17}},"locations":[{"start":{"line":114,"column":21},"end":{"line":126,"column":17}}]},"39":{"type":"branch","line":118,"loc":{"start":{"line":118,"column":26},"end":{"line":119,"column":31}},"locations":[{"start":{"line":118,"column":26},"end":{"line":119,"column":31}}]},"40":{"type":"branch","line":119,"loc":{"start":{"line":119,"column":18},"end":{"line":122,"column":34}},"locations":[{"start":{"line":119,"column":18},"end":{"line":122,"column":34}}]},"41":{"type":"branch","line":120,"loc":{"start":{"line":120,"column":30},"end":{"line":121,"column":34}},"locations":[{"start":{"line":120,"column":30},"end":{"line":121,"column":34}}]},"42":{"type":"branch","line":121,"loc":{"start":{"line":121,"column":20},"end":{"line":122,"column":34}},"locations":[{"start":{"line":121,"column":20},"end":{"line":122,"column":34}}]}},"b":{"0":[12],"1":[10],"2":[10],"3":[5],"4":[7],"5":[1],"6":[6],"7":[7],"8":[1],"9":[6],"10":[14],"11":[3],"12":[11],"13":[2],"14":[1],"15":[1],"16":[9],"17":[3],"18":[6],"19":[2],"20":[4],"21":[0],"22":[4],"23":[0],"24":[7],"25":[6],"26":[1],"27":[6],"28":[2],"29":[5],"30":[3],"31":[2],"32":[3],"33":[4],"34":[1],"35":[1],"36":[4],"37":[5],"38":[5],"39":[1],"40":[4],"41":[3],"42":[1]},"fnMap":{"0":{"name":"itemsPerSecond","decl":{"start":{"line":25,"column":7},"end":{"line":32,"column":1}},"loc":{"start":{"line":25,"column":7},"end":{"line":32,"column":1}},"line":25},"1":{"name":"deadlineVerdict","decl":{"start":{"line":44,"column":7},"end":{"line":51,"column":1}},"loc":{"start":{"line":44,"column":7},"end":{"line":51,"column":1}},"line":44},"2":{"name":"formatRate","decl":{"start":{"line":59,"column":0},"end":{"line":61,"column":1}},"loc":{"start":{"line":59,"column":0},"end":{"line":61,"column":1}},"line":59},"3":{"name":"RunProgress","decl":{"start":{"line":68,"column":7},"end":{"line":131,"column":1}},"loc":{"start":{"line":68,"column":7},"end":{"line":131,"column":1}},"line":68}},"f":{"0":12,"1":14,"2":4,"3":7}} -,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/StateBadge.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/StateBadge.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":56}},"2":{"start":{"line":3,"column":0},"end":{"line":3,"column":50}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":62}},"4":{"start":{"line":5,"column":0},"end":{"line":5,"column":50}},"5":{"start":{"line":6,"column":0},"end":{"line":6,"column":62}},"6":{"start":{"line":7,"column":0},"end":{"line":7,"column":58}},"7":{"start":{"line":8,"column":0},"end":{"line":8,"column":58}},"8":{"start":{"line":9,"column":0},"end":{"line":9,"column":58}},"9":{"start":{"line":10,"column":0},"end":{"line":10,"column":2}},"24":{"start":{"line":25,"column":0},"end":{"line":25,"column":79}},"25":{"start":{"line":26,"column":0},"end":{"line":26,"column":52}},"26":{"start":{"line":27,"column":0},"end":{"line":27,"column":10}},"27":{"start":{"line":28,"column":0},"end":{"line":28,"column":9}},"28":{"start":{"line":29,"column":0},"end":{"line":29,"column":22}},"29":{"start":{"line":30,"column":0},"end":{"line":30,"column":116}},"31":{"start":{"line":32,"column":0},"end":{"line":32,"column":13}},"32":{"start":{"line":33,"column":0},"end":{"line":33,"column":11}},"34":{"start":{"line":35,"column":0},"end":{"line":35,"column":1}}},"s":{"0":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"24":1,"25":9,"26":9,"27":9,"28":9,"29":9,"31":9,"32":9,"34":9},"branchMap":{"0":{"type":"branch","line":25,"loc":{"start":{"line":25,"column":7},"end":{"line":35,"column":1}},"locations":[{"start":{"line":25,"column":7},"end":{"line":35,"column":1}}]},"1":{"type":"branch","line":26,"loc":{"start":{"line":26,"column":15},"end":{"line":26,"column":52}},"locations":[{"start":{"line":26,"column":15},"end":{"line":26,"column":52}}]}},"b":{"0":[9],"1":[6]},"fnMap":{"0":{"name":"StateBadge","decl":{"start":{"line":25,"column":7},"end":{"line":35,"column":1}},"loc":{"start":{"line":25,"column":7},"end":{"line":35,"column":1}},"line":25}},"f":{"0":9}} -,"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/VerbButton.tsx": {"path":"/Users/omercelik/Repositories/goldpath/ui/kit/src/components/VerbButton.tsx","all":false,"statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":33}},"42":{"start":{"line":43,"column":0},"end":{"line":43,"column":124}},"43":{"start":{"line":44,"column":0},"end":{"line":44,"column":60}},"44":{"start":{"line":45,"column":0},"end":{"line":45,"column":43}},"45":{"start":{"line":46,"column":0},"end":{"line":46,"column":78}},"47":{"start":{"line":48,"column":0},"end":{"line":48,"column":27}},"48":{"start":{"line":49,"column":0},"end":{"line":49,"column":34}},"49":{"start":{"line":50,"column":0},"end":{"line":50,"column":29}},"50":{"start":{"line":51,"column":0},"end":{"line":51,"column":9}},"51":{"start":{"line":52,"column":0},"end":{"line":52,"column":64}},"52":{"start":{"line":53,"column":0},"end":{"line":53,"column":13}},"53":{"start":{"line":54,"column":0},"end":{"line":54,"column":96}},"54":{"start":{"line":55,"column":0},"end":{"line":55,"column":5}},"56":{"start":{"line":57,"column":0},"end":{"line":57,"column":41}},"57":{"start":{"line":58,"column":0},"end":{"line":58,"column":18}},"58":{"start":{"line":59,"column":0},"end":{"line":59,"column":22}},"59":{"start":{"line":60,"column":0},"end":{"line":60,"column":4}},"61":{"start":{"line":62,"column":0},"end":{"line":62,"column":34}},"62":{"start":{"line":63,"column":0},"end":{"line":63,"column":12}},"63":{"start":{"line":64,"column":0},"end":{"line":64,"column":182}},"64":{"start":{"line":65,"column":0},"end":{"line":65,"column":30}},"65":{"start":{"line":66,"column":0},"end":{"line":66,"column":61}},"66":{"start":{"line":67,"column":0},"end":{"line":67,"column":18}},"67":{"start":{"line":68,"column":0},"end":{"line":68,"column":16}},"68":{"start":{"line":69,"column":0},"end":{"line":69,"column":35}},"69":{"start":{"line":70,"column":0},"end":{"line":70,"column":36}},"70":{"start":{"line":71,"column":0},"end":{"line":71,"column":26}},"71":{"start":{"line":72,"column":0},"end":{"line":72,"column":63}},"72":{"start":{"line":73,"column":0},"end":{"line":73,"column":94}},"73":{"start":{"line":74,"column":0},"end":{"line":74,"column":12}},"75":{"start":{"line":76,"column":0},"end":{"line":76,"column":15}},"76":{"start":{"line":77,"column":0},"end":{"line":77,"column":206}},"77":{"start":{"line":78,"column":0},"end":{"line":78,"column":34}},"78":{"start":{"line":79,"column":0},"end":{"line":79,"column":36}},"80":{"start":{"line":81,"column":0},"end":{"line":81,"column":17}},"81":{"start":{"line":82,"column":0},"end":{"line":82,"column":17}},"82":{"start":{"line":83,"column":0},"end":{"line":83,"column":137}},"84":{"start":{"line":85,"column":0},"end":{"line":85,"column":17}},"85":{"start":{"line":86,"column":0},"end":{"line":86,"column":13}},"87":{"start":{"line":88,"column":0},"end":{"line":88,"column":3}},"89":{"start":{"line":90,"column":0},"end":{"line":90,"column":10}},"90":{"start":{"line":91,"column":0},"end":{"line":91,"column":53}},"91":{"start":{"line":92,"column":0},"end":{"line":92,"column":13}},"92":{"start":{"line":93,"column":0},"end":{"line":93,"column":210}},"93":{"start":{"line":94,"column":0},"end":{"line":94,"column":43}},"94":{"start":{"line":95,"column":0},"end":{"line":95,"column":54}},"96":{"start":{"line":97,"column":0},"end":{"line":97,"column":55}},"97":{"start":{"line":98,"column":0},"end":{"line":98,"column":15}},"99":{"start":{"line":100,"column":0},"end":{"line":100,"column":75}},"100":{"start":{"line":101,"column":0},"end":{"line":101,"column":83}},"103":{"start":{"line":104,"column":0},"end":{"line":104,"column":80}},"105":{"start":{"line":106,"column":0},"end":{"line":106,"column":68}},"108":{"start":{"line":109,"column":0},"end":{"line":109,"column":78}},"109":{"start":{"line":110,"column":0},"end":{"line":110,"column":37}},"110":{"start":{"line":111,"column":0},"end":{"line":111,"column":37}},"111":{"start":{"line":112,"column":0},"end":{"line":112,"column":80}},"112":{"start":{"line":113,"column":0},"end":{"line":113,"column":76}},"113":{"start":{"line":114,"column":0},"end":{"line":114,"column":17}},"115":{"start":{"line":116,"column":0},"end":{"line":116,"column":11}},"117":{"start":{"line":118,"column":0},"end":{"line":118,"column":1}}},"s":{"0":1,"42":1,"43":57,"44":57,"45":57,"47":57,"48":9,"49":9,"50":9,"51":9,"52":9,"53":1,"54":1,"56":9,"57":9,"58":9,"59":9,"61":57,"62":29,"63":29,"64":29,"65":29,"66":29,"67":21,"68":21,"69":21,"70":21,"71":21,"72":21,"73":21,"75":29,"76":29,"77":29,"78":29,"80":29,"81":29,"82":29,"84":29,"85":29,"87":29,"89":28,"90":28,"91":28,"92":57,"93":57,"94":57,"96":57,"97":57,"99":57,"100":4,"103":57,"105":2,"108":57,"109":2,"110":2,"111":1,"112":1,"113":2,"115":57,"117":57},"branchMap":{"0":{"type":"branch","line":43,"loc":{"start":{"line":43,"column":7},"end":{"line":118,"column":1}},"locations":[{"start":{"line":43,"column":7},"end":{"line":118,"column":1}}]},"1":{"type":"branch","line":46,"loc":{"start":{"line":46,"column":24},"end":{"line":46,"column":43}},"locations":[{"start":{"line":46,"column":24},"end":{"line":46,"column":43}}]},"2":{"type":"branch","line":46,"loc":{"start":{"line":46,"column":43},"end":{"line":46,"column":78}},"locations":[{"start":{"line":46,"column":43},"end":{"line":46,"column":78}}]},"3":{"type":"branch","line":62,"loc":{"start":{"line":62,"column":33},"end":{"line":88,"column":3}},"locations":[{"start":{"line":62,"column":33},"end":{"line":88,"column":3}}]},"4":{"type":"branch","line":67,"loc":{"start":{"line":67,"column":9},"end":{"line":74,"column":12}},"locations":[{"start":{"line":67,"column":9},"end":{"line":74,"column":12}}]},"5":{"type":"branch","line":77,"loc":{"start":{"line":77,"column":94},"end":{"line":77,"column":158}},"locations":[{"start":{"line":77,"column":94},"end":{"line":77,"column":158}}]},"6":{"type":"branch","line":88,"loc":{"start":{"line":88,"column":2},"end":{"line":93,"column":106}},"locations":[{"start":{"line":88,"column":2},"end":{"line":93,"column":106}}]},"7":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":92},"end":{"line":93,"column":162}},"locations":[{"start":{"line":93,"column":92},"end":{"line":93,"column":162}}]},"8":{"type":"branch","line":93,"loc":{"start":{"line":93,"column":106},"end":{"line":93,"column":207}},"locations":[{"start":{"line":93,"column":106},"end":{"line":93,"column":207}}]},"9":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":22},"end":{"line":97,"column":49}},"locations":[{"start":{"line":97,"column":22},"end":{"line":97,"column":49}}]},"10":{"type":"branch","line":97,"loc":{"start":{"line":97,"column":36},"end":{"line":97,"column":55}},"locations":[{"start":{"line":97,"column":36},"end":{"line":97,"column":55}}]},"11":{"type":"branch","line":100,"loc":{"start":{"line":100,"column":8},"end":{"line":100,"column":43}},"locations":[{"start":{"line":100,"column":8},"end":{"line":100,"column":43}}]},"12":{"type":"branch","line":100,"loc":{"start":{"line":100,"column":30},"end":{"line":100,"column":75}},"locations":[{"start":{"line":100,"column":30},"end":{"line":100,"column":75}}]},"13":{"type":"branch","line":100,"loc":{"start":{"line":100,"column":66},"end":{"line":101,"column":83}},"locations":[{"start":{"line":100,"column":66},"end":{"line":101,"column":83}}]},"14":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":8},"end":{"line":104,"column":43}},"locations":[{"start":{"line":104,"column":8},"end":{"line":104,"column":43}}]},"15":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":30},"end":{"line":104,"column":80}},"locations":[{"start":{"line":104,"column":30},"end":{"line":104,"column":80}}]},"16":{"type":"branch","line":104,"loc":{"start":{"line":104,"column":66},"end":{"line":106,"column":68}},"locations":[{"start":{"line":104,"column":66},"end":{"line":106,"column":68}}]},"17":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":8},"end":{"line":109,"column":43}},"locations":[{"start":{"line":109,"column":8},"end":{"line":109,"column":43}}]},"18":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":30},"end":{"line":109,"column":78}},"locations":[{"start":{"line":109,"column":30},"end":{"line":109,"column":78}}]},"19":{"type":"branch","line":109,"loc":{"start":{"line":109,"column":66},"end":{"line":114,"column":17}},"locations":[{"start":{"line":109,"column":66},"end":{"line":114,"column":17}}]},"20":{"type":"branch","line":111,"loc":{"start":{"line":111,"column":36},"end":{"line":112,"column":80}},"locations":[{"start":{"line":111,"column":36},"end":{"line":112,"column":80}}]},"21":{"type":"branch","line":112,"loc":{"start":{"line":112,"column":14},"end":{"line":113,"column":76}},"locations":[{"start":{"line":112,"column":14},"end":{"line":113,"column":76}}]},"22":{"type":"branch","line":48,"loc":{"start":{"line":48,"column":14},"end":{"line":60,"column":4}},"locations":[{"start":{"line":48,"column":14},"end":{"line":60,"column":4}}]},"23":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":30},"end":{"line":52,"column":53}},"locations":[{"start":{"line":52,"column":30},"end":{"line":52,"column":53}}]},"24":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":49},"end":{"line":52,"column":62}},"locations":[{"start":{"line":52,"column":49},"end":{"line":52,"column":62}}]},"25":{"type":"branch","line":52,"loc":{"start":{"line":52,"column":62},"end":{"line":53,"column":12}},"locations":[{"start":{"line":52,"column":62},"end":{"line":53,"column":12}}]},"26":{"type":"branch","line":53,"loc":{"start":{"line":53,"column":4},"end":{"line":55,"column":5}},"locations":[{"start":{"line":53,"column":4},"end":{"line":55,"column":5}}]},"27":{"type":"branch","line":59,"loc":{"start":{"line":59,"column":4},"end":{"line":59,"column":22}},"locations":[{"start":{"line":59,"column":4},"end":{"line":59,"column":22}}]},"28":{"type":"branch","line":72,"loc":{"start":{"line":72,"column":22},"end":{"line":72,"column":63}},"locations":[{"start":{"line":72,"column":22},"end":{"line":72,"column":63}}]},"29":{"type":"branch","line":79,"loc":{"start":{"line":79,"column":19},"end":{"line":79,"column":36}},"locations":[{"start":{"line":79,"column":19},"end":{"line":79,"column":36}}]},"30":{"type":"branch","line":83,"loc":{"start":{"line":83,"column":105},"end":{"line":83,"column":137}},"locations":[{"start":{"line":83,"column":105},"end":{"line":83,"column":137}}]},"31":{"type":"branch","line":95,"loc":{"start":{"line":95,"column":17},"end":{"line":95,"column":54}},"locations":[{"start":{"line":95,"column":17},"end":{"line":95,"column":54}}]}},"b":{"0":[57],"1":[27],"2":[23],"3":[29],"4":[21],"5":[0],"6":[28],"7":[0],"8":[28],"9":[9],"10":[19],"11":[25],"12":[8],"13":[4],"14":[25],"15":[8],"16":[2],"17":[25],"18":[8],"19":[2],"20":[1],"21":[1],"22":[9],"23":[2],"24":[7],"25":[8],"26":[1],"27":[2],"28":[18],"29":[9],"30":[1],"31":[11]},"fnMap":{"0":{"name":"VerbButton","decl":{"start":{"line":43,"column":7},"end":{"line":118,"column":1}},"loc":{"start":{"line":43,"column":7},"end":{"line":118,"column":1}},"line":43},"1":{"name":"run","decl":{"start":{"line":48,"column":14},"end":{"line":60,"column":4}},"loc":{"start":{"line":48,"column":14},"end":{"line":60,"column":4}},"line":48},"2":{"name":"onChange","decl":{"start":{"line":72,"column":22},"end":{"line":72,"column":63}},"loc":{"start":{"line":72,"column":22},"end":{"line":72,"column":63}},"line":72},"3":{"name":"onClick","decl":{"start":{"line":79,"column":19},"end":{"line":79,"column":36}},"loc":{"start":{"line":79,"column":19},"end":{"line":79,"column":36}},"line":79},"4":{"name":"onClick","decl":{"start":{"line":83,"column":105},"end":{"line":83,"column":137}},"loc":{"start":{"line":83,"column":105},"end":{"line":83,"column":137}},"line":83},"5":{"name":"onClick","decl":{"start":{"line":95,"column":17},"end":{"line":95,"column":54}},"loc":{"start":{"line":95,"column":17},"end":{"line":95,"column":54}},"line":95}},"f":{"0":57,"1":9,"2":18,"3":9,"4":1,"5":11}} -} diff --git a/ui/kit/coverage/favicon.png b/ui/kit/coverage/favicon.png deleted file mode 100644 index c1525b811a167671e9de1fa78aab9f5c0b61cef7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> - - - - Code coverage report for All files - - - - - - - - - -
-
-

All files

-
- -
- 100% - Statements - 422/422 -
- - -
- 97.15% - Branches - 171/176 -
- - -
- 100% - Functions - 24/24 -
- - -
- 100% - Lines - 422/422 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
src -
-
100%46/46100%15/15100%3/3100%46/46
src/components -
-
100%376/37696.89%156/161100%21/21100%376/376
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/prettify.css b/ui/kit/coverage/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/ui/kit/coverage/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/ui/kit/coverage/prettify.js b/ui/kit/coverage/prettify.js deleted file mode 100644 index b322523..0000000 --- a/ui/kit/coverage/prettify.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/ui/kit/coverage/sort-arrow-sprite.png b/ui/kit/coverage/sort-arrow-sprite.png deleted file mode 100644 index 6ed68316eb3f65dec9063332d2f69bf3093bbfab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc diff --git a/ui/kit/coverage/sorter.js b/ui/kit/coverage/sorter.js deleted file mode 100644 index 4ed70ae..0000000 --- a/ui/kit/coverage/sorter.js +++ /dev/null @@ -1,210 +0,0 @@ -/* eslint-disable */ -var addSorting = (function() { - 'use strict'; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { - return document.querySelector('.coverage-summary'); - } - // returns the thead element of the summary table - function getTableHeader() { - return getTable().querySelector('thead tr'); - } - // returns the tbody element of the summary table - function getTableBody() { - return getTable().querySelector('tbody'); - } - // returns the th element for nth column - function getNthColumn(n) { - return getTableHeader().querySelectorAll('th')[n]; - } - - function onFilterInput() { - const searchValue = document.getElementById('fileSearch').value; - const rows = document.getElementsByTagName('tbody')[0].children; - - // Try to create a RegExp from the searchValue. If it fails (invalid regex), - // it will be treated as a plain text search - let searchRegex; - try { - searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive - } catch (error) { - searchRegex = null; - } - - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - let isMatch = false; - - if (searchRegex) { - // If a valid regex was created, use it for matching - isMatch = searchRegex.test(row.textContent); - } else { - // Otherwise, fall back to the original plain text search - isMatch = row.textContent - .toLowerCase() - .includes(searchValue.toLowerCase()); - } - - row.style.display = isMatch ? '' : 'none'; - } - } - - // loads the search box - function addSearchBox() { - var template = document.getElementById('filterTemplate'); - var templateClone = template.content.cloneNode(true); - templateClone.getElementById('fileSearch').oninput = onFilterInput; - template.parentElement.appendChild(templateClone); - } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = - colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function() { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSearchBox(); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/ui/kit/coverage/src/adminResult.ts.html b/ui/kit/coverage/src/adminResult.ts.html deleted file mode 100644 index 5918097..0000000 --- a/ui/kit/coverage/src/adminResult.ts.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - Code coverage report for src/adminResult.ts - - - - - - - - - -
-
-

All files / src adminResult.ts

-
- -
- 100% - Statements - 12/12 -
- - -
- 100% - Branches - 6/6 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 12/12 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28  -  -  -  -  -  -  -  -  -  -  -  -  -  -3x -3x -3x -3x -3x -3x -3x -2x -2x -2x -  -1x -1x - 
// The FROZEN verb envelope (docs/rfc/goldpath-admin-contract.md): every mutating verb
-// answers { ok, message } — 200 when ok, 400 with the same envelope when refused.
-// Refusals TEACH; the kit surfaces the message verbatim, never paraphrased.
-export interface GoldpathAdminResult {
-  ok: boolean;
-  message: string;
-}
- 
-export type VerbOutcome =
-  | { kind: "ok"; message: string }
-  | { kind: "refused"; message: string }
-  | { kind: "error"; status: number };
- 
-/** Executes one admin verb per the frozen contract's envelope semantics. */
-export async function executeVerb(
-  url: string,
-  init: RequestInit,
-  fetcher: typeof fetch = fetch,
-): Promise<VerbOutcome> {
-  const response = await fetcher(url, { method: "POST", ...init });
-  if (response.status === 200 || response.status === 400) {
-    const result = (await response.json()) as GoldpathAdminResult;
-    return result.ok ? { kind: "ok", message: result.message } : { kind: "refused", message: result.message };
-  }
- 
-  return { kind: "error", status: response.status };
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/src/components/AppShell.tsx.html b/ui/kit/coverage/src/components/AppShell.tsx.html deleted file mode 100644 index f966d8c..0000000 --- a/ui/kit/coverage/src/components/AppShell.tsx.html +++ /dev/null @@ -1,487 +0,0 @@ - - - - - - Code coverage report for src/components/AppShell.tsx - - - - - - - - - -
-
-

All files / src/components AppShell.tsx

-
- -
- 100% - Statements - 75/75 -
- - -
- 100% - Branches - 30/30 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 75/75 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -1351x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -14x -14x -14x -14x -14x -14x -14x -14x -14x -14x -14x -14x -14x -14x -14x -  -  -  -  -14x -14x -14x -14x -  -14x -14x -14x -2x -2x -2x -2x -2x -  -2x -2x -  -14x -  -14x -2x -2x -2x -2x -2x -2x -2x -  -2x -4x -2x -2x -2x -  -  -14x -39x -39x -39x -39x -39x -39x -39x -39x -39x -39x -  -39x -39x -39x -1x -  -39x -  -14x -  -14x -14x -14x -  -14x -  -14x -14x -14x -14x -  -14x -14x -14x -14x -  -14x - 
import type { ReactNode } from "react";
- 
-export interface ShellNavItem {
-  /** Stable id — also the capability key when the console lights panels by discovery. */
-  id: string;
-  label: string;
-  /** Absent means the capability is present but has nothing to count. */
-  badge?: number;
-  onSelect: () => void;
-}
- 
-export interface ShellService {
-  name: string;
-  onSelect: () => void;
-}
- 
-export interface AppShellProps {
-  /** Product/tenant word in the rail head — the console is one shell, many services. */
-  title: string;
-  nav: ShellNavItem[];
-  activeId: string;
-  children: ReactNode;
-  /** Cross-service registry entries; a single-service console omits it entirely. */
-  services?: ShellService[];
-  activeService?: string;
-  collapsed?: boolean;
-  onToggleCollapsed?: () => void;
-  /**
-   * Rendered at the rail foot — theme toggle, sign-out, whatever the app owns. Receives
-   * the collapsed state so the caller can shrink with the rail (the eyes-on pass caught
-   * a full-width control spilling out of the 74px rail).
-   */
-  footer?: (collapsed: boolean) => ReactNode;
-}
- 
-/**
- * The app shell of ui-standard-v1 §3, vendored from the Mockifyr/Praxis layout: the PAGE
- * never scrolls — the rail sits flush in the frame and only the content surface scrolls
- * (its own `.scroll-area`). Capability-driven: the console renders the nav it is GIVEN,
- * so a missing module is simply an absent item, never a dead link.
- */
-export function AppShell({
-  title,
-  nav,
-  activeId,
-  children,
-  services,
-  activeService,
-  collapsed = false,
-  onToggleCollapsed,
-  footer,
-}: AppShellProps) {
-  return (
-    <div data-testid="app-shell" className="flex h-dvh overflow-hidden bg-app">
-      <aside
-        data-collapsed={collapsed}
-        className={`shrink-0 bg-app transition-[width] duration-300 ${collapsed ? "w-[74px]" : "w-[252px]"}`}
-      >
-        {/* The rail scrolls INDEPENDENTLY: a console composed of many capability panels
-            (console RFC §3's cross-service registry) must never clip its own nav inside
-            the frame's overflow-hidden — review R1 on this PR. */}
-        <nav
-          data-testid="shell-rail"
-          aria-label="console sections"
-          className="scroll-area flex h-full flex-col gap-1 overflow-y-auto p-3"
-        >
-          <div className="flex items-center justify-between px-2 py-3">
-            {!collapsed && <span className="truncate text-sm font-semibold">{title}</span>}
-            {onToggleCollapsed && (
-              <button
-                aria-label={collapsed ? "expand navigation" : "collapse navigation"}
-                aria-expanded={!collapsed}
-                className="rounded-md border border-border px-2 py-0.5 text-xs hover:bg-accent"
-                onClick={onToggleCollapsed}
-              >
-                {collapsed ? "»" : "«"}
-              </button>
-            )}
-          </div>
- 
-          {services && services.length > 0 && !collapsed && (
-            <div className="mb-2 px-2">
-              <label className="text-[11px] text-faint" htmlFor="goldpath-service">service</label>
-              <select
-                id="goldpath-service"
-                className="mt-1 w-full rounded-md border border-border bg-background px-2 py-1 text-sm"
-                value={activeService ?? services[0].name}
-                onChange={(event) => services.find((s) => s.name === event.target.value)?.onSelect()}
-              >
-                {services.map((service) => (
-                  <option key={service.name} value={service.name}>{service.name}</option>
-                ))}
-              </select>
-            </div>
-          )}
- 
-          {nav.map((item) => {
-            const active = item.id === activeId;
-            return (
-              <button
-                key={item.id}
-                aria-current={active ? "page" : undefined}
-                title={collapsed ? item.label : undefined}
-                className={`flex items-center justify-between rounded-md px-3 py-2 text-sm ${
-                  active ? "bg-primary text-primary-foreground" : "hover:bg-accent"
-                }`}
-                onClick={item.onSelect}
-              >
-                <span className={collapsed ? "sr-only" : "truncate"}>{item.label}</span>
-                {collapsed && <span aria-hidden="true">{item.label.slice(0, 1).toUpperCase()}</span>}
-                {item.badge !== undefined && item.badge > 0 && !collapsed && (
-                  <span className="ml-2 rounded-full bg-danger-bg px-1.5 text-xs text-danger">{item.badge}</span>
-                )}
-              </button>
-            );
-          })}
- 
-          {footer && <div className="mt-auto px-2 pb-1">{footer(collapsed)}</div>}
-        </nav>
-      </aside>
- 
-      <div className="min-w-0 flex-1 p-3 ps-0">
-        {/* The ONE scrolling surface — the frame stays put while content moves (§3). */}
-        <main
-          data-testid="shell-surface"
-          className="scroll-area h-full overflow-y-auto rounded-2xl border border-border bg-surface p-6"
-          style={{ boxShadow: "var(--shadow-surface)" }}
-        >
-          {children}
-        </main>
-      </div>
-    </div>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/src/components/AuditBlock.tsx.html b/ui/kit/coverage/src/components/AuditBlock.tsx.html deleted file mode 100644 index abc40bf..0000000 --- a/ui/kit/coverage/src/components/AuditBlock.tsx.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - Code coverage report for src/components/AuditBlock.tsx - - - - - - - - - -
-
-

All files / src/components AuditBlock.tsx

-
- -
- 100% - Statements - 49/49 -
- - -
- 100% - Branches - 16/16 -
- - -
- 100% - Functions - 3/3 -
- - -
- 100% - Lines - 49/49 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -871x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -1x -8x -8x -  -1x -  -8x -8x -2x -2x -  -8x -1x -1x -  -5x -5x -  -  -  -  -  -  -  -1x -5x -1x -1x -  -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -4x -  -4x -4x -  -4x -4x -  -4x - 
/** One audit row of the frozen log, as the console reads it. */
-export interface AuditEntry {
-  id: number | string;
-  timestamp: string;
-  user?: string | null;
-  correlationId?: string | null;
-  entityType: string;
-  entityKey: string;
-  action: string;
-  propertyName: string;
-  oldValue?: string | null;
-  newValue?: string | null;
-}
- 
-export interface AuditBlockProps {
-  entries: AuditEntry[];
-  /** Property names whose values are classified — rendered masked, NEVER in the DOM. */
-  classified?: string[];
-  emptyMessage?: string;
-}
- 
-/** The system actor label — a null user is a SYSTEM flow, never an unknown human. */
-export const SYSTEM_ACTOR = "system";
- 
-export function isClassified(propertyName: string, classified: string[] | undefined): boolean {
-  return classified?.some((name) => name.toLowerCase() === propertyName.toLowerCase()) ?? false;
-}
- 
-const MASK = "••••••";
- 
-function Value({ value, masked }: { value: string | null | undefined; masked: boolean }) {
-  if (masked) {
-    return <span className="font-mono text-xs text-faint" title="classified — masked by the console">{MASK}</span>;
-  }
- 
-  if (value === null || value === undefined) {
-    return <span className="text-xs text-faint">∅</span>;   // an absent value, not an empty string
-  }
- 
-  return <span className="font-mono text-xs">{value}</span>;
-}
- 
-/**
- * The audit trail block of ui-standard-v1 §4: old→new change rows with classified
- * fields masked. The mask is applied HERE as the second line of defence — the API
- * already refuses to hand out classified values — so a misconfigured server can never
- * leak through the console's DOM.
- */
-export function AuditBlock({ entries, classified, emptyMessage = "No audited changes." }: AuditBlockProps) {
-  if (entries.length === 0) {
-    return <p className="py-6 text-center text-sm text-muted-foreground">{emptyMessage}</p>;
-  }
- 
-  return (
-    <div data-testid="audit-block" className="space-y-1">
-      {entries.map((entry) => {
-        const masked = isClassified(entry.propertyName, classified);
-        return (
-          <div key={entry.id} className="grid grid-cols-[auto_1fr] gap-x-4 rounded-md border border-border/60 px-3 py-2 text-sm">
-            <div className="text-xs text-muted-foreground">
-              <div>{new Date(entry.timestamp).toISOString().replace("T", " ").slice(0, 19)}</div>
-              <div className="text-faint">{entry.user ?? SYSTEM_ACTOR}</div>
-            </div>
-            <div>
-              <div className="flex flex-wrap items-baseline gap-x-2">
-                <span className="font-medium">{entry.propertyName}</span>
-                <span className="text-xs text-muted-foreground">
-                  {entry.action} · {entry.entityType} {entry.entityKey}
-                </span>
-                {masked && <span className="text-xs text-faint">(classified)</span>}
-              </div>
-              <div className="mt-0.5 flex flex-wrap items-center gap-2">
-                <Value value={entry.oldValue} masked={masked} />
-                <span className="text-xs text-faint">→</span>
-                <Value value={entry.newValue} masked={masked} />
-              </div>
-              {entry.correlationId && (
-                <div className="mt-0.5 font-mono text-[11px] text-faint">corr {entry.correlationId}</div>
-              )}
-            </div>
-          </div>
-        );
-      })}
-    </div>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/src/components/Banner.tsx.html b/ui/kit/coverage/src/components/Banner.tsx.html deleted file mode 100644 index 59a89c5..0000000 --- a/ui/kit/coverage/src/components/Banner.tsx.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - Code coverage report for src/components/Banner.tsx - - - - - - - - - -
-
-

All files / src/components Banner.tsx

-
- -
- 100% - Statements - 18/18 -
- - -
- 100% - Branches - 3/3 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 18/18 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -421x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -1x -1x -1x -1x -1x -1x -1x -  -  -  -  -  -  -1x -14x -14x -14x -14x -14x -  -14x -14x -  -14x - 
import type { ReactNode } from "react";
-import type { StatusTone } from "../status";
- 
-export interface BannerProps {
-  /** The semantic ramp only — the accent never carries meaning (ui-standard §1). */
-  tone: StatusTone;
-  children: ReactNode;
-  /**
-   * `alert` for something the operator must act on, `status` for a settled outcome.
-   * Screen readers treat them differently, so the caller chooses deliberately.
-   */
-  live?: "alert" | "status";
-  /** Inline pill next to a control (a verb's outcome) rather than a full-width box. */
-  dense?: boolean;
-}
- 
-const TONE: Record<StatusTone, string> = {
-  success: "border-success-border bg-success-bg text-success",
-  info: "border-info-border bg-info-bg text-info",
-  warning: "border-warning-border bg-warning-bg text-warning",
-  danger: "border-danger-border bg-danger-bg text-danger",
-  violet: "border-violet-border bg-violet-bg text-violet",
-  neutral: "border-border bg-muted text-muted-foreground",
-};
- 
-/**
- * The one message box of the kit: every screen that must TELL the operator something
- * uses it, so the tone language stays identical across shipped panels and adopter-built
- * ones (console RFC §1 — the kit is everything a custom screen needs).
- */
-export function Banner({ tone, children, live = "alert", dense = false }: BannerProps) {
-  return (
-    <div
-      role={live}
-      data-tone={tone}
-      className={`rounded-md border ${TONE[tone]} ${dense ? "px-2 py-0.5 text-xs" : "px-3 py-2 text-sm"}`}
-    >
-      {children}
-    </div>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/src/components/KeysetTable.tsx.html b/ui/kit/coverage/src/components/KeysetTable.tsx.html deleted file mode 100644 index eddadbd..0000000 --- a/ui/kit/coverage/src/components/KeysetTable.tsx.html +++ /dev/null @@ -1,475 +0,0 @@ - - - - - - Code coverage report for src/components/KeysetTable.tsx - - - - - - - - - -
-
-

All files / src/components KeysetTable.tsx

-
- -
- 100% - Statements - 82/82 -
- - -
- 97.14% - Branches - 34/35 -
- - -
- 100% - Functions - 4/4 -
- - -
- 100% - Lines - 82/82 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -1311x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -19x -18x -18x -  -  -  -  -  -  -  -  -1x -29x -29x -29x -29x -29x -  -29x -29x -15x -15x -15x -15x -13x -12x -12x -12x -12x -15x -2x -2x -2x -15x -29x -29x -  -29x -10x -29x -  -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -29x -18x -18x -18x -18x -18x -18x -18x -29x -29x -29x -  -29x -  -  -2x -  -  -29x -2x -2x -  -2x -2x -2x -2x -  -2x -2x -2x -  -  -29x -29x -  -29x -29x -29x -19x -19x -19x -19x -  -19x -19x -  -29x -29x -  -29x - 
import { type ReactNode, useCallback, useEffect, useRef, useState } from "react";
-import { Banner } from "./Banner";
- 
-/** One keyset page — `nextCursor: null` means the end (the frozen paging contract). */
-export interface KeysetPage<T> {
-  items: T[];
-  nextCursor: string | null;
-}
- 
-export interface KeysetColumn<T> {
-  header: string;
-  cell: (row: T) => ReactNode;
-  align?: "left" | "right";
-}
- 
-export interface KeysetTableProps<T> {
-  columns: KeysetColumn<T>[];
-  /** Loads one page. The kit clamps `take` to the contract's [1, 500] before calling. */
-  loadPage: (cursor: string | null, take: number) => Promise<KeysetPage<T>>;
-  rowKey: (row: T) => string;
-  take?: number;
-  emptyMessage?: string;
-}
- 
-/** AdminPaging.Clamp, mirrored — the UI never asks for what the API would refuse. */
-export function clampTake(take: number): number {
-  if (!Number.isFinite(take)) return 50;
-  return Math.min(500, Math.max(1, Math.trunc(take)));
-}
- 
-type LoadState = "loading" | "idle" | "error";
- 
-/**
- * The keyset table of ui-standard-v1 §4: cursor pager only — NO offsets, NO page
- * numbers, NO total count (the contract deliberately never counts large tables).
- * Pages append; the walk ends when the API answers `nextCursor: null`.
- */
-export function KeysetTable<T>({ columns, loadPage, rowKey, take = 50, emptyMessage = "Nothing here yet." }: KeysetTableProps<T>) {
-  const [rows, setRows] = useState<T[]>([]);
-  const [cursor, setCursor] = useState<string | null>(null);
-  const [ended, setEnded] = useState(false);
-  const [state, setState] = useState<LoadState>("loading");
-  const generation = useRef(0);
- 
-  const fetchPage = useCallback(
-    async (from: string | null, fresh: boolean) => {
-      const mine = ++generation.current;
-      setState("loading");
-      try {
-        const page = await loadPage(from, clampTake(take));
-        if (mine !== generation.current) return;   // a newer load superseded this one
-        setRows((existing) => (fresh ? page.items : [...existing, ...page.items]));
-        setCursor(page.nextCursor);
-        setEnded(page.nextCursor === null);
-        setState("idle");
-      } catch {
-        if (mine !== generation.current) return;
-        setState("error");
-      }
-    },
-    [loadPage, take],
-  );
- 
-  useEffect(() => {
-    void fetchPage(null, true);
-  }, [fetchPage]);
- 
-  return (
-    <div data-testid="keyset-table">
-      <table className="w-full text-sm">
-        <thead>
-          <tr className="border-b border-border text-left text-xs text-muted-foreground">
-            {columns.map((column) => (
-              <th key={column.header} className={`py-2 pr-4 font-medium ${column.align === "right" ? "text-right" : ""}`}>
-                {column.header}
-              </th>
-            ))}
-          </tr>
-        </thead>
-        <tbody>
-          {rows.map((row) => (
-            <tr key={rowKey(row)} className="border-b border-border/60 hover:bg-muted/40">
-              {columns.map((column) => (
-                <td key={column.header} className={`py-2 pr-4 ${column.align === "right" ? "text-right" : ""}`}>
-                  {column.cell(row)}
-                </td>
-              ))}
-            </tr>
-          ))}
-        </tbody>
-      </table>
- 
-      {state === "idle" && rows.length === 0 && ended && (
-        // Only the END of an empty walk is "empty" — an empty intermediate page keeps
-        // the load-more path alive without contradicting itself (review R3 on this PR).
-        <p className="py-6 text-center text-sm text-muted-foreground">{emptyMessage}</p>
-      )}
- 
-      {state === "error" && (
-        <div className="my-3">
-          <Banner tone="danger">
-            The page could not be loaded.
-            <button
-              className="ml-3 rounded-md border border-border bg-background px-2 py-0.5 text-xs hover:bg-accent"
-              onClick={() => void fetchPage(rows.length === 0 ? null : cursor, rows.length === 0)}
-            >
-              retry
-            </button>
-          </Banner>
-        </div>
-      )}
- 
-      <div className="flex items-center justify-between py-3">
-        <span className="text-xs text-faint">
-          {/* The honest footer: what is LOADED — never a total (the offset trap reborn). */}
-          {rows.length} loaded{ended ? " · end" : ""}
-        </span>
-        {!ended && state !== "error" && (
-          <button
-            className="rounded-md border border-border bg-background px-3 py-1.5 text-sm hover:bg-accent disabled:opacity-50"
-            disabled={state === "loading"}
-            onClick={() => void fetchPage(cursor, false)}
-          >
-            {state === "loading" ? "loading…" : "load more"}
-          </button>
-        )}
-      </div>
-    </div>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/src/components/RunProgress.tsx.html b/ui/kit/coverage/src/components/RunProgress.tsx.html deleted file mode 100644 index 77b56f3..0000000 --- a/ui/kit/coverage/src/components/RunProgress.tsx.html +++ /dev/null @@ -1,478 +0,0 @@ - - - - - - Code coverage report for src/components/RunProgress.tsx - - - - - - - - - -
-
-

All files / src/components RunProgress.tsx

-
- -
- 100% - Statements - 74/74 -
- - -
- 95.34% - Branches - 41/43 -
- - -
- 100% - Functions - 4/4 -
- - -
- 100% - Lines - 74/74 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -1321x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -12x -12x -12x -12x -6x -6x -6x -  -  -  -  -  -  -  -  -  -  -  -1x -14x -11x -14x -14x -14x -14x -14x -  -1x -1x -1x -1x -1x -  -4x -4x -4x -  -  -  -  -  -  -1x -7x -7x -7x -7x -7x -2x -5x -3x -2x -  -  -  -  -  -7x -  -7x -7x -7x -7x -7x -7x -7x -7x -1x -  -7x -1x -  -7x -  -7x -7x -7x -7x -7x -7x -  -7x -7x -  -7x -7x -7x -7x -7x -5x -5x -5x -5x -1x -4x -3x -1x -  -  -5x -5x -  -7x -7x -  -7x - 
import { StateBadge } from "./StateBadge";
-import type { StatusTone } from "../status";
- 
-/** The run row of the frozen contract, as the console reads it. */
-export interface RunProgressData {
-  status: string;
-  startedAt: string;
-  finishedAt?: string | null;
-  deadlineAt?: string | null;
-  predictedFinishAt?: string | null;
-  totalChunks: number;
-  completedChunks: number;
-  failedChunks: number;
-  totalItems?: number | null;
-  itemFailures: number;
-}
- 
-export interface RunProgressProps {
-  run: RunProgressData;
-  /** Injected for tests and for clock-skew-free rendering; defaults to now. */
-  now?: Date;
-}
- 
-/** Items per second from the chunk rate — null while nothing has completed yet. */
-export function itemsPerSecond(run: RunProgressData, now: Date): number | null {
-  if (run.completedChunks <= 0 || run.totalChunks <= 0 || !run.totalItems) return null;
-  const end = run.finishedAt ? new Date(run.finishedAt) : now;
-  const seconds = (end.getTime() - new Date(run.startedAt).getTime()) / 1000;
-  if (!Number.isFinite(seconds) || seconds <= 0) return null;
-  const done = (run.completedChunks / run.totalChunks) * run.totalItems;
-  return done / seconds;
-}
- 
-export type DeadlineVerdict = "none" | "on-track" | "overrun-predicted" | "overrun";
- 
-/**
- * The deadline verdict: a FINISHED run is judged on when it actually ended; a live run on
- * the CLOCK first and its prediction second. The console warns BEFORE the deadline passes
- * — that is the point of carrying a prediction — but a run that is still going after its
- * deadline has already overrun, prediction or not. Reading that as "on track" (which it
- * did until the UI coverage sweep of 2026-07-27) tells the operator the one thing that is
- * certainly false.
- */
-export function deadlineVerdict(run: RunProgressData, now: Date = new Date()): DeadlineVerdict {
-  if (!run.deadlineAt) return "none";
-  const deadline = new Date(run.deadlineAt).getTime();
-  if (run.finishedAt) return new Date(run.finishedAt).getTime() > deadline ? "overrun" : "on-track";
-  if (now.getTime() > deadline) return "overrun";
-  if (!run.predictedFinishAt) return "on-track";
-  return new Date(run.predictedFinishAt).getTime() > deadline ? "overrun-predicted" : "on-track";
-}
- 
-const VERDICT_TEXT: Record<Exclude<DeadlineVerdict, "none">, string> = {
-  "on-track": "on track",
-  "overrun-predicted": "predicted to overrun",
-  overrun: "overran the deadline",
-};
- 
-function formatRate(rate: number): string {
-  return rate >= 10 ? `${Math.round(rate).toLocaleString()} items/s` : `${rate.toFixed(1)} items/s`;
-}
- 
-/**
- * The run progress composite of ui-standard-v1 §4: chunk completion, live rate, and the
- * prediction judged against the deadline. Percentages come from CHUNKS (the honest
- * denominator the engine actually plans); item counts are shown, never guessed.
- */
-export function RunProgress({ run, now = new Date() }: RunProgressProps) {
-  const pct = run.totalChunks > 0 ? Math.round((run.completedChunks / run.totalChunks) * 100) : 0;
-  const rate = itemsPerSecond(run, now);
-  const verdict = deadlineVerdict(run, now);
-  const barTone =
-    verdict === "overrun" || run.failedChunks > 0
-      ? "bg-danger"
-      : verdict === "overrun-predicted"
-        ? "bg-warning"
-        : "bg-primary";
- 
-  // ui-standard-v1 §5: `Running + predicted-overrun` is a WARNING state at the badge
-  // level too — the chip is the operator's first glance, so it must carry the verdict
-  // (review R1 on this PR), not just the bar and the footnote. `extra` cannot do this:
-  // the standard MAP wins collisions by design, so the override is explicit.
-  const badgeTone: StatusTone | undefined = verdict === "overrun-predicted" ? "warning" : undefined;
- 
-  return (
-    <div data-testid="run-progress" className="space-y-2">
-      <div className="flex items-center gap-3">
-        <StateBadge state={run.status} tone={badgeTone} />
-        <span className="text-sm text-muted-foreground">
-          {run.completedChunks}/{run.totalChunks} chunks
-        </span>
-        {run.failedChunks > 0 && (
-          <span className="text-xs text-danger">{run.failedChunks} failed</span>
-        )}
-        {run.itemFailures > 0 && (
-          <span className="text-xs text-danger">{run.itemFailures} items in repair</span>
-        )}
-      </div>
- 
-      <div
-        role="progressbar"
-        aria-valuenow={pct}
-        aria-valuemin={0}
-        aria-valuemax={100}
-        className="h-2 w-full overflow-hidden rounded-full bg-muted"
-      >
-        <div className={`h-full ${barTone}`} style={{ width: `${pct}%` }} />
-      </div>
- 
-      <div className="flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground">
-        <span>{pct}%</span>
-        {rate !== null && <span>{formatRate(rate)}</span>}
-        {run.totalItems != null && <span>{run.totalItems.toLocaleString()} items planned</span>}
-        {verdict !== "none" && (
-          <span
-            data-verdict={verdict}
-            className={
-              verdict === "overrun"
-                ? "text-danger"
-                : verdict === "overrun-predicted"
-                  ? "text-warning"
-                  : "text-success"
-            }
-          >
-            {VERDICT_TEXT[verdict]}
-          </span>
-        )}
-      </div>
-    </div>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/src/components/StateBadge.tsx.html b/ui/kit/coverage/src/components/StateBadge.tsx.html deleted file mode 100644 index 0f81df9..0000000 --- a/ui/kit/coverage/src/components/StateBadge.tsx.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - Code coverage report for src/components/StateBadge.tsx - - - - - - - - - -
-
-

All files / src/components StateBadge.tsx

-
- -
- 100% - Statements - 18/18 -
- - -
- 100% - Branches - 2/2 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 18/18 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -361x -  -1x -1x -1x -1x -1x -1x -1x -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -9x -9x -9x -9x -9x -  -9x -9x -  -9x - 
import { statusTone, type StatusTone } from "../status";
- 
-const TONE_CLASSES: Record<StatusTone, string> = {
-  success: "text-success bg-success-bg border-success-border",
-  info: "text-info bg-info-bg border-info-border",
-  warning: "text-warning bg-warning-bg border-warning-border",
-  danger: "text-danger bg-danger-bg border-danger-border",
-  violet: "text-violet bg-violet-bg border-violet-border",
-  neutral: "text-muted-foreground bg-muted border-border",
-};
- 
-export interface StateBadgeProps {
-  state: string;
-  /** Adopter vocabulary — extends, never replaces, the standard map. */
-  extra?: Record<string, StatusTone>;
-  /**
-   * EXPLICIT tone override for composite states the ramp defines beyond the bare word
-   * (§5: `Running + predicted-overrun` is warning). Deliberate and greppable — `extra`
-   * cannot express this because the standard MAP wins collisions by design.
-   */
-  tone?: StatusTone;
-}
- 
-/** The state chip of ui-standard-v1 §5: semantic ramp only, never the accent. */
-export function StateBadge({ state, extra, tone: override }: StateBadgeProps) {
-  const tone = override ?? statusTone(state, extra);
-  return (
-    <span
-      data-tone={tone}
-      className={`inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium ${TONE_CLASSES[tone]}`}
-    >
-      {state}
-    </span>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/src/components/VerbButton.tsx.html b/ui/kit/coverage/src/components/VerbButton.tsx.html deleted file mode 100644 index f92c764..0000000 --- a/ui/kit/coverage/src/components/VerbButton.tsx.html +++ /dev/null @@ -1,439 +0,0 @@ - - - - - - Code coverage report for src/components/VerbButton.tsx - - - - - - - - - -
-
-

All files / src/components VerbButton.tsx

-
- -
- 100% - Statements - 60/60 -
- - -
- 93.75% - Branches - 30/32 -
- - -
- 100% - Functions - 6/6 -
- - -
- 100% - Lines - 60/60 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -1191x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -57x -57x -57x -  -57x -9x -9x -9x -9x -9x -1x -1x -  -9x -9x -9x -9x -  -57x -29x -29x -29x -29x -29x -21x -21x -21x -21x -21x -21x -21x -  -29x -29x -29x -29x -  -29x -29x -29x -  -29x -29x -  -29x -  -28x -28x -28x -57x -57x -57x -  -57x -57x -  -57x -4x -  -  -57x -  -2x -  -  -57x -2x -2x -1x -1x -2x -  -57x -  -57x - 
import { useState } from "react";
-import { Banner } from "./Banner";
-import type { VerbOutcome } from "../adminResult";
- 
-export interface VerbButtonProps {
-  /** The verb's label — kebab-case on the wire, human words here. */
-  label: string;
-  /** The confirm question. Confirm-before-verb is NOT optional (ui-standard §3). */
-  confirm: string;
-  /** Executes the verb; receives the evidence note when the verb collects one. */
-  execute: (note?: string) => Promise<VerbOutcome>;
-  /**
-   * Turns the confirm step into an EVIDENCE step: the operator must type why before the
-   * verb runs (four-eyes gates, holds, erasures — the note is the audit trail's reason,
-   * and the server stores it). Omit for verbs that carry no reason.
-   */
-  note?: { label: string; required?: boolean };
-  /** Fired after every settled outcome (refresh tables, close panels...). */
-  onDone?: (outcome: VerbOutcome) => void;
-  /** Marks destructive verbs (reject, erase, pause-all) — the tone, not the flow. */
-  destructive?: boolean;
-  /**
-   * Suppresses the button's OWN outcome strip, for verbs whose control legitimately
-   * disappears once the verb lands (a four-eyes gate vanishes the moment the batch
-   * leaves the gated state). The composite must then render the outcome itself from
-   * `onDone` — otherwise the operator's confirmation dies with the button.
-   */
-  quiet?: boolean;
-}
- 
-type Phase =
-  | { at: "rest" }
-  | { at: "confirming" }
-  | { at: "executing" }
-  | { at: "settled"; outcome: VerbOutcome };
- 
-/**
- * The verb button of ui-standard-v1 §4: every mutating admin verb goes through the
- * confirm dialog, the `GoldpathAdminResult` message is surfaced VERBATIM (refusals
- * TEACH — the UI never paraphrases them), and the audit hint reminds the operator the
- * server records every verb (the actor comes from the token, never the UI).
- */
-export function VerbButton({ label, confirm, execute, onDone, destructive = false, note, quiet = false }: VerbButtonProps) {
-  const [phase, setPhase] = useState<Phase>({ at: "rest" });
-  const [reason, setReason] = useState("");
-  const missingReason = note?.required === true && reason.trim().length === 0;
- 
-  const run = async () => {
-    setPhase({ at: "executing" });
-    let outcome: VerbOutcome;
-    try {
-      outcome = await execute(note ? reason.trim() : undefined);
-    } catch {
-      outcome = { kind: "error", status: 0 };   // transport failure — the verb may not have run
-    }
- 
-    setPhase({ at: "settled", outcome });
-    setReason("");
-    onDone?.(outcome);
-  };
- 
-  if (phase.at === "confirming") {
-    return (
-      <span role="alertdialog" aria-label={`confirm ${label}`} className="inline-flex flex-wrap items-center gap-2 rounded-md border border-border bg-background px-3 py-1.5 text-sm">
-        <span>{confirm}</span>
-        <span className="text-xs text-faint">· audited</span>
-        {note && (
-          <input
-            aria-label={note.label}
-            placeholder={note.label}
-            value={reason}
-            onChange={(event) => setReason(event.target.value)}
-            className="w-56 rounded-md border border-border bg-background px-2 py-0.5 text-xs"
-          />
-        )}
-        <button
-          className={`rounded-md border px-2 py-0.5 text-xs font-medium disabled:opacity-50 ${destructive ? "border-danger-border bg-danger-bg text-danger" : "border-border bg-background hover:bg-accent"}`}
-          disabled={missingReason}
-          onClick={() => void run()}
-        >
-          {label}
-        </button>
-        <button className="rounded-md border border-border px-2 py-0.5 text-xs hover:bg-accent" onClick={() => setPhase({ at: "rest" })}>
-          cancel
-        </button>
-      </span>
-    );
-  }
- 
-  return (
-    <span className="inline-flex items-center gap-2">
-      <button
-        className={`rounded-md border px-3 py-1.5 text-sm font-medium disabled:opacity-50 ${destructive ? "border-danger-border text-danger hover:bg-danger-bg" : "border-border bg-background hover:bg-accent"}`}
-        disabled={phase.at === "executing"}
-        onClick={() => setPhase({ at: "confirming" })}
-      >
-        {phase.at === "executing" ? "working…" : label}
-      </button>
- 
-      {!quiet && phase.at === "settled" && phase.outcome.kind === "ok" && (
-        <Banner tone="success" live="status" dense>{phase.outcome.message}</Banner>
-      )}
- 
-      {!quiet && phase.at === "settled" && phase.outcome.kind === "refused" && (
-        // The refusal surface: the envelope's message VERBATIM — it teaches the fix.
-        <Banner tone="danger" dense>{phase.outcome.message}</Banner>
-      )}
- 
-      {!quiet && phase.at === "settled" && phase.outcome.kind === "error" && (
-        <Banner tone="warning" dense>
-          {phase.outcome.status === 0
-            ? "the request did not reach the server — the verb may not have run"
-            : `unexpected ${phase.outcome.status} — check the service logs`}
-        </Banner>
-      )}
-    </span>
-  );
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/src/components/index.html b/ui/kit/coverage/src/components/index.html deleted file mode 100644 index c373e72..0000000 --- a/ui/kit/coverage/src/components/index.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - Code coverage report for src/components - - - - - - - - - -
-
-

All files src/components

-
- -
- 100% - Statements - 376/376 -
- - -
- 96.89% - Branches - 156/161 -
- - -
- 100% - Functions - 21/21 -
- - -
- 100% - Lines - 376/376 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
AppShell.tsx -
-
100%75/75100%30/30100%2/2100%75/75
AuditBlock.tsx -
-
100%49/49100%16/16100%3/3100%49/49
Banner.tsx -
-
100%18/18100%3/3100%1/1100%18/18
KeysetTable.tsx -
-
100%82/8297.14%34/35100%4/4100%82/82
RunProgress.tsx -
-
100%74/7495.34%41/43100%4/4100%74/74
StateBadge.tsx -
-
100%18/18100%2/2100%1/1100%18/18
VerbButton.tsx -
-
100%60/6093.75%30/32100%6/6100%60/60
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/src/duration.ts.html b/ui/kit/coverage/src/duration.ts.html deleted file mode 100644 index ebac967..0000000 --- a/ui/kit/coverage/src/duration.ts.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - Code coverage report for src/duration.ts - - - - - - - - - -
-
-

All files / src duration.ts

-
- -
- 100% - Statements - 7/7 -
- - -
- 100% - Branches - 5/5 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 7/7 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17  -  -  -  -  -  -  -  -  -1x -6x -6x -6x -6x -1x -1x - 
/**
- * One duration vocabulary for the whole console (ui-standard-v1 §3: the same fact reads
- * the same everywhere). Every panel measures ages the operator must judge at a glance —
- * how long a batch has waited at the gate, how long a campaign still needs, how long the
- * oldest notification has sat in the queue — and three hand-rolled copies of the same
- * ladder had already drifted apart in their tiers.
- *
- * The ladder is deliberately coarse: an operator reads "2h", not "7 213 seconds".
- */
-export function humanizeSeconds(seconds: number): string {
-  const value = Math.max(0, seconds);
-  if (value < 90) return `${Math.round(value)}s`;
-  if (value < 5400) return `${Math.round(value / 60)}m`;          // up to 90 minutes
-  if (value < 172_800) return `${Math.round(value / 3600)}h`;     // up to 48 hours
-  return `${Math.round(value / 86_400)}d`;
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/src/index.html b/ui/kit/coverage/src/index.html deleted file mode 100644 index 013b8fe..0000000 --- a/ui/kit/coverage/src/index.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - Code coverage report for src - - - - - - - - - -
-
-

All files src

-
- -
- 100% - Statements - 46/46 -
- - -
- 100% - Branches - 15/15 -
- - -
- 100% - Functions - 3/3 -
- - -
- 100% - Lines - 46/46 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
adminResult.ts -
-
100%12/12100%6/6100%1/1100%12/12
duration.ts -
-
100%7/7100%5/5100%1/1100%7/7
status.ts -
-
100%27/27100%4/4100%1/1100%27/27
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/ui/kit/coverage/src/status.ts.html b/ui/kit/coverage/src/status.ts.html deleted file mode 100644 index b104b3e..0000000 --- a/ui/kit/coverage/src/status.ts.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - Code coverage report for src/status.ts - - - - - - - - - -
-
-

All files / src status.ts

-
- -
- 100% - Statements - 27/27 -
- - -
- 100% - Branches - 4/4 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 27/27 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45  -  -  -  -1x -  -1x -1x -1x -1x -1x -  -1x -1x -1x -1x -1x -1x -1x -  -1x -1x -1x -  -1x -1x -1x -  -1x -1x -1x -1x -  -  -1x -  -  -  -  -  -  -1x -16x -16x - 
// ui-standard-v1 §5: domain states map onto the SEMANTIC ramp — the accent never
-// carries meaning, the ramp never carries brand. One table, every badge.
-export type StatusTone = "success" | "info" | "warning" | "danger" | "violet" | "neutral";
- 
-const MAP: Record<string, StatusTone> = {
-  // run model
-  Completed: "success",
-  Running: "info",
-  Failed: "danger",
-  Recovering: "violet",
-  Resumed: "violet",
-  // bulk batch
-  Received: "info",
-  Validating: "info",
-  Validated: "warning", // awaiting the gate
-  Approved: "info",     // gate passed — work still ahead; Completed is the success end
-  Executing: "info",
-  CompletedWithFailures: "danger",
-  Rejected: "danger",
-  // campaign
-  Enumerating: "info",    // the leader is materializing targets
-  Paused: "warning",      // an operator stopped the release; nothing is wrong yet
-  Aborted: "danger",
-  // notification
-  Requested: "info",
-  Sent: "success",
-  Suppressed: "warning",
-  // payments (sample vocabulary — adopters extend via `extra`)
-  Submitted: "info",
-  PendingApproval: "warning",
-  Executed: "success",
-};
- 
-/** Every state the standard maps — galleries and docs derive from THIS, never a hand copy. */
-export const KNOWN_STATES: readonly string[] = Object.keys(MAP);
- 
-/**
- * Resolves a domain state to its ramp tone; unknown states are honest neutrals.
- * The STANDARD map wins collisions — adopter vocabulary extends, never replaces
- * (ui-standard-v1 §5): a console must read the same everywhere.
- */
-export function statusTone(state: string, extra?: Record<string, StatusTone>): StatusTone {
-  return MAP[state] ?? extra?.[state] ?? "neutral";
-}
- 
- -
-
- - - - - - - - \ No newline at end of file From a343f3c5334a16d5c8c37d38ce606aa7a65b5720 Mon Sep 17 00:00:00 2001 From: Omer Celik Date: Mon, 27 Jul 2026 13:33:58 +0300 Subject: [PATCH 3/3] fix(kit): the new tests type-check too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I ran `pnpm test` and skipped `pnpm typecheck` — CI caught what I had not: the AppShell case omitted a required prop and the RunProgress fixtures invented fields the type does not have. Co-Authored-By: Claude Opus 5 --- ui/kit/src/components/AppShell.test.tsx | 1 + ui/kit/src/components/RunProgress.test.tsx | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ui/kit/src/components/AppShell.test.tsx b/ui/kit/src/components/AppShell.test.tsx index 0c7db9f..a4f88e3 100644 --- a/ui/kit/src/components/AppShell.test.tsx +++ b/ui/kit/src/components/AppShell.test.tsx @@ -131,6 +131,7 @@ describe("the app shell (ui-standard-v1 §3 — the surface scrolls, never the p chosen.push("payments") }, { name: "claims", onSelect: () => chosen.push("claims") }, diff --git a/ui/kit/src/components/RunProgress.test.tsx b/ui/kit/src/components/RunProgress.test.tsx index 131827b..f8ef0f9 100644 --- a/ui/kit/src/components/RunProgress.test.tsx +++ b/ui/kit/src/components/RunProgress.test.tsx @@ -116,7 +116,7 @@ describe("the run progress composite (ui-standard-v1 §4)", () => { const overrun = render( { const predicted = render(