apitestcenter 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/THIRD-PARTY-NOTICES-UI.txt +1 -1
  2. package/dist/THIRD-PARTY-NOTICES.txt +336 -1
  3. package/dist/cli.mjs +20969 -1746
  4. package/dist/ui/404/index.html +1 -1
  5. package/dist/ui/404.html +1 -1
  6. package/dist/ui/__next.__PAGE__.txt +10 -10
  7. package/dist/ui/__next._full.txt +11 -11
  8. package/dist/ui/__next._tree.txt +2 -2
  9. package/dist/ui/_next/static/chunks/0-898cb98enjv.css +3 -0
  10. package/dist/ui/_next/static/chunks/02myfb0nlri-z.js +119 -0
  11. package/dist/ui/_next/static/chunks/0kfr8kv4cj_kv.js +1 -0
  12. package/dist/ui/_next/static/chunks/{12eajgls1n2zi.js → 0txpfp028djv6.js} +71 -71
  13. package/dist/ui/_next/static/chunks/0vkcbl8nakdh1.js +2 -0
  14. package/dist/ui/_next/static/chunks/13nvl7bxr0ra-.js +1 -0
  15. package/dist/ui/_next/static/chunks/1w_q4qvvuinj2.js +1 -0
  16. package/dist/ui/_next/static/chunks/{065oy54s0-cwr.js → 2idsynwg5lkk7.js} +2 -2
  17. package/dist/ui/_next/static/chunks/{0mlyz754peers.js → 2lw9bsrnh8k4u.js} +1 -1
  18. package/dist/ui/_next/static/chunks/2nxnxp6p-40kg.js +1 -0
  19. package/dist/ui/_next/static/chunks/3ad2zh-p8_xhv.js +59 -0
  20. package/dist/ui/_not-found/__next._full.txt +10 -10
  21. package/dist/ui/_not-found/__next._not-found.__PAGE__.txt +9 -9
  22. package/dist/ui/_not-found/__next._tree.txt +2 -2
  23. package/dist/ui/_not-found/index.html +1 -1
  24. package/dist/ui/_not-found/index.txt +10 -10
  25. package/dist/ui/compare/__next._full.txt +11 -11
  26. package/dist/ui/compare/__next._tree.txt +2 -2
  27. package/dist/ui/compare/__next.compare.__PAGE__.txt +10 -10
  28. package/dist/ui/compare/index.html +1 -1
  29. package/dist/ui/compare/index.txt +11 -11
  30. package/dist/ui/history/__next._full.txt +12 -12
  31. package/dist/ui/history/__next._tree.txt +2 -2
  32. package/dist/ui/history/__next.history.__PAGE__.txt +11 -11
  33. package/dist/ui/history/index.html +1 -1
  34. package/dist/ui/history/index.txt +12 -12
  35. package/dist/ui/index.html +1 -1
  36. package/dist/ui/index.txt +11 -11
  37. package/dist/ui/preview/__next._full.txt +12 -12
  38. package/dist/ui/preview/__next._tree.txt +2 -2
  39. package/dist/ui/preview/__next.preview.__PAGE__.txt +11 -11
  40. package/dist/ui/preview/index.html +1 -1
  41. package/dist/ui/preview/index.txt +12 -12
  42. package/dist/ui/suite/__next._full.txt +11 -11
  43. package/dist/ui/suite/__next._tree.txt +2 -2
  44. package/dist/ui/suite/__next.suite.__PAGE__.txt +10 -10
  45. package/dist/ui/suite/index.html +1 -1
  46. package/dist/ui/suite/index.txt +11 -11
  47. package/dist/ui/tests/__next._full.txt +10 -10
  48. package/dist/ui/tests/__next._tree.txt +2 -2
  49. package/dist/ui/tests/__next.tests.__PAGE__.txt +9 -9
  50. package/dist/ui/tests/index.html +1 -1
  51. package/dist/ui/tests/index.txt +10 -10
  52. package/package.json +1 -1
  53. package/dist/ui/_next/static/chunks/03vwb47zropf0.js +0 -1
  54. package/dist/ui/_next/static/chunks/0dscs2dqej_33.css +0 -3
  55. package/dist/ui/_next/static/chunks/0kfnlqyz56lid.js +0 -2
  56. package/dist/ui/_next/static/chunks/117zwf3ps9-d0.js +0 -1
  57. package/dist/ui/_next/static/chunks/13hazp8hyksry.js +0 -59
  58. package/dist/ui/_next/static/chunks/1s74dc_u9f8bv.js +0 -1
  59. package/dist/ui/_next/static/chunks/1tpf12evb0w6s.js +0 -1
  60. package/dist/ui/_next/static/chunks/202n35227m-qn.js +0 -119
  61. /package/dist/ui/_next/static/{nzVJlcyPooozLLxcLfxub → lBYayPKoT6YJhgfHFuw6O}/_buildManifest.js +0 -0
  62. /package/dist/ui/_next/static/{nzVJlcyPooozLLxcLfxub → lBYayPKoT6YJhgfHFuw6O}/_clientMiddlewareManifest.js +0 -0
  63. /package/dist/ui/_next/static/{nzVJlcyPooozLLxcLfxub → lBYayPKoT6YJhgfHFuw6O}/_ssgManifest.js +0 -0
