edsger 0.84.0 → 0.85.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.
- package/README.md +37 -0
- package/assets/README.md +18 -9
- package/assets/manifest.yaml +5 -1
- package/assets/mindmap-viewer/assets/{mindmap-Di5RM-4N.js → mindmap-C50Y8qu4.js} +1 -1
- package/assets/mindmap-viewer/mindmap.html +1 -1
- package/assets/mindmap-viewer-single.html +1 -1
- package/assets/schema/testcases.schema.json +69 -0
- package/assets/skills/testcases/SKILL.md +73 -0
- package/assets/testcases/base.yaml +147 -0
- package/assets/testcases-viewer/assets/testcases-DaNbQxip.js +2 -0
- package/assets/testcases-viewer/assets/testcases-f2mIbfYU.css +1 -0
- package/assets/testcases-viewer/testcases.html +31 -0
- package/assets/testcases-viewer-single.html +32 -0
- package/dist/index.js +533 -31
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
id: base
|
|
2
|
+
name: Manual Test-Case Plan
|
|
3
|
+
version: 0.1.0
|
|
4
|
+
kind: testcases
|
|
5
|
+
extends: null
|
|
6
|
+
appliesTo: ["*"]
|
|
7
|
+
# A standard for deriving a MANUAL test-case plan from a repository: an outline
|
|
8
|
+
# tree (Workflowy-style) whose root is the project, whose branches are the areas
|
|
9
|
+
# a human tester should exercise, and whose leaves are concrete, executable test
|
|
10
|
+
# cases (preconditions → steps → expected result). These are NOT automated code
|
|
11
|
+
# tests — they describe how a person verifies the software behaves correctly.
|
|
12
|
+
# The `aspects` below are candidate top-level areas — the agent keeps only the
|
|
13
|
+
# ones this project's code supports and grows each into a faithful subtree.
|
|
14
|
+
|
|
15
|
+
guidance: >
|
|
16
|
+
The root of the tree is the project itself: its name plus a one-line summary
|
|
17
|
+
of what a tester is validating. The first level should be 3-7 test areas
|
|
18
|
+
picked from the aspects below, renamed to fit the project's own vocabulary
|
|
19
|
+
where that is clearer. Interior nodes group features and scenarios; every
|
|
20
|
+
leaf is a single concrete test case that a human tester who has never read
|
|
21
|
+
the code can execute: what state to prepare (preconditions), the exact
|
|
22
|
+
actions to take (steps, each one observable), and the single expected
|
|
23
|
+
outcome. Derive cases from what the code actually does — real commands,
|
|
24
|
+
routes, screens, flags, and error branches — and cite the files that
|
|
25
|
+
implement the behaviour under test so an engineer can trace each case back
|
|
26
|
+
to code. Give every case a priority: critical (release blocker if broken),
|
|
27
|
+
high (core behaviour), medium (important but recoverable), low (polish).
|
|
28
|
+
Prefer a plan a tester can work through top-to-bottom in one sitting over an
|
|
29
|
+
exhaustive combinatorial matrix — depth where the risk is, brevity where the
|
|
30
|
+
behaviour is trivial.
|
|
31
|
+
|
|
32
|
+
maxDepth: 5
|
|
33
|
+
|
|
34
|
+
aspects:
|
|
35
|
+
- id: core-flows
|
|
36
|
+
name: Core User Flows
|
|
37
|
+
appliesWhen: >
|
|
38
|
+
Any project with runtime behaviour. The handful of end-to-end journeys
|
|
39
|
+
that define what the software is for (e.g. "run a build", "sign up and
|
|
40
|
+
log in", "generate a report") — the happy paths a release must not break.
|
|
41
|
+
detect: ["*"]
|
|
42
|
+
guidance: >
|
|
43
|
+
Identify the 2-5 flows that matter most from the real entry points (CLI
|
|
44
|
+
commands, routes, screens). One child per flow; its leaves are cases that
|
|
45
|
+
walk the flow start-to-finish with typical input, verifying each visible
|
|
46
|
+
intermediate result and the final outcome. These cases are mostly
|
|
47
|
+
critical/high priority.
|
|
48
|
+
|
|
49
|
+
- id: inputs-edge-cases
|
|
50
|
+
name: Inputs & Edge Cases
|
|
51
|
+
appliesWhen: >
|
|
52
|
+
The project accepts user input: CLI arguments and flags, form fields,
|
|
53
|
+
request payloads, file uploads, or configuration values.
|
|
54
|
+
detect: ["*"]
|
|
55
|
+
guidance: >
|
|
56
|
+
For each input surface, derive cases from the validation the code
|
|
57
|
+
performs (and omits): empty/missing values, boundary sizes, wrong types,
|
|
58
|
+
unusual-but-legal values (unicode, spaces in paths, very long strings),
|
|
59
|
+
and conflicting combinations of options. Each case states the exact
|
|
60
|
+
input to supply and the exact rejection or acceptance to expect.
|
|
61
|
+
|
|
62
|
+
- id: errors-recovery
|
|
63
|
+
name: Errors & Recovery
|
|
64
|
+
appliesWhen: >
|
|
65
|
+
The software has meaningful failure modes: unreachable dependencies,
|
|
66
|
+
missing files or permissions, interrupted operations, invalid state.
|
|
67
|
+
detect: ["*"]
|
|
68
|
+
guidance: >
|
|
69
|
+
Find the error branches the code actually handles (thrown/caught errors,
|
|
70
|
+
exit codes, retry logic, fallbacks) and write cases that force each one:
|
|
71
|
+
how to provoke the failure, what message/exit code/UI state the tester
|
|
72
|
+
should see, and — where the code claims recovery — that the system
|
|
73
|
+
returns to a working state afterwards.
|
|
74
|
+
|
|
75
|
+
- id: data-state
|
|
76
|
+
name: Data & State Integrity
|
|
77
|
+
appliesWhen: >
|
|
78
|
+
The project persists state a tester can inspect: databases, on-disk
|
|
79
|
+
files, caches, exports/imports, or anything with a documented format.
|
|
80
|
+
detect: ["migrations", "schema", "models", "*.sql", "storage", "cache"]
|
|
81
|
+
guidance: >
|
|
82
|
+
Cases that verify written data is correct and durable: perform an action,
|
|
83
|
+
then inspect the persisted result (file contents, DB rows, exported
|
|
84
|
+
artifact) against what the code promises; re-run/restart and confirm
|
|
85
|
+
state survives; where the code migrates or upgrades formats, test old
|
|
86
|
+
data still loads.
|
|
87
|
+
|
|
88
|
+
- id: integrations
|
|
89
|
+
name: External Integrations
|
|
90
|
+
appliesWhen: >
|
|
91
|
+
The project talks to systems it does not own: third-party APIs, auth
|
|
92
|
+
providers, webhooks, message brokers, or local tools it shells out to.
|
|
93
|
+
detect: ["client", "sdk", "api", "webhook", "queue", "http"]
|
|
94
|
+
guidance: >
|
|
95
|
+
One child per external system. Cases cover the configured happy path,
|
|
96
|
+
missing/invalid credentials, and the integration being unavailable —
|
|
97
|
+
each stating how to simulate the condition (env var unset, network off,
|
|
98
|
+
tool not installed) and the exact behaviour the code implements for it.
|
|
99
|
+
|
|
100
|
+
- id: config-environments
|
|
101
|
+
name: Configuration & Environments
|
|
102
|
+
appliesWhen: >
|
|
103
|
+
Behaviour changes with configuration: config files, environment
|
|
104
|
+
variables, CLI overrides, feature flags, or per-environment settings.
|
|
105
|
+
detect: ["config", ".env.example", "settings", "*.config.*"]
|
|
106
|
+
guidance: >
|
|
107
|
+
Derive cases from the precedence and defaults the code implements: no
|
|
108
|
+
config at all (defaults), each documented setting changing observable
|
|
109
|
+
behaviour, override order when the same value is set in several places,
|
|
110
|
+
and malformed configuration being reported rather than silently ignored.
|
|
111
|
+
|
|
112
|
+
- id: compatibility
|
|
113
|
+
name: Platforms & Compatibility
|
|
114
|
+
appliesWhen: >
|
|
115
|
+
The project targets more than one runtime surface: operating systems,
|
|
116
|
+
browsers, device sizes, terminal vs CI, runtime versions.
|
|
117
|
+
detect: ["Dockerfile", ".github", "browserslist", "engines"]
|
|
118
|
+
guidance: >
|
|
119
|
+
Only include surfaces the project explicitly supports (declared engines,
|
|
120
|
+
CI matrix, responsive styles). Cases name the exact platform/version to
|
|
121
|
+
test on and the behaviour that historically differs there (paths, line
|
|
122
|
+
endings, viewport layout, color output).
|
|
123
|
+
|
|
124
|
+
- id: performance-responsiveness
|
|
125
|
+
name: Performance & Responsiveness
|
|
126
|
+
appliesWhen: >
|
|
127
|
+
The project has user-perceivable performance characteristics worth a
|
|
128
|
+
manual check: large-input handling, long-running operations with
|
|
129
|
+
progress feedback, or interactive UI latency.
|
|
130
|
+
detect: ["worker", "stream", "batch", "progress"]
|
|
131
|
+
guidance: >
|
|
132
|
+
A small number of judgement cases, not benchmarks: run the realistic
|
|
133
|
+
"large" scenario the code is written to handle (big repo, long list,
|
|
134
|
+
many records), verify it completes, stays responsive, and that any
|
|
135
|
+
progress/cancellation affordances in the code actually work.
|
|
136
|
+
|
|
137
|
+
- id: security-access
|
|
138
|
+
name: Security & Access
|
|
139
|
+
appliesWhen: >
|
|
140
|
+
The project handles secrets, authentication, authorization, or renders
|
|
141
|
+
untrusted content — anything where a tester should probe misuse.
|
|
142
|
+
detect: ["auth", "token", "secret", "session", "sanitize"]
|
|
143
|
+
guidance: >
|
|
144
|
+
Cases grounded in protections the code implements: secrets never echoed
|
|
145
|
+
to logs/output, unauthenticated access rejected on protected surfaces,
|
|
146
|
+
role/permission boundaries enforced, and untrusted input rendered
|
|
147
|
+
inertly (escaping/sanitisation) where the code claims to do so.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))l(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const c of r.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&l(c)}).observe(document,{childList:!0,subtree:!0});function n(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function l(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();var ce,b,tt,R,Re,nt,rt,fe,ee,G,lt,ke,me,ge,le={},ie=[],xt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,_e=Array.isArray;function M(e,t){for(var n in t)e[n]=t[n];return e}function we(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function St(e,t,n){var l,i,r,c={};for(r in t)r=="key"?l=t[r]:r=="ref"?i=t[r]:c[r]=t[r];if(arguments.length>2&&(c.children=arguments.length>3?ce.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(r in e.defaultProps)c[r]===void 0&&(c[r]=e.defaultProps[r]);return te(e,c,l,i,null)}function te(e,t,n,l,i){var r={type:e,props:t,key:n,ref:l,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++tt,__i:-1,__u:0};return i==null&&b.vnode!=null&&b.vnode(r),r}function ae(e){return e.children}function ne(e,t){this.props=e,this.context=t}function q(e,t){if(t==null)return e.__?q(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?q(e):null}function Et(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,l=[],i=[],r=M({},t);r.__v=t.__v+1,b.vnode&&b.vnode(r),xe(e.__P,r,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,l,n??q(t),!!(32&t.__u),i),r.__v=t.__v,r.__.__k[r.__i]=r,ct(l,r,i),t.__e=t.__=null,r.__e!=n&&it(r)}}function it(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),it(e)}function ze(e){(!e.__d&&(e.__d=!0)&&R.push(e)&&!se.__r++||Re!=b.debounceRendering)&&((Re=b.debounceRendering)||nt)(se)}function se(){try{for(var e,t=1;R.length;)R.length>t&&R.sort(rt),e=R.shift(),t=R.length,Et(e)}finally{R.length=se.__r=0}}function st(e,t,n,l,i,r,c,a,d,_,f){var v,s,h,y,$,p,x,m=l&&l.__k||ie,g=t.length;for(d=Ct(n,t,m,d,g),v=0;v<g;v++)(h=n.__k[v])!=null&&(s=h.__i!=-1&&m[h.__i]||le,h.__i=v,p=xe(e,h,s,i,r,c,a,d,_,f),y=h.__e,h.ref&&s.ref!=h.ref&&(s.ref&&Se(s.ref,null,h),f.push(h.ref,h.__c||y,h)),$==null&&y!=null&&($=y),(x=!!(4&h.__u))||s.__k===h.__k?(d=ot(h,d,e,x),x&&s.__e&&(s.__e=null)):typeof h.type=="function"&&p!==void 0?d=p:y&&(d=y.nextSibling),h.__u&=-7);return n.__e=$,d}function Ct(e,t,n,l,i){var r,c,a,d,_,f=n.length,v=f,s=0;for(e.__k=new Array(i),r=0;r<i;r++)(c=t[r])!=null&&typeof c!="boolean"&&typeof c!="function"?(typeof c=="string"||typeof c=="number"||typeof c=="bigint"||c.constructor==String?c=e.__k[r]=te(null,c,null,null,null):_e(c)?c=e.__k[r]=te(ae,{children:c},null,null,null):c.constructor===void 0&&c.__b>0?c=e.__k[r]=te(c.type,c.props,c.key,c.ref?c.ref:null,c.__v):e.__k[r]=c,d=r+s,c.__=e,c.__b=e.__b+1,a=null,(_=c.__i=$t(c,n,d,v))!=-1&&(v--,(a=n[_])&&(a.__u|=2)),a==null||a.__v==null?(_==-1&&(i>f?s--:i<f&&s++),typeof c.type!="function"&&(c.__u|=4)):_!=d&&(_==d-1?s--:_==d+1?s++:(_>d?s--:s++,c.__u|=4))):e.__k[r]=null;if(v)for(r=0;r<f;r++)(a=n[r])!=null&&!(2&a.__u)&&(a.__e==l&&(l=q(a)),at(a,a));return l}function ot(e,t,n,l){var i,r;if(typeof e.type=="function"){for(i=e.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=e,t=ot(i[r],t,n,l));return t}e.__e!=t&&(l&&(t&&e.type&&!t.parentNode&&(t=q(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function $t(e,t,n,l){var i,r,c,a=e.key,d=e.type,_=t[n],f=_!=null&&(2&_.__u)==0;if(_===null&&a==null||f&&a==_.key&&d==_.type)return n;if(l>(f?1:0)){for(i=n-1,r=n+1;i>=0||r<t.length;)if((_=t[c=i>=0?i--:r++])!=null&&!(2&_.__u)&&a==_.key&&d==_.type)return c}return-1}function Oe(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||xt.test(t)?n:n+"px"}function X(e,t,n,l,i){var r,c;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof l=="string"&&(e.style.cssText=l=""),l)for(t in l)n&&t in n||Oe(e.style,t,"");if(n)for(t in n)l&&n[t]==l[t]||Oe(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")r=t!=(t=t.replace(lt,"$1")),c=t.toLowerCase(),t=c in e||t=="onFocusOut"||t=="onFocusIn"?c.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+r]=n,n?l?n[G]=l[G]:(n[G]=ke,e.addEventListener(t,r?ge:me,r)):e.removeEventListener(t,r?ge:me,r);else{if(i=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function je(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t[ee]==null)t[ee]=ke++;else if(t[ee]<n[G])return;return n(b.event?b.event(t):t)}}}function xe(e,t,n,l,i,r,c,a,d,_){var f,v,s,h,y,$,p,x,m,g,U,P,D,F,I,B,T=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(d=!!(32&n.__u),r=[a=t.__e=n.__e]),(f=b.__b)&&f(t);e:if(typeof T=="function"){v=c.length;try{if(m=t.props,g=T.prototype&&T.prototype.render,U=(f=T.contextType)&&l[f.__c],P=f?U?U.props.value:f.__:l,n.__c?x=(s=t.__c=n.__c).__=s.__E:(g?t.__c=s=new T(m,P):(t.__c=s=new ne(m,P),s.constructor=T,s.render=Pt),U&&U.sub(s),s.state||(s.state={}),s.__n=l,h=s.__d=!0,s.__h=[],s._sb=[]),g&&s.__s==null&&(s.__s=s.state),g&&T.getDerivedStateFromProps!=null&&(s.__s==s.state&&(s.__s=M({},s.__s)),M(s.__s,T.getDerivedStateFromProps(m,s.__s))),y=s.props,$=s.state,s.__v=t,h)g&&T.getDerivedStateFromProps==null&&s.componentWillMount!=null&&s.componentWillMount(),g&&s.componentDidMount!=null&&s.__h.push(s.componentDidMount);else{if(g&&T.getDerivedStateFromProps==null&&m!==y&&s.componentWillReceiveProps!=null&&s.componentWillReceiveProps(m,P),t.__v==n.__v||!s.__e&&s.shouldComponentUpdate!=null&&s.shouldComponentUpdate(m,s.__s,P)===!1){t.__v!=n.__v&&(s.props=m,s.state=s.__s,s.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(H){H&&(H.__=t)}),ie.push.apply(s.__h,s._sb),s._sb=[],s.__h.length&&c.push(s);break e}s.componentWillUpdate!=null&&s.componentWillUpdate(m,s.__s,P),g&&s.componentDidUpdate!=null&&s.__h.push(function(){s.componentDidUpdate(y,$,p)})}if(s.context=P,s.props=m,s.__P=e,s.__e=!1,D=b.__r,F=0,g)s.state=s.__s,s.__d=!1,D&&D(t),f=s.render(s.props,s.state,s.context),ie.push.apply(s.__h,s._sb),s._sb=[];else do s.__d=!1,D&&D(t),f=s.render(s.props,s.state,s.context),s.state=s.__s;while(s.__d&&++F<25);s.state=s.__s,s.getChildContext!=null&&(l=M(M({},l),s.getChildContext())),g&&!h&&s.getSnapshotBeforeUpdate!=null&&(p=s.getSnapshotBeforeUpdate(y,$)),I=f!=null&&f.type===ae&&f.key==null?_t(f.props.children):f,a=st(e,_e(I)?I:[I],t,n,l,i,r,c,a,d,_),s.base=t.__e,t.__u&=-161,s.__h.length&&c.push(s),x&&(s.__E=s.__=null)}catch(H){if(c.length=v,t.__v=null,d||r!=null)if(H.then){for(t.__u|=d?160:128;a&&a.nodeType==8&&a.nextSibling;)a=a.nextSibling;r!=null&&(r[r.indexOf(a)]=null),t.__e=a}else{if(r!=null)for(B=r.length;B--;)we(r[B]);ve(t)}else t.__e=n.__e,!t.__k&&n.__k&&(t.__k=n.__k),H.then||ve(t);b.__e(H,t,n)}}else r==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):a=t.__e=Tt(n.__e,t,n,l,i,r,c,d,_);return(f=b.diffed)&&f(t),128&t.__u?void 0:a}function ve(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(ve))}function ct(e,t,n){for(var l=0;l<n.length;l++)Se(n[l],n[++l],n[++l]);b.__c&&b.__c(t,e),e.some(function(i){try{e=i.__h,i.__h=[],e.some(function(r){r.call(i)})}catch(r){b.__e(r,i.__v)}})}function _t(e){return typeof e!="object"||e==null||e.__b>0?e:_e(e)?e.map(_t):e.constructor!==void 0?null:M({},e)}function Tt(e,t,n,l,i,r,c,a,d){var _,f,v,s,h,y,$,p=n.props||le,x=t.props,m=t.type;if(m=="svg"?i="http://www.w3.org/2000/svg":m=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(_=0;_<r.length;_++)if((h=r[_])&&"setAttribute"in h==!!m&&(m?h.localName==m:h.nodeType==3)){e=h,r[_]=null;break}}if(e==null){if(m==null)return document.createTextNode(x);e=document.createElementNS(i,m,x.is&&x),a&&(b.__m&&b.__m(t,r),a=!1),r=null}if(m==null)p===x||a&&e.data==x||(e.data=x);else{if(r=m=="textarea"&&x.defaultValue!=null?null:r&&ce.call(e.childNodes),!a&&r!=null)for(p={},_=0;_<e.attributes.length;_++)p[(h=e.attributes[_]).name]=h.value;for(_ in p)h=p[_],_=="dangerouslySetInnerHTML"?v=h:_=="children"||_ in x||_=="value"&&"defaultValue"in x||_=="checked"&&"defaultChecked"in x||X(e,_,null,h,i);for(_ in x)h=x[_],_=="children"?s=h:_=="dangerouslySetInnerHTML"?f=h:_=="value"?y=h:_=="checked"?$=h:a&&typeof h!="function"||p[_]===h||X(e,_,h,p[_],i);if(f)a||v&&(f.__html==v.__html||f.__html==e.innerHTML)||(e.innerHTML=f.__html),t.__k=[];else if(v&&(e.innerHTML=""),st(t.type=="template"?e.content:e,_e(s)?s:[s],t,n,l,m=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,c,r?r[0]:n.__k&&q(n,0),a,d),r!=null)for(_=r.length;_--;)we(r[_]);a&&m!="textarea"||(_="value",m=="progress"&&y==null?e.removeAttribute("value"):y!=null&&(y!==e[_]||m=="progress"&&!y||m=="option"&&y!=p[_])&&X(e,_,y,p[_],i),_="checked",$!=null&&$!=e[_]&&X(e,_,$,p[_],i))}return e}function Se(e,t,n){try{if(typeof e=="function"){var l=typeof e.__u=="function";l&&e.__u(),l&&t==null||(e.__u=e(t))}else e.current=t}catch(i){b.__e(i,n)}}function at(e,t,n){var l,i;if(b.unmount&&b.unmount(e),(l=e.ref)&&(l.current&&l.current!=e.__e||Se(l,null,t)),(l=e.__c)!=null){if(l.componentWillUnmount)try{l.componentWillUnmount()}catch(r){b.__e(r,t)}l.base=l.__P=l.__n=null}if(l=e.__k)for(i=0;i<l.length;i++)l[i]&&at(l[i],t,n||typeof e.type!="function");n||we(e.__e),e.__c=e.__=e.__e=void 0}function Pt(e,t,n){return this.constructor(e,n)}function At(e,t,n){var l,i,r,c;t==document&&(t=document.documentElement),b.__&&b.__(e,t),i=(l=!1)?null:t.__k,r=[],c=[],xe(t,e=t.__k=St(ae,null,[e]),i||le,le,t.namespaceURI,i?null:t.firstChild?ce.call(t.childNodes):null,r,i?i.__e:t.firstChild,l,c),ct(r,e,c),e.props.children=null}ce=ie.slice,b={__e:function(e,t,n,l){for(var i,r,c;t=t.__;)if((i=t.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(e)),c=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,l||{}),c=i.__d),c)return i.__E=i}catch(a){e=a}throw e}},tt=0,ne.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=M({},this.state),typeof e=="function"&&(e=e(M({},n),this.props)),e&&M(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),ze(this))},ne.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),ze(this))},ne.prototype.render=ae,R=[],nt=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,rt=function(e,t){return e.__v.__b-t.__v.__b},se.__r=0,fe=Math.random().toString(8),ee="__d"+fe,G="__a"+fe,lt=/(PointerCapture)$|Capture$/i,ke=0,me=je(!1),ge=je(!0);var Nt=0;function o(e,t,n,l,i,r){t||(t={});var c,a,d=t;if("ref"in d)for(a in d={},t)a=="ref"?c=t[a]:d[a]=t[a];var _={type:e,props:d,key:n,ref:c,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Nt,__i:-1,__u:0,__source:i,__self:r};if(typeof e=="function"&&(c=e.defaultProps))for(a in c)d[a]===void 0&&(d[a]=c[a]);return b.vnode&&b.vnode(_),_}var K,S,pe,qe,Q=0,ut=[],E=b,Be=E.__b,We=E.__r,Ve=E.diffed,Ge=E.__c,Ke=E.unmount,Qe=E.__;function Ee(e,t){E.__h&&E.__h(S,e,Q||t),Q=0;var n=S.__H||(S.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function L(e){return Q=1,Dt(pt,e)}function Dt(e,t,n){var l=Ee(K++,2);if(l.t=e,!l.__c&&(l.__=[pt(void 0,t),function(a){var d=l.__N?l.__N[0]:l.__[0],_=l.t(d,a);d!==_&&(l.__N=[_,l.__[1]],l.__c.setState({}))}],l.__c=S,!S.__f)){var i=function(a,d,_){if(!l.__c.__H)return!0;var f=!1,v=l.__c.props!==a;if(l.__c.__H.__.some(function(h){if(h.__N){f=!0;var y=h.__[0];h.__=h.__N,h.__N=void 0,y!==h.__[0]&&(v=!0)}}),r){var s=r.call(this,a,d,_);return f?s||v:s}return!f||v};S.__f=!0;var r=S.shouldComponentUpdate,c=S.componentWillUpdate;S.componentWillUpdate=function(a,d,_){if(this.__e){var f=r;r=void 0,i(a,d,_),r=f}c&&c.call(this,a,d,_)},S.shouldComponentUpdate=i}return l.__N||l.__}function O(e,t){var n=Ee(K++,3);!E.__s&&ft(n.__H,t)&&(n.__=e,n.u=t,S.__H.__h.push(n))}function dt(e){return Q=5,N(function(){return{current:e}},[])}function N(e,t){var n=Ee(K++,7);return ft(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function V(e,t){return Q=8,N(function(){return e},t)}function Je(){for(var e;e=ut.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(ye),t.__h.some(ht),t.__h=[]}catch(n){t.__h=[],E.__e(n,e.__v)}}}E.__b=function(e){S=null,Be&&Be(e)},E.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),Qe&&Qe(e,t)},E.__r=function(e){We&&We(e),K=0;var t=(S=e.__c).__H;t&&(pe===S?(t.__h=[],S.__h=[],t.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.length&&Je(),K=0)),pe=S},E.diffed=function(e){Ve&&Ve(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(ut.push(t)!==1&&qe===E.requestAnimationFrame||((qe=E.requestAnimationFrame)||It)(Je)),t.__H.__.some(function(n){n.u&&(n.__H=n.u,n.u=void 0)})),pe=S=null},E.__c=function(e,t){t.some(function(n){try{n.__h.some(ye),n.__h=n.__h.filter(function(l){return!l.__||ht(l)})}catch(l){t.some(function(i){i.__h&&(i.__h=[])}),t=[],E.__e(l,n.__v)}}),Ge&&Ge(e,t)},E.unmount=function(e){Ke&&Ke(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(l){try{ye(l)}catch(i){t=i}}),n.__H=void 0,t&&E.__e(t,n.__v))};var Ye=typeof requestAnimationFrame=="function";function It(e){var t,n=function(){clearTimeout(l),Ye&&cancelAnimationFrame(t),setTimeout(e)},l=setTimeout(n,35);Ye&&(t=requestAnimationFrame(n))}function ye(e){var t=S,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),S=t}function ht(e){var t=S;e.__c=e.__(),S=t}function ft(e,t){return!e||e.length!==t.length||t.some(function(n,l){return n!==e[l]})}function pt(e,t){return typeof t=="function"?t(e):t}async function Ht(){if(window.__EDSGER_TESTCASES__)return Ze(window.__EDSGER_TESTCASES__);const e=await fetch("./edsger-testcases.json",{cache:"no-store"});if(!e.ok)throw new Error(`Could not load edsger-testcases.json (HTTP ${e.status})`);return Ze(await e.json())}function Ze(e){const t=[...e.history??[]].sort((n,l)=>n.generatedAt<l.generatedAt?-1:n.generatedAt>l.generatedAt?1:0);return{repo:e.repo,latest:e.latest??null,history:t,runs:e.runs??{}}}function Lt(e){const t=new Map,n=(l,i)=>{t.set(l.id,{node:l,parent:i});for(const r of l.children)n(r,l.id)};return n(e,null),t}function Mt(e,t){const n=new Set,l=i=>{let r=t(i);for(const c of i.children)l(c)&&(r=!0);return r&&n.add(i.id),r};return l(e),n}function mt(e,t,n){return e.children.length?t?e.children.some(l=>t.has(l.id)):n.has(e.id):!1}function Ut(e,t,n){const l=[],i=r=>{for(const c of r.children)t&&!t.has(c.id)||(l.push(c.id),mt(c,t,n)&&i(c))};return i(e),l}function Ft(e,t){if(!t)return[];const n=[];let l=t;for(;l;){const i=e.get(l);if(!i)break;n.unshift(i.node),l=i.parent}return n}function Rt(e,t){if(!t)return[{text:e,hit:!1}];const n=e.toLowerCase(),l=[];let i=0;for(;;){const r=n.indexOf(t,i);if(r===-1)break;r>i&&l.push({text:e.slice(i,r),hit:!1}),l.push({text:e.slice(r,r+t.length),hit:!0}),i=r+t.length}return i<e.length&&l.push({text:e.slice(i),hit:!1}),l.length?l:[{text:e,hit:!1}]}const zt=["critical","high","medium","low"];function ue(e){return e.steps.length>0||!!e.expected}function oe(e){return e.priority??"medium"}function Ce(e){return(ue(e)?1:0)+e.children.reduce((t,n)=>t+Ce(n),0)}function Ot(e){const t={critical:0,high:0,medium:0,low:0},n=l=>{ue(l)&&t[oe(l)]++,l.children.forEach(n)};return n(e),t}function jt(e,t){return[e.title,e.summary,...e.files,...e.preconditions,...e.steps,e.expected??""].join(`
|
|
2
|
+
`).toLowerCase().includes(t)}function qt(e,t){return n=>!(e&&!jt(n,e)||t.size&&!(ue(n)&&t.has(oe(n))))}function $e(e){return e.preconditions.length>0||e.steps.length>0||!!e.expected}function re(e){return e.children.length>0||$e(e)}function j({text:e,query:t}){return t?Rt(e,t).map((n,l)=>n.hit?o("mark",{children:n.text},l):n.text):e}function gt({node:e,query:t}){return o("div",{class:"case-detail",children:[e.preconditions.length?o("div",{class:"case-block",children:[o("span",{class:"case-label",children:"Preconditions"}),o("ul",{children:e.preconditions.map((n,l)=>o("li",{children:o(j,{text:n,query:t})},l))})]}):null,e.steps.length?o("div",{class:"case-block",children:[o("span",{class:"case-label",children:"Steps"}),o("ol",{children:e.steps.map((n,l)=>o("li",{children:o(j,{text:n,query:t})},l))})]}):null,e.expected?o("div",{class:"case-block expected",children:[o("span",{class:"case-label",children:"Expected"}),o("p",{children:o(j,{text:e.expected,query:t})})]}):null]})}function Bt({node:e,view:t,onToggle:n,onZoom:l,onSelect:i}){const r=e.children.length>0,c=re(e),a=t.isExpanded(e),d=t.selectedId===e.id,_=dt(null);O(()=>{var s;d&&((s=_.current)==null||s.scrollIntoView({block:"nearest"}))},[d]);const f=["row",d?"selected":"",t.isMatch(e)?"match":""].filter(Boolean).join(" "),v=r&&!a?Ce(e):0;return o("div",{class:"node","data-kind":e.kind,children:[o("div",{class:f,ref:_,onClick:()=>i(e.id),children:[c?o("button",{class:`disclosure ${a?"open":""}`,title:a?"Collapse":"Expand",onClick:s=>{s.stopPropagation(),i(e.id),n(e.id)},children:"▸"}):o("span",{class:"disclosure spacer"}),o("button",{class:`dot ${r&&!a?"loaded":""}`,title:"Zoom in",onClick:s=>{s.stopPropagation(),l(e.id)},children:o("span",{})}),o("div",{class:"node-text",children:[o("span",{class:"title",onDblClick:()=>l(e.id),children:o(j,{text:e.title,query:t.query})}),ue(e)?o("span",{class:`priority-badge prio-${oe(e)}`,children:oe(e)}):e.kind&&e.kind!=="topic"?o("span",{class:"kind-badge",children:e.kind}):null,v?o("span",{class:"count-badge",children:[v," case",v===1?"":"s"]}):null,e.summary?o("span",{class:"summary",children:o(j,{text:e.summary,query:t.query})}):null,e.files.length?o("span",{class:"files",children:e.files.map(s=>o("code",{class:"file",children:o(j,{text:s,query:t.query})},s))}):null]})]}),a&&$e(e)?o(gt,{node:e,query:t.query}):null,r&&a?o("div",{class:"children",children:o(vt,{nodes:e.children,view:t,onToggle:n,onZoom:l,onSelect:i})}):null]})}function vt({nodes:e,view:t,onToggle:n,onZoom:l,onSelect:i}){return o("div",{class:"outline",children:e.filter(r=>t.isVisible(r)).map(r=>o(Bt,{node:r,view:t,onToggle:n,onZoom:l,onSelect:i},r.id))})}const yt="edsger-theme",be=new Set;function Wt(){return typeof matchMedia<"u"&&matchMedia("(prefers-color-scheme: light)").matches?"light":"dark"}function Vt(){if(typeof document<"u"){const e=document.documentElement.getAttribute("data-theme");if(e==="light"||e==="dark")return e}try{const e=localStorage.getItem(yt);if(e==="light"||e==="dark")return e}catch{}return Wt()}let J=Vt();typeof document<"u"&&!document.documentElement.getAttribute("data-theme")&&document.documentElement.setAttribute("data-theme",J);function Gt(){return J}function Kt(e){J=e,typeof document<"u"&&document.documentElement.setAttribute("data-theme",e);try{localStorage.setItem(yt,e)}catch{}for(const t of be)t()}function Qt(){Kt(J==="dark"?"light":"dark")}function Jt(e){return be.add(e),()=>{be.delete(e)}}function Yt(){const[e,t]=L(J);return O(()=>Jt(()=>t(Gt())),[]),e}function Zt(){const e=Yt(),n=`Switch to ${e==="dark"?"light":"dark"} mode`;return o("button",{type:"button",class:"theme-toggle",title:n,"aria-label":n,onClick:()=>Qt(),children:o("span",{"aria-hidden":"true",children:e==="dark"?"☀":"☾"})})}function Xe(e){const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function Xt(){var Ne;const[e,t]=L(null),[n,l]=L(null),[i,r]=L(null),[c,a]=L(null),[d,_]=L(new Set),[f,v]=L(null),[s,h]=L(""),[y,$]=L(new Set);O(()=>{Ht().then(t).catch(u=>l(u instanceof Error?u.message:String(u)))},[]);const p=N(()=>e?i&&e.runs[i]?e.runs[i]:e.latest:null,[e,i]),x=N(()=>e?[...e.history].reverse():[],[e]),m=N(()=>p?Lt(p.root):null,[p]);O(()=>{p&&(a(null),v(null),$(new Set),_(new Set(p.root.children.map(u=>u.id))))},[p]);const g=N(()=>p?c&&(m!=null&&m.get(c))?m.get(c).node:p.root:null,[p,m,c]),U=N(()=>m?Ft(m,c):[],[m,c]),P=s.trim().toLowerCase(),D=!!P||y.size>0,F=N(()=>qt(P,y),[P,y]),I=N(()=>g&&D?Mt(g,F):null,[g,D,F]),B=N(()=>({isVisible:u=>I?I.has(u.id):!0,isExpanded:u=>u.children.length?mt(u,I,d):d.has(u.id)||!!P&&F(u),isMatch:u=>D&&F(u),query:P,selectedId:f}),[I,d,P,F,D,f]),T=N(()=>g?Ut(g,I,d):[],[g,I,d]),H=V(u=>{_(w=>{const k=new Set(w);return k.has(u)?k.delete(u):k.add(u),k})},[]),bt=V(u=>{$(w=>{const k=new Set(w);return k.has(u)?k.delete(u):k.add(u),k})},[]),z=V(u=>{if(a(u),v(null),h(""),u&&(m!=null&&m.get(u))){const w=m.get(u).node;_(k=>{const C=new Set(k);C.add(u);for(const A of w.children)C.add(A.id);return C})}},[m]),kt=V(()=>{g&&_(u=>{const w=new Set(u),k=C=>{re(C)&&w.add(C.id),C.children.forEach(k)};return k(g),w})},[g]),wt=V(()=>{g&&_(u=>{const w=new Set(u),k=C=>{w.delete(C.id),C.children.forEach(k)};for(const C of g.children)k(C);return w})},[g]),Te=dt({index:m,flat:T,selected:f,expanded:d,zoomId:c});Te.current={index:m,flat:T,selected:f,expanded:d,zoomId:c},O(()=>{const u=w=>{var He,Le,Me,Ue,Fe;const{index:k,flat:C,selected:A,expanded:De,zoomId:Y}=Te.current,Z=w.target;if(Z&&(Z.tagName==="INPUT"||Z.tagName==="SELECT")){w.key==="Escape"&&Z.blur();return}if(!k||!C.length){w.key==="Escape"&&Y&&(w.preventDefault(),z(((He=k==null?void 0:k.get(Y))==null?void 0:He.parent)??null));return}const Ie=A?C.indexOf(A):-1;switch(w.key){case"ArrowDown":w.preventDefault(),v(C[Math.min(Ie+1,C.length-1)]??null);break;case"ArrowUp":w.preventDefault(),v(C[Math.max(Ie-1,0)]??null);break;case"ArrowRight":{if(!A)break;w.preventDefault();const W=(Le=k.get(A))==null?void 0:Le.node;W&&re(W)&&!De.has(A)&&H(A);break}case"ArrowLeft":{if(!A)break;w.preventDefault();const W=(Me=k.get(A))==null?void 0:Me.node;if(W&&re(W)&&De.has(A))H(A);else{const he=(Ue=k.get(A))==null?void 0:Ue.parent;he&&C.includes(he)&&v(he)}break}case"Enter":A&&(w.preventDefault(),z(A));break;case"Escape":Y&&(w.preventDefault(),z(((Fe=k.get(Y))==null?void 0:Fe.parent)??null));break}};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[H,z]),O(()=>{f&&!T.includes(f)&&v(null)},[T,f]);const Pe=(e==null?void 0:e.repo)??(p==null?void 0:p.repo)??"",de=N(()=>g?Ot(g):null,[g]),Ae=N(()=>g?Ce(g):0,[g]);return o("div",{class:"app",children:[o("header",{class:"topbar",children:[o("div",{class:"brand",children:[o("span",{class:"logo",children:"edsger"}),o("span",{class:"subtitle",children:"test cases"})]}),o("div",{class:"topbar-actions",children:[Pe?o("div",{class:"repo",children:Pe}):null,o(Zt,{})]})]}),o("main",{class:"content",children:n?o("div",{class:"empty",children:[o("strong",{children:"Failed to load data."}),o("div",{class:"muted",children:n})]}):e?!p||!g?o("div",{class:"empty",children:["No test cases yet. Run ",o("code",{children:"edsger testcases"}),"."]}):o("div",{class:"stack",children:[c?null:o("section",{class:"profile",children:[o("p",{class:"summary",children:p.profile.summary}),p.profile.kinds.length?o("div",{class:"chips",children:p.profile.kinds.map(u=>o("span",{class:"chip kind",children:u},u))}):null,o("dl",{class:"facts",children:[o("div",{children:[o("dt",{children:"Languages"}),o("dd",{children:p.languages.join(", ")||"generic"})]}),o("div",{children:[o("dt",{children:"Test cases"}),o("dd",{children:[p.caseCount," · depth ",p.depth]})]}),o("div",{children:[o("dt",{children:"Commit"}),o("dd",{children:(Ne=p.git)!=null&&Ne.commit?o("code",{children:[p.git.commit,p.git.branch?` (${p.git.branch})`:"",p.git.dirty?" ✻":""]}):"—"})]}),o("div",{children:[o("dt",{children:"Generated"}),o("dd",{children:Xe(p.generatedAt)})]}),x.length>1?o("div",{children:[o("dt",{children:"Run"}),o("dd",{children:o("select",{class:"run-select",value:i??p.runId,onChange:u=>r(u.target.value),children:x.map(u=>o("option",{value:u.runId,children:[Xe(u.generatedAt)," · ",u.caseCount," cases"]},u.runId))})})]}):null]})]}),o("section",{class:"outline-panel",children:[o("div",{class:"outline-toolbar",children:[U.length?o("nav",{class:"breadcrumb",children:[o("button",{class:"crumb",onClick:()=>z(null),children:p.root.title}),U.slice(1,-1).map(u=>o("span",{children:[o("span",{class:"crumb-sep",children:"›"}),o("button",{class:"crumb",onClick:()=>z(u.id),children:u.title})]},u.id)),o("span",{class:"crumb-sep",children:"›"}),o("span",{class:"crumb current",children:g.title})]}):o("div",{class:"breadcrumb muted",children:"↑↓ ←→ navigate · Enter zoom · Esc back"}),o("div",{class:"outline-actions",children:[o("input",{class:"search",type:"search",placeholder:"Search titles, steps, expected, files…",value:s,onInput:u=>h(u.target.value)}),o("button",{class:"ghost-btn",onClick:kt,children:"Expand all"}),o("button",{class:"ghost-btn",onClick:wt,children:"Collapse all"})]})]}),de?o("div",{class:"priority-bar",children:[o("span",{class:"priority-total muted",children:[Ae," case",Ae===1?"":"s"]}),zt.map(u=>o("button",{class:`priority-chip prio-${u} ${y.has(u)?"on":""}`,disabled:de[u]===0,title:`Show only ${u}-priority cases`,onClick:()=>bt(u),children:[u," ",o("b",{children:de[u]})]},u)),y.size?o("button",{class:"ghost-btn",onClick:()=>$(new Set),children:"Clear filter"}):null]}):null,o("div",{class:"zoom-head",children:[o("h2",{class:"zoom-title",children:g.title}),g.summary?o("p",{class:"zoom-summary",children:g.summary}):null,g.files.length?o("div",{class:"files",children:g.files.map(u=>o("code",{class:"file",children:u},u))}):null,c&&$e(g)?o(gt,{node:g,query:""}):null]}),D&&!T.length?o("div",{class:"empty muted",children:["No test cases match",P?` “${s}”`:"",y.size?` with priority ${[...y].join("/")}`:"","."]}):o(vt,{nodes:g.children,view:B,onToggle:H,onZoom:z,onSelect:v})]}),p.notes&&!c?o("section",{class:"notes",children:[o("h2",{children:"Notes"}),o("p",{children:p.notes})]}):null]}):o("div",{class:"empty",children:"Loading…"})}),o("footer",{class:"foot",children:o("span",{children:"Generated by edsger"})})]})}const et=document.getElementById("app");et&&At(o(Xt,{}),et);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root,:root[data-theme=dark]{--bg: #0d1117;--panel: #161b22;--panel-2: #1c2129;--border: #30363d;--text: #e6edf3;--muted: #8b949e;--accent: #58a6ff;--on-accent: #04101f;--chart-line: #e6edf3;--chart-axis: #8b949e;--chart-grid: #21262d;color-scheme:dark}:root[data-theme=light]{--bg: #ffffff;--panel: #f6f8fa;--panel-2: #eaeef2;--border: #d0d7de;--text: #1f2328;--muted: #59636e;--accent: #0969da;--on-accent: #ffffff;--chart-line: #1f2328;--chart-axis: #59636e;--chart-grid: #d8dee4;color-scheme:light}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;background:var(--panel-2);padding:1px 5px;border-radius:5px}.app{max-width:1040px;margin:0 auto;padding:0 20px 60px}.topbar{display:flex;align-items:baseline;justify-content:space-between;padding:22px 0 14px}.brand{display:flex;align-items:baseline;gap:10px}.logo{font-weight:800;font-size:22px;letter-spacing:-.5px}.subtitle{color:var(--muted)}.repo{color:var(--muted);font-family:ui-monospace,monospace}.topbar-actions{display:flex;align-items:center;gap:14px}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:34px;height:30px;padding:0;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:15px;line-height:1;cursor:pointer}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:22px}.tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);padding:10px 14px;font-size:14px;cursor:pointer}.tab:hover{color:var(--text)}.tab.active{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.stack{display:flex;flex-direction:column;gap:18px}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px}@media (max-width: 720px){.two-col{grid-template-columns:1fr}}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:18px 20px}.card-title{margin:0 0 14px;font-size:15px;font-weight:600}.hero{display:flex;gap:26px;align-items:center;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:22px}@media (max-width: 720px){.hero{flex-direction:column;align-items:flex-start}}.hero-meta{flex:1}.summary{margin:0 0 14px;font-size:15px}.facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 18px;margin:0}.facts div{display:flex;flex-direction:column}.facts dt{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.4px}.facts dd{margin:2px 0 0}.ring svg{display:block}.ring-track{fill:none;stroke:var(--border);stroke-width:12}.ring-value{fill:none;stroke-width:12;stroke-linecap:round;transition:stroke-dasharray .6s ease}.ring-score{font-size:34px;font-weight:800;text-anchor:middle}.ring-grade{font-size:12px;fill:var(--muted);text-anchor:middle}.bar-row{display:grid;grid-template-columns:220px 1fr 120px;align-items:center;gap:12px;padding:5px 0}@media (max-width: 620px){.bar-row{grid-template-columns:130px 1fr 70px}}.bar-label{color:var(--text)}.bar-track{background:var(--panel-2);border-radius:6px;height:10px;overflow:hidden}.bar-fill{height:100%;border-radius:6px;transition:width .5s ease}.bar-value{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.list{margin:0;padding-left:18px}.list li{margin:4px 0}.list.good li::marker{color:#3fb950}.list.bad li::marker{color:#f85149}.recs{list-style:none;margin:0;padding:0}.recs li{padding:8px 0;border-bottom:1px solid var(--border)}.recs li:last-child{border-bottom:none}.pill{display:inline-block;font-size:11px;text-transform:uppercase;border-radius:20px;padding:2px 8px;margin-right:8px;font-weight:700}.pill.high{background:#6e2019;color:#ff7b72}.pill.medium{background:#5a4212;color:#e3b341}.pill.low{background:#22333b;color:#7ee2c8}:root[data-theme=light] .pill.high{background:#ffebe9;color:#cf222e}:root[data-theme=light] .pill.medium{background:#fff8c5;color:#9a6700}:root[data-theme=light] .pill.low{background:#dafbe1;color:#1a7f37}.run-picker{display:flex;align-items:center;gap:10px}.run-picker select,select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px}.crit-list{display:flex;flex-direction:column;gap:6px}.crit{border:1px solid var(--border);border-radius:8px;padding:8px 12px;background:var(--panel-2)}.crit summary{display:flex;align-items:center;gap:10px;cursor:pointer;list-style:none}.crit summary::-webkit-details-marker{display:none}.score-chip{font-variant-numeric:tabular-nums;font-weight:700;color:#0d1117;border-radius:6px;padding:1px 8px;font-size:12px}.crit-title{font-weight:500}.crit-just{margin:10px 0 6px;color:var(--text)}.evidence{margin:0;padding-left:18px}.evidence li{margin:3px 0}.table-wrap{overflow-x:auto}table.history{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}table.history th,table.history td{padding:7px 10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}table.history th{color:var(--muted);font-weight:600;font-size:12px}table.history .num{text-align:right}table.history .cat{color:var(--muted)}table.history .strong{font-weight:700}.up{color:#3fb950}.down{color:#f85149}:root[data-theme=light] .up,:root[data-theme=light] .list.good li::marker{color:#1a7f37}:root[data-theme=light] .down,:root[data-theme=light] .list.bad li::marker{color:#cf222e}.grade-dot{font-size:10px}.chart{width:100%}.legend{display:flex;gap:18px;color:var(--muted);margin-top:12px;flex-wrap:wrap}.legend.wrap span{display:inline-flex;align-items:center;gap:6px}.swatch{width:12px;height:12px;border-radius:3px;display:inline-block}.empty{text-align:center;color:var(--muted);padding:60px 20px}.muted{color:var(--muted)}.foot{text-align:center;color:var(--muted);margin-top:34px;font-size:12px}.uplot,.u-title,.u-legend{color:var(--text)}.u-legend .u-marker{border-radius:2px}.profile{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:20px 22px}.profile .summary{font-size:15px;margin:0 0 12px}.chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}.chip{border:1px solid var(--border);background:var(--panel-2);color:var(--text);border-radius:999px;padding:4px 12px;font-size:12.5px;cursor:default}.chip.kind{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--border))}.run-select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:4px 8px;font:inherit}.outline-panel{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px 18px 22px}.outline-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding-bottom:12px;border-bottom:1px solid var(--border);margin-bottom:14px}.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:2px;font-size:13px;min-height:26px}.breadcrumb.muted{color:var(--muted);font-size:12.5px}.crumb{background:none;border:none;color:var(--accent);font:inherit;padding:2px 4px;border-radius:5px;cursor:pointer}.crumb:hover{background:var(--panel-2)}.crumb.current{color:var(--text);font-weight:600;cursor:default}.crumb-sep{color:var(--muted);padding:0 2px}.outline-actions{display:flex;align-items:center;gap:8px}.search{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px;font:inherit;font-size:13px;width:240px}.search:focus{outline:none;border-color:var(--accent)}.ghost-btn{background:none;border:1px solid var(--border);color:var(--muted);border-radius:6px;padding:5px 10px;font-size:12.5px;cursor:pointer}.ghost-btn:hover{color:var(--text);border-color:var(--accent)}.zoom-head{margin:2px 0 12px}.zoom-title{margin:0;font-size:22px;letter-spacing:-.3px}.zoom-summary{margin:6px 0 0;color:var(--muted);max-width:72ch}.zoom-head .files{margin-top:8px}.outline{display:flex;flex-direction:column}.node .children{margin-left:13px;padding-left:22px;border-left:1px solid var(--border)}.row{display:flex;align-items:flex-start;gap:2px;padding:3px 6px 3px 0;border-radius:7px;cursor:default}.row:hover{background:color-mix(in srgb,var(--panel-2) 70%,transparent)}.row.selected{background:color-mix(in srgb,var(--accent) 14%,transparent)}.row.match .title{color:var(--accent)}.node-text mark{background:color-mix(in srgb,var(--accent) 32%,transparent);color:inherit;border-radius:3px;padding:0 1px}.disclosure{flex:none;width:18px;height:22px;background:none;border:none;color:var(--muted);font-size:11px;line-height:22px;padding:0;cursor:pointer;transition:transform .12s ease;transform-origin:45% 50%;visibility:hidden}.node:hover>.row>.disclosure,.row.selected>.disclosure{visibility:visible}.disclosure.open{transform:rotate(90deg)}.disclosure.spacer{cursor:default}.dot{flex:none;width:18px;height:22px;background:none;border:none;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.dot span{width:7px;height:7px;border-radius:50%;background:var(--muted);box-shadow:0 0 0 0 transparent;transition:box-shadow .12s ease,background .12s ease}.dot.loaded span{box-shadow:0 0 0 4px color-mix(in srgb,var(--muted) 28%,transparent)}.dot:hover span{background:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 30%,transparent)}.node-text{min-width:0;padding:1px 0;line-height:20px}.node-text .title{font-weight:600}.node-text .summary{color:var(--muted);margin-left:8px}.node-text .summary:before{content:"— "}.kind-badge{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;color:var(--muted);background:var(--panel-2);border:1px solid var(--border);border-radius:5px;padding:0 5px;margin-left:8px;vertical-align:1px}.count-badge{font-size:11px;color:var(--muted);background:var(--panel-2);border-radius:999px;padding:0 7px;margin-left:8px;vertical-align:1px}.files{display:inline-flex;flex-wrap:wrap;gap:6px;margin-left:8px}code.file{font-size:11.5px;color:color-mix(in srgb,var(--accent) 75%,var(--text))}.notes{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px 20px}.notes h2{margin:0 0 8px;font-size:15px}.notes p{margin:0;color:var(--muted)}@media (max-width: 640px){.outline-toolbar{flex-direction:column;align-items:stretch}.search{width:100%}.node .children{padding-left:14px}}:root{--prio-critical: #f85149;--prio-high: #f0883e;--prio-medium: #d29922;--prio-low: #58a6ff}:root[data-theme=light]{--prio-critical: #cf222e;--prio-high: #bc4c00;--prio-medium: #9a6700;--prio-low: #0969da}.priority-badge{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;border-radius:999px;padding:0 8px;margin-left:8px;border:1px solid transparent;vertical-align:1px}.priority-badge.prio-critical{color:var(--prio-critical);border-color:color-mix(in srgb,var(--prio-critical) 45%,var(--border));background:color-mix(in srgb,var(--prio-critical) 12%,var(--panel-2))}.priority-badge.prio-high{color:var(--prio-high);border-color:color-mix(in srgb,var(--prio-high) 45%,var(--border));background:color-mix(in srgb,var(--prio-high) 12%,var(--panel-2))}.priority-badge.prio-medium{color:var(--prio-medium);border-color:color-mix(in srgb,var(--prio-medium) 45%,var(--border));background:color-mix(in srgb,var(--prio-medium) 12%,var(--panel-2))}.priority-badge.prio-low{color:var(--prio-low);border-color:color-mix(in srgb,var(--prio-low) 45%,var(--border));background:color-mix(in srgb,var(--prio-low) 12%,var(--panel-2))}.priority-bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid var(--border)}.priority-total{font-size:12.5px;margin-right:4px}.priority-chip{font:inherit;font-size:12px;border-radius:999px;padding:3px 12px;border:1px solid var(--border);background:var(--panel-2);color:var(--muted);cursor:pointer}.priority-chip b{font-weight:700}.priority-chip:disabled{opacity:.45;cursor:default}.priority-chip.prio-critical:not(:disabled){color:var(--prio-critical)}.priority-chip.prio-high:not(:disabled){color:var(--prio-high)}.priority-chip.prio-medium:not(:disabled){color:var(--prio-medium)}.priority-chip.prio-low:not(:disabled){color:var(--prio-low)}.priority-chip.on.prio-critical{border-color:var(--prio-critical);background:color-mix(in srgb,var(--prio-critical) 15%,var(--panel-2))}.priority-chip.on.prio-high{border-color:var(--prio-high);background:color-mix(in srgb,var(--prio-high) 15%,var(--panel-2))}.priority-chip.on.prio-medium{border-color:var(--prio-medium);background:color-mix(in srgb,var(--prio-medium) 15%,var(--panel-2))}.priority-chip.on.prio-low{border-color:var(--prio-low);background:color-mix(in srgb,var(--prio-low) 15%,var(--panel-2))}.case-detail{margin:4px 0 8px 44px;padding:10px 14px;border-left:2px solid var(--border);background:color-mix(in srgb,var(--panel-2) 55%,transparent);border-radius:0 8px 8px 0;display:grid;gap:8px}.case-block{font-size:13px}.case-label{display:block;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-bottom:2px}.case-block ul,.case-block ol{margin:0;padding-left:20px;display:grid;gap:2px}.case-block p{margin:0}.case-block.expected p{color:var(--text);font-weight:500}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<script>
|
|
7
|
+
(function () {
|
|
8
|
+
try {
|
|
9
|
+
var t = localStorage.getItem("edsger-theme");
|
|
10
|
+
if (t !== "light" && t !== "dark") {
|
|
11
|
+
t =
|
|
12
|
+
window.matchMedia &&
|
|
13
|
+
window.matchMedia("(prefers-color-scheme: light)").matches
|
|
14
|
+
? "light"
|
|
15
|
+
: "dark";
|
|
16
|
+
}
|
|
17
|
+
document.documentElement.setAttribute("data-theme", t);
|
|
18
|
+
} catch (e) {
|
|
19
|
+
document.documentElement.setAttribute("data-theme", "dark");
|
|
20
|
+
}
|
|
21
|
+
})();
|
|
22
|
+
</script>
|
|
23
|
+
<title>Edsger — Test Cases</title>
|
|
24
|
+
<!-- __EDSGER_TESTCASES__ is injected here when exported as a single self-contained file. -->
|
|
25
|
+
<script type="module" crossorigin src="./assets/testcases-DaNbQxip.js"></script>
|
|
26
|
+
<link rel="stylesheet" crossorigin href="./assets/testcases-f2mIbfYU.css">
|
|
27
|
+
</head>
|
|
28
|
+
<body>
|
|
29
|
+
<div id="app"></div>
|
|
30
|
+
</body>
|
|
31
|
+
</html>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<script>
|
|
7
|
+
(function () {
|
|
8
|
+
try {
|
|
9
|
+
var t = localStorage.getItem("edsger-theme");
|
|
10
|
+
if (t !== "light" && t !== "dark") {
|
|
11
|
+
t =
|
|
12
|
+
window.matchMedia &&
|
|
13
|
+
window.matchMedia("(prefers-color-scheme: light)").matches
|
|
14
|
+
? "light"
|
|
15
|
+
: "dark";
|
|
16
|
+
}
|
|
17
|
+
document.documentElement.setAttribute("data-theme", t);
|
|
18
|
+
} catch (e) {
|
|
19
|
+
document.documentElement.setAttribute("data-theme", "dark");
|
|
20
|
+
}
|
|
21
|
+
})();
|
|
22
|
+
</script>
|
|
23
|
+
<title>Edsger — Test Cases</title>
|
|
24
|
+
<!-- __EDSGER_TESTCASES__ is injected here when exported as a single self-contained file. -->
|
|
25
|
+
<script type="module" crossorigin>(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))l(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const c of r.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&l(c)}).observe(document,{childList:!0,subtree:!0});function n(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function l(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();var ce,b,tt,R,Re,nt,rt,fe,ee,G,lt,ke,me,ge,le={},ie=[],xt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,_e=Array.isArray;function M(e,t){for(var n in t)e[n]=t[n];return e}function we(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function St(e,t,n){var l,i,r,c={};for(r in t)r=="key"?l=t[r]:r=="ref"?i=t[r]:c[r]=t[r];if(arguments.length>2&&(c.children=arguments.length>3?ce.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(r in e.defaultProps)c[r]===void 0&&(c[r]=e.defaultProps[r]);return te(e,c,l,i,null)}function te(e,t,n,l,i){var r={type:e,props:t,key:n,ref:l,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++tt,__i:-1,__u:0};return i==null&&b.vnode!=null&&b.vnode(r),r}function ae(e){return e.children}function ne(e,t){this.props=e,this.context=t}function q(e,t){if(t==null)return e.__?q(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?q(e):null}function Et(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,l=[],i=[],r=M({},t);r.__v=t.__v+1,b.vnode&&b.vnode(r),xe(e.__P,r,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,l,n??q(t),!!(32&t.__u),i),r.__v=t.__v,r.__.__k[r.__i]=r,ct(l,r,i),t.__e=t.__=null,r.__e!=n&&it(r)}}function it(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),it(e)}function ze(e){(!e.__d&&(e.__d=!0)&&R.push(e)&&!se.__r++||Re!=b.debounceRendering)&&((Re=b.debounceRendering)||nt)(se)}function se(){try{for(var e,t=1;R.length;)R.length>t&&R.sort(rt),e=R.shift(),t=R.length,Et(e)}finally{R.length=se.__r=0}}function st(e,t,n,l,i,r,c,a,d,_,f){var v,s,h,y,$,p,x,m=l&&l.__k||ie,g=t.length;for(d=Ct(n,t,m,d,g),v=0;v<g;v++)(h=n.__k[v])!=null&&(s=h.__i!=-1&&m[h.__i]||le,h.__i=v,p=xe(e,h,s,i,r,c,a,d,_,f),y=h.__e,h.ref&&s.ref!=h.ref&&(s.ref&&Se(s.ref,null,h),f.push(h.ref,h.__c||y,h)),$==null&&y!=null&&($=y),(x=!!(4&h.__u))||s.__k===h.__k?(d=ot(h,d,e,x),x&&s.__e&&(s.__e=null)):typeof h.type=="function"&&p!==void 0?d=p:y&&(d=y.nextSibling),h.__u&=-7);return n.__e=$,d}function Ct(e,t,n,l,i){var r,c,a,d,_,f=n.length,v=f,s=0;for(e.__k=new Array(i),r=0;r<i;r++)(c=t[r])!=null&&typeof c!="boolean"&&typeof c!="function"?(typeof c=="string"||typeof c=="number"||typeof c=="bigint"||c.constructor==String?c=e.__k[r]=te(null,c,null,null,null):_e(c)?c=e.__k[r]=te(ae,{children:c},null,null,null):c.constructor===void 0&&c.__b>0?c=e.__k[r]=te(c.type,c.props,c.key,c.ref?c.ref:null,c.__v):e.__k[r]=c,d=r+s,c.__=e,c.__b=e.__b+1,a=null,(_=c.__i=$t(c,n,d,v))!=-1&&(v--,(a=n[_])&&(a.__u|=2)),a==null||a.__v==null?(_==-1&&(i>f?s--:i<f&&s++),typeof c.type!="function"&&(c.__u|=4)):_!=d&&(_==d-1?s--:_==d+1?s++:(_>d?s--:s++,c.__u|=4))):e.__k[r]=null;if(v)for(r=0;r<f;r++)(a=n[r])!=null&&!(2&a.__u)&&(a.__e==l&&(l=q(a)),at(a,a));return l}function ot(e,t,n,l){var i,r;if(typeof e.type=="function"){for(i=e.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=e,t=ot(i[r],t,n,l));return t}e.__e!=t&&(l&&(t&&e.type&&!t.parentNode&&(t=q(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t=t&&t.nextSibling;while(t!=null&&t.nodeType==8);return t}function $t(e,t,n,l){var i,r,c,a=e.key,d=e.type,_=t[n],f=_!=null&&(2&_.__u)==0;if(_===null&&a==null||f&&a==_.key&&d==_.type)return n;if(l>(f?1:0)){for(i=n-1,r=n+1;i>=0||r<t.length;)if((_=t[c=i>=0?i--:r++])!=null&&!(2&_.__u)&&a==_.key&&d==_.type)return c}return-1}function Oe(e,t,n){t[0]=="-"?e.setProperty(t,n??""):e[t]=n==null?"":typeof n!="number"||xt.test(t)?n:n+"px"}function X(e,t,n,l,i){var r,c;e:if(t=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof l=="string"&&(e.style.cssText=l=""),l)for(t in l)n&&t in n||Oe(e.style,t,"");if(n)for(t in n)l&&n[t]==l[t]||Oe(e.style,t,n[t])}else if(t[0]=="o"&&t[1]=="n")r=t!=(t=t.replace(lt,"$1")),c=t.toLowerCase(),t=c in e||t=="onFocusOut"||t=="onFocusIn"?c.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+r]=n,n?l?n[G]=l[G]:(n[G]=ke,e.addEventListener(t,r?ge:me,r)):e.removeEventListener(t,r?ge:me,r);else{if(i=="http://www.w3.org/2000/svg")t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!="width"&&t!="height"&&t!="href"&&t!="list"&&t!="form"&&t!="tabIndex"&&t!="download"&&t!="rowSpan"&&t!="colSpan"&&t!="role"&&t!="popover"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&t[4]!="-"?e.removeAttribute(t):e.setAttribute(t,t=="popover"&&n==1?"":n))}}function je(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t[ee]==null)t[ee]=ke++;else if(t[ee]<n[G])return;return n(b.event?b.event(t):t)}}}function xe(e,t,n,l,i,r,c,a,d,_){var f,v,s,h,y,$,p,x,m,g,U,P,D,F,I,B,T=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(d=!!(32&n.__u),r=[a=t.__e=n.__e]),(f=b.__b)&&f(t);e:if(typeof T=="function"){v=c.length;try{if(m=t.props,g=T.prototype&&T.prototype.render,U=(f=T.contextType)&&l[f.__c],P=f?U?U.props.value:f.__:l,n.__c?x=(s=t.__c=n.__c).__=s.__E:(g?t.__c=s=new T(m,P):(t.__c=s=new ne(m,P),s.constructor=T,s.render=Pt),U&&U.sub(s),s.state||(s.state={}),s.__n=l,h=s.__d=!0,s.__h=[],s._sb=[]),g&&s.__s==null&&(s.__s=s.state),g&&T.getDerivedStateFromProps!=null&&(s.__s==s.state&&(s.__s=M({},s.__s)),M(s.__s,T.getDerivedStateFromProps(m,s.__s))),y=s.props,$=s.state,s.__v=t,h)g&&T.getDerivedStateFromProps==null&&s.componentWillMount!=null&&s.componentWillMount(),g&&s.componentDidMount!=null&&s.__h.push(s.componentDidMount);else{if(g&&T.getDerivedStateFromProps==null&&m!==y&&s.componentWillReceiveProps!=null&&s.componentWillReceiveProps(m,P),t.__v==n.__v||!s.__e&&s.shouldComponentUpdate!=null&&s.shouldComponentUpdate(m,s.__s,P)===!1){t.__v!=n.__v&&(s.props=m,s.state=s.__s,s.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(H){H&&(H.__=t)}),ie.push.apply(s.__h,s._sb),s._sb=[],s.__h.length&&c.push(s);break e}s.componentWillUpdate!=null&&s.componentWillUpdate(m,s.__s,P),g&&s.componentDidUpdate!=null&&s.__h.push(function(){s.componentDidUpdate(y,$,p)})}if(s.context=P,s.props=m,s.__P=e,s.__e=!1,D=b.__r,F=0,g)s.state=s.__s,s.__d=!1,D&&D(t),f=s.render(s.props,s.state,s.context),ie.push.apply(s.__h,s._sb),s._sb=[];else do s.__d=!1,D&&D(t),f=s.render(s.props,s.state,s.context),s.state=s.__s;while(s.__d&&++F<25);s.state=s.__s,s.getChildContext!=null&&(l=M(M({},l),s.getChildContext())),g&&!h&&s.getSnapshotBeforeUpdate!=null&&(p=s.getSnapshotBeforeUpdate(y,$)),I=f!=null&&f.type===ae&&f.key==null?_t(f.props.children):f,a=st(e,_e(I)?I:[I],t,n,l,i,r,c,a,d,_),s.base=t.__e,t.__u&=-161,s.__h.length&&c.push(s),x&&(s.__E=s.__=null)}catch(H){if(c.length=v,t.__v=null,d||r!=null)if(H.then){for(t.__u|=d?160:128;a&&a.nodeType==8&&a.nextSibling;)a=a.nextSibling;r!=null&&(r[r.indexOf(a)]=null),t.__e=a}else{if(r!=null)for(B=r.length;B--;)we(r[B]);ve(t)}else t.__e=n.__e,!t.__k&&n.__k&&(t.__k=n.__k),H.then||ve(t);b.__e(H,t,n)}}else r==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):a=t.__e=Tt(n.__e,t,n,l,i,r,c,d,_);return(f=b.diffed)&&f(t),128&t.__u?void 0:a}function ve(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(ve))}function ct(e,t,n){for(var l=0;l<n.length;l++)Se(n[l],n[++l],n[++l]);b.__c&&b.__c(t,e),e.some(function(i){try{e=i.__h,i.__h=[],e.some(function(r){r.call(i)})}catch(r){b.__e(r,i.__v)}})}function _t(e){return typeof e!="object"||e==null||e.__b>0?e:_e(e)?e.map(_t):e.constructor!==void 0?null:M({},e)}function Tt(e,t,n,l,i,r,c,a,d){var _,f,v,s,h,y,$,p=n.props||le,x=t.props,m=t.type;if(m=="svg"?i="http://www.w3.org/2000/svg":m=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(_=0;_<r.length;_++)if((h=r[_])&&"setAttribute"in h==!!m&&(m?h.localName==m:h.nodeType==3)){e=h,r[_]=null;break}}if(e==null){if(m==null)return document.createTextNode(x);e=document.createElementNS(i,m,x.is&&x),a&&(b.__m&&b.__m(t,r),a=!1),r=null}if(m==null)p===x||a&&e.data==x||(e.data=x);else{if(r=m=="textarea"&&x.defaultValue!=null?null:r&&ce.call(e.childNodes),!a&&r!=null)for(p={},_=0;_<e.attributes.length;_++)p[(h=e.attributes[_]).name]=h.value;for(_ in p)h=p[_],_=="dangerouslySetInnerHTML"?v=h:_=="children"||_ in x||_=="value"&&"defaultValue"in x||_=="checked"&&"defaultChecked"in x||X(e,_,null,h,i);for(_ in x)h=x[_],_=="children"?s=h:_=="dangerouslySetInnerHTML"?f=h:_=="value"?y=h:_=="checked"?$=h:a&&typeof h!="function"||p[_]===h||X(e,_,h,p[_],i);if(f)a||v&&(f.__html==v.__html||f.__html==e.innerHTML)||(e.innerHTML=f.__html),t.__k=[];else if(v&&(e.innerHTML=""),st(t.type=="template"?e.content:e,_e(s)?s:[s],t,n,l,m=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,c,r?r[0]:n.__k&&q(n,0),a,d),r!=null)for(_=r.length;_--;)we(r[_]);a&&m!="textarea"||(_="value",m=="progress"&&y==null?e.removeAttribute("value"):y!=null&&(y!==e[_]||m=="progress"&&!y||m=="option"&&y!=p[_])&&X(e,_,y,p[_],i),_="checked",$!=null&&$!=e[_]&&X(e,_,$,p[_],i))}return e}function Se(e,t,n){try{if(typeof e=="function"){var l=typeof e.__u=="function";l&&e.__u(),l&&t==null||(e.__u=e(t))}else e.current=t}catch(i){b.__e(i,n)}}function at(e,t,n){var l,i;if(b.unmount&&b.unmount(e),(l=e.ref)&&(l.current&&l.current!=e.__e||Se(l,null,t)),(l=e.__c)!=null){if(l.componentWillUnmount)try{l.componentWillUnmount()}catch(r){b.__e(r,t)}l.base=l.__P=l.__n=null}if(l=e.__k)for(i=0;i<l.length;i++)l[i]&&at(l[i],t,n||typeof e.type!="function");n||we(e.__e),e.__c=e.__=e.__e=void 0}function Pt(e,t,n){return this.constructor(e,n)}function At(e,t,n){var l,i,r,c;t==document&&(t=document.documentElement),b.__&&b.__(e,t),i=(l=!1)?null:t.__k,r=[],c=[],xe(t,e=t.__k=St(ae,null,[e]),i||le,le,t.namespaceURI,i?null:t.firstChild?ce.call(t.childNodes):null,r,i?i.__e:t.firstChild,l,c),ct(r,e,c),e.props.children=null}ce=ie.slice,b={__e:function(e,t,n,l){for(var i,r,c;t=t.__;)if((i=t.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(e)),c=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,l||{}),c=i.__d),c)return i.__E=i}catch(a){e=a}throw e}},tt=0,ne.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=M({},this.state),typeof e=="function"&&(e=e(M({},n),this.props)),e&&M(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),ze(this))},ne.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),ze(this))},ne.prototype.render=ae,R=[],nt=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,rt=function(e,t){return e.__v.__b-t.__v.__b},se.__r=0,fe=Math.random().toString(8),ee="__d"+fe,G="__a"+fe,lt=/(PointerCapture)$|Capture$/i,ke=0,me=je(!1),ge=je(!0);var Nt=0;function o(e,t,n,l,i,r){t||(t={});var c,a,d=t;if("ref"in d)for(a in d={},t)a=="ref"?c=t[a]:d[a]=t[a];var _={type:e,props:d,key:n,ref:c,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Nt,__i:-1,__u:0,__source:i,__self:r};if(typeof e=="function"&&(c=e.defaultProps))for(a in c)d[a]===void 0&&(d[a]=c[a]);return b.vnode&&b.vnode(_),_}var K,S,pe,qe,Q=0,ut=[],E=b,Be=E.__b,We=E.__r,Ve=E.diffed,Ge=E.__c,Ke=E.unmount,Qe=E.__;function Ee(e,t){E.__h&&E.__h(S,e,Q||t),Q=0;var n=S.__H||(S.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function L(e){return Q=1,Dt(pt,e)}function Dt(e,t,n){var l=Ee(K++,2);if(l.t=e,!l.__c&&(l.__=[pt(void 0,t),function(a){var d=l.__N?l.__N[0]:l.__[0],_=l.t(d,a);d!==_&&(l.__N=[_,l.__[1]],l.__c.setState({}))}],l.__c=S,!S.__f)){var i=function(a,d,_){if(!l.__c.__H)return!0;var f=!1,v=l.__c.props!==a;if(l.__c.__H.__.some(function(h){if(h.__N){f=!0;var y=h.__[0];h.__=h.__N,h.__N=void 0,y!==h.__[0]&&(v=!0)}}),r){var s=r.call(this,a,d,_);return f?s||v:s}return!f||v};S.__f=!0;var r=S.shouldComponentUpdate,c=S.componentWillUpdate;S.componentWillUpdate=function(a,d,_){if(this.__e){var f=r;r=void 0,i(a,d,_),r=f}c&&c.call(this,a,d,_)},S.shouldComponentUpdate=i}return l.__N||l.__}function O(e,t){var n=Ee(K++,3);!E.__s&&ft(n.__H,t)&&(n.__=e,n.u=t,S.__H.__h.push(n))}function dt(e){return Q=5,N(function(){return{current:e}},[])}function N(e,t){var n=Ee(K++,7);return ft(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function V(e,t){return Q=8,N(function(){return e},t)}function Je(){for(var e;e=ut.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(ye),t.__h.some(ht),t.__h=[]}catch(n){t.__h=[],E.__e(n,e.__v)}}}E.__b=function(e){S=null,Be&&Be(e)},E.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),Qe&&Qe(e,t)},E.__r=function(e){We&&We(e),K=0;var t=(S=e.__c).__H;t&&(pe===S?(t.__h=[],S.__h=[],t.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(t.__h.length&&Je(),K=0)),pe=S},E.diffed=function(e){Ve&&Ve(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(ut.push(t)!==1&&qe===E.requestAnimationFrame||((qe=E.requestAnimationFrame)||It)(Je)),t.__H.__.some(function(n){n.u&&(n.__H=n.u,n.u=void 0)})),pe=S=null},E.__c=function(e,t){t.some(function(n){try{n.__h.some(ye),n.__h=n.__h.filter(function(l){return!l.__||ht(l)})}catch(l){t.some(function(i){i.__h&&(i.__h=[])}),t=[],E.__e(l,n.__v)}}),Ge&&Ge(e,t)},E.unmount=function(e){Ke&&Ke(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(l){try{ye(l)}catch(i){t=i}}),n.__H=void 0,t&&E.__e(t,n.__v))};var Ye=typeof requestAnimationFrame=="function";function It(e){var t,n=function(){clearTimeout(l),Ye&&cancelAnimationFrame(t),setTimeout(e)},l=setTimeout(n,35);Ye&&(t=requestAnimationFrame(n))}function ye(e){var t=S,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),S=t}function ht(e){var t=S;e.__c=e.__(),S=t}function ft(e,t){return!e||e.length!==t.length||t.some(function(n,l){return n!==e[l]})}function pt(e,t){return typeof t=="function"?t(e):t}async function Ht(){if(window.__EDSGER_TESTCASES__)return Ze(window.__EDSGER_TESTCASES__);const e=await fetch("./edsger-testcases.json",{cache:"no-store"});if(!e.ok)throw new Error(`Could not load edsger-testcases.json (HTTP ${e.status})`);return Ze(await e.json())}function Ze(e){const t=[...e.history??[]].sort((n,l)=>n.generatedAt<l.generatedAt?-1:n.generatedAt>l.generatedAt?1:0);return{repo:e.repo,latest:e.latest??null,history:t,runs:e.runs??{}}}function Lt(e){const t=new Map,n=(l,i)=>{t.set(l.id,{node:l,parent:i});for(const r of l.children)n(r,l.id)};return n(e,null),t}function Mt(e,t){const n=new Set,l=i=>{let r=t(i);for(const c of i.children)l(c)&&(r=!0);return r&&n.add(i.id),r};return l(e),n}function mt(e,t,n){return e.children.length?t?e.children.some(l=>t.has(l.id)):n.has(e.id):!1}function Ut(e,t,n){const l=[],i=r=>{for(const c of r.children)t&&!t.has(c.id)||(l.push(c.id),mt(c,t,n)&&i(c))};return i(e),l}function Ft(e,t){if(!t)return[];const n=[];let l=t;for(;l;){const i=e.get(l);if(!i)break;n.unshift(i.node),l=i.parent}return n}function Rt(e,t){if(!t)return[{text:e,hit:!1}];const n=e.toLowerCase(),l=[];let i=0;for(;;){const r=n.indexOf(t,i);if(r===-1)break;r>i&&l.push({text:e.slice(i,r),hit:!1}),l.push({text:e.slice(r,r+t.length),hit:!0}),i=r+t.length}return i<e.length&&l.push({text:e.slice(i),hit:!1}),l.length?l:[{text:e,hit:!1}]}const zt=["critical","high","medium","low"];function ue(e){return e.steps.length>0||!!e.expected}function oe(e){return e.priority??"medium"}function Ce(e){return(ue(e)?1:0)+e.children.reduce((t,n)=>t+Ce(n),0)}function Ot(e){const t={critical:0,high:0,medium:0,low:0},n=l=>{ue(l)&&t[oe(l)]++,l.children.forEach(n)};return n(e),t}function jt(e,t){return[e.title,e.summary,...e.files,...e.preconditions,...e.steps,e.expected??""].join(`
|
|
26
|
+
`).toLowerCase().includes(t)}function qt(e,t){return n=>!(e&&!jt(n,e)||t.size&&!(ue(n)&&t.has(oe(n))))}function $e(e){return e.preconditions.length>0||e.steps.length>0||!!e.expected}function re(e){return e.children.length>0||$e(e)}function j({text:e,query:t}){return t?Rt(e,t).map((n,l)=>n.hit?o("mark",{children:n.text},l):n.text):e}function gt({node:e,query:t}){return o("div",{class:"case-detail",children:[e.preconditions.length?o("div",{class:"case-block",children:[o("span",{class:"case-label",children:"Preconditions"}),o("ul",{children:e.preconditions.map((n,l)=>o("li",{children:o(j,{text:n,query:t})},l))})]}):null,e.steps.length?o("div",{class:"case-block",children:[o("span",{class:"case-label",children:"Steps"}),o("ol",{children:e.steps.map((n,l)=>o("li",{children:o(j,{text:n,query:t})},l))})]}):null,e.expected?o("div",{class:"case-block expected",children:[o("span",{class:"case-label",children:"Expected"}),o("p",{children:o(j,{text:e.expected,query:t})})]}):null]})}function Bt({node:e,view:t,onToggle:n,onZoom:l,onSelect:i}){const r=e.children.length>0,c=re(e),a=t.isExpanded(e),d=t.selectedId===e.id,_=dt(null);O(()=>{var s;d&&((s=_.current)==null||s.scrollIntoView({block:"nearest"}))},[d]);const f=["row",d?"selected":"",t.isMatch(e)?"match":""].filter(Boolean).join(" "),v=r&&!a?Ce(e):0;return o("div",{class:"node","data-kind":e.kind,children:[o("div",{class:f,ref:_,onClick:()=>i(e.id),children:[c?o("button",{class:`disclosure ${a?"open":""}`,title:a?"Collapse":"Expand",onClick:s=>{s.stopPropagation(),i(e.id),n(e.id)},children:"▸"}):o("span",{class:"disclosure spacer"}),o("button",{class:`dot ${r&&!a?"loaded":""}`,title:"Zoom in",onClick:s=>{s.stopPropagation(),l(e.id)},children:o("span",{})}),o("div",{class:"node-text",children:[o("span",{class:"title",onDblClick:()=>l(e.id),children:o(j,{text:e.title,query:t.query})}),ue(e)?o("span",{class:`priority-badge prio-${oe(e)}`,children:oe(e)}):e.kind&&e.kind!=="topic"?o("span",{class:"kind-badge",children:e.kind}):null,v?o("span",{class:"count-badge",children:[v," case",v===1?"":"s"]}):null,e.summary?o("span",{class:"summary",children:o(j,{text:e.summary,query:t.query})}):null,e.files.length?o("span",{class:"files",children:e.files.map(s=>o("code",{class:"file",children:o(j,{text:s,query:t.query})},s))}):null]})]}),a&&$e(e)?o(gt,{node:e,query:t.query}):null,r&&a?o("div",{class:"children",children:o(vt,{nodes:e.children,view:t,onToggle:n,onZoom:l,onSelect:i})}):null]})}function vt({nodes:e,view:t,onToggle:n,onZoom:l,onSelect:i}){return o("div",{class:"outline",children:e.filter(r=>t.isVisible(r)).map(r=>o(Bt,{node:r,view:t,onToggle:n,onZoom:l,onSelect:i},r.id))})}const yt="edsger-theme",be=new Set;function Wt(){return typeof matchMedia<"u"&&matchMedia("(prefers-color-scheme: light)").matches?"light":"dark"}function Vt(){if(typeof document<"u"){const e=document.documentElement.getAttribute("data-theme");if(e==="light"||e==="dark")return e}try{const e=localStorage.getItem(yt);if(e==="light"||e==="dark")return e}catch{}return Wt()}let J=Vt();typeof document<"u"&&!document.documentElement.getAttribute("data-theme")&&document.documentElement.setAttribute("data-theme",J);function Gt(){return J}function Kt(e){J=e,typeof document<"u"&&document.documentElement.setAttribute("data-theme",e);try{localStorage.setItem(yt,e)}catch{}for(const t of be)t()}function Qt(){Kt(J==="dark"?"light":"dark")}function Jt(e){return be.add(e),()=>{be.delete(e)}}function Yt(){const[e,t]=L(J);return O(()=>Jt(()=>t(Gt())),[]),e}function Zt(){const e=Yt(),n=`Switch to ${e==="dark"?"light":"dark"} mode`;return o("button",{type:"button",class:"theme-toggle",title:n,"aria-label":n,onClick:()=>Qt(),children:o("span",{"aria-hidden":"true",children:e==="dark"?"☀":"☾"})})}function Xe(e){const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function Xt(){var Ne;const[e,t]=L(null),[n,l]=L(null),[i,r]=L(null),[c,a]=L(null),[d,_]=L(new Set),[f,v]=L(null),[s,h]=L(""),[y,$]=L(new Set);O(()=>{Ht().then(t).catch(u=>l(u instanceof Error?u.message:String(u)))},[]);const p=N(()=>e?i&&e.runs[i]?e.runs[i]:e.latest:null,[e,i]),x=N(()=>e?[...e.history].reverse():[],[e]),m=N(()=>p?Lt(p.root):null,[p]);O(()=>{p&&(a(null),v(null),$(new Set),_(new Set(p.root.children.map(u=>u.id))))},[p]);const g=N(()=>p?c&&(m!=null&&m.get(c))?m.get(c).node:p.root:null,[p,m,c]),U=N(()=>m?Ft(m,c):[],[m,c]),P=s.trim().toLowerCase(),D=!!P||y.size>0,F=N(()=>qt(P,y),[P,y]),I=N(()=>g&&D?Mt(g,F):null,[g,D,F]),B=N(()=>({isVisible:u=>I?I.has(u.id):!0,isExpanded:u=>u.children.length?mt(u,I,d):d.has(u.id)||!!P&&F(u),isMatch:u=>D&&F(u),query:P,selectedId:f}),[I,d,P,F,D,f]),T=N(()=>g?Ut(g,I,d):[],[g,I,d]),H=V(u=>{_(w=>{const k=new Set(w);return k.has(u)?k.delete(u):k.add(u),k})},[]),bt=V(u=>{$(w=>{const k=new Set(w);return k.has(u)?k.delete(u):k.add(u),k})},[]),z=V(u=>{if(a(u),v(null),h(""),u&&(m!=null&&m.get(u))){const w=m.get(u).node;_(k=>{const C=new Set(k);C.add(u);for(const A of w.children)C.add(A.id);return C})}},[m]),kt=V(()=>{g&&_(u=>{const w=new Set(u),k=C=>{re(C)&&w.add(C.id),C.children.forEach(k)};return k(g),w})},[g]),wt=V(()=>{g&&_(u=>{const w=new Set(u),k=C=>{w.delete(C.id),C.children.forEach(k)};for(const C of g.children)k(C);return w})},[g]),Te=dt({index:m,flat:T,selected:f,expanded:d,zoomId:c});Te.current={index:m,flat:T,selected:f,expanded:d,zoomId:c},O(()=>{const u=w=>{var He,Le,Me,Ue,Fe;const{index:k,flat:C,selected:A,expanded:De,zoomId:Y}=Te.current,Z=w.target;if(Z&&(Z.tagName==="INPUT"||Z.tagName==="SELECT")){w.key==="Escape"&&Z.blur();return}if(!k||!C.length){w.key==="Escape"&&Y&&(w.preventDefault(),z(((He=k==null?void 0:k.get(Y))==null?void 0:He.parent)??null));return}const Ie=A?C.indexOf(A):-1;switch(w.key){case"ArrowDown":w.preventDefault(),v(C[Math.min(Ie+1,C.length-1)]??null);break;case"ArrowUp":w.preventDefault(),v(C[Math.max(Ie-1,0)]??null);break;case"ArrowRight":{if(!A)break;w.preventDefault();const W=(Le=k.get(A))==null?void 0:Le.node;W&&re(W)&&!De.has(A)&&H(A);break}case"ArrowLeft":{if(!A)break;w.preventDefault();const W=(Me=k.get(A))==null?void 0:Me.node;if(W&&re(W)&&De.has(A))H(A);else{const he=(Ue=k.get(A))==null?void 0:Ue.parent;he&&C.includes(he)&&v(he)}break}case"Enter":A&&(w.preventDefault(),z(A));break;case"Escape":Y&&(w.preventDefault(),z(((Fe=k.get(Y))==null?void 0:Fe.parent)??null));break}};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[H,z]),O(()=>{f&&!T.includes(f)&&v(null)},[T,f]);const Pe=(e==null?void 0:e.repo)??(p==null?void 0:p.repo)??"",de=N(()=>g?Ot(g):null,[g]),Ae=N(()=>g?Ce(g):0,[g]);return o("div",{class:"app",children:[o("header",{class:"topbar",children:[o("div",{class:"brand",children:[o("span",{class:"logo",children:"edsger"}),o("span",{class:"subtitle",children:"test cases"})]}),o("div",{class:"topbar-actions",children:[Pe?o("div",{class:"repo",children:Pe}):null,o(Zt,{})]})]}),o("main",{class:"content",children:n?o("div",{class:"empty",children:[o("strong",{children:"Failed to load data."}),o("div",{class:"muted",children:n})]}):e?!p||!g?o("div",{class:"empty",children:["No test cases yet. Run ",o("code",{children:"edsger testcases"}),"."]}):o("div",{class:"stack",children:[c?null:o("section",{class:"profile",children:[o("p",{class:"summary",children:p.profile.summary}),p.profile.kinds.length?o("div",{class:"chips",children:p.profile.kinds.map(u=>o("span",{class:"chip kind",children:u},u))}):null,o("dl",{class:"facts",children:[o("div",{children:[o("dt",{children:"Languages"}),o("dd",{children:p.languages.join(", ")||"generic"})]}),o("div",{children:[o("dt",{children:"Test cases"}),o("dd",{children:[p.caseCount," · depth ",p.depth]})]}),o("div",{children:[o("dt",{children:"Commit"}),o("dd",{children:(Ne=p.git)!=null&&Ne.commit?o("code",{children:[p.git.commit,p.git.branch?` (${p.git.branch})`:"",p.git.dirty?" ✻":""]}):"—"})]}),o("div",{children:[o("dt",{children:"Generated"}),o("dd",{children:Xe(p.generatedAt)})]}),x.length>1?o("div",{children:[o("dt",{children:"Run"}),o("dd",{children:o("select",{class:"run-select",value:i??p.runId,onChange:u=>r(u.target.value),children:x.map(u=>o("option",{value:u.runId,children:[Xe(u.generatedAt)," · ",u.caseCount," cases"]},u.runId))})})]}):null]})]}),o("section",{class:"outline-panel",children:[o("div",{class:"outline-toolbar",children:[U.length?o("nav",{class:"breadcrumb",children:[o("button",{class:"crumb",onClick:()=>z(null),children:p.root.title}),U.slice(1,-1).map(u=>o("span",{children:[o("span",{class:"crumb-sep",children:"›"}),o("button",{class:"crumb",onClick:()=>z(u.id),children:u.title})]},u.id)),o("span",{class:"crumb-sep",children:"›"}),o("span",{class:"crumb current",children:g.title})]}):o("div",{class:"breadcrumb muted",children:"↑↓ ←→ navigate · Enter zoom · Esc back"}),o("div",{class:"outline-actions",children:[o("input",{class:"search",type:"search",placeholder:"Search titles, steps, expected, files…",value:s,onInput:u=>h(u.target.value)}),o("button",{class:"ghost-btn",onClick:kt,children:"Expand all"}),o("button",{class:"ghost-btn",onClick:wt,children:"Collapse all"})]})]}),de?o("div",{class:"priority-bar",children:[o("span",{class:"priority-total muted",children:[Ae," case",Ae===1?"":"s"]}),zt.map(u=>o("button",{class:`priority-chip prio-${u} ${y.has(u)?"on":""}`,disabled:de[u]===0,title:`Show only ${u}-priority cases`,onClick:()=>bt(u),children:[u," ",o("b",{children:de[u]})]},u)),y.size?o("button",{class:"ghost-btn",onClick:()=>$(new Set),children:"Clear filter"}):null]}):null,o("div",{class:"zoom-head",children:[o("h2",{class:"zoom-title",children:g.title}),g.summary?o("p",{class:"zoom-summary",children:g.summary}):null,g.files.length?o("div",{class:"files",children:g.files.map(u=>o("code",{class:"file",children:u},u))}):null,c&&$e(g)?o(gt,{node:g,query:""}):null]}),D&&!T.length?o("div",{class:"empty muted",children:["No test cases match",P?` “${s}”`:"",y.size?` with priority ${[...y].join("/")}`:"","."]}):o(vt,{nodes:g.children,view:B,onToggle:H,onZoom:z,onSelect:v})]}),p.notes&&!c?o("section",{class:"notes",children:[o("h2",{children:"Notes"}),o("p",{children:p.notes})]}):null]}):o("div",{class:"empty",children:"Loading…"})}),o("footer",{class:"foot",children:o("span",{children:"Generated by edsger"})})]})}const et=document.getElementById("app");et&&At(o(Xt,{}),et);</script>
|
|
27
|
+
<style rel="stylesheet" crossorigin>:root,:root[data-theme=dark]{--bg: #0d1117;--panel: #161b22;--panel-2: #1c2129;--border: #30363d;--text: #e6edf3;--muted: #8b949e;--accent: #58a6ff;--on-accent: #04101f;--chart-line: #e6edf3;--chart-axis: #8b949e;--chart-grid: #21262d;color-scheme:dark}:root[data-theme=light]{--bg: #ffffff;--panel: #f6f8fa;--panel-2: #eaeef2;--border: #d0d7de;--text: #1f2328;--muted: #59636e;--accent: #0969da;--on-accent: #ffffff;--chart-line: #1f2328;--chart-axis: #59636e;--chart-grid: #d8dee4;color-scheme:light}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.9em;background:var(--panel-2);padding:1px 5px;border-radius:5px}.app{max-width:1040px;margin:0 auto;padding:0 20px 60px}.topbar{display:flex;align-items:baseline;justify-content:space-between;padding:22px 0 14px}.brand{display:flex;align-items:baseline;gap:10px}.logo{font-weight:800;font-size:22px;letter-spacing:-.5px}.subtitle{color:var(--muted)}.repo{color:var(--muted);font-family:ui-monospace,monospace}.topbar-actions{display:flex;align-items:center;gap:14px}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:34px;height:30px;padding:0;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:15px;line-height:1;cursor:pointer}.theme-toggle:hover{border-color:var(--accent);color:var(--accent)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:22px}.tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);padding:10px 14px;font-size:14px;cursor:pointer}.tab:hover{color:var(--text)}.tab.active{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.stack{display:flex;flex-direction:column;gap:18px}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:18px}@media (max-width: 720px){.two-col{grid-template-columns:1fr}}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:18px 20px}.card-title{margin:0 0 14px;font-size:15px;font-weight:600}.hero{display:flex;gap:26px;align-items:center;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:22px}@media (max-width: 720px){.hero{flex-direction:column;align-items:flex-start}}.hero-meta{flex:1}.summary{margin:0 0 14px;font-size:15px}.facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 18px;margin:0}.facts div{display:flex;flex-direction:column}.facts dt{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.4px}.facts dd{margin:2px 0 0}.ring svg{display:block}.ring-track{fill:none;stroke:var(--border);stroke-width:12}.ring-value{fill:none;stroke-width:12;stroke-linecap:round;transition:stroke-dasharray .6s ease}.ring-score{font-size:34px;font-weight:800;text-anchor:middle}.ring-grade{font-size:12px;fill:var(--muted);text-anchor:middle}.bar-row{display:grid;grid-template-columns:220px 1fr 120px;align-items:center;gap:12px;padding:5px 0}@media (max-width: 620px){.bar-row{grid-template-columns:130px 1fr 70px}}.bar-label{color:var(--text)}.bar-track{background:var(--panel-2);border-radius:6px;height:10px;overflow:hidden}.bar-fill{height:100%;border-radius:6px;transition:width .5s ease}.bar-value{color:var(--muted);text-align:right;font-variant-numeric:tabular-nums}.list{margin:0;padding-left:18px}.list li{margin:4px 0}.list.good li::marker{color:#3fb950}.list.bad li::marker{color:#f85149}.recs{list-style:none;margin:0;padding:0}.recs li{padding:8px 0;border-bottom:1px solid var(--border)}.recs li:last-child{border-bottom:none}.pill{display:inline-block;font-size:11px;text-transform:uppercase;border-radius:20px;padding:2px 8px;margin-right:8px;font-weight:700}.pill.high{background:#6e2019;color:#ff7b72}.pill.medium{background:#5a4212;color:#e3b341}.pill.low{background:#22333b;color:#7ee2c8}:root[data-theme=light] .pill.high{background:#ffebe9;color:#cf222e}:root[data-theme=light] .pill.medium{background:#fff8c5;color:#9a6700}:root[data-theme=light] .pill.low{background:#dafbe1;color:#1a7f37}.run-picker{display:flex;align-items:center;gap:10px}.run-picker select,select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px}.crit-list{display:flex;flex-direction:column;gap:6px}.crit{border:1px solid var(--border);border-radius:8px;padding:8px 12px;background:var(--panel-2)}.crit summary{display:flex;align-items:center;gap:10px;cursor:pointer;list-style:none}.crit summary::-webkit-details-marker{display:none}.score-chip{font-variant-numeric:tabular-nums;font-weight:700;color:#0d1117;border-radius:6px;padding:1px 8px;font-size:12px}.crit-title{font-weight:500}.crit-just{margin:10px 0 6px;color:var(--text)}.evidence{margin:0;padding-left:18px}.evidence li{margin:3px 0}.table-wrap{overflow-x:auto}table.history{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}table.history th,table.history td{padding:7px 10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}table.history th{color:var(--muted);font-weight:600;font-size:12px}table.history .num{text-align:right}table.history .cat{color:var(--muted)}table.history .strong{font-weight:700}.up{color:#3fb950}.down{color:#f85149}:root[data-theme=light] .up,:root[data-theme=light] .list.good li::marker{color:#1a7f37}:root[data-theme=light] .down,:root[data-theme=light] .list.bad li::marker{color:#cf222e}.grade-dot{font-size:10px}.chart{width:100%}.legend{display:flex;gap:18px;color:var(--muted);margin-top:12px;flex-wrap:wrap}.legend.wrap span{display:inline-flex;align-items:center;gap:6px}.swatch{width:12px;height:12px;border-radius:3px;display:inline-block}.empty{text-align:center;color:var(--muted);padding:60px 20px}.muted{color:var(--muted)}.foot{text-align:center;color:var(--muted);margin-top:34px;font-size:12px}.uplot,.u-title,.u-legend{color:var(--text)}.u-legend .u-marker{border-radius:2px}.profile{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:20px 22px}.profile .summary{font-size:15px;margin:0 0 12px}.chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}.chip{border:1px solid var(--border);background:var(--panel-2);color:var(--text);border-radius:999px;padding:4px 12px;font-size:12.5px;cursor:default}.chip.kind{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 40%,var(--border))}.run-select{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:4px 8px;font:inherit}.outline-panel{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px 18px 22px}.outline-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding-bottom:12px;border-bottom:1px solid var(--border);margin-bottom:14px}.breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:2px;font-size:13px;min-height:26px}.breadcrumb.muted{color:var(--muted);font-size:12.5px}.crumb{background:none;border:none;color:var(--accent);font:inherit;padding:2px 4px;border-radius:5px;cursor:pointer}.crumb:hover{background:var(--panel-2)}.crumb.current{color:var(--text);font-weight:600;cursor:default}.crumb-sep{color:var(--muted);padding:0 2px}.outline-actions{display:flex;align-items:center;gap:8px}.search{background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:6px 10px;font:inherit;font-size:13px;width:240px}.search:focus{outline:none;border-color:var(--accent)}.ghost-btn{background:none;border:1px solid var(--border);color:var(--muted);border-radius:6px;padding:5px 10px;font-size:12.5px;cursor:pointer}.ghost-btn:hover{color:var(--text);border-color:var(--accent)}.zoom-head{margin:2px 0 12px}.zoom-title{margin:0;font-size:22px;letter-spacing:-.3px}.zoom-summary{margin:6px 0 0;color:var(--muted);max-width:72ch}.zoom-head .files{margin-top:8px}.outline{display:flex;flex-direction:column}.node .children{margin-left:13px;padding-left:22px;border-left:1px solid var(--border)}.row{display:flex;align-items:flex-start;gap:2px;padding:3px 6px 3px 0;border-radius:7px;cursor:default}.row:hover{background:color-mix(in srgb,var(--panel-2) 70%,transparent)}.row.selected{background:color-mix(in srgb,var(--accent) 14%,transparent)}.row.match .title{color:var(--accent)}.node-text mark{background:color-mix(in srgb,var(--accent) 32%,transparent);color:inherit;border-radius:3px;padding:0 1px}.disclosure{flex:none;width:18px;height:22px;background:none;border:none;color:var(--muted);font-size:11px;line-height:22px;padding:0;cursor:pointer;transition:transform .12s ease;transform-origin:45% 50%;visibility:hidden}.node:hover>.row>.disclosure,.row.selected>.disclosure{visibility:visible}.disclosure.open{transform:rotate(90deg)}.disclosure.spacer{cursor:default}.dot{flex:none;width:18px;height:22px;background:none;border:none;padding:0;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}.dot span{width:7px;height:7px;border-radius:50%;background:var(--muted);box-shadow:0 0 0 0 transparent;transition:box-shadow .12s ease,background .12s ease}.dot.loaded span{box-shadow:0 0 0 4px color-mix(in srgb,var(--muted) 28%,transparent)}.dot:hover span{background:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 30%,transparent)}.node-text{min-width:0;padding:1px 0;line-height:20px}.node-text .title{font-weight:600}.node-text .summary{color:var(--muted);margin-left:8px}.node-text .summary:before{content:"— "}.kind-badge{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;color:var(--muted);background:var(--panel-2);border:1px solid var(--border);border-radius:5px;padding:0 5px;margin-left:8px;vertical-align:1px}.count-badge{font-size:11px;color:var(--muted);background:var(--panel-2);border-radius:999px;padding:0 7px;margin-left:8px;vertical-align:1px}.files{display:inline-flex;flex-wrap:wrap;gap:6px;margin-left:8px}code.file{font-size:11.5px;color:color-mix(in srgb,var(--accent) 75%,var(--text))}.notes{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px 20px}.notes h2{margin:0 0 8px;font-size:15px}.notes p{margin:0;color:var(--muted)}@media (max-width: 640px){.outline-toolbar{flex-direction:column;align-items:stretch}.search{width:100%}.node .children{padding-left:14px}}:root{--prio-critical: #f85149;--prio-high: #f0883e;--prio-medium: #d29922;--prio-low: #58a6ff}:root[data-theme=light]{--prio-critical: #cf222e;--prio-high: #bc4c00;--prio-medium: #9a6700;--prio-low: #0969da}.priority-badge{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;border-radius:999px;padding:0 8px;margin-left:8px;border:1px solid transparent;vertical-align:1px}.priority-badge.prio-critical{color:var(--prio-critical);border-color:color-mix(in srgb,var(--prio-critical) 45%,var(--border));background:color-mix(in srgb,var(--prio-critical) 12%,var(--panel-2))}.priority-badge.prio-high{color:var(--prio-high);border-color:color-mix(in srgb,var(--prio-high) 45%,var(--border));background:color-mix(in srgb,var(--prio-high) 12%,var(--panel-2))}.priority-badge.prio-medium{color:var(--prio-medium);border-color:color-mix(in srgb,var(--prio-medium) 45%,var(--border));background:color-mix(in srgb,var(--prio-medium) 12%,var(--panel-2))}.priority-badge.prio-low{color:var(--prio-low);border-color:color-mix(in srgb,var(--prio-low) 45%,var(--border));background:color-mix(in srgb,var(--prio-low) 12%,var(--panel-2))}.priority-bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid var(--border)}.priority-total{font-size:12.5px;margin-right:4px}.priority-chip{font:inherit;font-size:12px;border-radius:999px;padding:3px 12px;border:1px solid var(--border);background:var(--panel-2);color:var(--muted);cursor:pointer}.priority-chip b{font-weight:700}.priority-chip:disabled{opacity:.45;cursor:default}.priority-chip.prio-critical:not(:disabled){color:var(--prio-critical)}.priority-chip.prio-high:not(:disabled){color:var(--prio-high)}.priority-chip.prio-medium:not(:disabled){color:var(--prio-medium)}.priority-chip.prio-low:not(:disabled){color:var(--prio-low)}.priority-chip.on.prio-critical{border-color:var(--prio-critical);background:color-mix(in srgb,var(--prio-critical) 15%,var(--panel-2))}.priority-chip.on.prio-high{border-color:var(--prio-high);background:color-mix(in srgb,var(--prio-high) 15%,var(--panel-2))}.priority-chip.on.prio-medium{border-color:var(--prio-medium);background:color-mix(in srgb,var(--prio-medium) 15%,var(--panel-2))}.priority-chip.on.prio-low{border-color:var(--prio-low);background:color-mix(in srgb,var(--prio-low) 15%,var(--panel-2))}.case-detail{margin:4px 0 8px 44px;padding:10px 14px;border-left:2px solid var(--border);background:color-mix(in srgb,var(--panel-2) 55%,transparent);border-radius:0 8px 8px 0;display:grid;gap:8px}.case-block{font-size:13px}.case-label{display:block;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-bottom:2px}.case-block ul,.case-block ol{margin:0;padding-left:20px;display:grid;gap:2px}.case-block p{margin:0}.case-block.expected p{color:var(--text);font-weight:500}</style>
|
|
28
|
+
</head>
|
|
29
|
+
<body>
|
|
30
|
+
<div id="app"></div>
|
|
31
|
+
</body>
|
|
32
|
+
</html>
|