@@ -0,0 +1,119 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,93639,e=>{"use strict";var t=e.i(61666);e.i(24856);var s=e.i(78451);function a(e){let t=t=>e.filter(e=>e.state===t).length;return{total:e.length,passed:t("passed"),failed:t("failed"),errors:t("error"),skipped:t("skipped"),durationMs:Math.round(e.reduce((e,t)=>e+(t.durationMs??0),0))}}function n(e){let t=a(e.steps);return t.passed>0&&0===t.failed&&0===t.errors}function r(e){let t=a(e.steps),s=t.total-t.skipped;if("running"===e.status)return`Running ${t.passed+t.failed+t.errors+1} of ${s}…`;if(!s)return"Nothing ran";let n=[`${t.passed} of ${s} passed`];return t.failed&&n.push(`${t.failed} failed`),t.errors&&n.push(`${t.errors} could not run`),t.skipped&&n.push(`${t.skipped} skipped`),"stopped"===e.status&&n.push("stopped early"),n.join(" · ")}let i=e=>e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),l=e=>((e??0)/1e3).toFixed(3),o=e=>String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),d={passed:"Passed",failed:"Failed",error:"Could not run",skipped:"Skipped",pending:"Not run",running:"Not finished"};var c=e.i(53012),u=e.i(99522);let p=(0,u.default)("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]),m=(0,u.default)("arrow-up",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);var h=e.i(17118),x=e.i(95486),f=e.i(60961);let b=(0,u.default)("circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);var g=e.i(75117);let v=(0,u.default)("file-archive",[["path",{d:"M10 12v-1",key:"v7bkov"}],["path",{d:"M10 18v-2",key:"1cjy8d"}],["path",{d:"M10 7V6",key:"dljcrl"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M15.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v16a2 2 0 0 0 .274 1.01",key:"gkbcor"}],["circle",{cx:"10",cy:"20",r:"2",key:"1xzdoj"}]]);var k=e.i(29091),y=e.i(27813);let $=(0,u.default)("circle-minus",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 12h8",key:"1wcyev"}]]);var w=e.i(3792),j=e.i(66478),N=e.i(27122),S=e.i(46443),C=e.i(83067),z=e.i(69578),q=e.i(80707),M=e.i(56396);function A({collection:e,environment:t,data:s="api-tests"}){let a=t?` --env ${JSON.stringify(t)}`:"";return`npx --yes apitestcenter suite ${JSON.stringify(e)} --data ${s}${a} --junit atc-results.xml`}var P=e.i(17219);async function R(e,t){var s;let a,n=await fetch(`/engine/suites/export?collection=${encodeURIComponent(e)}`,{cache:"no-store"}),r=await n.json().catch(()=>null);if(!n.ok||!r?.files)throw Error(r?.error??`Engine error (${n.status})`);let i=r.secrets??[],l={};for(let e of r.files)l[`api-tests/${e.path}`]=e.text;l["api-tests/README.md"]=function(e){let{collection:t,environment:s,secrets:a=[],data:n="api-tests"}=e,r=s?` --env ${JSON.stringify(s)}`:"";return`# API checks — ${t||"requests outside a collection"}
2
+
3
+ Every request in this collection is sent once, in the saved order, and checked. The run fails
4
+ (exit code 1) when any request fails.
5
+
6
+ ${A(e)}
7
+
8
+ - Nothing to install first: \`npx\` fetches the command line (Node.js 20 or later).
9
+ - Edit these tests in a window: \`npx apitestcenter ui --data ${n}\` (or the desktop app).
10
+ - \`${n}/requests\` holds the saved requests, \`environments.json\` the environments, and
11
+ \`suites.json\` the run order. Secret values are never in these files.
12
+ - Pass secrets from your CI's secret store: write \`{{token}}\` in the request, then add
13
+ \`--var token=$MY_TOKEN\` to the command.
14
+ ${a.length?`
15
+ **These requests have a secret typed straight into them, which is not exported** — change it to a
16
+ {{variable}} and pass it with --var, or they will not run here:
17
+
18
+ ${a.map(e=>`- ${e}`).join("\n")}
19
+ `:""}
20
+ To check speed too, load-test one request with goals, and compare with a baseline:
21
+
22
+ npx --yes apitestcenter run "${t?`${t}/`:""}<request name>" --data ${n}${r} --p95 500 --errors 1 --baseline ${n}/baseline.json --max-slower 10
23
+
24
+ Guide: https://apitestcenter.com/docs/ci-walkthrough.html
25
+ `}({collection:e,environment:t,secrets:i}),l[".github/workflows/api-checks.yml"]=(a=(s={collection:e,environment:t}).collection||"requests outside a collection",`# Runs the "${a}" API checks on every push. Made by APITestCenter.
26
+ # Guide: https://apitestcenter.com/docs/ci-walkthrough.html
27
+ name: API checks
28
+
29
+ on:
30
+ push:
31
+ workflow_dispatch:
32
+
33
+ jobs:
34
+ api-checks:
35
+ runs-on: ubuntu-latest
36
+ steps:
37
+ - uses: actions/checkout@v4
38
+
39
+ - uses: actions/setup-node@v4
40
+ with:
41
+ node-version: 22
42
+
43
+ # Fails the job when any request fails. Secrets: add --var name=\${{ secrets.NAME }}
44
+ - name: Check every request
45
+ run: ${A(s)}
46
+
47
+ - name: Keep the results
48
+ if: always()
49
+ uses: actions/upload-artifact@v4
50
+ with:
51
+ name: api-check-results
52
+ path: atc-results.xml
53
+ `);let o=(e||"requests").replace(/[^\w.-]+/g,"-").replace(/^-|-$/g,"")||"requests";return{blob:(0,P.zipStore)(l),name:`${o}-for-ci.zip`,secrets:i}}var T=e.i(15060),E=e.i(14168),I=e.i(6278);let U={GET:"text-ok",POST:"text-warn",PUT:"text-accent",PATCH:"text-accent",DELETE:"text-bad"},O="apitestcenter-suite-stop-on-fail";function L({state:e}){return"passed"===e?(0,t.jsx)(h.CheckCircle2,{size:16,className:"text-ok","aria-label":"Passed"}):"failed"===e?(0,t.jsx)(N.XCircle,{size:16,className:"text-bad","aria-label":"Failed"}):"error"===e?(0,t.jsx)(c.AlertTriangle,{size:16,className:"text-bad","aria-label":"Could not run"}):"skipped"===e?(0,t.jsx)($,{size:16,className:"text-mute","aria-label":"Skipped"}):"running"===e?(0,t.jsx)(y.Loader2,{size:16,className:"animate-spin text-accent","aria-label":"Running"}):(0,t.jsx)(b,{size:16,className:"text-line","aria-label":"Not run yet"})}let F=e=>`${(e.collection||"requests").replace(/[^\w.-]+/g,"-")}-${e.startedAt.slice(0,16).replace(/[:T]/g,"-")}`;e.s(["SuitePage",0,function(){let e=(0,S.useRouter)(),c=(0,S.useSearchParams)(),u=(0,M.useToast)(),{index:b,environments:$,activeEnv:A,setActiveEnv:P}=(0,I.useWorkspace)(),D=(0,C.useMemo)(()=>b?.requests??[],[b]),B=(0,C.useMemo)(()=>[...new Set(D.flatMap(e=>e.collection?(0,s.folderChain)(e.collection):[""]))].sort((e,t)=>""===e?1:""===t?-1:e.localeCompare(t)),[D]),J=(0,C.useCallback)(e=>D.filter(t=>e?(0,s.inFolder)(t.collection,e):""===t.collection),[D]),H=c.get("c"),G=null!==H&&B.includes(H)?H:B[0]??null,K=(0,C.useMemo)(()=>null===G?[]:J(G),[J,G]),[V,_]=(0,C.useState)(null),[W,X]=(0,C.useState)(null),[Y,Q]=(0,C.useState)(!1),[Z,ee]=(0,C.useState)(new Set),[et,es]=(0,C.useState)(!1),[ea,en]=(0,C.useState)(!1),er=(0,C.useRef)(null);(0,C.useEffect)(()=>{try{Q("1"===localStorage.getItem(O))}catch{}},[]),(0,C.useEffect)(()=>{if(null===G)return;_(null),X(null),ee(new Set);let e=!0;return E.suiteApi.plan(G).then(t=>e&&_(t)).catch(()=>e&&_({order:[],skip:[]})),()=>{e=!1}},[G]),(0,C.useEffect)(()=>()=>void(er.current&&window.clearInterval(er.current)),[]);let ei=(0,C.useMemo)(()=>(function(e,t){let s=new Map(e.map(e=>[e.id,e])),a=new Set,n=[];for(let e of t?.order??[]){let t=s.get(e);t&&!a.has(e)&&(n.push(t),a.add(e))}for(let t of e)a.has(t.id)||n.push(t);let r=new Set(t?.skip??[]);return n.map(e=>({item:e,skipped:r.has(e.id)}))})(K,V),[K,V]),el=W?.status==="running";(0,C.useMemo)(()=>new Map((W?.steps??[]).map(e=>[e.id,e])),[W]);let eo=W?W.steps.flatMap(e=>{let t=K.find(t=>t.id===e.id);return t?[{item:t,skipped:"skipped"===e.state&&!!e.message?.startsWith("Left out"),step:e}]:[]}):ei,ed=(0,C.useCallback)(e=>{null!==G&&(_(e),E.suiteApi.savePlan(G,e).catch(e=>u(e instanceof Error?e.message:"Could not save the order","error")))},[G,u]);function ec(e,t){let s=ei.map(e=>e.item.id),a=s.indexOf(e),n=a+t;a<0||n<0||n>=s.length||([s[a],s[n]]=[s[n],s[a]],X(null),ed({order:s,skip:V?.skip??[]}))}async function eu(){if(null!==G&&!et){es(!0),ee(new Set);try{let e=await E.suiteApi.start({collection:G,environmentId:A?.id??null,stopOnFail:Y});X(e),er.current&&window.clearInterval(er.current),er.current=window.setInterval(async()=>{try{let t=await E.suiteApi.get(e.id);X(t),"running"!==t.status&&(window.clearInterval(er.current),er.current=null,ee(new Set(t.steps.filter(e=>"failed"===e.state||"error"===e.state).map(e=>e.id))))}catch{}},400)}catch(e){u(e instanceof Error?e.message:"Could not start the run","error")}finally{es(!1)}}}async function ep(){if(null!==G){en(!0);try{let{blob:e,name:t,secrets:s}=await R(G,A?.name??null);(0,T.downloadBlob)(t,e),u(s.length?`Saved ${t}. ${s.length} request${1===s.length?" has":"s have"} a secret typed in — switch to a {{variable}} for CI (see README in the zip).`:`Saved ${t} — unzip it into your repository. No secrets are in it.`,s.length?"info":"success")}catch(e){u(e instanceof Error?e.message:"Could not export","error")}finally{en(!1)}}}async function em(){W&&await E.suiteApi.stop(W.id).catch(()=>void 0)}let eh=W?a(W.steps):null,ex=W&&"running"!==W.status,ef=ei.filter(e=>!e.skipped).length;return(0,t.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col",children:[(0,t.jsx)("header",{className:"flex flex-wrap items-center gap-x-4 gap-y-2 border-b border-line bg-panel px-4 py-3 lg:px-6",children:(0,t.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,t.jsx)("h1",{className:"text-lg font-medium text-ink",children:"Run a collection"}),(0,t.jsx)("p",{className:"text-xs text-mute",children:"Sends every request once, in order, and checks each one. Passes when all its checks pass, or on any 2xx/3xx when it has none."})]})}),0===B.length?(0,t.jsx)("div",{className:"m-6 max-w-xl space-y-2 text-sm text-mute",children:(0,t.jsx)("p",{children:"No saved requests yet. Save requests into a collection on the Test API page (Ctrl+S), or import a Postman collection, then come back here to run them all."})}):(0,t.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto px-4 py-4 lg:px-6",children:(0,t.jsxs)("div",{className:"mx-auto max-w-5xl space-y-4",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-end gap-3",children:[(0,t.jsxs)("label",{className:"flex flex-col gap-1 text-xs text-mute",children:["Collection",(0,t.jsx)(q.Select,{label:"Collection",value:G??"",disabled:el,onChange:t=>e.replace((0,E.suiteHref)(t)),minWidth:240,buttonContent:null===G?"":`${G||"No collection"} (${K.length})`,options:B.map(e=>({value:e,label:(0,t.jsx)("span",{style:{paddingLeft:`${.9*Math.max(0,(0,s.folderChain)(e).length-1)}rem`},children:e?(0,s.folderName)(e):"No collection"}),hint:`${J(e).length} request${1===J(e).length?"":"s"}${e.includes("/")?` \xb7 ${e}`:""}`,text:e||"no collection"})),className:"min-w-48 rounded-md border border-line bg-panel-2 px-2 py-1.5 text-sm text-ink"})]}),(0,t.jsxs)("label",{className:"flex flex-col gap-1 text-xs text-mute",children:["Environment",(0,t.jsxs)("select",{value:A?.id??"",disabled:el,onChange:e=>P(e.target.value||null),className:"min-w-40 rounded-md border border-line bg-panel-2 px-2 py-1.5 text-sm text-ink",children:[(0,t.jsx)("option",{value:"",children:"None"}),$.map(e=>(0,t.jsx)("option",{value:e.id,children:e.name},e.id))]})]}),(0,t.jsxs)("label",{className:"flex items-center gap-2 pb-1.5 text-sm text-ink",children:[(0,t.jsx)("input",{type:"checkbox",checked:Y,disabled:el,onChange:e=>{Q(e.target.checked);try{localStorage.setItem(O,e.target.checked?"1":"0")}catch{}}}),"Stop at the first failure"]}),(0,t.jsxs)("span",{className:"ml-auto flex items-center gap-2",children:[(0,t.jsxs)("button",{type:"button",className:"btn btn-secondary",disabled:ea||null===G,onClick:()=>void ep(),title:"A zip for your repository: this collection's requests, environments and run order (never secrets), plus a ready GitHub Actions pipeline",children:[ea?(0,t.jsx)(y.Loader2,{size:14,className:"animate-spin"}):(0,t.jsx)(v,{size:14}),"Download for CI"]}),el?(0,t.jsxs)("button",{type:"button",className:"btn btn-danger",onClick:()=>void em(),children:[(0,t.jsx)(j.Square,{size:14})," Stop"]}):(0,t.jsxs)("button",{type:"button",className:"btn btn-primary",disabled:!V||0===ef||et,onClick:()=>void eu(),children:[et?(0,t.jsx)(y.Loader2,{size:14,className:"animate-spin"}):(0,t.jsx)(w.Play,{size:14}),"Run ",ef," request",1===ef?"":"s"]})]})]}),W?(0,t.jsxs)("div",{role:"status",className:`flex flex-wrap items-center gap-x-4 gap-y-2 rounded-lg border px-4 py-3 ${el?"border-line bg-panel":n(W)?"border-ok/40 bg-ok/10":"border-bad/40 bg-bad/10"}`,children:[(0,t.jsxs)("span",{className:"flex items-center gap-2 font-medium text-ink",children:[el?(0,t.jsx)(y.Loader2,{size:16,className:"animate-spin text-accent"}):n(W)?(0,t.jsx)(h.CheckCircle2,{size:16,className:"text-ok"}):(0,t.jsx)(N.XCircle,{size:16,className:"text-bad"}),el?"Running…":n(W)?"All requests passed":"Not all requests passed"]}),(0,t.jsx)("span",{className:"text-sm text-mute",children:r(W)}),eh&&ex?(0,t.jsxs)("span",{className:"text-sm text-mute",children:["· ",(eh.durationMs/1e3).toFixed(1)," s of response time"]}):null,ex?(0,t.jsxs)("span",{className:"ml-auto flex flex-wrap items-center gap-1",children:[(0,t.jsx)("span",{className:"mr-1 text-xs text-mute",children:"Save as"}),(0,t.jsxs)("button",{type:"button",className:"btn btn-secondary py-1 text-xs",onClick:()=>(0,T.downloadText)(`${F(W)}.html`,function(e,t={}){let s=a(e.steps),i=n(e),l=e.collection||"Saved requests",c=e=>"passed"===e?"ok":"failed"===e||"error"===e?"bad":"mute",u=e.steps.map((e,t)=>{let s=e.checks?.length?`<ul class="checks">${e.checks.map(e=>`<li class="${e.ok?"ok":"bad"}">${e.ok?"✓":"✕"} ${o(e.name)}</li>`).join("")}</ul>`:"",a=e.bodyPreview?`<details><summary>Response body</summary><pre>${o(e.bodyPreview)}</pre></details>`:"",n=e.runFirst?`<div class="sub">Run first: ${o(e.runFirst.label)}${e.runFirst.reused?" (reused)":""}</div>`:"",r=e.saved?.length?`<div class="sub">${e.saved.map(e=>e.found?`Saved {{${o(e.name)}}} = ${o(e.preview??"")}`:`✕ {{${o(e.name)}}} not found`).join(" · ")}</div>`:"";return`<tr>
54
+ <td class="n">${t+1}</td>
55
+ <td><span class="state ${c(e.state)}">${d[e.state]}</span></td>
56
+ <td><div><b class="m">${o(e.method)}</b> ${o(e.name)}</div><div class="sub mono">${o(e.url)}</div>${n}${r}${e.message?`<div class="msg ${c(e.state)}">${o(e.message)}</div>`:""}${s}${a}</td>
57
+ <td class="num">${e.status??"–"}</td>
58
+ <td class="num">${null!=e.durationMs?`${Math.round(e.durationMs)} ms`:"–"}</td>
59
+ </tr>`}).join("\n");return`<!doctype html>
60
+ <html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
61
+ <title>${o(l)} — collection run</title>
62
+ <style>
63
+ :root { --ink:#12151c; --mute:#5c6778; --line:#d5dce6; --panel:#fff; --canvas:#f4f6f9; --ok:#137333; --bad:#c62828; --okbg:#e6f4ea; --badbg:#fce8e6; }
64
+ * { box-sizing:border-box; }
65
+ body { margin:0; background:var(--canvas); color:var(--ink); font:14px/1.5 "Segoe UI",system-ui,-apple-system,sans-serif; }
66
+ main { max-width:1000px; margin:0 auto; padding:28px 16px 48px; }
67
+ h1 { font-size:22px; margin:0 0 4px; }
68
+ .meta { color:var(--mute); font-size:13px; margin-bottom:18px; }
69
+ .banner { border-radius:10px; padding:14px 16px; font-weight:600; margin-bottom:16px; }
70
+ .banner.ok { background:var(--okbg); color:var(--ok); } .banner.bad { background:var(--badbg); color:var(--bad); }
71
+ .tiles { display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:10px; margin-bottom:18px; }
72
+ .tile { background:var(--panel); border:1px solid var(--line); border-radius:10px; padding:10px 14px; }
73
+ .tile b { display:block; font-size:24px; }
74
+ .tile span { color:var(--mute); font-size:12.5px; }
75
+ table { width:100%; border-collapse:collapse; background:var(--panel); border:1px solid var(--line); border-radius:10px; overflow:hidden; }
76
+ th, td { text-align:left; vertical-align:top; padding:9px 10px; border-bottom:1px solid var(--line); }
77
+ th { font-size:12px; color:var(--mute); font-weight:600; background:#eef1f6; }
78
+ .n, .num { white-space:nowrap; font-variant-numeric:tabular-nums; } .num { text-align:right; }
79
+ .state { display:inline-block; font-size:12px; font-weight:600; padding:1px 8px; border-radius:999px; white-space:nowrap; }
80
+ .state.ok { background:var(--okbg); color:var(--ok); } .state.bad { background:var(--badbg); color:var(--bad); } .state.mute { background:#eef1f6; color:var(--mute); }
81
+ .m { font-family:ui-monospace,Consolas,monospace; font-size:12px; }
82
+ .sub { color:var(--mute); font-size:12.5px; } .mono { font-family:ui-monospace,Consolas,monospace; word-break:break-all; }
83
+ .msg { font-size:13px; margin-top:4px; } .msg.bad { color:var(--bad); } .msg.mute { color:var(--mute); }
84
+ .checks { list-style:none; padding:0; margin:6px 0 0; font-size:12.5px; } .checks .ok { color:var(--ok); } .checks .bad { color:var(--bad); }
85
+ details { margin-top:6px; font-size:12.5px; } summary { cursor:pointer; color:var(--mute); }
86
+ pre { white-space:pre-wrap; word-break:break-all; background:#eef1f6; padding:8px; border-radius:6px; max-height:300px; overflow:auto; }
87
+ footer { color:var(--mute); font-size:12px; margin-top:16px; }
88
+ </style></head><body><main>
89
+ <h1>${o(l)}</h1>
90
+ <div class="meta">Collection run \xb7 ${o(new Date(e.startedAt).toLocaleString("en-GB"))}${e.environment?` \xb7 environment ${o(e.environment)}`:""}</div>
91
+ <div class="banner ${i?"ok":"bad"}">${i?"✓ All requests passed":"✕ Not all requests passed"} — ${o(r(e))}</div>
92
+ <div class="tiles">
93
+ <div class="tile"><b>${s.passed}</b><span>passed</span></div>
94
+ <div class="tile"><b>${s.failed}</b><span>failed</span></div>
95
+ <div class="tile"><b>${s.errors}</b><span>could not run</span></div>
96
+ <div class="tile"><b>${s.skipped}</b><span>skipped</span></div>
97
+ <div class="tile"><b>${(s.durationMs/1e3).toFixed(1)} s</b><span>total response time</span></div>
98
+ </div>
99
+ <table>
100
+ <thead><tr><th>#</th><th>Result</th><th>Request</th><th class="num">Status</th><th class="num">Time</th></tr></thead>
101
+ <tbody>
102
+ ${u}
103
+ </tbody></table>
104
+ <footer>Made with APITestCenter \xb7 ${o(t.generatedAt??new Date().toISOString())}. A request passes when all its checks pass; without checks, on any 2xx or 3xx status.</footer>
105
+ </main></body></html>
106
+ `}(W),"text/html"),children:[(0,t.jsx)(g.Download,{size:12})," HTML"]}),(0,t.jsxs)("button",{type:"button",className:"btn btn-secondary py-1 text-xs",onClick:()=>{let e,t,s,n;return(0,T.downloadText)(`${F(W)}.xml`,(e=a(W.steps),t=W.collection||"Saved requests",s=W.steps.map(e=>{let s=`${e.method} ${e.name}`,a=` <testcase classname="${i(t)}" name="${i(s)}" time="${l(e.durationMs)}">`;if("passed"===e.state)return`${a}</testcase>`;if("skipped"===e.state||"pending"===e.state||"running"===e.state)return`${a}
107
+ <skipped message="${i(e.message??"Not run")}"/>
108
+ </testcase>`;let n="error"===e.state?"error":"failure",r=[e.status?`Status ${e.status}`:"",...(e.checks??[]).map(e=>`${e.ok?"✓":"✕"} ${e.name}`),e.bodyPreview?`
109
+ Response:
110
+ ${e.bodyPreview}`:""].filter(Boolean).join("\n");return`${a}
111
+ <${n} message="${i(e.message??e.state)}">${i(r)}</${n}>
112
+ </testcase>`}),n=l(e.durationMs),`<?xml version="1.0" encoding="UTF-8"?>
113
+ <testsuites name="APITestCenter" tests="${e.total}" failures="${e.failed}" errors="${e.errors}" skipped="${e.skipped}" time="${n}">
114
+ <testsuite name="${i(t)}" tests="${e.total}" failures="${e.failed}" errors="${e.errors}" skipped="${e.skipped}" time="${n}" timestamp="${i(W.startedAt)}">
115
+ ${s.join("\n")}
116
+ </testsuite>
117
+ </testsuites>
118
+ `),"application/xml")},title:"JUnit XML for CI dashboards",children:[(0,t.jsx)(g.Download,{size:12})," JUnit"]}),(0,t.jsxs)("button",{type:"button",className:"btn btn-secondary py-1 text-xs",onClick:()=>(0,T.downloadText)(`${F(W)}.json`,`${JSON.stringify({kind:"apitestcenter-suite",version:1,...W,totals:a(W.steps),passed:n(W)},null,2)}
119
+ `,"application/json"),children:[(0,t.jsx)(g.Download,{size:12})," JSON"]})]}):null]}):null,(0,t.jsxs)("section",{"aria-label":"Requests in run order",className:"overflow-hidden rounded-lg border border-line bg-panel",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 border-b border-line px-4 py-2 text-xs text-mute",children:[(0,t.jsx)(k.ListChecks,{size:14,"aria-hidden":!0}),(0,t.jsx)("span",{children:W?"Results":"Run order — untick to leave a request out; use the arrows to reorder. Saved for next time and for the CLI."})]}),V?(0,t.jsx)("ol",{children:eo.map(({item:s,skipped:a,step:n},r)=>{let i=Z.has(s.id),l=n&&(n.message||n.checks?.length||n.bodyPreview||n.runFirst||n.saved?.length);return(0,t.jsxs)("li",{className:"border-b border-line last:border-b-0",children:[(0,t.jsxs)("div",{className:`flex items-center gap-3 px-4 py-2 ${a&&!W?"opacity-50":""}`,children:[W?(0,t.jsx)(L,{state:n?.state??"pending"}):(0,t.jsx)("input",{type:"checkbox",checked:!a,onChange:()=>{var e;let t;return e=s.id,void((t=new Set(V?.skip??[])).has(e)?t.delete(e):t.add(e),X(null),ed({order:ei.map(e=>e.item.id),skip:[...t]}))},"aria-label":`Include ${s.name}`}),(0,t.jsx)("span",{className:"w-6 shrink-0 text-right font-mono text-xs text-mute",children:r+1}),(0,t.jsxs)("button",{type:"button",className:"flex min-w-0 flex-1 items-center gap-2 text-left",onClick:()=>l?ee(e=>{let t=new Set(e);return t.has(s.id)?t.delete(s.id):t.add(s.id),t}):void 0,"aria-expanded":l?i:void 0,children:[(0,t.jsx)("span",{className:`w-14 shrink-0 font-mono text-xs font-medium ${U[s.method]??"text-mute"}`,children:s.method}),(0,t.jsxs)("span",{className:"min-w-0",children:[(0,t.jsx)("span",{className:"block truncate text-sm text-ink",children:s.name}),(0,t.jsx)("span",{className:"block truncate font-mono text-[11px] text-mute",children:s.url})]}),l?i?(0,t.jsx)(x.ChevronDown,{size:14,className:"shrink-0 text-mute"}):(0,t.jsx)(f.ChevronRight,{size:14,className:"shrink-0 text-mute"}):null]}),n?.status?(0,t.jsx)("span",{className:`font-mono text-xs ${n.status<400?"text-ok":"text-bad"}`,children:n.status}):null,n?.durationMs!=null?(0,t.jsxs)("span",{className:"w-16 text-right font-mono text-xs text-mute",children:[Math.round(n.durationMs)," ms"]}):null,W?null:(0,t.jsxs)("span",{className:"flex items-center",children:[(0,t.jsx)("button",{type:"button",className:"rounded p-1 text-mute hover:text-ink disabled:opacity-30",disabled:0===r,onClick:()=>ec(s.id,-1),"aria-label":`Move ${s.name} up`,children:(0,t.jsx)(m,{size:14})}),(0,t.jsx)("button",{type:"button",className:"rounded p-1 text-mute hover:text-ink disabled:opacity-30",disabled:r===eo.length-1,onClick:()=>ec(s.id,1),"aria-label":`Move ${s.name} down`,children:(0,t.jsx)(p,{size:14})})]})]}),i&&n?(0,t.jsxs)("div",{className:"space-y-2 bg-panel-2 px-4 py-3 pl-[4.75rem] text-sm",children:[n.message?(0,t.jsx)("p",{className:"skipped"===n.state?"text-mute":"text-bad",children:n.message}):null,n.runFirst?(0,t.jsxs)("p",{className:"text-xs text-mute",children:["Run first: ",n.runFirst.label,n.runFirst.reused?" (reused from an earlier request)":""]}):null,n.saved?.length?(0,t.jsx)("p",{className:"text-xs",children:n.saved.map(e=>(0,t.jsx)("span",{className:`mr-3 ${e.found?"text-ok":"text-bad"}`,children:e.found?`Saved {{${e.name}}} = ${e.preview??""}`:`✕ {{${e.name}}} not found`},e.name))}):null,n.checks?.length?(0,t.jsx)("ul",{className:"space-y-0.5 text-xs",children:n.checks.map((e,s)=>(0,t.jsxs)("li",{className:e.ok?"text-ok":"text-bad",children:[e.ok?"✓":"✕"," ",e.name]},s))}):null,n.bodyPreview?(0,t.jsx)("pre",{className:"max-h-48 overflow-auto rounded-md border border-line bg-canvas p-2 font-mono text-[11px] whitespace-pre-wrap text-ink",children:n.bodyPreview}):null,(0,t.jsx)("button",{type:"button",className:"text-xs text-accent hover:underline",onClick:()=>(function(t){try{sessionStorage.setItem(z.OPEN_REQUEST_KEY,t)}catch{}e.push("/")})(s.id),children:"Open this request"})]}):null]},s.id)})}):(0,t.jsx)("p",{className:"px-4 py-6 text-sm text-mute",children:"Loading…"}),ex?(0,t.jsx)("div",{className:"border-t border-line px-4 py-2 text-right",children:(0,t.jsx)("button",{type:"button",className:"text-xs text-accent hover:underline",onClick:()=>X(null),children:"Edit the run order"})}):null]})]})})]})}],93639)},17219,15060,e=>{"use strict";let t=new Uint32Array(256).map((e,t)=>{let s=t;for(let e=0;e<8;e++)s=1&s?0xedb88320^s>>>1:s>>>1;return s>>>0});function s(e){let t=new Uint8Array(2);return new DataView(t.buffer).setUint16(0,e,!0),t}function a(e){let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e,!0),t}function n(e){let t=new Uint8Array(e.reduce((e,t)=>e+t.length,0)),s=0;for(let a of e)t.set(a,s),s+=a.length;return t}function r(e,t){let s=URL.createObjectURL(t),a=document.createElement("a");a.href=s,a.download=e,document.body.appendChild(a),a.click(),a.remove(),URL.revokeObjectURL(s)}e.s(["zipStore",0,function(e){let r=new TextEncoder,i=[],l=[],o=0;for(let[d,c]of Object.entries(e)){let e=r.encode(d),u="string"==typeof c?r.encode(c):c,p=function(e){let s=0xffffffff;for(let a of e)s=t[(s^a)&255]^s>>>8;return(0xffffffff^s)>>>0}(u),m=n([a(0x4034b50),s(20),s(0),s(0),s(0),s(0),a(p),a(u.length),a(u.length),s(e.length),s(0),e,u]),h=n([a(0x2014b50),s(20),s(20),s(0),s(0),s(0),s(0),a(p),a(u.length),a(u.length),s(e.length),s(0),s(0),s(0),s(0),a(0),a(o),e]);i.push(m),l.push(h),o+=m.length}let d=n(l),c=n([a(0x6054b50),s(0),s(0),s(Object.keys(e).length),s(Object.keys(e).length),a(d.length),a(o),s(0)]),u=n([...i,d,c]);return new Blob([u.buffer.slice(u.byteOffset,u.byteOffset+u.byteLength)],{type:"application/zip"})}],17219),e.s(["downloadBlob",0,r,"downloadText",0,function(e,t,s){r(e,new Blob([t],{type:s}))}],15060)},3792,66478,14168,e=>{"use strict";var t=e.i(99522);let s=(0,t.default)("play",[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]);e.s(["Play",0,s],3792);let a=(0,t.default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);async function n(e){let t=await e.json().catch(()=>null);if(!e.ok)throw Error(t?.error??`Engine error (${e.status})`);return t}e.s(["Square",0,a],66478);let r=(e,t,s)=>fetch(t,{method:e,headers:void 0===s?void 0:{"content-type":"application/json"},body:void 0===s?void 0:JSON.stringify(s)});e.s(["suiteApi",0,{plan:e=>fetch(`/engine/suites/plan?collection=${encodeURIComponent(e)}`,{cache:"no-store"}).then(e=>n(e)),savePlan:(e,t)=>r("PUT","/engine/suites/plan",{collection:e,...t}).then(e=>n(e)),start:e=>r("POST","/engine/suites/runs",e).then(e=>n(e)),get:e=>fetch(`/engine/suites/runs/${encodeURIComponent(e)}`,{cache:"no-store"}).then(e=>n(e)),stop:e=>r("POST",`/engine/suites/runs/${encodeURIComponent(e)}/stop`).then(e=>n(e))},"suiteHref",0,function(e){return`/suite?c=${encodeURIComponent(e)}`}],14168)}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,60459,e=>{"use strict";var t=e.i(61666),r=e.i(99522);let n=(0,r.default)("circle-question-mark",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);var a=e.i(86856);let l=(0,r.default)("file-search",[["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M4.268 21a2 2 0 0 0 1.727 1H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3",key:"ms7g94"}],["path",{d:"m9 18-1.5-1.5",key:"1j6qii"}],["circle",{cx:"5",cy:"14",r:"3",key:"ufru5t"}]]);var o=e.i(84355),i=e.i(67951),s=e.i(91694),u=e.i(29091);let c=(0,r.default)("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]),d=(0,r.default)("panel-left-close",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m16 15-3-3 3-3",key:"14y99z"}]]),f=(0,r.default)("panel-left-open",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"m14 9 3 3-3 3",key:"8010ee"}]]);var p=e.i(87283),h=e.i(50804),m=e.i(46443),y=e.i(83067),x=e.i(69578),b=e.i(78739),g=e.i(20054);function v({collapsed:e=!1}){let{checked:r,online:n,k6Ready:a,k6Label:l,appVersion:o}=(0,g.useEngineHealth)(),i=r?n&&a?"bg-ok":n?"bg-warn":"bg-bad":"bg-mute",s=r?n?a?"Engine ready":"Engine online, k6 missing":"Engine offline":"Checking engine";return e?(0,t.jsx)("div",{className:"flex justify-center py-1",title:s,role:"status","aria-label":s,children:(0,t.jsx)("span",{className:`h-2 w-2 rounded-full ${i}`})}):(0,t.jsxs)("div",{className:"text-xs",role:"status",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 text-ink",children:[(0,t.jsx)("span",{className:`h-2 w-2 rounded-full ${i}`,"aria-hidden":!0}),s]}),(0,t.jsx)("div",{className:"mt-1 text-xs leading-snug text-mute",children:r?n?l:"Start it with pnpm dev":"…"}),(0,t.jsxs)("button",{type:"button",onClick:b.openAbout,className:"mt-1 text-xs text-mute hover:text-accent",title:"Version, updates, and where your files are",children:[o&&"dev"!==o?`Version ${o}`:"Development build"," · About"]})]})}var j=e.i(68865);function P(){let{items:e,remove:r,clear:n}=(0,j.useCompareTray)(),a=(0,m.usePathname)(),l=(0,m.useRouter)();if(!e.length||a.startsWith("/compare"))return null;let o=e.length>=2;return(0,t.jsx)("div",{role:"region","aria-label":"Runs to compare",className:"fixed bottom-4 left-1/2 z-[60] w-[min(56rem,calc(100%-2rem))] -translate-x-1/2",children:(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2 rounded-xl border border-accent/40 bg-panel px-3 py-2.5 shadow-2xl",children:[(0,t.jsxs)("span",{className:"flex items-center gap-1.5 text-sm font-medium text-ink",children:[(0,t.jsx)(i.GitCompareArrows,{size:16,className:"text-accent","aria-hidden":!0}),"Compare",(0,t.jsxs)("span",{className:"text-xs font-normal text-mute",children:[e.length," of ",j.TRAY_MAX]})]}),(0,t.jsx)("ul",{className:"flex min-w-0 flex-1 flex-wrap gap-1.5",children:e.map(e=>(0,t.jsxs)("li",{className:"flex max-w-56 items-center gap-1 rounded-full border border-line bg-panel-2 py-0.5 pr-1 pl-2.5 text-xs text-ink",title:`${e.endpoint} \xb7 ${new Date(e.startedAt).toLocaleString()}`,children:[(0,t.jsx)("span",{className:"truncate",children:e.name}),(0,t.jsx)("button",{type:"button",onClick:()=>r(e.id),className:"rounded-full p-0.5 text-mute hover:text-bad","aria-label":`Remove ${e.name} from compare`,children:(0,t.jsx)(p.X,{size:12})})]},e.id))}),(0,t.jsxs)("span",{className:"flex items-center gap-2",children:[(0,t.jsx)("button",{type:"button",onClick:n,className:"text-xs text-mute hover:text-ink",children:"Clear"}),(0,t.jsx)("button",{type:"button",disabled:!o,title:o?"Open these runs side by side on Compare":"Add at least two runs",onClick:()=>l.push(`/compare?ids=${e.map(e=>e.id).join(",")}`),className:"btn btn-primary py-1.5 text-sm",children:o?`Compare ${e.length} runs`:"Add one more run"})]})]})})}var _=e.i(7641),C=e.i(5831),k=e.i(67217),O=e.i(56931),S=e.i(51554);let w=(0,r.default)("moon",[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]]),N=(0,r.default)("sun",[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]]);var M=e.i(48317);let T=[{id:"system",label:"System",icon:c},{id:"light",label:"Light",icon:N},{id:"dark",label:"Dark",icon:w}];function E({compact:e=!1,collapsed:r=!1}){let{theme:n,setTheme:a}=(0,M.useTheme)(),[l,o]=(0,y.useState)(!1);(0,y.useEffect)(()=>{o(!0)},[]);let i=l?n??"system":"system";if(r){let e=Math.max(0,T.findIndex(e=>e.id===i)),r=T[e]??T[0],n=r.icon;return(0,t.jsx)("button",{type:"button","aria-label":`Theme: ${r.label}. Click to change.`,disabled:!l,onClick:()=>a(T[(e+1)%T.length].id),className:"grid h-8 w-8 place-items-center rounded text-mute hover:bg-panel-2 hover:text-ink",children:(0,t.jsx)(n,{size:14,strokeWidth:1.75})})}return(0,t.jsxs)("div",{children:[e?null:(0,t.jsx)("div",{className:"mb-2 text-xs tracking-wide text-mute uppercase",children:"Appearance"}),(0,t.jsx)("div",{className:"grid grid-cols-3 gap-1 rounded-md border border-line bg-panel-2 p-1",role:"radiogroup","aria-label":"Theme",children:T.map(e=>{let r=e.icon,n=i===e.id;return(0,t.jsxs)("button",{type:"button",role:"radio","aria-checked":n,"aria-label":e.label,disabled:!l,onClick:()=>a(e.id),className:`flex items-center justify-center gap-1 rounded px-2 py-1.5 text-xs transition-colors ${n?"bg-panel text-ink shadow-sm":"text-mute hover:text-ink"}`,children:[(0,t.jsx)(r,{size:13,strokeWidth:1.75}),(0,t.jsx)("span",{children:e.label})]},e.id)})})]})}let R=[{href:"/",label:"Test API",icon:o.FlaskConical},{href:"/suite",label:"Run collection",icon:u.ListChecks},{href:"/compare",label:"Compare",icon:i.GitCompareArrows},{href:"/history",label:"History",icon:s.History},{href:"/preview",label:"Open report",icon:l}],A="apitestcenter-sidebar",F="apitestcenter-phone-notice";e.s(["AppShell",0,function({children:e}){let r=(0,m.usePathname)(),[l,o]=(0,y.useState)(!1),[i,s]=(0,y.useState)(!1);return(0,y.useEffect)(()=>{let e=window.localStorage.getItem(A),t=window.matchMedia("(max-width: 1279px)");o(t.matches||"collapsed"===e);let r=e=>{e.matches?o(!0):o("collapsed"===window.localStorage.getItem(A))};return t.addEventListener("change",r),s(window.matchMedia("(max-width: 767px)").matches&&"dismissed"!==window.sessionStorage.getItem(F)),()=>t.removeEventListener("change",r)},[]),(0,t.jsxs)("div",{className:"flex h-dvh overflow-hidden",children:[(0,t.jsx)("a",{href:"#main",className:"sr-only z-50 rounded-md bg-accent px-3 py-2 text-sm text-canvas focus:not-sr-only focus:fixed focus:top-2 focus:left-2",children:"Skip to content"}),(0,t.jsxs)("aside",{"aria-label":"Main navigation",className:`flex h-full shrink-0 flex-col border-r border-line bg-panel transition-[width] duration-150 ${l?"w-14":"w-56"}`,children:[(0,t.jsxs)("div",{className:`flex items-center border-b border-line ${l?"flex-col gap-2 px-2 py-3":"justify-between gap-2 px-4 py-4"}`,children:[(0,t.jsx)(h.default,{href:"/",className:"min-w-0","aria-label":"APITestCenter home",children:l?(0,t.jsx)("span",{className:"grid h-8 w-8 place-items-center rounded-md bg-accent-dim text-xs font-semibold tracking-wider text-accent",children:"ATC"}):(0,t.jsxs)("span",{className:"block",children:[(0,t.jsx)("span",{className:"block text-sm font-semibold text-ink",children:"APITestCenter"}),(0,t.jsx)("span",{className:"block text-xs text-mute",children:"API & performance lab"})]})}),(0,t.jsx)("button",{type:"button",onClick:function(){let e=!l;o(e),window.localStorage.setItem(A,e?"collapsed":"open")},"aria-label":l?"Expand sidebar":"Collapse sidebar","aria-expanded":!l,className:"shrink-0 rounded-md p-1.5 text-mute hover:bg-panel-2 hover:text-ink",children:l?(0,t.jsx)(f,{size:16}):(0,t.jsx)(d,{size:16})})]}),(0,t.jsx)("nav",{className:`flex flex-1 flex-col gap-0.5 ${l?"p-2":"p-3"}`,children:R.map(e=>{let n="/"===e.href?"/"===r:r===e.href||r.startsWith(`${e.href}/`),a=e.icon;return(0,t.jsxs)(h.default,{href:e.href,title:l?e.label:void 0,"aria-current":n?"page":void 0,className:`flex items-center rounded-md text-sm transition-colors ${l?"justify-center px-0 py-2":"gap-2.5 px-3 py-2"} ${n?"bg-accent-dim text-accent":"text-mute hover:bg-panel-2 hover:text-ink"}`,children:[(0,t.jsx)(a,{size:16,strokeWidth:1.75,"aria-hidden":!0}),l?(0,t.jsx)("span",{className:"sr-only",children:e.label}):e.label]},e.href)})}),(0,t.jsxs)("div",{className:`space-y-3 border-t border-line ${l?"p-2":"p-4"}`,children:[(0,t.jsxs)("button",{type:"button","data-tour":"help",onClick:_.openHelp,title:"What the words mean, and the tour","aria-label":"Help",className:`flex w-full items-center rounded-md border border-line text-xs text-mute hover:border-accent hover:text-ink ${l?"justify-center py-1.5":"gap-2 px-2.5 py-1.5"}`,children:[(0,t.jsx)(n,{size:13,"aria-hidden":!0}),l?null:"Help · what words mean"]}),(0,t.jsxs)("button",{type:"button",onClick:()=>window.dispatchEvent(new Event("atc:palette")),title:"Command palette (Ctrl+K)","aria-label":"Open command palette",className:`flex w-full items-center rounded-md border border-line text-xs text-mute hover:border-accent hover:text-ink ${l?"justify-center py-1.5":"gap-2 px-2.5 py-1.5"}`,children:[(0,t.jsx)(a.Command,{size:13,"aria-hidden":!0}),l?null:(0,t.jsxs)(t.Fragment,{children:["Commands ",(0,t.jsx)("span",{className:"kbd ml-auto",children:"Ctrl K"})]})]}),l?(0,t.jsx)("div",{className:"flex justify-center",children:(0,t.jsx)(E,{collapsed:!0})}):(0,t.jsx)(E,{compact:!0}),(0,t.jsx)(v,{collapsed:l})]})]}),(0,t.jsxs)("main",{id:"main",className:"flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto",children:[i?(0,t.jsxs)("div",{role:"note",className:"flex items-start gap-3 border-b border-line bg-accent-dim px-4 py-3 text-sm text-ink",children:[(0,t.jsx)(c,{size:18,className:"mt-0.5 shrink-0 text-accent","aria-hidden":!0}),(0,t.jsx)("p",{className:"min-w-0 flex-1",children:"APITestCenter is built for a computer. Load tests run from the machine you use, and the editor needs room. You can still read reports here."}),(0,t.jsx)("button",{type:"button","aria-label":"Dismiss",className:"shrink-0 rounded p-1 text-mute hover:text-ink",onClick:()=>{window.sessionStorage.setItem(F,"dismissed"),s(!1)},children:(0,t.jsx)(p.X,{size:16})})]}):null,e]}),(0,t.jsx)(x.CommandPalette,{}),(0,t.jsx)(_.HelpPanel,{}),(0,t.jsx)(C.Tour,{}),(0,t.jsx)(k.ImportDialog,{}),(0,t.jsx)(O.CertificatesDialog,{}),(0,t.jsx)(b.AboutDialog,{}),(0,t.jsx)(P,{}),(0,t.jsx)(S.UsageConsent,{})]})}],60459)},87329,e=>{"use strict";var t=e.i(61666),r=e.i(48317),n=e.i(39170),a=e.i(68865),l=e.i(56396),o=e.i(20054),i=e.i(59180),s=e.i(48321),u=e.i(6278),c=e.i(88153);e.s(["Providers",0,function({children:e}){return(0,t.jsx)(r.ThemeProvider,{attribute:"class",defaultTheme:"system",enableSystem:!0,disableTransitionOnChange:!0,storageKey:"apitestcenter-theme",children:(0,t.jsx)(o.EngineHealthProvider,{children:(0,t.jsx)(i.HistoryProvider,{children:(0,t.jsx)(s.ViewsProvider,{children:(0,t.jsx)(u.WorkspaceProvider,{children:(0,t.jsx)(c.SloProvider,{children:(0,t.jsx)(l.ToastProvider,{children:(0,t.jsx)(n.ConfirmProvider,{children:(0,t.jsx)(a.CompareTrayProvider,{children:e})})})})})})})})})}])},68865,e=>{"use strict";var t=e.i(61666),r=e.i(83067);let n="apitestcenter-compare-tray",a=(0,r.createContext)({items:[],has:()=>!1,toggle:()=>!1,remove:()=>{},clear:()=>{}});e.s(["CompareTrayProvider",0,function({children:e}){let[l,o]=(0,r.useState)([]);(0,r.useEffect)(()=>{try{let e=JSON.parse(localStorage.getItem(n)??"[]");Array.isArray(e)&&o(e.filter(e=>"string"==typeof e?.id&&"string"==typeof e?.name).slice(0,6))}catch{}},[]);let i=(0,r.useCallback)(e=>{o(e);try{localStorage.setItem(n,JSON.stringify(e))}catch{}},[]),s=(0,r.useMemo)(()=>({items:l,has:e=>l.some(t=>t.id===e),toggle:e=>l.some(t=>t.id===e.id)?(i(l.filter(t=>t.id!==e.id)),!0):!(l.length>=6)&&(i([...l,e]),!0),remove:e=>i(l.filter(t=>t.id!==e)),clear:()=>i([])}),[l,i]);return(0,t.jsx)(a.Provider,{value:s,children:e})},"TRAY_MAX",0,6,"useCompareTray",0,function(){return(0,r.useContext)(a)}])},88153,e=>{"use strict";var t=e.i(61666),r=e.i(83067);let n="apitestcenter-session-slo",a=(0,r.createContext)({slo:null,setSlo:()=>{},ready:!1});e.s(["SloProvider",0,function({children:e}){let[l,o]=(0,r.useState)(null),[i,s]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{o(function(){try{let e=localStorage.getItem(n)??sessionStorage.getItem(n);if(!e)return null;let t=JSON.parse(e);if("number"!=typeof t.p95Ms||"number"!=typeof t.errorRate||!(t.p95Ms>0)||t.errorRate<0)return null;return{p95Ms:t.p95Ms,errorRate:t.errorRate,p99Ms:"number"==typeof t.p99Ms&&t.p99Ms>0?t.p99Ms:void 0,checksRate:"number"==typeof t.checksRate?t.checksRate:void 0,abortOnFail:!0===t.abortOnFail}}catch{return null}}()),s(!0)},[]),(0,t.jsx)(a.Provider,{value:{slo:l,setSlo:function(e){o(e);try{sessionStorage.removeItem(n),e?localStorage.setItem(n,JSON.stringify(e)):localStorage.removeItem(n)}catch{}},ready:i},children:e})},"useSlo",0,function(){return(0,r.useContext)(a)}])},48321,e=>{"use strict";var t=e.i(61666);e.i(24856);var r=e.i(86483),n=e.i(83067);let a=(0,r.normalizeViewsFile)(null),l=(0,n.createContext)({file:a,ready:!1,viewsFor:e=>r.BUILT_IN_VIEWS.filter(t=>t.scope===e),save:async e=>e});function o(){return(0,n.useContext)(l)}let i=e=>`apitestcenter-last-view-${e}`;e.s(["ViewsProvider",0,function({children:e}){let[o,i]=(0,n.useState)(a),[s,u]=(0,n.useState)(!1);(0,n.useEffect)(()=>{fetch("/engine/settings/views",{cache:"no-store"}).then(e=>e.ok?e.json():null).then(e=>e&&i((0,r.normalizeViewsFile)(e))).catch(()=>void 0).finally(()=>u(!0))},[]);let c=(0,n.useCallback)(async e=>{let t=await fetch("/engine/settings/views",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(e)}),n=await t.json();if(!t.ok)throw Error(n.error??"Could not save the view");let a=(0,r.normalizeViewsFile)(n);return i(a),a},[]),d=(0,n.useMemo)(()=>({file:o,ready:s,viewsFor:e=>[...r.BUILT_IN_VIEWS,...o.views].filter(t=>t.scope===e),save:c}),[o,s,c]);return(0,t.jsx)(l.Provider,{value:d,children:e})},"useSelectedView",0,function(e){let{file:t,viewsFor:r}=o(),[a,l]=(0,n.useState)(null);(0,n.useEffect)(()=>{try{l(localStorage.getItem(i(e)))}catch{}},[e]);let s=r(e);return[s.find(e=>e.id===a)??s.find(r=>r.id===t.defaults[e])??s[0],(0,n.useCallback)(t=>{l(t);try{localStorage.setItem(i(e),t)}catch{}},[e])]},"useViews",0,o])},84355,91694,e=>{"use strict";var t=e.i(99522);let r=(0,t.default)("flask-conical",[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2",key:"18mbvz"}],["path",{d:"M6.453 15h11.094",key:"3shlmq"}],["path",{d:"M8.5 2h7",key:"csnxdl"}]]);e.s(["FlaskConical",0,r],84355);let n=(0,t.default)("history",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);e.s(["History",0,n],91694)},67951,e=>{"use strict";let t=(0,e.i(99522).default)("git-compare-arrows",[["circle",{cx:"5",cy:"6",r:"3",key:"1qnov2"}],["path",{d:"M12 6h5a2 2 0 0 1 2 2v7",key:"1yj91y"}],["path",{d:"m15 9-3-3 3-3",key:"1lwv8l"}],["circle",{cx:"19",cy:"18",r:"3",key:"1qljk2"}],["path",{d:"M12 18H7a2 2 0 0 1-2-2V9",key:"16sdep"}],["path",{d:"m9 15 3 3-3 3",key:"1m3kbl"}]]);e.s(["GitCompareArrows",0,t],67951)},29091,e=>{"use strict";let t=(0,e.i(99522).default)("list-checks",[["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]]);e.s(["ListChecks",0,t],29091)},50804,(e,t,r)=>{"use strict";e.i(29694),Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return x},useLinkStatus:function(){return g}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let l=e.r(56421),o=e.r(61666),i=l._(e.r(83067)),s=e.r(67478),u=e.r(15489),c=e.r(25977),d=e.r(67670),f=e.r(12624),p=e.r(16051),h=e.r(44137),m=e.r(43102),y=e.r(31039);function x(t){var r;let n,a,l,[x,g]=(0,i.useOptimistic)(h.IDLE_LINK_STATUS),v=(0,i.useRef)(null),{href:j,as:P,children:_,prefetch:C=null,passHref:k,replace:O,shallow:S,scroll:w,onClick:N,onMouseEnter:M,onTouchStart:T,legacyBehavior:E=!1,onNavigate:R,transitionTypes:A,ref:F,unstable_dynamicOnHover:I,...L}=t;n=_,E&&("string"==typeof n||"number"==typeof n)&&(n=(0,o.jsx)("a",{children:n}));let B=i.default.useContext(u.AppRouterContext),D=!1!==C,$=!1===C?"none":!0===C?"full":"auto",U="none"!==$?"auto"===$?y.FetchStrategy.PPR:y.FetchStrategy.Full:y.FetchStrategy.PPR,H="string"==typeof(r=P||j)?r:(0,s.formatUrl)(r);if(E){if(n?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});a=i.default.Children.only(n)}let z=E?a&&"object"==typeof a&&a.ref:F,V,K=i.default.useCallback(e=>(null!==B&&(v.current=(0,h.mountLinkInstance)(e,H,B,U,D,g,V)),()=>{v.current&&((0,h.unmountLinkForCurrentNavigation)(v.current),v.current=null),(0,h.unmountPrefetchableInstance)(e)}),[D,H,B,U,g,V]),W={ref:(0,c.useMergedRef)(K,z),onClick(t){E||"function"!=typeof N||N(t),E&&a.props&&"function"==typeof a.props.onClick&&a.props.onClick(t),!B||t.defaultPrevented||function(t,r,n,a,l,o,s,u="none"){if("u">typeof window){let c,{nodeName:d}=t.currentTarget;if("A"===d.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,m.isLocalURL)(r)){a&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),o){let e=!1;if(o({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:f}=e.r(99276);i.default.startTransition(()=>{f(r,a?"replace":"push",!1===l?p.ScrollBehavior.NoScroll:p.ScrollBehavior.Default,n.current,s,u)})}}(t,H,v,O,w,R,A,$)},onMouseEnter(e){E||"function"!=typeof M||M(e),E&&a.props&&"function"==typeof a.props.onMouseEnter&&a.props.onMouseEnter(e),B&&D&&(0,h.onNavigationIntent)(e.currentTarget,!0===I)},onTouchStart:function(e){E||"function"!=typeof T||T(e),E&&a.props&&"function"==typeof a.props.onTouchStart&&a.props.onTouchStart(e),B&&D&&(0,h.onNavigationIntent)(e.currentTarget,!0===I)}};return(0,d.isAbsoluteUrl)(H)?W.href=H:E&&!k&&("a"!==a.type||"href"in a.props)||(W.href=(0,f.addBasePath)(H)),l=E?i.default.cloneElement(a,W):(0,o.jsx)("a",{...L,...W,children:n}),(0,o.jsx)(b.Provider,{value:x,children:l})}let b=(0,i.createContext)(h.IDLE_LINK_STATUS),g=()=>(0,i.useContext)(b);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},13199,(e,t,r)=>{"use strict";e.i(29694),Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useRouterBFCache",{enumerable:!0,get:function(){return a}});let n=e.r(83067);function a(e,t,r){let[a,l]=(0,n.useState)(()=>({tree:e,cacheNode:t,stateKey:r,next:null}));if(a.tree===e)return a;let o={tree:e,cacheNode:t,stateKey:r,next:null},i=1,s=a,u=o;for(;null!==s&&i<1;){if(s.stateKey===r){u.next=s.next;break}{i++;let e={tree:s.tree,cacheNode:s.cacheNode,stateKey:s.stateKey,next:null};u.next=e,u=e}s=s.next}return l(o),o}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},82334,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ClientPageRoot",{enumerable:!0,get:function(){return u}});let n=e.r(61666),a=e.r(15489),l=e.r(83067),o=e.r(8856),i=e.r(22012),s=e.r(23898);function u({Component:e,serverProvidedParams:t}){let r,c;if(null!==t)r=t.searchParams,c=t.params;else{let e=(0,l.use)(a.LayoutRouterContext);c=null!==e?e.parentParams:{},r=(0,o.urlSearchParamsToParsedUrlQuery)((0,l.use)(i.SearchParamsContext))}let d=(0,s.createClientSearchParams)(r),f=(0,s.createClientParams)(c);return(0,n.jsx)(e,{params:f,searchParams:d})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},44326,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ClientSegmentRoot",{enumerable:!0,get:function(){return i}});let n=e.r(61666),a=e.r(15489),l=e.r(83067),o=e.r(23898);function i({Component:e,slots:t,serverProvidedParams:r}){let s;if(null!==r)s=r.params;else{let e=(0,l.use)(a.LayoutRouterContext);s=null!==e?e.parentParams:{}}let u=(0,o.createClientParams)(s);return(0,n.jsx)(e,{...t,params:u})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},50411,(e,t,r)=>{"use strict";e.i(29694),Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"HTTPAccessFallbackBoundary",{enumerable:!0,get:function(){return c}});let n=e.r(56421),a=e.r(61666),l=n._(e.r(83067)),o=e.r(79172),i=e.r(81402),s=e.r(15489);class u extends l.default.Component{constructor(e){super(e),this.state={triggeredStatus:void 0,previousPathname:e.pathname}}componentDidCatch(){}static getDerivedStateFromError(e){if((0,i.isHTTPAccessFallbackError)(e))return{triggeredStatus:(0,i.getAccessFallbackHTTPStatus)(e)};throw e}static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPathname&&t.triggeredStatus?{triggeredStatus:void 0,previousPathname:e.pathname}:{triggeredStatus:t.triggeredStatus,previousPathname:e.pathname}}render(){let{notFound:e,forbidden:t,unauthorized:r,children:n}=this.props,{triggeredStatus:l}=this.state,o={[i.HTTPAccessErrorStatus.NOT_FOUND]:e,[i.HTTPAccessErrorStatus.FORBIDDEN]:t,[i.HTTPAccessErrorStatus.UNAUTHORIZED]:r};if(l){let s=l===i.HTTPAccessErrorStatus.NOT_FOUND&&e,u=l===i.HTTPAccessErrorStatus.FORBIDDEN&&t,c=l===i.HTTPAccessErrorStatus.UNAUTHORIZED&&r;return s||u||c?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("meta",{name:"robots",content:"noindex"}),!1,o[l]]}):n}return n}}function c({notFound:e,forbidden:t,unauthorized:r,children:n}){let i=(0,o.useUntrackedPathname)(),d=(0,l.useContext)(s.MissingSlotContext);return e||t||r?(0,a.jsx)(u,{pathname:i,notFound:e,forbidden:t,unauthorized:r,missingSlots:d,children:n}):(0,a.jsx)(a.Fragment,{children:n})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},64607,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={InstantValidationBoundaryContext:function(){return l},PlaceValidationBoundaryBelowThisLevel:function(){return o},RenderValidationBoundaryAtThisLevel:function(){return i},SlotMarker:function(){return s}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let l=null,o=null,i=null,s=null;("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},65838,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={InstantValidationBoundaryContext:function(){return l.InstantValidationBoundaryContext},PlaceValidationBoundaryBelowThisLevel:function(){return l.PlaceValidationBoundaryBelowThisLevel},RenderValidationBoundaryAtThisLevel:function(){return l.RenderValidationBoundaryAtThisLevel},SlotMarker:function(){return l.SlotMarker}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let l=e.r(64607);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},32428,(e,t,r)=>{"use strict";e.i(29694),Object.defineProperty(r,"__esModule",{value:!0});var n={LoadingBoundaryProvider:function(){return k},default:function(){return S}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let l=e.r(36437),o=e.r(56421),i=e.r(61666),s=o._(e.r(83067)),u=l._(e.r(65296)),c=e.r(15489),d=e.r(5231),f=e.r(62395),p=e.r(96714),h=e.r(28657),m=e.r(50411);e.r(65838);let y=e.r(18795),x=e.r(13199);e.r(78079);let b=e.r(22012),g=e.r(8856),v=e.r(71009);u.default.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function j(e,t,r){let n=e.getClientRects();if(0===n.length)return 0;let a=1/0;for(let e=0;e<n.length;e++){let t=n[e];t.top<a&&(a=t.top)}return a>=r()&&a<=t?1:2}s.default.Component;let P=function(e){let t=s.default.useRef(null);return(0,s.useLayoutEffect)(()=>{let{focusAndScrollRef:r,cacheNode:n}=e,a=r.forceScroll?r.scrollRef:n.scrollRef;if(null===a||!a.current)return;let l=null,o=r.hashFragment;if(o){var i;if(null===(l="top"===(i=o)?document.body:document.getElementById(i)??document.getElementsByName(i)[0]??null)){a.current=!1,r.onlyHashChange=!1,r.hashFragment=null;return}}else l=t.current;if(null===l)return;let s=!1;(0,p.disableSmoothScrollDuringRouteTransition)(()=>{let e=document.documentElement,t=null,r=null,n=null,i=()=>{var r,a;let l,o;return null===n&&(r=e,a=t,n=!Number.isFinite(o=Number.parseFloat(l=getComputedStyle(r).scrollPaddingTop))||o<0?0:l.endsWith("px")?o:l.endsWith("%")?o/100*a:0),n};(o||(t=e.clientHeight,0!==(r=j(l,t,i))))&&((s=!0,a.current=!1,o)?l.scrollIntoView():1!==r&&(e.scrollTop=0,2===j(l,t,i)&&l.scrollIntoView()))},{dontForceLayout:!0,onlyHashChange:r.onlyHashChange}),s&&(r.onlyHashChange=!1,r.hashFragment=null)},void 0),(0,i.jsx)(s.Fragment,{ref:t,children:e.children})};function _({children:e,cacheNode:t}){let r=(0,s.useContext)(c.GlobalLayoutRouterContext);if(!r)throw Object.defineProperty(Error("invariant global layout router not mounted"),"__NEXT_ERROR_CODE",{value:"E473",enumerable:!1,configurable:!0});return(0,i.jsx)(P,{focusAndScrollRef:r.focusAndScrollRef,cacheNode:t,children:e})}function C({tree:e,segmentPath:t,debugNameContext:r,cacheNode:n,params:a,url:l,isActive:o}){let u,f=(0,s.useContext)(c.GlobalLayoutRouterContext);if((0,s.useContext)(b.NavigationPromisesContext),!f)throw Object.defineProperty(Error("invariant global layout router not mounted"),"__NEXT_ERROR_CODE",{value:"E473",enumerable:!1,configurable:!0});let p=null!==n?n:(0,s.use)(d.unresolvedThenable),h=null!==p.prefetchRsc?p.prefetchRsc:p.rsc,m=(0,s.useDeferredValue)(p.rsc,h);if((0,v.isDeferredRsc)(m)){let e=(0,s.use)(m);null===e&&(0,s.use)(d.unresolvedThenable),u=e}else null===m&&(0,s.use)(d.unresolvedThenable),u=m;let y=u;return(0,i.jsx)(c.LayoutRouterContext.Provider,{value:{parentTree:e,parentCacheNode:p,parentSegmentPath:t,parentParams:a,parentLoadingData:null,debugNameContext:r,url:l,isActive:o},children:y})}function k({loading:e,children:t}){let r=(0,s.use)(c.LayoutRouterContext);return null===r?t:(0,i.jsx)(c.LayoutRouterContext.Provider,{value:{parentTree:r.parentTree,parentCacheNode:r.parentCacheNode,parentSegmentPath:r.parentSegmentPath,parentParams:r.parentParams,parentLoadingData:e,debugNameContext:r.debugNameContext,url:r.url,isActive:r.isActive},children:t})}function O({name:e,loading:t,children:r}){if(null!==t){let n=t[0],a=t[1],l=t[2];return(0,i.jsx)(s.Suspense,{name:e,fallback:(0,i.jsxs)(i.Fragment,{children:[a,l,n]}),children:r})}return(0,i.jsx)(i.Fragment,{children:r})}function S({parallelRouterKey:e,error:t,errorStyles:r,errorScripts:n,templateStyles:a,templateScripts:l,template:o,notFound:u,forbidden:p,unauthorized:b,segmentViewBoundaries:v}){let j=(0,s.useContext)(c.LayoutRouterContext);if(!j)throw Object.defineProperty(Error("invariant expected layout router to be mounted"),"__NEXT_ERROR_CODE",{value:"E56",enumerable:!1,configurable:!0});let{parentTree:P,parentCacheNode:k,parentSegmentPath:w,parentParams:N,parentLoadingData:M,url:T,isActive:E,debugNameContext:R}=j,A=P[0],F=null===w?[e]:w.concat([A,e]),I=P[1][e],L=k.slots;(void 0===I||null===L)&&(0,s.use)(d.unresolvedThenable);let B=I[0],D=L[e]??null,$=(0,y.createRouterCacheKey)(B,!0),U=(0,x.useRouterBFCache)(I,D,$),H=[];do{let e=U.tree,s=U.cacheNode,d=U.stateKey,y=e[0],x=N;if(Array.isArray(y)){let e=y[0],t=y[1],r=y[2],n=(0,g.getParamValueFromCacheKey)(t,r);null!==n&&(x={...N,[e]:n})}let v=function(e){if("/"===e)return"/";if("string"==typeof e)if("(__SLOT__)"===e)return;else return e+"/";return e[1]+"/"}(y),j=v??R,P=void 0===v?void 0:R,k=(0,i.jsxs)(_,{cacheNode:s,children:[(0,i.jsx)(f.ErrorBoundary,{errorComponent:t,errorStyles:r,errorScripts:n,children:(0,i.jsx)(O,{name:P,loading:M,children:(0,i.jsx)(m.HTTPAccessFallbackBoundary,{notFound:u,forbidden:p,unauthorized:b,children:(0,i.jsxs)(h.RedirectBoundary,{children:[(0,i.jsx)(C,{url:T,tree:e,params:x,cacheNode:s,segmentPath:F,debugNameContext:j,isActive:E&&d===$}),null]})})})}),null]}),S=(0,i.jsxs)(c.TemplateContext.Provider,{value:k,children:[a,l,o]},d);H.push(S),U=U.next}while(null!==U)return H}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},48549,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return i}});let n=e.r(56421),a=e.r(61666),l=n._(e.r(83067)),o=e.r(15489);function i(){let e=(0,l.useContext)(o.TemplateContext);return(0,a.jsx)(a.Fragment,{children:e})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},51588,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderParamsFromClient",{enumerable:!0,get:function(){return a}});let n=new WeakMap;function a(e){let t=n.get(e);if(t)return t;let r=Promise.resolve(e);return n.set(e,r),r}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},50937,(e,t,r)=>{"use strict";e.i(29694),Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderParamsFromClient",{enumerable:!0,get:function(){return n}});let n=e.r(51588).createRenderParamsFromClient;("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},85434,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderSearchParamsFromClient",{enumerable:!0,get:function(){return a}});let n=new WeakMap;function a(e){let t=n.get(e);if(t)return t;let r=Promise.resolve(e);return n.set(e,r),r}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},94448,(e,t,r)=>{"use strict";e.i(29694),Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderSearchParamsFromClient",{enumerable:!0,get:function(){return n}});let n=e.r(85434).createRenderSearchParamsFromClient;("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},23898,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={createClientParams:function(){return l.createRenderParamsFromClient},createClientSearchParams:function(){return o.createRenderSearchParamsFromClient}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let l=e.r(50937),o=e.r(94448);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},25977,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return a}});let n=e.r(83067);function a(e,t){let r=(0,n.useRef)(null),a=(0,n.useRef)(null);return(0,n.useCallback)(n=>{if(null===n){let e=r.current;e&&(r.current=null,e());let t=a.current;t&&(a.current=null,t())}else e&&(r.current=l(e,n)),t&&(a.current=l(t,n))},[e,t])}function l(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},67670,(e,t,r)=>{"use strict";e.i(29694),Object.defineProperty(r,"__esModule",{value:!0});var n={DecodeError:function(){return x},MiddlewareNotFoundError:function(){return j},MissingStaticPage:function(){return v},NormalizeError:function(){return b},PageNotFoundError:function(){return g},SP:function(){return m},ST:function(){return y},WEB_VITALS:function(){return l},execOnce:function(){return o},getDisplayName:function(){return d},getLocationOrigin:function(){return u},getURL:function(){return c},isAbsoluteUrl:function(){return s},isResSent:function(){return f},loadGetInitialProps:function(){return h},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return P}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let l=["CLS","FCP","FID","INP","LCP","TTFB"];function o(e){let t,r=!1;return(...n)=>(r||(r=!0,t=e(...n)),t)}let i=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,s=e=>{let t=e.charCodeAt(0);return!!(t>=65&&t<=90||t>=97&&t<=122)&&i.test(e)};function u(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function c(){let{href:e}=window.location,t=u();return e.substring(t.length)}function d(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function f(e){return e.finished||e.headersSent}function p(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function h(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await h(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&f(r))return n;if(!n)throw Object.defineProperty(Error(`"${d(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return n}let m="u">typeof performance,y=m&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class x extends Error{}class b extends Error{}class g extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class v extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class j extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function P(e){return JSON.stringify({message:e.message,stack:e.stack})}},22930,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"IconMark",{enumerable:!0,get:function(){return a}});let n=e.r(61666),a=()=>"u">typeof window?null:(0,n.jsx)("meta",{name:"«nxt-icon»"})},96714,(e,t,r)=>{"use strict";function n(e,t={}){if(t.onlyHashChange)return void e();let r=document.documentElement;if("smooth"!==r.dataset.scrollBehavior)return void e();let a=r.style.scrollBehavior;r.style.scrollBehavior="auto",t.dontForceLayout||r.getClientRects(),e(),r.style.scrollBehavior=a}e.i(29694),Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"disableSmoothScrollDuringRouteTransition",{enumerable:!0,get:function(){return n}})},43102,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return l}});let n=e.r(67670),a=e.r(97895);function l(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,a.hasBasePath)(r.pathname)}catch(e){return!1}}},32792,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={assign:function(){return s},searchParamsToUrlQuery:function(){return l},urlQueryToSearchParams:function(){return i}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});function l(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function o(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function i(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,o(e));else t.set(r,o(n));return t}function s(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,n]of r.entries())e.append(t,n)}return e}},67478,(e,t,r)=>{"use strict";e.i(29694),Object.defineProperty(r,"__esModule",{value:!0});var n={formatUrl:function(){return i},formatWithValidation:function(){return u},urlObjectKeys:function(){return s}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let l=e.r(56421)._(e.r(32792)),o=/https?|ftp|gopher|file/;function i(e){let{auth:t,hostname:r}=e,n=e.protocol||"",a=e.pathname||"",i=e.hash||"",s=e.query||"",u=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?u=t+e.host:r&&(u=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(u+=":"+e.port)),s&&"object"==typeof s&&(s=String(l.urlQueryToSearchParams(s)));let c=e.search||s&&`?${s}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||o.test(n))&&!1!==u?(u="//"+(u||""),a&&"/"!==a[0]&&(a="/"+a)):u||(u=""),i&&"#"!==i[0]&&(i="#"+i),c&&"?"!==c[0]&&(c="?"+c),a=a.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${n}${u}${a}${c}${i}`}let s=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function u(e){return i(e)}}]);