@wcag-checkr/ci 1.0.0-rc.53 → 1.0.0-rc.54
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/dist/assets/{ErrorBoundary-iNEOWHi3.js → ErrorBoundary-DgAfR24x.js} +1 -1
- package/dist/assets/{devtools-panel-Kd6o7-pC.js → devtools-panel-DMy1lkHx.js} +1 -1
- package/dist/assets/{side-panel-Cg5SU6sa.js → side-panel-jJsT7mmk.js} +1 -1
- package/dist/devtools/panel.html +2 -2
- package/dist/manifest.json +2 -2
- package/dist/side-panel/side-panel.html +2 -2
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/site-report-renderer-DRiVCsOz.js","assets/forensic-log-D_OzBe7B.js","assets/crash-reporter-Dc5lvxvY.js","assets/state-PELIq3oj.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
var Jt=Object.defineProperty;var Yt=(t,s,a)=>s in t?Jt(t,s,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[s]=a;var Je=(t,s,a)=>Yt(t,typeof s!="symbol"?s+"":s,a);import{R as pe,i as q,r as x,j as e,M as ie,C as De,l as Xt,o as Me,t as Pe,m as bt,s as vt,k as Re}from"./styles-BQt6R4jA.js";import{_ as Ge}from"./preload-helper-D7HrI6pR.js";import{o as K,r as M,s as O,c as yt,b as Q,d as me}from"./crash-reporter-Dc5lvxvY.js";import{g as Zt,a as V,u as es,b as ts,c as ss,d as as,e as jt,A as W,l as We,s as ns,O as rs,f as is,h as os,i as Ye,j as ls,k as wt,m as cs,n as ds,o as us,p as ps,q as hs}from"./forensic-log-D_OzBe7B.js";import{B as Ee,i as Nt,b as kt,T as St}from"./state-PELIq3oj.js";const Xe=t=>{let s;const a=new Set,n=(p,l)=>{const u=typeof p=="function"?p(s):p;if(!Object.is(u,s)){const h=s;s=l??(typeof u!="object"||u===null)?u:Object.assign({},s,u),a.forEach(f=>f(s,h))}},r=()=>s,c={setState:n,getState:r,getInitialState:()=>d,subscribe:p=>(a.add(p),()=>a.delete(p))},d=s=t(n,r,c);return c},ms=t=>t?Xe(t):Xe,xs=t=>t;function gs(t,s=xs){const a=pe.useSyncExternalStore(t.subscribe,pe.useCallback(()=>s(t.getState()),[t,s]),pe.useCallback(()=>s(t.getInitialState()),[t,s]));return pe.useDebugValue(a),a}const Ze=t=>{const s=ms(t),a=n=>gs(s,n);return Object.assign(a,s),a},fs=t=>t?Ze(t):Ze,m=fs(t=>({status:"idle",progress:null,results:[],delta:null,componentId:null,errorMessage:null,freshThisSession:!1,baselineList:[],tier:"trial",trialDaysRemaining:null,seatsUsed:null,seatsTotal:null,planCode:null,licenseDaysRemaining:null,pastDue:!1,messages:[],unreadMessageCount:0,criticalUnacked:!1,view:"matrix",userMode:null,siteCrawlStatus:"idle",siteCrawlProgress:null,siteCrawlReport:null,siteCrawlError:null,pinnedMatchKey:null,pinnedFound:!0,aiFailure:null,aiProgress:null,acknowledgedKeys:new Set,setStatus:s=>t({status:s}),startNewScan:()=>t({status:"running",results:[],delta:null,errorMessage:null,progress:null,componentId:null,pinnedMatchKey:null,pinnedFound:!0,aiFailure:null,aiProgress:null}),setProgress:s=>t({progress:s}),setResults:(s,a,n)=>t({results:s,delta:a,componentId:n,status:"complete",errorMessage:null,freshThisSession:!0,aiProgress:null,pinnedMatchKey:null,pinnedFound:!0}),setDelta:s=>t({delta:s}),setError:s=>t({errorMessage:s,status:"failed"}),setBaselineList:s=>t({baselineList:s}),clearResults:()=>t({results:[],delta:null,componentId:null,errorMessage:null,progress:null,status:"idle",freshThisSession:!1,pinnedMatchKey:null,pinnedFound:!0,aiFailure:null,aiProgress:null}),setTier:(s,a)=>t({tier:s,trialDaysRemaining:(a==null?void 0:a.trialDaysRemaining)??null,seatsUsed:(a==null?void 0:a.seatsUsed)??null,seatsTotal:(a==null?void 0:a.seatsTotal)??null,planCode:(a==null?void 0:a.planCode)??null,licenseDaysRemaining:(a==null?void 0:a.licenseDaysRemaining)??null,pastDue:(a==null?void 0:a.pastDue)??!1}),setView:s=>t({view:s}),setUserMode:s=>t({userMode:s}),setSiteCrawlStatus:s=>t({siteCrawlStatus:s}),setSiteCrawlProgress:s=>t({siteCrawlProgress:s}),setSiteCrawlReport:s=>t({siteCrawlReport:s}),setSiteCrawlError:s=>t({siteCrawlError:s}),setPinned:(s,a=!0)=>t({pinnedMatchKey:s,pinnedFound:a}),setAiFailure:s=>t({aiFailure:s}),clearAiFailure:()=>t({aiFailure:null}),setAiProgress:s=>t({aiProgress:s}),setAcknowledgedKeys:s=>t({acknowledgedKeys:s}),markAcknowledged:s=>t(a=>({acknowledgedKeys:new Set(a.acknowledgedKeys).add(s)})),markUnacknowledged:s=>t(a=>{const n=new Set(a.acknowledgedKeys);return n.delete(s),{acknowledgedKeys:n}}),setMessages:(s,a,n)=>t({messages:s,unreadMessageCount:a,criticalUnacked:n}),applyMessageAck:(s,a)=>t(n=>{const r=n.messages.map(c=>c.id!==s?c:a==="seen"?{...c,seen:!0}:a==="dismissed"?{...c,dismissed:!0}:a==="acknowledged"?{...c,acknowledged:!0}:a==="clicked"?{...c,clicked:!0}:c).filter(c=>c.severity==="critical"?!c.acknowledged:!c.dismissed),i=r.filter(c=>!c.seen).length,o=r.some(c=>c.severity==="critical"&&!c.acknowledged);return{messages:r,unreadMessageCount:i,criticalUnacked:o}})})),ye="sidePanel:lastAudit";function bs(){const t=[];return t.push(K("AUDIT_PROGRESS_EVENT",s=>{const a=m.getState().status==="running";m.getState().setProgress({current:s.current,total:s.total,currentState:s.currentState}),m.getState().setStatus("running"),a||q.polite(`Audit running, scanning ${s.total} state${s.total===1?"":"s"}.`)})),t.push(K("AUDIT_COMPLETE_EVENT",s=>{var i;m.getState().setResults(s.results,s.delta,s.componentId);const a=s.results.reduce((o,c)=>o+c.violations.length,0),n=((i=s.delta)==null?void 0:i.newCount)??0,r=s.delta?`Audit complete. ${n} new violation${n===1?"":"s"} versus baseline.`:`Audit complete. ${a} violation${a===1?"":"s"} found across ${s.results.length} state${s.results.length===1?"":"s"}.`;q.polite(r),vs({results:s.results,delta:s.delta,componentId:s.componentId})})),t.push(K("AUDIT_FAILED_EVENT",s=>{m.getState().setError(s.error.message)})),t.push(K("AI_AUGMENTATION_PROGRESS_EVENT",s=>{const a=m.getState().aiProgress;m.getState().setAiProgress({currentCheckLabel:s.currentCheckLabel,current:s.current,total:s.total,candidatesDone:s.candidatesDone,candidatesTotal:s.candidatesTotal}),a||q.polite(`AI augmentation running ${s.total} check${s.total===1?"":"s"}.`)})),t.push(K("AI_AUGMENTATION_FAILED_EVENT",s=>{m.getState().setAiFailure({severity:s.severity,reason:s.reason,checksAttempted:s.checksAttempted,checksSucceeded:s.checksSucceeded,checksErrored:s.checksErrored,errorDetails:s.errorDetails})})),t.push(K("SCORECARD_UPDATED_EVENT",()=>{je()})),t.push(K("LICENSE_CHANGED_EVENT",()=>{At()})),t.push(K("SITE_CRAWL_PROGRESS_EVENT",s=>{const a=m.getState();a.setSiteCrawlStatus("running"),a.setSiteCrawlProgress({current:s.current,total:s.total,url:s.url,lastViolations:s.violations}),s.status==="auditing"&&s.current===1&&q.polite(`Site crawl started, scanning up to ${s.total} pages.`)})),t.push(K("SITE_CRAWL_COMPLETE_EVENT",s=>{const a=m.getState();a.setSiteCrawlStatus("complete"),a.setSiteCrawlReport(s.report),a.setSiteCrawlProgress(null),q.polite(`Site crawl complete. Grade ${s.report.siteGrade}, ${s.report.totalUniqueViolations} unique violation${s.report.totalUniqueViolations===1?"":"s"}.`)})),t.push(K("SITE_CRAWL_FAILED_EVENT",s=>{const a=m.getState();a.setSiteCrawlStatus("failed"),a.setSiteCrawlError(s.error.message),a.setSiteCrawlProgress(null),q.assertive(`Site crawl failed: ${s.error.message}`)})),()=>t.forEach(s=>s())}async function vs(t){const s={...t,results:t.results.map(({screenshotDataUrl:a,...n})=>n)};try{await chrome.storage.local.set({[ye]:s})}catch(a){console.warn("[wire-messaging] persistLastAudit failed; results stay in-memory only",a)}}async function ys(){const s=(await chrome.storage.local.get(ye))[ye];s&&m.setState({results:s.results,delta:s.delta,componentId:s.componentId,status:"complete"})}async function js(){await chrome.storage.local.remove(ye)}async function Ve(){m.getState().clearResults(),await js()}async function je(){const t=await M({type:"BASELINE_LIST"});m.getState().setBaselineList(t.items)}async function At(t){const s=await M({type:"TIER_GET",forceRefresh:(t==null?void 0:t.forceRefresh)===!0});m.getState().setTier(s.tier,{trialDaysRemaining:s.trialDaysRemaining,seatsUsed:s.seatsUsed,seatsTotal:s.seatsTotal,planCode:s.planCode,licenseDaysRemaining:s.licenseDaysRemaining,pastDue:s.pastDue}),Ct()}async function Ct(){const{fetchMessages:t}=await Ge(async()=>{const{fetchMessages:n}=await Promise.resolve().then(()=>Ts);return{fetchMessages:n}},void 0),s=m.getState().userMode,a=await t(s);a&&m.getState().setMessages(a.messages,a.unreadCount,a.criticalUnacked)}async function ws(){const s=(await M({type:"SETTINGS_GET",key:"userMode"})).data,a=s==="owner"||s==="dev"?s:null;m.getState().setUserMode(a)}function Ns(){return chrome.runtime.connect({name:"audit-keepalive"})}let we=null;async function ks(){if(we===null)try{const t=await chrome.windows.getCurrent();typeof t.id=="number"&&(we=t.id)}catch{}}function Rt(){if(we===null)return;const t=chrome.sidePanel;!t||typeof t.open!="function"||t.open({windowId:we}).catch(()=>{})}function X(t){Rt(),O(t)}function Ss({onClose:t}){const[s,a]=x.useState(""),[n,r]=x.useState(""),[i,o]=x.useState(!0),[c,d]=x.useState(""),[p,l]=x.useState(!1),[u,h]=x.useState(null);async function f(b){var w;if(b.preventDefault(),!(!s.trim()||!n.trim())){l(!0),h(null);try{const E=await M({type:"SUPPORT_MESSAGE_REQUEST",subject:s.trim(),body:n.trim(),includeContext:i,replyEmail:c.trim()||void 0});E.success?(h({ok:!0,msg:`Sent (ref: ${E.ticketRef??"n/a"})`}),setTimeout(t,1200)):h({ok:!1,msg:((w=E.error)==null?void 0:w.message)??"Failed to send"})}finally{l(!1)}}}return e.jsxs("form",{onSubmit:f,className:"space-y-3 text-sm",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"support-subject",className:"block text-xs font-medium mb-1",children:"Subject"}),e.jsx("input",{id:"support-subject",type:"text",value:s,onChange:b=>a(b.target.value),required:!0,className:"w-full text-xs border border-slate-300 rounded px-2 py-1"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"support-body",className:"block text-xs font-medium mb-1",children:"Message"}),e.jsx("textarea",{id:"support-body",value:n,onChange:b=>r(b.target.value),required:!0,rows:6,className:"w-full text-xs border border-slate-300 rounded px-2 py-1"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"support-reply",className:"block text-xs font-medium mb-1",children:"Reply email (optional)"}),e.jsx("input",{id:"support-reply",type:"email",autoComplete:"email",value:c,onChange:b=>d(b.target.value),className:"w-full text-xs border border-slate-300 rounded px-2 py-1"})]}),e.jsxs("label",{className:"flex items-start gap-2 text-xs",children:[e.jsx("input",{type:"checkbox",checked:i,onChange:b=>o(b.target.checked),className:"mt-0.5"}),e.jsx("span",{className:"text-slate-600",children:"Include extension version, browser platform, and license tier (no URLs, page content, or audit data is sent)."})]}),u&&e.jsx("p",{id:"support-form-result",role:u.ok?"status":"alert",className:`text-xs ${u.ok?"text-green-700":"text-red-700"}`,children:u.msg}),e.jsxs("div",{className:"flex gap-2 justify-end",children:[e.jsx("button",{type:"button",onClick:t,className:"text-xs px-3 py-1 hover:bg-slate-100 rounded",children:"Cancel"}),e.jsx("button",{type:"submit",disabled:p,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded disabled:opacity-50",children:p?"Sending…":"Send"})]})]})}function et({onClick:t,ariaLabel:s,title:a,children:n,className:r}){return e.jsx("button",{onClick:t,"aria-label":s,title:a??s,className:`inline-flex items-center justify-center min-w-[24px] min-h-[24px] text-xs text-slate-500 hover:text-slate-900 ${r??""}`,children:n})}const Ne=yt("messages-client"),As="https://api.wcagcheckr.com",Et="wcagcheckr",Cs=1e4;function Rs(){try{return chrome.runtime.getManifest().version}catch{return"0.0.0"}}async function Tt(t,s){const a=await Zt();if(!a)throw new Error("no_license_token");const n={...(s==null?void 0:s.headers)??{},Authorization:`Bearer ${a}`,"X-Extension-Version":Rs()};return s!=null&&s.userMode&&(n["X-User-Mode"]=s.userMode),fetch(`${As}${t}`,{...s,headers:n,signal:AbortSignal.timeout(Cs)})}async function Es(t){try{const s=await Tt(`/v1/products/${Et}/messages`,{userMode:t??null});return s.ok?await s.json():(Ne.warn("fetchMessages http",s.status),null)}catch(s){return Ne.warn("fetchMessages failed",s),null}}async function ae(t,s){try{const a=await Tt(`/v1/products/${Et}/messages/${t}/ack`,{method:"POST",body:JSON.stringify({action:s}),headers:{"content-type":"application/json"}});return a.ok?!0:(Ne.warn("ackMessage http",a.status,"action",s),!1)}catch(a){return Ne.warn("ackMessage failed",a),!1}}const Ts=Object.freeze(Object.defineProperty({__proto__:null,ackMessage:ae,fetchMessages:Es},Symbol.toStringTag,{value:"Module"})),Is=["http:","https:"];function $s(t){try{const s=new URL(t);return Is.includes(s.protocol)}catch{return!1}}function tt(t){const s=[];let a=0,n=0;for(;a<t.length;){if(t[a]==="["){const i=t.indexOf("]",a+1);if(i!==-1&&t[i+1]==="("){const o=t.indexOf(")",i+2);if(o!==-1){const c=t.slice(a+1,i),d=t.slice(i+2,o);$s(d)?s.push(e.jsx("a",{href:d,target:"_blank",rel:"noopener",className:"text-brand-700 underline",children:c},`l-${n++}`)):s.push(e.jsx(x.Fragment,{children:c},`l-${n++}`)),a=o+1;continue}}}if(t[a]==="*"&&t[a+1]==="*"){const i=t.indexOf("**",a+2);if(i!==-1){s.push(e.jsx("strong",{children:t.slice(a+2,i)},`b-${n++}`)),a=i+2;continue}}if(t[a]==="*"&&t[a+1]!=="*"){const i=t.indexOf("*",a+1);if(i!==-1&&t[i+1]!=="*"){s.push(e.jsx("em",{children:t.slice(a+1,i)},`i-${n++}`)),a=i+1;continue}}let r=a+1;for(;r<t.length&&t[r]!=="*"&&t[r]!=="[";)r++;s.push(e.jsx(x.Fragment,{children:t.slice(a,r)},`t-${n++}`)),a=r}return s}function It({source:t}){const s=t.split(/\r?\n/),a=[];let n=[],r=[],i=0;function o(){if(r.length===0)return;const d=r.join(" ");a.push(e.jsx("p",{className:"leading-snug",children:tt(d)},`p-${i++}`)),r=[]}function c(){n.length!==0&&(a.push(e.jsx("ul",{className:"list-disc pl-5 space-y-0.5",children:n.map((d,p)=>e.jsx("li",{children:tt(d)},p))},`u-${i++}`)),n=[])}for(const d of s){const p=d.trimEnd();if(p===""){o(),c();continue}const l=/^[-*]\s+(.*)$/.exec(p);if(l){o(),n.push(l[1]);continue}c(),r.push(p)}return o(),c(),e.jsx("div",{className:"space-y-1.5",children:a})}const _s={info:"bg-blue-500",promo:"bg-purple-500",warning:"bg-amber-500",critical:"bg-rose-500"},Ls={critical:"bg-rose-50 border-rose-200"};function $t(){const t=m(h=>h.unreadMessageCount),s=m(h=>h.messages),a=m(h=>h.applyMessageAck),[n,r]=x.useState(!1),i=x.useRef(-1),[o,c]=x.useState(!1);x.useEffect(()=>{const h=s.filter(b=>!b.seen);if(h.length===0)return;const f=Math.max(...h.map(b=>b.id));if(f>i.current){i.current=f,c(!0);const b=setTimeout(()=>c(!1),1500);return()=>clearTimeout(b)}},[s]);async function d(){const h=s.filter(f=>!f.seen);if(h.length!==0)for(const f of h)a(f.id,"seen"),ae(f.id,"seen")}function p(){const h=!n;r(h),h&&d()}async function l(h){a(h.id,"dismissed"),await ae(h.id,"dismissed")}async function u(h){h.ctaUrl&&(a(h.id,"clicked"),ae(h.id,"clicked"),chrome.tabs.create({url:h.ctaUrl}).catch(()=>{window.open(h.ctaUrl,"_blank","noopener")}))}return e.jsxs("div",{className:"relative",children:[e.jsxs("button",{type:"button",onClick:p,"aria-label":t>0?`Notifications (${t} unread)`:"Notifications","aria-expanded":n,"aria-haspopup":"dialog",className:`relative grid place-items-center w-7 h-7 rounded text-slate-500 hover:bg-slate-100 hover:text-slate-700 focus-visible:outline focus-visible:outline-2 focus-visible:outline-brand-500 ${o?"animate-bell-pulse":""}`,title:t>0?`${t} new message${t===1?"":"s"}`:"No new messages",children:[e.jsx(Us,{active:t>0}),t>0&&e.jsx("span",{"aria-hidden":"true",className:"absolute top-0.5 right-0.5 w-2 h-2 rounded-full bg-rose-500 ring-2 ring-white"})]}),n&&e.jsx(Ds,{messages:s,onClose:()=>r(!1),onDismiss:l,onCtaClick:u})]})}function Us({active:t}){return e.jsx("svg",{viewBox:"0 0 20 20",width:"16",height:"16","aria-hidden":"true",fill:"currentColor",className:t?"text-rose-500":"",children:e.jsx("path",{d:"M10 2a5 5 0 00-5 5v3l-1.6 2.4a1 1 0 00.84 1.6h11.52a1 1 0 00.84-1.6L15 10V7a5 5 0 00-5-5zm-1.5 13a1.5 1.5 0 003 0h-3z"})})}function Ds({messages:t,onClose:s,onDismiss:a,onCtaClick:n}){const r=x.useRef(null);return x.useEffect(()=>{const i=c=>{r.current&&(r.current.contains(c.target)||s())},o=c=>{c.key==="Escape"&&s()};return document.addEventListener("mousedown",i),document.addEventListener("keydown",o),()=>{document.removeEventListener("mousedown",i),document.removeEventListener("keydown",o)}},[s]),e.jsxs("div",{ref:r,role:"dialog","aria-label":"Notifications",className:"absolute right-0 top-full mt-1 w-80 max-h-[420px] overflow-y-auto bg-white border border-slate-200 rounded shadow-lg z-50 text-xs",children:[e.jsxs("div",{className:"flex items-center justify-between px-3 py-2 border-b border-slate-200",children:[e.jsx("span",{className:"font-medium",children:"Notifications"}),e.jsx("button",{type:"button",onClick:()=>{Ct()},className:"text-[11px] text-brand-700 hover:underline",children:"Refresh"})]}),t.length===0?e.jsx("div",{className:"p-4 text-center text-slate-500 text-[11px]",children:"No messages."}):e.jsx("ul",{className:"divide-y divide-slate-100",children:t.map(i=>e.jsx("li",{className:`p-3 ${i.seen?"":"bg-slate-50"}`,children:e.jsxs("div",{className:"flex gap-2",children:[e.jsx("div",{className:`shrink-0 w-1 self-stretch rounded ${_s[i.severity]}`,"aria-hidden":"true"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("div",{className:"font-medium text-slate-800",children:i.title}),i.dismissible&&i.severity!=="critical"&&e.jsx("button",{type:"button",onClick:()=>a(i),"aria-label":"Dismiss message",className:"text-slate-400 hover:text-slate-700 shrink-0",children:"✕"})]}),e.jsx("div",{className:"mt-1 text-slate-700",children:e.jsx(It,{source:i.bodyMd})}),i.ctaLabel&&i.ctaUrl&&e.jsx("button",{type:"button",onClick:()=>n(i),className:"mt-2 text-[11px] px-2 py-1 bg-brand-500 text-white rounded hover:bg-brand-600",children:i.ctaLabel}),e.jsx("div",{className:"mt-1 text-[10px] text-slate-400",children:new Date(i.createdAt).toLocaleString()})]})]})},i.id))})]})}function _t(){const t=m(i=>i.messages),s=m(i=>i.applyMessageAck),a=t.find(i=>i.severity==="critical"&&!i.acknowledged);if(!a)return null;async function n(){s(a.id,"acknowledged"),await ae(a.id,"acknowledged")}async function r(){a.ctaUrl&&(s(a.id,"clicked"),ae(a.id,"clicked"),chrome.tabs.create({url:a.ctaUrl}).catch(()=>{}))}return e.jsxs("div",{role:"alert",className:`border-y ${Ls.critical} px-3 py-2 text-xs flex items-start gap-2`,children:[e.jsx("span",{"aria-hidden":"true",className:"text-rose-600 text-sm leading-none mt-0.5",children:"⚠"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"font-semibold text-rose-900",children:a.title}),e.jsx("div",{className:"mt-0.5 text-rose-900/90",children:e.jsx(It,{source:a.bodyMd})}),e.jsxs("div",{className:"mt-1.5 flex items-center gap-2",children:[a.ctaLabel&&a.ctaUrl&&e.jsx("button",{type:"button",onClick:r,className:"text-[11px] px-2 py-1 bg-rose-600 text-white rounded hover:bg-rose-700",children:a.ctaLabel}),e.jsx("button",{type:"button",onClick:n,className:"text-[11px] px-2 py-1 border border-rose-300 text-rose-800 rounded hover:bg-rose-100",children:"Acknowledge"})]})]})]})}const le=["matrix","delta","activity","guided","flows","scorecard","crawl","forensic","compliance"];function Fs(t){if(!t)return null;try{return new URL(t).hostname}catch{return t}}function Os(){var u,h;const t=m(f=>f.view),s=m(f=>f.setView),a=m(f=>f.setUserMode),n=m(f=>f.results),r=m(f=>f.status),[i,o]=x.useState(!1),c=((u=n[0])==null?void 0:u.pageUrl)??((h=n[0])==null?void 0:h.scope),d=Fs(c),p=n.length>0&&r!=="running";function l(){a("owner"),O({type:"SETTINGS_SET",key:"userMode",value:"owner"})}return e.jsxs("header",{className:"border-b border-slate-200 bg-white px-3 py-2",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"font-semibold text-sm leading-tight",children:"wcagcheckr"}),e.jsxs("p",{className:"text-[10px] text-slate-500 leading-tight font-mono",children:["v",chrome.runtime.getManifest().version]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{type:"button",onClick:l,title:"Switch to the simplified site-owner view",className:"text-[11px] px-2 py-1 border border-slate-300 rounded text-slate-600 hover:bg-slate-50",children:"Owner mode"}),e.jsx($t,{}),e.jsx(et,{onClick:()=>void O({type:"OPEN_SETTINGS"}),ariaLabel:"Open settings",children:"⚙"}),e.jsx(et,{onClick:()=>o(!0),ariaLabel:"Send support message",children:"?"})]})]}),p&&d&&e.jsxs("div",{className:"flex items-center gap-2 mb-2 px-2 py-1 rounded bg-brand-50 border border-brand-200 text-[11px]",title:c??"",children:[e.jsx("span",{className:"text-slate-500 shrink-0",children:"Audit:"}),e.jsx("span",{className:"font-mono font-medium text-slate-800 truncate flex-1","aria-label":`Showing audit results for ${d}`,children:d}),e.jsx("button",{type:"button",onClick:()=>void Ve(),className:"shrink-0 text-[11px] px-2 py-0.5 rounded border border-slate-300 bg-white text-slate-700 hover:bg-slate-50 hover:border-slate-400",title:"Clear these results so you can run a fresh audit",children:"Clear"})]}),e.jsx(Ms,{view:t,setView:s}),e.jsx(ie,{open:i,onClose:()=>o(!1),title:"Send support message",children:e.jsx(Ss,{onClose:()=>o(!1)})})]})}function Ms({view:t,setView:s}){const a=x.useRef([]);function n(i){var d;const o=(i+le.length)%le.length,c=le[o];c&&(s(c),(d=a.current[o])==null||d.focus())}function r(i,o){switch(i.key){case"ArrowRight":i.preventDefault(),n(o+1);break;case"ArrowLeft":i.preventDefault(),n(o-1);break;case"Home":i.preventDefault(),n(0);break;case"End":i.preventDefault(),n(le.length-1);break}}return e.jsx("nav",{className:"flex flex-wrap gap-1","aria-label":"Audit views",role:"tablist",children:le.map((i,o)=>{const c=t===i;return e.jsx("button",{ref:d=>{a.current[o]=d},role:"tab","aria-selected":c,tabIndex:c?0:-1,onClick:()=>s(i),onKeyDown:d=>r(d,o),className:c?"text-xs px-3 py-1 rounded bg-brand-500 text-white":"text-xs px-3 py-1 rounded text-slate-600 hover:bg-slate-100",children:i[0].toUpperCase()+i.slice(1)},i)})})}function Ps({feature:t,upgradeUrl:s}){const[a,n]=x.useState(!1);return e.jsxs("div",{className:"p-3 bg-amber-50 border border-amber-200 rounded",children:[e.jsxs("p",{className:"text-xs text-amber-900 mb-2",children:[e.jsx("strong",{children:t})," requires a higher tier."]}),e.jsx("button",{type:"button",onClick:()=>n(!0),className:"text-xs text-brand-600 hover:underline font-medium",children:"Upgrade →"}),e.jsx(De,{open:a,onClose:()=>n(!1)})]})}const Gs="https://wcagcheckr.com/upgrade";function Ws(){const[t,s]=x.useState("single-element"),[a,n]=x.useState(!1),[r,i]=x.useState(null),[o,c]=x.useState(null),[d,p]=x.useState(Ee),[l,u]=x.useState(Ee[0].id),h=m(N=>N.status),f=m(N=>N.tier),b=m(N=>N.results.length>0),w=h==="running";x.useEffect(()=>{Promise.all([M({type:"SETTINGS_GET",key:"matrixPresets"}),M({type:"SETTINGS_GET",key:"activePresetId"})]).then(([N,C])=>{const P=Array.isArray(N.data)?N.data:null;p(P&&P.length>0?P:Ee),typeof C.data=="string"&&u(C.data)})},[]);function E(N){const C=d.find(P=>P.id===N);C&&(u(N),O({type:"SETTINGS_SET",key:"activePresetId",value:N}),O({type:"SETTINGS_SET",key:"stateMatrix",value:C.matrix}))}const $=Nt(f,"storybookAutoIterate");x.useEffect(()=>{const N=K("ELEMENT_PICKED_EVENT",(P,T)=>{n(!1);const L=T.frameId;k(L),i({selector:P.selector,frameId:L})}),C=K("PICKER_CANCELLED_EVENT",()=>n(!1));return()=>{N(),C()}},[]);async function g(){const N=await V();N&&(n(!0),await Q(N,{type:"PICKER_ACTIVATE_REQUEST",tabId:N}))}function y(){r&&(k(r.frameId),X({type:"START_AUDIT",mode:"single-element",scope:r.selector,frameId:r.frameId}),m.getState().startNewScan())}function j(){if(!$){c("storybook:auto-iterate");return}k(),X({type:"START_AUDIT",mode:"storybook-all"}),m.getState().startNewScan()}function I(){k(),X({type:"START_AUDIT",mode:"all-frames"}),m.getState().startNewScan()}function R(){k(),X({type:"START_AUDIT",mode:"full-page"}),m.getState().startNewScan()}function v(){O({type:"CANCEL_AUDIT"})}async function k(N){m.getState().setPinned(null);const C=await V();if(C)try{await Q(C,{type:"HIGHLIGHT_CLEAR_REQUEST",tabId:C},N)}catch{}}return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"px-3 py-2 border-b border-slate-200 bg-white space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsxs("select",{"aria-label":"Audit mode",value:t,onChange:N=>s(N.target.value),disabled:w||a,className:"text-xs border border-slate-300 rounded px-2 py-1",children:[e.jsx("option",{value:"single-element",children:"Single element"}),e.jsx("option",{value:"full-page",children:"Full page"}),e.jsx("option",{value:"all-frames",children:"All iframes"}),e.jsxs("option",{value:"storybook-all",children:["All stories (Storybook / Ladle)",$?"":" (paid)"]})]}),e.jsx("select",{"aria-label":"State-matrix preset",value:l,onChange:N=>E(N.target.value),disabled:w||a,title:"Switch the state-matrix preset used for the next audit",className:"text-xs border border-slate-300 rounded px-2 py-1",children:d.map(N=>e.jsx("option",{value:N.id,children:N.name},N.id))}),t==="single-element"?e.jsx(Vs,{picking:a,picked:r,isRunning:w,onPick:g,onRun:y,onClearPick:()=>i(null)}):t==="full-page"?e.jsx("button",{onClick:R,disabled:w,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded hover:bg-brand-600 disabled:opacity-50",children:w?"Auditing…":"Scan page"}):t==="all-frames"?e.jsx("button",{onClick:I,disabled:w,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded hover:bg-brand-600 disabled:opacity-50",children:w?"Auditing…":"Audit all iframes"}):e.jsx("button",{onClick:j,disabled:w,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded hover:bg-brand-600 disabled:opacity-50",children:w?"Auditing…":"Audit all stories"}),w&&e.jsx("button",{onClick:v,className:"text-xs px-3 py-1 border border-slate-300 text-slate-700 rounded hover:bg-slate-100",children:"Stop"}),!w&&b&&e.jsx("button",{type:"button",onClick:()=>void Ve(),className:"text-xs text-slate-500 hover:text-slate-800 hover:underline ml-auto",title:"Clear current results",children:"Clear"})]}),t==="single-element"&&r&&!a&&!w&&e.jsx(Bs,{selector:r.selector,onRepick:g,onClear:()=>i(null)})]}),e.jsx(ie,{open:o!==null,onClose:()=>c(null),title:"Upgrade to continue",children:e.jsx(Ps,{feature:o??"",upgradeUrl:Gs})})]})}function Vs({picking:t,picked:s,isRunning:a,onPick:n,onRun:r,onClearPick:i}){return a?e.jsx("button",{disabled:!0,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded opacity-50",children:"Auditing…"}):t?e.jsx("button",{disabled:!0,className:"text-xs px-3 py-1 bg-brand-400 text-white rounded",children:"Click an element on the page"}):s?e.jsx("button",{onClick:r,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded hover:bg-brand-600",children:"Run audit"}):e.jsx("button",{onClick:n,className:"text-xs px-3 py-1 bg-brand-500 text-white rounded hover:bg-brand-600",children:"Pick element"})}function Bs({selector:t,onRepick:s,onClear:a}){return e.jsxs("div",{className:"text-[11px] text-slate-600 flex items-center gap-2 flex-wrap",children:[e.jsx("span",{children:"Selected:"}),e.jsx("code",{className:"font-mono bg-slate-100 px-1.5 py-0.5 rounded text-slate-700 truncate max-w-[180px]",title:t,children:t}),e.jsx("button",{type:"button",onClick:s,className:"text-brand-600 hover:underline",children:"Re-pick"}),e.jsx("span",{"aria-hidden":"true",className:"text-slate-300",children:"·"}),e.jsx("button",{type:"button",onClick:a,className:"text-slate-500 hover:text-slate-700 hover:underline",children:"Clear"})]})}const Hs={outline:"OUTLINE_HIDE_REQUEST","tab-order":"TAB_ORDER_HIDE_REQUEST","reading-order":"READING_ORDER_HIDE_REQUEST","target-size":"TARGET_SIZE_HIDE_REQUEST"},zs={outline:"OUTLINE_SHOW_REQUEST","tab-order":"TAB_ORDER_SHOW_REQUEST","reading-order":"READING_ORDER_SHOW_REQUEST","target-size":"TARGET_SIZE_SHOW_REQUEST"};function Ks(){const[t,s]=x.useState(null),[a,n]=x.useState(!1),[r,i]=x.useState(null),[o,c]=x.useState("off"),p=m(f=>f.results).flatMap(f=>f.violations);async function l(f){const b=await V();b&&(c(f),f==="off"?await Q(b,{type:"VISION_SIMULATOR_CLEAR",tabId:b}).catch(()=>{}):await Q(b,{type:"VISION_SIMULATOR_APPLY",tabId:b,mode:f}).catch(()=>{}))}async function u(f){const b=await V();if(b){if(t&&await Q(b,{type:Hs[t],tabId:b}).catch(()=>{}),t===f){s(null);return}await Q(b,{type:zs[f],tabId:b}).catch(()=>{}),s(f)}}async function h(){const f=await V();if(f){if(a){await Q(f,{type:"FIX_PREVIEW_HIDE_REQUEST",tabId:f}).catch(()=>{}),n(!1),i(null);return}if(p.length===0){i("Run an audit first.");return}try{const b=await me(f,{type:"FIX_PREVIEW_SHOW_REQUEST",tabId:f,violations:p});n(!0),i(`Previewing ${b.visualFixCount} visual fix${b.visualFixCount===1?"":"es"} + ${b.annotationCount} annotation${b.annotationCount===1?"":"s"}.`)}catch{i("Preview failed.")}}}return e.jsxs("div",{className:"px-3 py-2 border-b border-slate-200 bg-white flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-[11px] uppercase tracking-wide text-slate-500 mr-1",title:"Page overlays — these draw information on the live page. They do NOT change what the audit detects.",children:"Visualizers"}),e.jsx(ce,{label:"Outline",title:"Show heading + landmark structure overlay",on:t==="outline",onClick:()=>u("outline")}),e.jsx(ce,{label:"Tab order",title:"Number focusables in tab sequence. Red = tab order doesn't follow visual layout (focus jumps around). Amber = positive tabindex reordered the DOM sequence.",on:t==="tab-order",onClick:()=>u("tab-order")}),e.jsx(ce,{label:"Reading order",title:"Number content in DOM order (what a screen reader reads). Red = element's DOM position differs from its visual position; badge shows DOM→Visual.",on:t==="reading-order",onClick:()=>u("reading-order")}),e.jsx(ce,{label:"Targets",title:"Show interactive-element dimensions vs WCAG 2.5.8 (24px AA) / 2.5.5 (44px AAA)",on:t==="target-size",onClick:()=>u("target-size")}),e.jsx("span",{className:"w-px h-4 bg-slate-200 mx-1","aria-hidden":"true"}),e.jsx(ce,{label:"Preview fixes ✨",title:"Apply contrast/target-size/focus-ring fixes to the live page + annotate where labels and alt text are missing. Toggle off to revert.",on:a,onClick:h}),e.jsx("span",{className:"w-px h-4 bg-slate-200 mx-1","aria-hidden":"true"}),e.jsxs("label",{className:"text-[11px] text-slate-700 flex items-center gap-1.5",children:[e.jsx("span",{title:"Apply a CSS filter that simulates how the page looks for users with color-vision or low-vision impairments. Visual only — does NOT change what the audit detects.",children:"Vision sim:"}),e.jsxs("select",{"aria-label":"Vision-impairment simulator",value:o,onChange:f=>void l(f.target.value),className:`text-xs border rounded px-1.5 py-0.5 ${o==="off"?"border-slate-300 bg-white text-slate-700":"border-brand-500 bg-brand-50 text-brand-700 font-medium"}`,children:[e.jsx("option",{value:"off",children:"Off"}),e.jsxs("optgroup",{label:"Color blindness",children:[e.jsx("option",{value:"deuteranomaly",children:"Deuteranomaly (green-weak — most common)"}),e.jsx("option",{value:"deuteranopia",children:"Deuteranopia (green-blind)"}),e.jsx("option",{value:"protanomaly",children:"Protanomaly (red-weak)"}),e.jsx("option",{value:"protanopia",children:"Protanopia (red-blind)"}),e.jsx("option",{value:"tritanomaly",children:"Tritanomaly (blue-weak)"}),e.jsx("option",{value:"tritanopia",children:"Tritanopia (blue-blind)"}),e.jsx("option",{value:"achromatomaly",children:"Achromatomaly (partial color blindness)"}),e.jsx("option",{value:"achromatopsia",children:"Achromatopsia (no color)"})]}),e.jsxs("optgroup",{label:"Low vision",children:[e.jsx("option",{value:"cataract",children:"Cataract (blur)"}),e.jsx("option",{value:"low-contrast",children:"Low contrast sensitivity"}),e.jsx("option",{value:"glaucoma",children:"Glaucoma (tunnel vision)"}),e.jsx("option",{value:"macular",children:"Macular degeneration (central loss)"})]})]})]}),r&&e.jsx("span",{className:"text-[11px] text-slate-500 basis-full",children:r})]})}function ce({label:t,title:s,on:a,onClick:n}){return e.jsx("button",{type:"button",title:s,"aria-pressed":a,onClick:n,className:`text-xs px-2 py-1 rounded border transition-colors ${a?"bg-brand-500 text-white border-brand-500 hover:bg-brand-600":"bg-white text-slate-700 border-slate-300 hover:bg-slate-50"}`,children:t})}function qs(t){if(!t)return"";const s=[t.pseudoState];return t.theme!=="light"&&s.push(t.theme),t.direction!=="ltr"&&s.push(t.direction),s.join(" · ")}function Qs(){const t=m(p=>p.status),s=m(p=>p.progress),a=m(p=>p.aiProgress);if(t!=="running"||!s)return null;const n=a!=null,r=!n&&s.current>=s.total,i=n?a.current/a.total*100:s.current/s.total*100,o=n?a.current:s.current,c=n?a.total:s.total,d=n?`AI augmentation: ${a.current} of ${a.total} checks. ${a.currentCheckLabel}`:r?"Running deep analyzers: reading order, tab order, typography, custom properties, AI candidates.":`Audit progress: ${s.current} of ${s.total} states`;return e.jsxs("div",{className:"px-3 py-2 bg-slate-100 border-b border-slate-200",children:[e.jsxs("div",{className:"flex justify-between items-center gap-2 text-xs text-slate-600 mb-1",children:[e.jsx("span",{children:n?e.jsxs(e.Fragment,{children:["AI augmentation… ",a.current,"/",a.total]}):r?e.jsx(e.Fragment,{children:"Running deep analyzers…"}):e.jsxs(e.Fragment,{children:["Auditing… ",s.current,"/",s.total]})}),e.jsx("span",{className:"text-slate-500 truncate flex-1",children:n?a.candidatesTotal&&a.candidatesTotal>0?`${a.currentCheckLabel} (${a.candidatesDone??0}/${a.candidatesTotal})`:a.currentCheckLabel:r?"reading order · tab order · typography · CSS vars · AI candidates":qs(s.currentState)}),e.jsx("button",{type:"button",onClick:()=>void O({type:"CANCEL_AUDIT"}),className:"text-[11px] px-2 py-0.5 border border-slate-400 bg-white text-slate-700 rounded hover:bg-slate-200 shrink-0",children:"Stop"})]}),e.jsx("div",{className:`h-1 rounded-full overflow-hidden ${n?"bg-violet-100":"bg-slate-200"}`,role:"progressbar","aria-valuenow":o,"aria-valuemin":0,"aria-valuemax":c,"aria-label":d,children:e.jsx("div",{className:`h-full transition-all ${n?"bg-violet-500":"bg-brand-500"}`,style:{width:`${i}%`}})})]})}const de={"ada-iii":{id:"ada-iii",name:"ADA Title III",region:"US",blurb:"US civil-rights law; courts treat WCAG 2.1 AA as the de facto digital standard."},508:{id:"508",name:"Section 508",region:"US federal",blurb:"US federal procurement requirement; references WCAG 2.0 AA via 36 CFR Part 1194."},eaa:{id:"eaa",name:"EAA",region:"EU",blurb:"European Accessibility Act, in force 2025-06-28; references EN 301 549 → WCAG 2.1 AA."},"en-301-549":{id:"en-301-549",name:"EN 301 549",region:"EU",blurb:"European harmonized accessibility standard, baseline WCAG 2.1 AA."},aoda:{id:"aoda",name:"AODA",region:"Ontario",blurb:"Accessibility for Ontarians with Disabilities Act; WCAG 2.0 AA required since 2021."}};function Js(t){return/^wcag\d/.test(t.wcagCriterion)?[de["ada-iii"],de[508],de.eaa,de["en-301-549"],de.aoda]:[]}const Ys={minor:"bg-blue-100 text-blue-700",moderate:"bg-yellow-100 text-yellow-700",serious:"bg-orange-100 text-orange-700",critical:"bg-red-100 text-red-700"};function ke({violation:t,alreadyAcknowledged:s}){const a=m(g=>g.pinnedMatchKey),n=m(g=>g.pinnedFound),r=m(g=>g.setPinned),i=m(g=>{var y;return(y=g.results[0])==null?void 0:y.frameId}),o=m(g=>{var y;return(y=g.results[0])==null?void 0:y.scope}),c=m(g=>g.results),d=m(g=>g.acknowledgedKeys.has(t.matchKey)),p=m(g=>g.markAcknowledged),l=m(g=>g.markUnacknowledged),u=s||d,h=a===t.matchKey,f=h&&!n;async function b(g){try{return(await me(g,{type:"HIGHLIGHT_SHOW_REQUEST",tabId:g,selector:t.target.selector},i)).found}catch{return!0}}async function w(){const g=await V();if(!g)return;if(h){r(null);try{await Q(g,{type:"HIGHLIGHT_CLEAR_REQUEST",tabId:g},i)}catch{}return}const y=await b(g);r(t.matchKey,y)}function E(g){g.stopPropagation(),t.currentState.breakpoint.width<=640&&Rt(),(async()=>{const y=await V();if(!y)return;try{await M({type:"STATE_DRIVE_REQUEST",tabId:y,state:t.currentState,scope:o,frameId:i})}catch{}const j=await b(y);r(t.matchKey,j)})()}async function $(g){g.stopPropagation();const y=await V();if(!y)return;try{await M({type:"STATE_DRIVE_REQUEST",tabId:y,state:ta(),scope:o,frameId:i})}catch{O({type:"STATE_RESET_REQUEST",tabId:y})}const j=await b(y);r(t.matchKey,j)}return e.jsxs("button",{type:"button",onClick:w,"aria-pressed":h,className:`w-full text-left border rounded p-2 bg-white block transition-shadow
|
|
3
|
-
${h?"border-rose-400 ring-2 ring-rose-300":"border-slate-200 hover:border-slate-300"}`,children:[e.jsxs("div",{className:"flex items-start justify-between mb-1 gap-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-medium text-xs truncate",children:t.ruleId}),e.jsxs("div",{className:"text-xs text-slate-500",children:[t.wcagCriterion," · ",t.wcagLevel]})]}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[t.flakyAcrossRuns&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-amber-100 text-amber-700",title:"Did not appear in every audit run — likely a transient environment artifact",children:"flaky"}),e.jsx("span",{className:`text-[10px] px-1.5 py-0.5 rounded ${Ys[t.impact]}`,children:t.impact})]})]}),e.jsx("p",{className:"text-xs text-slate-700 mb-2",children:t.description}),e.jsx("code",{className:"text-[11px] bg-slate-50 p-1.5 rounded block text-slate-600 font-mono whitespace-pre-wrap break-all",children:t.target.outerHTML}),e.jsx(sa,{violation:t}),e.jsx(ra,{violation:t}),e.jsx(na,{violation:t}),e.jsx(aa,{text:t.target.failureSummary}),e.jsx(ia,{ruleId:t.ruleId}),h&&e.jsxs("div",{className:"text-[11px] text-slate-600 mt-2 flex flex-wrap items-center gap-x-2 gap-y-1",children:[e.jsxs("span",{children:["State: ",Xs(t.currentState)]}),e.jsx("span",{"aria-hidden":"true",children:"·"}),e.jsx("a",{role:"button",tabIndex:0,onClick:E,onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),E(g))},className:"text-brand-600 hover:underline cursor-pointer",children:"Load state"}),e.jsx("span",{"aria-hidden":"true",children:"·"}),e.jsx("a",{role:"button",tabIndex:0,onClick:$,onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),$(g))},className:"text-brand-600 hover:underline cursor-pointer",children:"Load default"}),f&&e.jsx("span",{className:"text-amber-700 basis-full",children:"Couldn't find this element on the page. The story may have re-rendered or unmounted."})]}),t.needsReview&&e.jsx("div",{className:"mt-2 flex items-center gap-2 text-xs",children:u?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"inline-flex items-center gap-1 text-[10px] px-1.5 py-0.5 rounded bg-emerald-100 text-emerald-800 font-semibold",children:"✓ Acknowledged"}),e.jsx("span",{role:"button",tabIndex:0,onClick:g=>{g.stopPropagation(),l(t.matchKey),ea(t,c)},onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),g.target.click())},className:"text-slate-600 hover:text-slate-900 hover:underline cursor-pointer",children:"Un-acknowledge"})]}):e.jsx("span",{role:"button",tabIndex:0,onClick:g=>{g.stopPropagation(),p(t.matchKey),Zs(t,c)},onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),g.target.click())},title:"Mark this finding as 'reviewed, not an issue.' It won't appear in future audits unless the content changes.",className:"px-2 py-0.5 border border-slate-300 bg-white text-slate-700 rounded hover:bg-slate-50 cursor-pointer",children:"Acknowledge as not an issue"})}),t.helpUrl&&e.jsx("a",{href:t.helpUrl,target:"_blank",rel:"noreferrer",onClick:g=>g.stopPropagation(),className:"text-xs text-brand-600 hover:underline mt-2 inline-block",children:"Learn more →"})]})}function Xs(t){const s=[];return s.push(t.pseudoState==="default"?"default":`:${t.pseudoState}`),t.theme!=="light"&&s.push(t.theme),t.direction!=="ltr"&&s.push(t.direction),t.breakpoint.id!=="desktop"&&s.push(t.breakpoint.id),t.ariaVariation&&s.push(t.ariaVariation.id),s.join(" · ")}async function Zs(t,s){await ts({componentId:t.componentId,matchKey:t.matchKey,ruleId:t.ruleId}),await Lt(t.componentId,s)}async function ea(t,s){await es(t.componentId,t.matchKey),await Lt(t.componentId,s)}async function Lt(t,s){const a=s.flatMap(n=>n.violations);try{const n=await M({type:"BASELINE_COMPARE",componentId:t,currentViolations:a});m.getState().setDelta(n.delta)}catch{}}function ta(){const t=kt.breakpointPresets;return{pseudoState:"default",ariaVariation:null,theme:"light",direction:"ltr",breakpoint:t.find(a=>a.id==="desktop")??t[0]}}function Ut(t){if(t.ruleId!=="color-contrast"&&t.ruleId!=="color-contrast-enhanced")return null;const s=t.target.failureSummary||"",a=/contrast of (\d+(?:\.\d+)?)/i.exec(s),n=/Expected contrast ratio of (\d+(?:\.\d+)?):1/i.exec(s),r=/foreground color:\s*(#[0-9a-fA-F]+)/i.exec(s),i=/background color:\s*(#[0-9a-fA-F]+)/i.exec(s);return!a||!n?null:{ratio:parseFloat(a[1]),required:parseFloat(n[1]),fg:(r==null?void 0:r[1])??"#000000",bg:(i==null?void 0:i[1])??"#ffffff"}}function sa({violation:t}){const s=Ut(t);if(!s)return null;const a=s.ratio>=s.required;return e.jsxs("div",{className:"mt-2 flex items-center gap-2 text-[11px]",children:[e.jsx("div",{className:"flex items-center justify-center w-9 h-6 rounded border border-slate-300",style:{background:s.bg,color:s.fg},title:`fg ${s.fg} on bg ${s.bg}`,children:"Aa"}),e.jsxs("span",{className:a?"text-green-700":"text-rose-700 font-medium",children:[s.ratio.toFixed(2)," : 1"]}),e.jsxs("span",{className:"text-slate-500",children:["needs ",s.required.toFixed(1)," : 1"]})]})}function aa({text:t}){return t?e.jsxs("details",{className:"mt-2",children:[e.jsx("summary",{className:"text-[11px] text-slate-500 cursor-pointer hover:text-slate-700",children:"Show failure detail"}),e.jsx("pre",{className:"text-[11px] text-slate-600 whitespace-pre-wrap mt-1 bg-slate-50 p-1.5 rounded",children:t})]}):null}function na({violation:t}){const s=Js(t);return s.length===0?null:e.jsx("div",{className:"mt-2 flex flex-wrap gap-1",children:s.map(a=>e.jsx("span",{title:`${a.region} — ${a.blurb}`,className:"text-[10px] px-1.5 py-0.5 rounded bg-slate-100 text-slate-600 border border-slate-200",children:a.name},a.id))})}function ra({violation:t}){const s=Ut(t),[a,n]=x.useState({kind:"idle"});if(!s)return null;async function r(){n({kind:"loading"});try{const i=t.ruleId==="color-contrast-enhanced"?"AAA":"AA",o=await M({type:"AI_COLOR_SUGGEST_REQUEST",inputs:[{matchKey:t.matchKey,foreground:s.fg,background:s.bg,fontSize:16,fontWeight:400,targetLevel:i}]}),c=o.results.find(d=>d.matchKey===t.matchKey);n(c?{kind:"ready",suggestion:c}:{kind:"empty",reason:o.unavailableReason??"AI returned no suggestions for this contrast pair."})}catch(i){n({kind:"empty",reason:i instanceof Error?i.message:String(i)})}}return e.jsxs("div",{className:"mt-2",children:[a.kind==="idle"&&e.jsx("button",{type:"button",onClick:i=>{i.stopPropagation(),r()},className:"text-[11px] px-2 py-1 rounded border border-brand-300 bg-brand-50 text-brand-700 hover:bg-brand-100 font-medium",title:"Ask the configured AI for in-palette color replacements that pass WCAG contrast.",children:"✨ AI fix suggestions"}),a.kind==="loading"&&e.jsx("span",{className:"text-[11px] text-slate-500",children:"Asking AI for color suggestions…"}),a.kind==="empty"&&e.jsx("p",{className:"text-[11px] text-slate-500 bg-slate-50 border border-slate-200 rounded p-2",children:a.reason}),a.kind==="ready"&&e.jsxs("div",{className:"border border-brand-200 rounded bg-brand-50 p-2 space-y-2",children:[e.jsxs("p",{className:"text-[11px] text-brand-900 font-medium",children:["AI suggestions (",a.suggestion.suggestions.length,")"]}),e.jsx("ul",{className:"space-y-1.5",children:a.suggestion.suggestions.map((i,o)=>e.jsxs("li",{className:"flex items-start gap-2 text-[11px]",children:[e.jsx("div",{className:"flex items-center justify-center w-9 h-6 rounded border border-slate-300 shrink-0",style:{background:i.background,color:i.foreground},title:`fg ${i.foreground} on bg ${i.background}`,children:"Aa"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-1.5",children:[e.jsx("code",{className:"font-mono",children:i.foreground}),e.jsx("span",{className:"text-slate-500",children:"on"}),e.jsx("code",{className:"font-mono",children:i.background}),e.jsxs("span",{className:"text-emerald-700 font-medium",children:[i.contrast.toFixed(2)," : 1"]})]}),i.rationale&&e.jsx("p",{className:"text-slate-600 mt-0.5",children:i.rationale})]})]},o))}),a.suggestion.reasoning&&e.jsx("p",{className:"text-[10px] text-slate-500 italic",children:a.suggestion.reasoning})]})]})}function ia({ruleId:t}){const s=ss(t);return s?e.jsxs("details",{className:"mt-2",children:[e.jsx("summary",{className:"text-[11px] text-emerald-700 cursor-pointer hover:text-emerald-900 font-medium",children:"How to fix"}),e.jsxs("div",{className:"mt-1 bg-emerald-50 border border-emerald-200 rounded p-2 space-y-2",children:[e.jsx("p",{className:"text-[11px] text-slate-700 leading-relaxed",children:s.summary}),s.snippet&&e.jsx("pre",{className:"text-[11px] text-slate-700 bg-white p-1.5 rounded border border-emerald-100 overflow-x-auto",children:e.jsx("code",{children:s.snippet})})]})]}):null}const oa=[{id:"contrast",label:"Color & contrast",axeRules:["color-contrast","color-contrast-enhanced","link-in-text-block"],igtWorkflowIds:["visual-indicators"]},{id:"alt-text",label:"Alt text",axeRules:["image-alt","input-image-alt","object-alt","svg-img-alt","area-alt","role-img-alt"],igtWorkflowIds:[]},{id:"forms",label:"Forms",axeRules:["label","select-name","aria-input-field-name","aria-toggle-field-name","form-field-multiple-labels","label-content-name-mismatch","autocomplete-valid","label-title-only"],igtWorkflowIds:["forms"]},{id:"keyboard",label:"Keyboard",axeRules:["nested-interactive","tabindex","frame-focusable-content","no-focusable-content","focus-order-semantics"],igtWorkflowIds:["keyboard","focus-management"]},{id:"tab-order",label:"Tab order",axeRules:[],igtWorkflowIds:[],verifiedByWorkflowIds:["keyboard"],heuristic:"tab-order"},{id:"screen-reader",label:"Screen reader / ARIA",axeRules:["aria-allowed-attr","aria-required-attr","aria-required-children","aria-required-parent","aria-roles","aria-valid-attr-value","aria-valid-attr","aria-hidden-body","aria-hidden-focus","button-name","input-button-name","link-name","frame-title","presentation-role-conflict","aria-allowed-role","aria-prohibited-attr","aria-text","aria-deprecated-role","aria-conditional-attr","aria-braille-equivalent","empty-button","empty-heading","empty-link"],igtWorkflowIds:["screen-reader"]},{id:"reading-order",label:"Reading order",axeRules:[],igtWorkflowIds:[],verifiedByWorkflowIds:["page-structure"],heuristic:"reading-order"},{id:"page-structure",label:"Page structure",axeRules:["heading-order","page-has-heading-one","landmark-one-main","landmark-no-duplicate-banner","landmark-no-duplicate-contentinfo","landmark-no-duplicate-main","region","bypass","empty-table-header","landmark-banner-is-top-level","landmark-complementary-is-top-level","landmark-contentinfo-is-top-level","landmark-main-is-top-level","landmark-unique"],igtWorkflowIds:["page-structure"]},{id:"other-manual",label:"Other manual checks",axeRules:[],igtWorkflowIds:["reflow","hover-focus-content","pointer","time-based","error-prevention","consistency"]}];function la(t){const s=oa.map(i=>ca(i,t)),a=s.reduce((i,o)=>i+da(o.letter),0)/Math.max(1,s.length),n=ua(Math.round(a)),r=s.filter(i=>i.letter==="D"||i.letter==="F");return{overallLetter:n,subGrades:s,warningAreas:r,isLawsuitRisk:r.length>0}}function ca(t,s){const a=new Set(t.axeRules),n=s.violations.filter(v=>a.has(v.ruleId)),r=s.manualRuns.filter(v=>t.igtWorkflowIds.includes(v.workflowId)),i=t.igtWorkflowIds.map(v=>s.workflows.find(k=>k.id===v)).filter(v=>v!=null);let o=i.length>0;for(const v of i){const k=r.find(C=>C.workflowId===v.id);if((k?Object.keys(k.steps).length:0)!==v.steps.length){o=!1;break}}const c=r.some(v=>Object.keys(v.steps).length>0),d=t.verifiedByWorkflowIds??[],p=s.manualRuns.filter(v=>d.includes(v.workflowId)),l=d.map(v=>s.workflows.find(k=>k.id===v)).filter(v=>v!=null);let u=d.length>0&&l.length===d.length;for(const v of l){const k=p.find(C=>C.workflowId===v.id);if((k?Object.keys(k.steps).length:0)!==v.steps.length){u=!1;break}}let h=null;if(u)for(const v of p)v.completedAt&&(h===null||v.completedAt>h)&&(h=v.completedAt);const f=t.heuristic==="tab-order"?s.heuristicCounts.tabOrder??0:t.heuristic==="reading-order"?s.heuristicCounts.readingOrder??0:0,b=d[0]??t.igtWorkflowIds[0]??null;if(u&&d.length>0)return{id:t.id,label:t.label,letter:"A",untested:!1,needsIgt:!1,igtCompleted:!0,verifiedByIgt:!0,verifiedAt:h,suppressedHeuristicCount:f,primaryVerifierWorkflowId:b,counts:{critical:0,serious:0,moderate:0,minor:0},caps:{cappedAtC:!1,cappedAtB:!1}};const w=t.axeRules.length>0||t.heuristic!=null,E=t.igtWorkflowIds.length>0;let $=!1;if(w&&E?$=!s.auditRan&&!c:w?$=!s.auditRan:E?$=!c:$=!0,$)return{id:t.id,label:t.label,letter:"F",untested:!0,needsIgt:E||d.length>0,igtCompleted:!1,verifiedByIgt:!1,verifiedAt:null,suppressedHeuristicCount:0,primaryVerifierWorkflowId:b,counts:{critical:0,serious:0,moderate:0,minor:0},caps:{cappedAtC:!1,cappedAtB:!1}};const g={critical:0,serious:0,moderate:0,minor:0};for(const v of as(n))g[v.impact]++;g.serious+=f;for(const v of r){const k=i.find(N=>N.id===v.workflowId);if(k)for(const N of k.steps){const C=v.steps[N.id];(C==null?void 0:C.status)==="fail"&&(N.severity==="required"?g.serious++:g.moderate++)}}const y=g.critical>0,j=g.serious>0;let I;g.critical>=5?I="F":g.critical>=1?I="D":g.serious>=1?I="C":g.moderate>=1?I="B":I="A";const R=E&&!o||d.length>0&&!u;return{id:t.id,label:t.label,letter:I,untested:!1,needsIgt:R,igtCompleted:o,verifiedByIgt:!1,verifiedAt:null,suppressedHeuristicCount:0,primaryVerifierWorkflowId:b,counts:g,caps:{cappedAtC:y,cappedAtB:j}}}function da(t){return t==="A"?4:t==="B"?3:t==="C"?2:t==="D"?1:0}function ua(t){return t>=4?"A":t>=3?"B":t>=2?"C":t>=1?"D":"F"}const pa={A:"bg-emerald-500",B:"bg-lime-500",C:"bg-yellow-500",D:"bg-orange-500",F:"bg-rose-600"},ha={A:"bg-emerald-500 text-white",B:"bg-lime-500 text-white",C:"bg-yellow-500 text-slate-900",D:"bg-orange-500 text-white",F:"bg-rose-600 text-white"};function ma({violations:t,componentId:s}){var $,g,y,j,I;const[a,n]=x.useState([]),r=m(R=>R.status),i=m(R=>R.progress),o=m(R=>R.freshThisSession),c=m(R=>R.results),d=($=c[0])==null?void 0:$.startedAt;if(x.useEffect(()=>{if(!s){n([]);return}let R=!1;return chrome.storage.local.get("igtRuns").then(v=>{if(R)return;const N=((v==null?void 0:v.igtRuns)??{})[s]??{};n(Object.values(N))}),()=>{R=!0}},[s]),r==="running")return e.jsx(ya,{current:i==null?void 0:i.current,total:i==null?void 0:i.total});const p=la({violations:t,auditRan:c.length>0,manualRuns:a,workflows:W,heuristicCounts:{tabOrder:((y=(g=c[0])==null?void 0:g.tabOrderIssues)==null?void 0:y.length)??0,readingOrder:((I=(j=c[0])==null?void 0:j.readingOrderIssues)==null?void 0:I.length)??0}}),l=m(R=>R.acknowledgedKeys),u=c.length>0?jt(c,{runs:a,workflows:W},"2.1","AA",l):void 0,h=u?!u.canClaimConformance:!1,f=h&&p.overallLetter==="A"?"B":p.overallLetter,b=(()=>{if(!h||p.overallLetter!=="A"||!u)return null;const R=u.untestedCriteria.length,v=u.inconclusiveCriteria.length,k=[];return R>0&&k.push(`${R} untested`),v>0&&k.push(`${v} inconclusive`),`Capped at B — ${k.join(" + ")} WCAG ${u.targetLevel} ${R+v===1?"criterion":"criteria"}. ${v>0?"Resolve axe-incomplete + IGT-skip items to claim conformance.":"Open Guided Tests to evaluate them."}`})();let w=0;for(const R of W){const v=a.find(N=>N.workflowId===R.id);if(!v)continue;R.steps.every(N=>{const C=v.steps[N.id];return(C==null?void 0:C.status)==="pass"||(C==null?void 0:C.status)==="fail"||(C==null?void 0:C.status)==="skip"||(C==null?void 0:C.status)==="not-applicable"})&&w++}const E=t.length;return e.jsxs("div",{className:"border border-slate-200 rounded-lg bg-white overflow-hidden",children:[!o&&d&&e.jsx(ja,{scannedAt:d}),e.jsxs("div",{className:"flex",children:[e.jsx("div",{className:`flex items-center justify-center w-24 ${pa[f]} text-white shrink-0`,children:e.jsx("span",{className:"text-5xl font-bold leading-none",children:f})}),e.jsxs("div",{className:"flex-1 p-3 space-y-1",children:[e.jsx("p",{className:"text-xs font-semibold text-slate-900",children:"Overall grade"}),e.jsxs("p",{className:"text-[11px] text-slate-600 leading-snug",children:["Mean of ",p.subGrades.length," verification areas below. Untested areas count as F until verified."]}),b&&e.jsx("p",{className:"text-[11px] text-amber-800 leading-snug mt-1 bg-amber-50 border border-amber-200 rounded px-2 py-1",children:b})]})]}),p.isLawsuitRisk&&e.jsx(ga,{areas:p.warningAreas}),e.jsx(fa,{grades:p.subGrades}),u&&e.jsx(xa,{coverage:u}),e.jsx(va,{violationsRemaining:E,manualCompleted:w,manualTotal:W.length}),w>0||c.length>0?e.jsxs("div",{className:"border-t border-slate-200 px-3 py-2 bg-slate-50",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wide text-slate-500 mb-1.5",children:"Manual coverage (Guided Tests)"}),e.jsxs("div",{className:"text-[11px] text-slate-700 mb-1.5",children:[e.jsx("strong",{children:w})," of ",e.jsx("strong",{children:W.length})," workflows complete"]}),e.jsx("div",{className:"flex h-1 bg-slate-200 rounded-full overflow-hidden",children:e.jsx("div",{className:"bg-emerald-500",style:{width:`${w/W.length*100}%`}})})]}):null]})}function xa({coverage:t}){const[s,a]=x.useState(!1),n=t.totalApplicable===0?0:Math.round(t.evaluated/t.totalApplicable*100),r=t.canClaimConformance,i=[];return t.untestedCriteria.length>0&&i.push({kind:"untested",ids:t.untestedCriteria}),t.inconclusiveCriteria.length>0&&i.push({kind:"inconclusive",ids:t.inconclusiveCriteria}),e.jsxs("div",{className:`border-t ${r?"border-emerald-200 bg-emerald-50":"border-amber-200 bg-amber-50"} px-3 py-2 text-[11px] leading-snug`,children:[e.jsxs("div",{className:`flex items-center justify-between gap-2 ${r?"text-emerald-900":"text-amber-900"}`,children:[e.jsxs("div",{children:[e.jsxs("span",{className:"font-semibold",children:["WCAG ",t.targetVersion," ",t.targetLevel," coverage:"," ",t.evaluated," of ",t.totalApplicable," criteria evaluated (",n,"%)"]}),r&&e.jsxs("p",{className:"text-[11px] mt-0.5",children:["Every applicable criterion has been evaluated and either passes or is N/A. This audit can be presented as a conformance-claim for ",t.targetVersion," ",t.targetLevel," for the audited URL(s)."]}),!r&&t.untestedCriteria.length>0&&e.jsxs("p",{className:"text-[11px] mt-0.5",children:[e.jsxs("strong",{children:[t.untestedCriteria.length," untested"]})," ",t.untestedCriteria.length===1?"criterion":"criteria"," — mark Pass / Fail / N/A in Guided Tests below."]}),!r&&t.inconclusiveCriteria.length>0&&e.jsxs("p",{className:"text-[11px] mt-0.5",children:[e.jsxs("strong",{children:[t.inconclusiveCriteria.length," inconclusive"]})," ",t.inconclusiveCriteria.length===1?"criterion":"criteria"," — axe couldn't fully determine OR an IGT step was skipped. Resolve before claiming conformance."]})]}),!r&&i.length>0&&e.jsx("button",{type:"button",onClick:()=>a(o=>!o),className:"text-[11px] underline shrink-0 self-start",children:s?"hide":"show list"})]}),s&&!r&&e.jsx("div",{className:"mt-1.5 space-y-1.5",children:i.map(o=>e.jsxs("div",{children:[e.jsxs("div",{className:"text-[10.5px] font-semibold uppercase tracking-wide text-amber-900",children:[o.kind==="untested"?"Untested":"Inconclusive"," (",o.ids.length,")"]}),e.jsx("ul",{className:"text-[10.5px] text-amber-900 space-y-1",children:o.ids.map(c=>{var p;const d=o.kind==="inconclusive"?(p=t.inconclusiveReasons)==null?void 0:p[c]:void 0;return e.jsxs("li",{className:"leading-snug",children:[e.jsxs("code",{className:"font-mono",children:["· ",c]}),d&&d.length>0&&e.jsx("ul",{className:"ml-3 mt-0.5 space-y-0.5",children:d.map((l,u)=>e.jsxs("li",{className:"text-[10px] text-amber-800",children:[l.source==="axe-incomplete"&&e.jsxs(e.Fragment,{children:["axe rule ",e.jsx("code",{className:"font-mono",children:l.ruleOrStepId})," — "]}),l.source==="igt-skip"&&e.jsxs(e.Fragment,{children:["Guided Test step ",e.jsx("code",{className:"font-mono",children:l.ruleOrStepId})," skipped — "]}),l.source==="ai-uncertain"&&e.jsxs(e.Fragment,{children:["AI rule ",e.jsx("code",{className:"font-mono",children:l.ruleOrStepId})," — "]}),l.resolutionHint]},u))})]},c)})})]},o.kind))})]})}function ga({areas:t}){const s=t.map(a=>a.label);return e.jsxs("div",{className:"border-t border-rose-200 bg-rose-50 px-3 py-2 text-[11px] text-rose-900 leading-snug",children:[e.jsx("p",{className:"font-semibold mb-0.5",children:"⚠ Not lawsuit-safe"}),e.jsx("p",{children:s.length===1?e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:s[0]})," scored ",t[0].letter,". Even a high overall grade doesn't help if one area is failing — demand-letter mills target the weakest link."]}):e.jsxs(e.Fragment,{children:[s.length," areas are at lawsuit-risk:"," ",s.map((a,n)=>e.jsxs("span",{children:[e.jsx("strong",{children:a}),n<s.length-1?", ":""]},a)),". Fix these before relying on the overall grade."]})})]})}function fa({grades:t}){const s=m(a=>a.setView);return e.jsxs("div",{className:"border-t border-slate-200 px-3 py-2",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wide text-slate-500 mb-2",children:"Verification areas"}),e.jsx("ul",{className:"grid grid-cols-1 gap-1.5",children:t.map(a=>e.jsxs("li",{className:"flex items-center gap-2 text-[11px]",children:[e.jsx("span",{className:`w-6 h-6 inline-flex items-center justify-center rounded text-xs font-bold ${ha[a.letter]}`,"aria-label":`Grade ${a.letter}`,children:a.letter}),e.jsx("span",{className:"font-medium text-slate-800 flex-1 min-w-0",children:a.label}),e.jsx(ba,{grade:a,onOpenGuided:()=>s("guided")})]},a.id))})]})}function ba({grade:t,onOpenGuided:s}){const a=n=>{if(!n)return"";const r=W.find(i=>i.id===n);return(r==null?void 0:r.name)??n};if(t.untested)return e.jsxs("span",{className:"text-slate-500 text-[10px] italic",children:["not graded —"," ",t.primaryVerifierWorkflowId?e.jsxs("button",{type:"button",onClick:s,className:"text-brand-600 hover:underline not-italic",children:["run ",a(t.primaryVerifierWorkflowId)," →"]}):"no data yet"]});if(t.verifiedByIgt){const n=t.verifiedAt?Dt(Date.now()-new Date(t.verifiedAt).getTime()):null;return e.jsxs("span",{className:"text-emerald-700 text-[10px]",title:t.suppressedHeuristicCount>0?`Heuristic flagged ${t.suppressedHeuristicCount} issue${t.suppressedHeuristicCount===1?"":"s"}, but you verified this area in Guided Tests — those are treated as noise unless you re-verify.`:"Verified via Guided Tests",children:["✓ verified",n?` ${n} ago`:""]})}return t.needsIgt?e.jsxs("button",{type:"button",onClick:s,className:"text-amber-700 hover:underline text-[10px]",title:"Verify this area by running the relevant Guided Tests workflow",children:["verify with ",a(t.primaryVerifierWorkflowId)," →"]}):t.counts.critical>0||t.counts.serious>0?e.jsxs("span",{className:"text-slate-500 text-[10px]",children:[t.counts.critical>0&&e.jsxs("span",{className:"text-rose-700",children:[t.counts.critical," critical"]}),t.counts.critical>0&&t.counts.serious>0&&" · ",t.counts.serious>0&&e.jsxs("span",{className:"text-orange-700",children:[t.counts.serious," serious"]})]}):e.jsx("span",{className:"text-emerald-700 text-[10px]",children:"clean"})}function va({violationsRemaining:t,manualCompleted:s,manualTotal:a}){const n=m(o=>o.setView),r=[{done:t===0,label:t===0?"Automated checks pass":`Fix ${t} automated violation${t===1?"":"s"}`,action:void 0,tooltip:void 0},{done:s===a,label:`Run Guided Tests (${s}/${a} workflows complete)`,action:()=>n("guided"),tooltip:'12 separate workflows total. Click → pick a workflow → mark each step pass/fail/skip → "Back to workflows" → click again for the next. Repeat until 12/12.'},{done:!1,label:"Export AI fix prompt + complete manual checklist",action:()=>n("delta"),tooltip:`Switches to the Delta tab. Click the Export menu and pick "AI fix prompt" — markdown for ChatGPT/Claude/Copilot, with manual checklist for the WCAG criteria automation can't detect.`}],i=r.findIndex(o=>!o.done);return e.jsxs("div",{className:"border-t border-slate-200 px-3 py-2 bg-slate-50",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wide text-slate-500 mb-1.5",children:"Path to full WCAG compliance"}),e.jsx("ol",{className:"space-y-1 text-[11px]",children:r.map((o,c)=>{const d=c===i,p=o.done;return e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:p?"font-mono text-emerald-700 shrink-0":d?"font-mono text-brand-600 font-semibold shrink-0":"font-mono text-slate-400 shrink-0","aria-hidden":"true",children:p?"✓":`${c+1}.`}),o.action?e.jsxs("button",{type:"button",onClick:o.action,title:o.tooltip,className:d?"text-brand-700 font-semibold underline-offset-2 hover:underline text-left leading-snug":"text-slate-600 underline-offset-2 hover:underline hover:text-slate-900 text-left leading-snug",children:[o.label," →"]}):e.jsx("span",{className:p?"text-slate-500 line-through leading-snug":d?"text-slate-900 font-medium leading-snug":"text-slate-500 leading-snug",children:o.label})]},c)})})]})}function ya({current:t,total:s}){return e.jsxs("div",{role:"status","aria-live":"polite",className:"border border-slate-200 rounded-lg bg-white p-4 flex items-center gap-3",children:[e.jsx("span",{className:"inline-block w-5 h-5 border-2 border-brand-500 border-t-transparent rounded-full animate-spin motion-reduce:animate-none","aria-hidden":"true"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm font-medium text-slate-900",children:"Scanning…"}),e.jsx("p",{className:"text-[11px] text-slate-500",children:typeof t=="number"&&typeof s=="number"?`State ${t} of ${s}. Grade will appear when the scan completes.`:"Grade will appear when the scan completes."})]})]})}function ja({scannedAt:t}){const s=Date.now()-new Date(t).getTime();return e.jsxs("div",{className:"bg-amber-50 border-b border-amber-200 px-3 py-1.5 text-[11px] text-amber-900 flex items-center gap-2",children:[e.jsx("span",{"aria-hidden":"true",children:"↻"}),e.jsxs("span",{children:["Showing a previous scan (",Dt(s)," old). Re-scan to grade the current page state."]})]})}function Dt(t){const s=Math.floor(t/1e3);if(s<60)return"less than a minute";if(s<120)return"1 minute";if(s<3600)return`${Math.floor(s/60)} minutes`;if(s<7200)return"1 hour";if(s<86400)return`${Math.floor(s/3600)} hours`;const a=Math.floor(s/86400);return a===1?"1 day":`${a} days`}const Fe="dismissedFindings";function Ae(t){try{const s=new URL(t);return`${s.origin}${s.pathname.replace(/\/+$/,"")}`}catch{return t}}function ne(t){return`reading-order::${t}`}function re(t){return`tab-order::${t}`}async function Ce(){try{const t=await chrome.storage.local.get(Fe),s=t==null?void 0:t[Fe];if(s&&typeof s=="object")return s}catch{}return{}}async function Be(t){await chrome.storage.local.set({[Fe]:t})}async function Se(t){return(await Ce())[Ae(t)]??{}}async function Ft(t,s,a,n){const r=await Ce(),i=Ae(t),o=r[i]??{};o[s]={reason:a,dismissedAt:new Date().toISOString(),snippet:n},r[i]=o,await Be(r)}async function xe(t,s){if(s.length===0)return;const a=await Ce(),n=Ae(t),r=a[n]??{},i=new Date().toISOString();for(const o of s)r[o.key]={reason:o.reason,dismissedAt:i,snippet:o.snippet};a[n]=r,await Be(a)}async function Ot(t,s){const a=await Ce(),n=Ae(t),r=a[n];!r||!(s in r)||(delete r[s],Object.keys(r).length===0?delete a[n]:a[n]=r,await Be(a))}const wa=Object.freeze(Object.defineProperty({__proto__:null,addDismissal:Ft,addDismissals:xe,dismissalKeyForReadingOrder:ne,dismissalKeyForTabOrder:re,getDismissalsForUrl:Se,removeDismissal:Ot},Symbol.toStringTag,{value:"Module"}));function Mt(t){return[t.pseudoState,t.theme,t.direction,t.breakpoint.id].join(" · ")}function Pt(t){return`${We(t.ruleId,t.target.selector)}::${t.target.outerHTML.slice(0,64)}`}function Na(t){const s=new Map;for(const a of t)for(const n of a.violations){const r=Pt(n),i=s.get(r);i?i.states.push(n.currentState):s.set(r,{representative:n,states:[n.currentState]})}return Array.from(s.values())}const st={critical:0,serious:1,moderate:2,minor:3};function ka(){var b,w,E,$;const t=m(g=>g.results),s=m(g=>g.componentId),a=m(g=>g.setView),n=((b=t[0])==null?void 0:b.pageUrl)??((w=t[0])==null?void 0:w.scope)??"",[r,i]=x.useState({}),[o,c]=x.useState(new Set);if(x.useEffect(()=>{if(!n)return;Se(n).then(i);const g=()=>{document.visibilityState==="visible"&&n&&Se(n).then(i)};return document.addEventListener("visibilitychange",g),()=>document.removeEventListener("visibilitychange",g)},[n]),x.useEffect(()=>{if(!s){c(new Set);return}let g=!1;const y=async()=>{const I=await chrome.storage.local.get("igtRuns");if(g)return;const v=((I==null?void 0:I.igtRuns)??{})[s]??{},k=new Set;for(const N of W){const C=v[N.id];C&&Object.keys(C.steps).length===N.steps.length&&k.add(N.id)}c(k)};y();const j=()=>{document.visibilityState==="visible"&&y()};return document.addEventListener("visibilitychange",j),()=>{g=!0,document.removeEventListener("visibilitychange",j)}},[s]),t.length===0)return e.jsx("div",{className:"p-4 text-center text-slate-500 text-sm",children:"No audit results yet. Pick an element to start."});const d=t.reduce((g,y)=>g+y.durationMs,0),p=t.reduce((g,y)=>g+y.violations.length,0),l=Na(t);l.sort((g,y)=>{const j=st[g.representative.impact]??99,I=st[y.representative.impact]??99;return j!==I?j-I:y.states.length-g.states.length});const u=t.map(g=>Mt(g.state)).join(`
|
|
3
|
+
${h?"border-rose-400 ring-2 ring-rose-300":"border-slate-200 hover:border-slate-300"}`,children:[e.jsxs("div",{className:"flex items-start justify-between mb-1 gap-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-medium text-xs truncate",children:t.ruleId}),e.jsxs("div",{className:"text-xs text-slate-500",children:[t.wcagCriterion," · ",t.wcagLevel]})]}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[t.flakyAcrossRuns&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-amber-100 text-amber-700",title:"Did not appear in every audit run — likely a transient environment artifact",children:"flaky"}),e.jsx("span",{className:`text-[10px] px-1.5 py-0.5 rounded ${Ys[t.impact]}`,children:t.impact})]})]}),e.jsx("p",{className:"text-xs text-slate-700 mb-2",children:t.description}),e.jsx("code",{className:"text-[11px] bg-slate-50 p-1.5 rounded block text-slate-600 font-mono whitespace-pre-wrap break-all",children:t.target.outerHTML}),e.jsx(sa,{violation:t}),e.jsx(ra,{violation:t}),e.jsx(na,{violation:t}),e.jsx(aa,{text:t.target.failureSummary}),e.jsx(ia,{ruleId:t.ruleId}),h&&e.jsxs("div",{className:"text-[11px] text-slate-600 mt-2 flex flex-wrap items-center gap-x-2 gap-y-1",children:[e.jsxs("span",{children:["State: ",Xs(t.currentState)]}),e.jsx("span",{"aria-hidden":"true",children:"·"}),e.jsx("a",{role:"button",tabIndex:0,onClick:E,onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),E(g))},className:"text-brand-600 hover:underline cursor-pointer",children:"Load state"}),e.jsx("span",{"aria-hidden":"true",children:"·"}),e.jsx("a",{role:"button",tabIndex:0,onClick:$,onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),$(g))},className:"text-brand-600 hover:underline cursor-pointer",children:"Load default"}),f&&e.jsx("span",{className:"text-amber-700 basis-full",children:"Couldn't find this element on the page. The story may have re-rendered or unmounted."})]}),t.needsReview&&e.jsx("div",{className:"mt-2 flex items-center gap-2 text-xs",children:u?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"inline-flex items-center gap-1 text-[10px] px-1.5 py-0.5 rounded bg-emerald-100 text-emerald-800 font-semibold",children:"✓ Acknowledged"}),e.jsx("span",{role:"button",tabIndex:0,onClick:g=>{g.stopPropagation(),l(t.matchKey),ea(t,c)},onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),g.target.click())},className:"text-slate-600 hover:text-slate-900 hover:underline cursor-pointer",children:"Un-acknowledge"})]}):e.jsx("span",{role:"button",tabIndex:0,onClick:g=>{g.stopPropagation(),p(t.matchKey),Zs(t,c)},onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),g.target.click())},title:"Mark this finding as 'reviewed, not an issue.' It won't appear in future audits unless the content changes.",className:"px-2 py-0.5 border border-slate-300 bg-white text-slate-700 rounded hover:bg-slate-50 cursor-pointer",children:"Acknowledge as not an issue"})}),t.helpUrl&&e.jsx("a",{href:t.helpUrl,target:"_blank",rel:"noreferrer",onClick:g=>g.stopPropagation(),className:"text-xs text-brand-600 hover:underline mt-2 inline-block",children:"Learn more →"})]})}function Xs(t){const s=[];return s.push(t.pseudoState==="default"?"default":`:${t.pseudoState}`),t.theme!=="light"&&s.push(t.theme),t.direction!=="ltr"&&s.push(t.direction),t.breakpoint.id!=="desktop"&&s.push(t.breakpoint.id),t.ariaVariation&&s.push(t.ariaVariation.id),s.join(" · ")}async function Zs(t,s){await ts({componentId:t.componentId,matchKey:t.matchKey,ruleId:t.ruleId}),await Lt(t.componentId,s)}async function ea(t,s){await es(t.componentId,t.matchKey),await Lt(t.componentId,s)}async function Lt(t,s){const a=s.flatMap(n=>n.violations);try{const n=await M({type:"BASELINE_COMPARE",componentId:t,currentViolations:a});m.getState().setDelta(n.delta)}catch{}}function ta(){const t=kt.breakpointPresets;return{pseudoState:"default",ariaVariation:null,theme:"light",direction:"ltr",breakpoint:t.find(a=>a.id==="desktop")??t[0]}}function Ut(t){if(t.ruleId!=="color-contrast"&&t.ruleId!=="color-contrast-enhanced")return null;const s=t.target.failureSummary||"",a=/contrast of (\d+(?:\.\d+)?)/i.exec(s),n=/Expected contrast ratio of (\d+(?:\.\d+)?):1/i.exec(s),r=/foreground color:\s*(#[0-9a-fA-F]+)/i.exec(s),i=/background color:\s*(#[0-9a-fA-F]+)/i.exec(s);return!a||!n?null:{ratio:parseFloat(a[1]),required:parseFloat(n[1]),fg:(r==null?void 0:r[1])??"#000000",bg:(i==null?void 0:i[1])??"#ffffff"}}function sa({violation:t}){const s=Ut(t);if(!s)return null;const a=s.ratio>=s.required;return e.jsxs("div",{className:"mt-2 flex items-center gap-2 text-[11px]",children:[e.jsx("div",{className:"flex items-center justify-center w-9 h-6 rounded border border-slate-300",style:{background:s.bg,color:s.fg},title:`fg ${s.fg} on bg ${s.bg}`,children:"Aa"}),e.jsxs("span",{className:a?"text-green-700":"text-rose-700 font-medium",children:[s.ratio.toFixed(2)," : 1"]}),e.jsxs("span",{className:"text-slate-500",children:["needs ",s.required.toFixed(1)," : 1"]})]})}function aa({text:t}){return t?e.jsxs("details",{className:"mt-2",children:[e.jsx("summary",{className:"text-[11px] text-slate-500 cursor-pointer hover:text-slate-700",children:"Show failure detail"}),e.jsx("pre",{className:"text-[11px] text-slate-600 whitespace-pre-wrap mt-1 bg-slate-50 p-1.5 rounded",children:t})]}):null}function na({violation:t}){const s=Js(t);return s.length===0?null:e.jsx("div",{className:"mt-2 flex flex-wrap gap-1",children:s.map(a=>e.jsx("span",{title:`${a.region} — ${a.blurb}`,className:"text-[10px] px-1.5 py-0.5 rounded bg-slate-100 text-slate-600 border border-slate-200",children:a.name},a.id))})}function ra({violation:t}){const s=Ut(t),[a,n]=x.useState({kind:"idle"});if(!s)return null;async function r(){n({kind:"loading"});try{const i=t.ruleId==="color-contrast-enhanced"?"AAA":"AA",o=await M({type:"AI_COLOR_SUGGEST_REQUEST",inputs:[{matchKey:t.matchKey,foreground:s.fg,background:s.bg,fontSize:16,fontWeight:400,targetLevel:i}]}),c=o.results.find(d=>d.matchKey===t.matchKey);n(c?{kind:"ready",suggestion:c}:{kind:"empty",reason:o.unavailableReason??"AI returned no suggestions for this contrast pair."})}catch(i){n({kind:"empty",reason:i instanceof Error?i.message:String(i)})}}return e.jsxs("div",{className:"mt-2",children:[a.kind==="idle"&&e.jsx("button",{type:"button",onClick:i=>{i.stopPropagation(),r()},className:"text-[11px] px-2 py-1 rounded border border-brand-300 bg-brand-50 text-brand-700 hover:bg-brand-100 font-medium",title:"Ask the configured AI for in-palette color replacements that pass WCAG contrast.",children:"✨ AI fix suggestions"}),a.kind==="loading"&&e.jsx("span",{className:"text-[11px] text-slate-500",children:"Asking AI for color suggestions…"}),a.kind==="empty"&&e.jsx("p",{className:"text-[11px] text-slate-500 bg-slate-50 border border-slate-200 rounded p-2",children:a.reason}),a.kind==="ready"&&e.jsxs("div",{className:"border border-brand-200 rounded bg-brand-50 p-2 space-y-2",children:[e.jsxs("p",{className:"text-[11px] text-brand-900 font-medium",children:["AI suggestions (",a.suggestion.suggestions.length,")"]}),e.jsx("ul",{className:"space-y-1.5",children:a.suggestion.suggestions.map((i,o)=>e.jsxs("li",{className:"flex items-start gap-2 text-[11px]",children:[e.jsx("div",{className:"flex items-center justify-center w-9 h-6 rounded border border-slate-300 shrink-0",style:{background:i.background,color:i.foreground},title:`fg ${i.foreground} on bg ${i.background}`,children:"Aa"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-1.5",children:[e.jsx("code",{className:"font-mono",children:i.foreground}),e.jsx("span",{className:"text-slate-500",children:"on"}),e.jsx("code",{className:"font-mono",children:i.background}),e.jsxs("span",{className:"text-emerald-700 font-medium",children:[i.contrast.toFixed(2)," : 1"]})]}),i.rationale&&e.jsx("p",{className:"text-slate-600 mt-0.5",children:i.rationale})]})]},o))}),a.suggestion.reasoning&&e.jsx("p",{className:"text-[10px] text-slate-500 italic",children:a.suggestion.reasoning})]})]})}function ia({ruleId:t}){const s=ss(t);return s?e.jsxs("details",{className:"mt-2",children:[e.jsx("summary",{className:"text-[11px] text-emerald-700 cursor-pointer hover:text-emerald-900 font-medium",children:"How to fix"}),e.jsxs("div",{className:"mt-1 bg-emerald-50 border border-emerald-200 rounded p-2 space-y-2",children:[e.jsx("p",{className:"text-[11px] text-slate-700 leading-relaxed",children:s.summary}),s.snippet&&e.jsx("pre",{className:"text-[11px] text-slate-700 bg-white p-1.5 rounded border border-emerald-100 overflow-x-auto",children:e.jsx("code",{children:s.snippet})})]})]}):null}const oa=[{id:"contrast",label:"Color & contrast",axeRules:["color-contrast","color-contrast-enhanced","link-in-text-block"],igtWorkflowIds:["visual-indicators"]},{id:"alt-text",label:"Alt text",axeRules:["image-alt","input-image-alt","object-alt","svg-img-alt","area-alt","role-img-alt"],igtWorkflowIds:[]},{id:"forms",label:"Forms",axeRules:["label","select-name","aria-input-field-name","aria-toggle-field-name","form-field-multiple-labels","label-content-name-mismatch","autocomplete-valid","label-title-only"],igtWorkflowIds:["forms"]},{id:"keyboard",label:"Keyboard",axeRules:["nested-interactive","tabindex","frame-focusable-content","no-focusable-content","focus-order-semantics"],igtWorkflowIds:["keyboard","focus-management"]},{id:"tab-order",label:"Tab order",axeRules:[],igtWorkflowIds:[],verifiedByWorkflowIds:["keyboard"],heuristic:"tab-order"},{id:"screen-reader",label:"Screen reader / ARIA",axeRules:["aria-allowed-attr","aria-required-attr","aria-required-children","aria-required-parent","aria-roles","aria-valid-attr-value","aria-valid-attr","aria-hidden-body","aria-hidden-focus","button-name","input-button-name","link-name","frame-title","presentation-role-conflict","aria-allowed-role","aria-prohibited-attr","aria-text","aria-deprecated-role","aria-conditional-attr","aria-braille-equivalent","empty-button","empty-heading","empty-link"],igtWorkflowIds:["screen-reader"]},{id:"reading-order",label:"Reading order",axeRules:[],igtWorkflowIds:[],verifiedByWorkflowIds:["page-structure"],heuristic:"reading-order"},{id:"page-structure",label:"Page structure",axeRules:["heading-order","page-has-heading-one","landmark-one-main","landmark-no-duplicate-banner","landmark-no-duplicate-contentinfo","landmark-no-duplicate-main","region","bypass","empty-table-header","landmark-banner-is-top-level","landmark-complementary-is-top-level","landmark-contentinfo-is-top-level","landmark-main-is-top-level","landmark-unique"],igtWorkflowIds:["page-structure"]},{id:"other-manual",label:"Other manual checks",axeRules:[],igtWorkflowIds:["reflow","hover-focus-content","pointer","time-based","error-prevention","consistency"]}];function la(t){const s=oa.map(i=>ca(i,t)),a=s.reduce((i,o)=>i+da(o.letter),0)/Math.max(1,s.length),n=ua(Math.round(a)),r=s.filter(i=>i.letter==="D"||i.letter==="F");return{overallLetter:n,subGrades:s,warningAreas:r,isLawsuitRisk:r.length>0}}function ca(t,s){const a=new Set(t.axeRules),n=s.violations.filter(v=>a.has(v.ruleId)),r=s.manualRuns.filter(v=>t.igtWorkflowIds.includes(v.workflowId)),i=t.igtWorkflowIds.map(v=>s.workflows.find(k=>k.id===v)).filter(v=>v!=null);let o=i.length>0;for(const v of i){const k=r.find(C=>C.workflowId===v.id);if((k?Object.keys(k.steps).length:0)!==v.steps.length){o=!1;break}}const c=r.some(v=>Object.keys(v.steps).length>0),d=t.verifiedByWorkflowIds??[],p=s.manualRuns.filter(v=>d.includes(v.workflowId)),l=d.map(v=>s.workflows.find(k=>k.id===v)).filter(v=>v!=null);let u=d.length>0&&l.length===d.length;for(const v of l){const k=p.find(C=>C.workflowId===v.id);if((k?Object.keys(k.steps).length:0)!==v.steps.length){u=!1;break}}let h=null;if(u)for(const v of p)v.completedAt&&(h===null||v.completedAt>h)&&(h=v.completedAt);const f=t.heuristic==="tab-order"?s.heuristicCounts.tabOrder??0:t.heuristic==="reading-order"?s.heuristicCounts.readingOrder??0:0,b=d[0]??t.igtWorkflowIds[0]??null;if(u&&d.length>0)return{id:t.id,label:t.label,letter:"A",untested:!1,needsIgt:!1,igtCompleted:!0,verifiedByIgt:!0,verifiedAt:h,suppressedHeuristicCount:f,primaryVerifierWorkflowId:b,counts:{critical:0,serious:0,moderate:0,minor:0},caps:{cappedAtC:!1,cappedAtB:!1}};const w=t.axeRules.length>0||t.heuristic!=null,E=t.igtWorkflowIds.length>0;let $=!1;if(w&&E?$=!s.auditRan&&!c:w?$=!s.auditRan:E?$=!c:$=!0,$)return{id:t.id,label:t.label,letter:"F",untested:!0,needsIgt:E||d.length>0,igtCompleted:!1,verifiedByIgt:!1,verifiedAt:null,suppressedHeuristicCount:0,primaryVerifierWorkflowId:b,counts:{critical:0,serious:0,moderate:0,minor:0},caps:{cappedAtC:!1,cappedAtB:!1}};const g={critical:0,serious:0,moderate:0,minor:0};for(const v of as(n))g[v.impact]++;g.serious+=f;for(const v of r){const k=i.find(N=>N.id===v.workflowId);if(k)for(const N of k.steps){const C=v.steps[N.id];(C==null?void 0:C.status)==="fail"&&(N.severity==="required"?g.serious++:g.moderate++)}}const y=g.critical>0,j=g.serious>0;let I;g.critical>=5?I="F":g.critical>=1?I="D":g.serious>=1?I="C":g.moderate>=1?I="B":I="A";const R=E&&!o||d.length>0&&!u;return{id:t.id,label:t.label,letter:I,untested:!1,needsIgt:R,igtCompleted:o,verifiedByIgt:!1,verifiedAt:null,suppressedHeuristicCount:0,primaryVerifierWorkflowId:b,counts:g,caps:{cappedAtC:y,cappedAtB:j}}}function da(t){return t==="A"?4:t==="B"?3:t==="C"?2:t==="D"?1:0}function ua(t){return t>=4?"A":t>=3?"B":t>=2?"C":t>=1?"D":"F"}const pa={A:"bg-emerald-500",B:"bg-lime-500",C:"bg-yellow-500",D:"bg-orange-500",F:"bg-rose-600"},ha={A:"bg-emerald-500 text-white",B:"bg-lime-500 text-white",C:"bg-yellow-500 text-slate-900",D:"bg-orange-500 text-white",F:"bg-rose-600 text-white"};function ma({violations:t,componentId:s}){var $,g,y,j,I;const[a,n]=x.useState([]),r=m(R=>R.status),i=m(R=>R.progress),o=m(R=>R.freshThisSession),c=m(R=>R.results),d=($=c[0])==null?void 0:$.startedAt;if(x.useEffect(()=>{if(!s){n([]);return}let R=!1;return chrome.storage.local.get("igtRuns").then(v=>{if(R)return;const N=((v==null?void 0:v.igtRuns)??{})[s]??{};n(Object.values(N))}),()=>{R=!0}},[s]),r==="running")return e.jsx(ya,{current:i==null?void 0:i.current,total:i==null?void 0:i.total});const p=la({violations:t,auditRan:c.length>0,manualRuns:a,workflows:W,heuristicCounts:{tabOrder:((y=(g=c[0])==null?void 0:g.tabOrderIssues)==null?void 0:y.length)??0,readingOrder:((I=(j=c[0])==null?void 0:j.readingOrderIssues)==null?void 0:I.length)??0}}),l=m(R=>R.acknowledgedKeys),u=c.length>0?jt(c,{runs:a,workflows:W},"2.1","AA",l):void 0,h=u?!u.canClaimConformance:!1,f=h&&p.overallLetter==="A"?"B":p.overallLetter,b=(()=>{if(!h||p.overallLetter!=="A"||!u)return null;const R=u.untestedCriteria.length,v=u.inconclusiveCriteria.length,k=[];return R>0&&k.push(`${R} untested`),v>0&&k.push(`${v} inconclusive`),`Capped at B — ${k.join(" + ")} WCAG ${u.targetLevel} ${R+v===1?"criterion":"criteria"}. ${v>0?"Resolve axe-incomplete + IGT-skip items to claim conformance.":"Open Guided Tests to evaluate them."}`})();let w=0;for(const R of W){const v=a.find(N=>N.workflowId===R.id);if(!v)continue;R.steps.every(N=>{const C=v.steps[N.id];return(C==null?void 0:C.status)==="pass"||(C==null?void 0:C.status)==="fail"||(C==null?void 0:C.status)==="skip"||(C==null?void 0:C.status)==="not-applicable"})&&w++}const E=t.length;return e.jsxs("div",{className:"border border-slate-200 rounded-lg bg-white overflow-hidden",children:[!o&&d&&e.jsx(ja,{scannedAt:d}),e.jsxs("div",{className:"flex",children:[e.jsx("div",{className:`flex items-center justify-center w-24 ${pa[f]} text-white shrink-0`,children:e.jsx("span",{className:"text-5xl font-bold leading-none",children:f})}),e.jsxs("div",{className:"flex-1 p-3 space-y-1",children:[e.jsx("p",{className:"text-xs font-semibold text-slate-900",children:"Overall grade"}),e.jsxs("p",{className:"text-[11px] text-slate-600 leading-snug",children:["Mean of ",p.subGrades.length," verification areas below. Untested areas count as F until verified."]}),b&&e.jsx("p",{className:"text-[11px] text-amber-800 leading-snug mt-1 bg-amber-50 border border-amber-200 rounded px-2 py-1",children:b})]})]}),p.isLawsuitRisk&&e.jsx(ga,{areas:p.warningAreas}),e.jsx(fa,{grades:p.subGrades}),u&&e.jsx(xa,{coverage:u}),e.jsx(va,{violationsRemaining:E,manualCompleted:w,manualTotal:W.length}),w>0||c.length>0?e.jsxs("div",{className:"border-t border-slate-200 px-3 py-2 bg-slate-50",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wide text-slate-500 mb-1.5",children:"Manual coverage (Guided Tests)"}),e.jsxs("div",{className:"text-[11px] text-slate-700 mb-1.5",children:[e.jsx("strong",{children:w})," of ",e.jsx("strong",{children:W.length})," workflows complete"]}),e.jsx("div",{className:"flex h-1 bg-slate-200 rounded-full overflow-hidden",children:e.jsx("div",{className:"bg-emerald-500",style:{width:`${w/W.length*100}%`}})})]}):null]})}function xa({coverage:t}){const s=t.untestedCriteria.length+t.inconclusiveCriteria.length,[a,n]=x.useState(s>0&&s<=3),r=t.totalApplicable===0?0:Math.round(t.evaluated/t.totalApplicable*100),i=t.canClaimConformance,o=[];return t.untestedCriteria.length>0&&o.push({kind:"untested",ids:t.untestedCriteria}),t.inconclusiveCriteria.length>0&&o.push({kind:"inconclusive",ids:t.inconclusiveCriteria}),e.jsxs("div",{className:`border-t ${i?"border-emerald-200 bg-emerald-50":"border-amber-200 bg-amber-50"} px-3 py-2 text-[11px] leading-snug`,children:[e.jsxs("div",{className:`flex items-center justify-between gap-2 ${i?"text-emerald-900":"text-amber-900"}`,children:[e.jsxs("div",{children:[e.jsxs("span",{className:"font-semibold",children:["WCAG ",t.targetVersion," ",t.targetLevel," coverage:"," ",t.evaluated," of ",t.totalApplicable," criteria evaluated (",r,"%)"]}),i&&e.jsxs("p",{className:"text-[11px] mt-0.5",children:["Every applicable criterion has been evaluated and either passes or is N/A. This audit can be presented as a conformance-claim for ",t.targetVersion," ",t.targetLevel," for the audited URL(s)."]}),!i&&t.untestedCriteria.length>0&&e.jsxs("p",{className:"text-[11px] mt-0.5",children:[e.jsxs("strong",{children:[t.untestedCriteria.length," untested"]})," ",t.untestedCriteria.length===1?"criterion":"criteria"," — mark Pass / Fail / N/A in Guided Tests below."]}),!i&&t.inconclusiveCriteria.length>0&&e.jsxs("p",{className:"text-[11px] mt-0.5",children:[e.jsxs("strong",{children:[t.inconclusiveCriteria.length," inconclusive"]})," ",t.inconclusiveCriteria.length===1?"criterion":"criteria"," — axe couldn't fully determine OR an IGT step was skipped. Resolve before claiming conformance."]})]}),!i&&o.length>0&&e.jsx("button",{type:"button",onClick:()=>n(c=>!c),className:"text-[11px] underline shrink-0 self-start",children:a?"hide":"show list"})]}),a&&!i&&e.jsx("div",{className:"mt-1.5 space-y-1.5",children:o.map(c=>e.jsxs("div",{children:[e.jsxs("div",{className:"text-[10.5px] font-semibold uppercase tracking-wide text-amber-900",children:[c.kind==="untested"?"Untested":"Inconclusive"," (",c.ids.length,")"]}),e.jsx("ul",{className:"text-[10.5px] text-amber-900 space-y-1",children:c.ids.map(d=>{var l;const p=c.kind==="inconclusive"?(l=t.inconclusiveReasons)==null?void 0:l[d]:void 0;return e.jsxs("li",{className:"leading-snug",children:[e.jsxs("code",{className:"font-mono",children:["· ",d]}),p&&p.length>0?e.jsx("ul",{className:"ml-3 mt-0.5 space-y-0.5",children:p.map((u,h)=>e.jsxs("li",{className:"text-[10px] text-amber-800",children:[u.source==="axe-incomplete"&&e.jsxs(e.Fragment,{children:["axe rule ",e.jsx("code",{className:"font-mono",children:u.ruleOrStepId})," — "]}),u.source==="igt-skip"&&e.jsxs(e.Fragment,{children:["Guided Test step ",e.jsx("code",{className:"font-mono",children:u.ruleOrStepId})," skipped — "]}),u.source==="ai-uncertain"&&e.jsxs(e.Fragment,{children:["AI rule ",e.jsx("code",{className:"font-mono",children:u.ruleOrStepId})," — "]}),u.resolutionHint]},h))}):c.kind==="inconclusive"&&e.jsx("p",{className:"ml-3 mt-0.5 text-[10px] text-amber-800 italic",children:"Re-run the audit to see the specific axe rule or Guided Test step responsible. (Cached data from a pre-rc.53 build doesn't carry the reason metadata.)"})]},d)})})]},c.kind))})]})}function ga({areas:t}){const s=t.map(a=>a.label);return e.jsxs("div",{className:"border-t border-rose-200 bg-rose-50 px-3 py-2 text-[11px] text-rose-900 leading-snug",children:[e.jsx("p",{className:"font-semibold mb-0.5",children:"⚠ Not lawsuit-safe"}),e.jsx("p",{children:s.length===1?e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:s[0]})," scored ",t[0].letter,". Even a high overall grade doesn't help if one area is failing — demand-letter mills target the weakest link."]}):e.jsxs(e.Fragment,{children:[s.length," areas are at lawsuit-risk:"," ",s.map((a,n)=>e.jsxs("span",{children:[e.jsx("strong",{children:a}),n<s.length-1?", ":""]},a)),". Fix these before relying on the overall grade."]})})]})}function fa({grades:t}){const s=m(a=>a.setView);return e.jsxs("div",{className:"border-t border-slate-200 px-3 py-2",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wide text-slate-500 mb-2",children:"Verification areas"}),e.jsx("ul",{className:"grid grid-cols-1 gap-1.5",children:t.map(a=>e.jsxs("li",{className:"flex items-center gap-2 text-[11px]",children:[e.jsx("span",{className:`w-6 h-6 inline-flex items-center justify-center rounded text-xs font-bold ${ha[a.letter]}`,"aria-label":`Grade ${a.letter}`,children:a.letter}),e.jsx("span",{className:"font-medium text-slate-800 flex-1 min-w-0",children:a.label}),e.jsx(ba,{grade:a,onOpenGuided:()=>s("guided")})]},a.id))})]})}function ba({grade:t,onOpenGuided:s}){const a=n=>{if(!n)return"";const r=W.find(i=>i.id===n);return(r==null?void 0:r.name)??n};if(t.untested)return e.jsxs("span",{className:"text-slate-500 text-[10px] italic",children:["not graded —"," ",t.primaryVerifierWorkflowId?e.jsxs("button",{type:"button",onClick:s,className:"text-brand-600 hover:underline not-italic",children:["run ",a(t.primaryVerifierWorkflowId)," →"]}):"no data yet"]});if(t.verifiedByIgt){const n=t.verifiedAt?Dt(Date.now()-new Date(t.verifiedAt).getTime()):null;return e.jsxs("span",{className:"text-emerald-700 text-[10px]",title:t.suppressedHeuristicCount>0?`Heuristic flagged ${t.suppressedHeuristicCount} issue${t.suppressedHeuristicCount===1?"":"s"}, but you verified this area in Guided Tests — those are treated as noise unless you re-verify.`:"Verified via Guided Tests",children:["✓ verified",n?` ${n} ago`:""]})}return t.needsIgt?e.jsxs("button",{type:"button",onClick:s,className:"text-amber-700 hover:underline text-[10px]",title:"Verify this area by running the relevant Guided Tests workflow",children:["verify with ",a(t.primaryVerifierWorkflowId)," →"]}):t.counts.critical>0||t.counts.serious>0?e.jsxs("span",{className:"text-slate-500 text-[10px]",children:[t.counts.critical>0&&e.jsxs("span",{className:"text-rose-700",children:[t.counts.critical," critical"]}),t.counts.critical>0&&t.counts.serious>0&&" · ",t.counts.serious>0&&e.jsxs("span",{className:"text-orange-700",children:[t.counts.serious," serious"]})]}):e.jsx("span",{className:"text-emerald-700 text-[10px]",children:"clean"})}function va({violationsRemaining:t,manualCompleted:s,manualTotal:a}){const n=m(o=>o.setView),r=[{done:t===0,label:t===0?"Automated checks pass":`Fix ${t} automated violation${t===1?"":"s"}`,action:void 0,tooltip:void 0},{done:s===a,label:`Run Guided Tests (${s}/${a} workflows complete)`,action:()=>n("guided"),tooltip:'12 separate workflows total. Click → pick a workflow → mark each step pass/fail/skip → "Back to workflows" → click again for the next. Repeat until 12/12.'},{done:!1,label:"Export AI fix prompt + complete manual checklist",action:()=>n("delta"),tooltip:`Switches to the Delta tab. Click the Export menu and pick "AI fix prompt" — markdown for ChatGPT/Claude/Copilot, with manual checklist for the WCAG criteria automation can't detect.`}],i=r.findIndex(o=>!o.done);return e.jsxs("div",{className:"border-t border-slate-200 px-3 py-2 bg-slate-50",children:[e.jsx("p",{className:"text-[11px] uppercase tracking-wide text-slate-500 mb-1.5",children:"Path to full WCAG compliance"}),e.jsx("ol",{className:"space-y-1 text-[11px]",children:r.map((o,c)=>{const d=c===i,p=o.done;return e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx("span",{className:p?"font-mono text-emerald-700 shrink-0":d?"font-mono text-brand-600 font-semibold shrink-0":"font-mono text-slate-400 shrink-0","aria-hidden":"true",children:p?"✓":`${c+1}.`}),o.action?e.jsxs("button",{type:"button",onClick:o.action,title:o.tooltip,className:d?"text-brand-700 font-semibold underline-offset-2 hover:underline text-left leading-snug":"text-slate-600 underline-offset-2 hover:underline hover:text-slate-900 text-left leading-snug",children:[o.label," →"]}):e.jsx("span",{className:p?"text-slate-500 line-through leading-snug":d?"text-slate-900 font-medium leading-snug":"text-slate-500 leading-snug",children:o.label})]},c)})})]})}function ya({current:t,total:s}){return e.jsxs("div",{role:"status","aria-live":"polite",className:"border border-slate-200 rounded-lg bg-white p-4 flex items-center gap-3",children:[e.jsx("span",{className:"inline-block w-5 h-5 border-2 border-brand-500 border-t-transparent rounded-full animate-spin motion-reduce:animate-none","aria-hidden":"true"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("p",{className:"text-sm font-medium text-slate-900",children:"Scanning…"}),e.jsx("p",{className:"text-[11px] text-slate-500",children:typeof t=="number"&&typeof s=="number"?`State ${t} of ${s}. Grade will appear when the scan completes.`:"Grade will appear when the scan completes."})]})]})}function ja({scannedAt:t}){const s=Date.now()-new Date(t).getTime();return e.jsxs("div",{className:"bg-amber-50 border-b border-amber-200 px-3 py-1.5 text-[11px] text-amber-900 flex items-center gap-2",children:[e.jsx("span",{"aria-hidden":"true",children:"↻"}),e.jsxs("span",{children:["Showing a previous scan (",Dt(s)," old). Re-scan to grade the current page state."]})]})}function Dt(t){const s=Math.floor(t/1e3);if(s<60)return"less than a minute";if(s<120)return"1 minute";if(s<3600)return`${Math.floor(s/60)} minutes`;if(s<7200)return"1 hour";if(s<86400)return`${Math.floor(s/3600)} hours`;const a=Math.floor(s/86400);return a===1?"1 day":`${a} days`}const Fe="dismissedFindings";function Ae(t){try{const s=new URL(t);return`${s.origin}${s.pathname.replace(/\/+$/,"")}`}catch{return t}}function ne(t){return`reading-order::${t}`}function re(t){return`tab-order::${t}`}async function Ce(){try{const t=await chrome.storage.local.get(Fe),s=t==null?void 0:t[Fe];if(s&&typeof s=="object")return s}catch{}return{}}async function Be(t){await chrome.storage.local.set({[Fe]:t})}async function Se(t){return(await Ce())[Ae(t)]??{}}async function Ft(t,s,a,n){const r=await Ce(),i=Ae(t),o=r[i]??{};o[s]={reason:a,dismissedAt:new Date().toISOString(),snippet:n},r[i]=o,await Be(r)}async function xe(t,s){if(s.length===0)return;const a=await Ce(),n=Ae(t),r=a[n]??{},i=new Date().toISOString();for(const o of s)r[o.key]={reason:o.reason,dismissedAt:i,snippet:o.snippet};a[n]=r,await Be(a)}async function Ot(t,s){const a=await Ce(),n=Ae(t),r=a[n];!r||!(s in r)||(delete r[s],Object.keys(r).length===0?delete a[n]:a[n]=r,await Be(a))}const wa=Object.freeze(Object.defineProperty({__proto__:null,addDismissal:Ft,addDismissals:xe,dismissalKeyForReadingOrder:ne,dismissalKeyForTabOrder:re,getDismissalsForUrl:Se,removeDismissal:Ot},Symbol.toStringTag,{value:"Module"}));function Mt(t){return[t.pseudoState,t.theme,t.direction,t.breakpoint.id].join(" · ")}function Pt(t){return`${We(t.ruleId,t.target.selector)}::${t.target.outerHTML.slice(0,64)}`}function Na(t){const s=new Map;for(const a of t)for(const n of a.violations){const r=Pt(n),i=s.get(r);i?i.states.push(n.currentState):s.set(r,{representative:n,states:[n.currentState]})}return Array.from(s.values())}const st={critical:0,serious:1,moderate:2,minor:3};function ka(){var b,w,E,$;const t=m(g=>g.results),s=m(g=>g.componentId),a=m(g=>g.setView),n=((b=t[0])==null?void 0:b.pageUrl)??((w=t[0])==null?void 0:w.scope)??"",[r,i]=x.useState({}),[o,c]=x.useState(new Set);if(x.useEffect(()=>{if(!n)return;Se(n).then(i);const g=()=>{document.visibilityState==="visible"&&n&&Se(n).then(i)};return document.addEventListener("visibilitychange",g),()=>document.removeEventListener("visibilitychange",g)},[n]),x.useEffect(()=>{if(!s){c(new Set);return}let g=!1;const y=async()=>{const I=await chrome.storage.local.get("igtRuns");if(g)return;const v=((I==null?void 0:I.igtRuns)??{})[s]??{},k=new Set;for(const N of W){const C=v[N.id];C&&Object.keys(C.steps).length===N.steps.length&&k.add(N.id)}c(k)};y();const j=()=>{document.visibilityState==="visible"&&y()};return document.addEventListener("visibilitychange",j),()=>{g=!0,document.removeEventListener("visibilitychange",j)}},[s]),t.length===0)return e.jsx("div",{className:"p-4 text-center text-slate-500 text-sm",children:"No audit results yet. Pick an element to start."});const d=t.reduce((g,y)=>g+y.durationMs,0),p=t.reduce((g,y)=>g+y.violations.length,0),l=Na(t);l.sort((g,y)=>{const j=st[g.representative.impact]??99,I=st[y.representative.impact]??99;return j!==I?j-I:y.states.length-g.states.length});const u=t.map(g=>Mt(g.state)).join(`
|
|
4
4
|
`),h=o.has("keyboard")?0:(((E=t[0])==null?void 0:E.tabOrderIssues)??[]).filter(g=>!(re(g.selector)in r)).length,f=o.has("page-structure")?0:((($=t[0])==null?void 0:$.readingOrderIssues)??[]).filter(g=>!(ne(g.selector)in r)).length;return e.jsxs("div",{className:"p-3 space-y-3",children:[e.jsx(ma,{violations:t.flatMap(g=>g.violations),componentId:s}),(h>0||f>0)&&e.jsxs("button",{type:"button",onClick:()=>a("activity"),className:"w-full text-left border border-rose-200 rounded bg-rose-50 px-3 py-2 hover:bg-rose-100 transition-colors",children:[e.jsx("p",{className:"text-xs font-semibold text-rose-900",children:"⚠ Keyboard / screen-reader concerns axe-core can't see"}),e.jsxs("p",{className:"text-[11px] text-rose-800 leading-snug mt-0.5",children:[h>0&&e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:h})," tab-order issue",h===1?"":"s"," (WCAG 2.4.3)"]}),h>0&&f>0&&" · ",f>0&&e.jsxs(e.Fragment,{children:[e.jsx("strong",{children:f})," reading-order issue",f===1?"":"s"," (WCAG 1.3.2)"]})," ","— click to view in ",e.jsx("span",{className:"underline",children:"Activity"})," tab."]})]}),e.jsxs("div",{className:"text-xs text-slate-500 border-b border-slate-200 pb-2",children:[e.jsxs("span",{title:u,"aria-label":`${t.length} states tested: ${u.replace(/\n/g,", ")}`,className:"underline decoration-dotted decoration-slate-400 cursor-help",children:[t.length," ",t.length===1?"state":"states"]})," · ",l.length," unique ",l.length===1?"violation":"violations"," ",e.jsxs("span",{className:"text-slate-500",children:["(",p," across all states)"]})," · ",(d/1e3).toFixed(1),"s"]}),l.length===0?e.jsx("p",{className:"text-xs text-slate-500 italic px-1",children:"No violations found."}):e.jsx("div",{className:"space-y-1.5",children:l.map(g=>e.jsxs("div",{className:"space-y-1",children:[e.jsx(ke,{violation:g.representative}),e.jsx(Sa,{states:g.states,totalStates:t.length})]},Pt(g.representative)))})]})}function Sa({states:t,totalStates:s}){if(t.length===s)return e.jsxs("p",{className:"text-[11px] text-slate-500 px-1",children:["Found in ",e.jsxs("span",{className:"font-medium",children:["all ",s," states"]}),"."]});const a=Array.from(new Set(t.map(Mt))),n=a.slice(0,3).join(", "),r=a.length>3?`, +${a.length-3} more`:"",i=a.join(`
|
|
5
5
|
`);return e.jsxs("p",{className:"text-[11px] text-slate-500 px-1",title:i,children:["Found in ",a.length," of ",s," states:"," ",e.jsxs("span",{className:"text-slate-600",children:[n,r]})]})}const Aa={minor:"bg-blue-100 text-blue-700",moderate:"bg-yellow-100 text-yellow-700",serious:"bg-orange-100 text-orange-700",critical:"bg-red-100 text-red-700"};function Ca({ruleId:t,violations:s}){const[a,n]=x.useState(s.length===1),r=s[0];if(!r)return null;const i=r.impact,o=r.description,c=s.length;return c===1?e.jsx(ke,{violation:r}):e.jsxs("div",{className:"border border-slate-200 rounded bg-white",children:[e.jsxs("button",{type:"button",onClick:()=>n(d=>!d),className:"w-full text-left p-2 hover:bg-slate-50 flex items-center justify-between gap-2","aria-expanded":a,children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[e.jsx("span",{className:`text-[10px] px-1.5 py-0.5 rounded font-semibold uppercase tracking-wide shrink-0 ${Aa[i]}`,children:i}),e.jsx("span",{className:"text-[11px] font-mono text-slate-500 shrink-0",children:t}),e.jsx("span",{className:"text-xs text-slate-700 truncate",children:o})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[e.jsxs("span",{className:"text-[11px] font-semibold text-slate-600",children:["×",c]}),e.jsx("span",{className:"text-slate-400 text-xs",children:a?"▾":"▸"})]})]}),a&&e.jsx("div",{className:"border-t border-slate-200 p-2 space-y-1.5 bg-slate-50/50",children:s.map((d,p)=>e.jsx(ke,{violation:d},p))})]})}function Ra(t){const s=[],a=new Map;for(const n of t)a.has(n.ruleId)||(s.push(n.ruleId),a.set(n.ruleId,[])),a.get(n.ruleId).push(n);return s.map(n=>({ruleId:n,violations:a.get(n)}))}const Ea={"defense-bundle":"Defense report ready","evidence-bundle":"Evidence bundle ready"};function Gt({open:t,onClose:s,format:a,content:n,filename:r}){const i=Xt(new Blob([n]).size);function o(){Pe(n,r),s()}function c(){Me(n),s()}return e.jsxs(ie,{open:t,onClose:s,title:Ea[a],description:`Generated bundle — ${i}. Save to your Downloads folder, or open in a new tab to preview.`,children:[e.jsxs("div",{className:"space-y-3 text-xs text-slate-700",children:[e.jsxs("p",{children:["File: ",e.jsx("code",{className:"bg-slate-100 px-1 py-0.5 rounded text-[11px]",children:r})]}),e.jsxs("p",{className:"text-slate-500",children:["Tip: open the report and press Ctrl+P (Cmd+P on Mac) → ",e.jsx("em",{children:"Save as PDF"})," if you want a sealed-format version for legal use."]}),e.jsxs("p",{className:"text-[10px] text-slate-400",children:["To skip this prompt and download immediately on future exports, enable",e.jsx("em",{children:' "Skip the download confirmation"'})," in Settings → Advanced."]})]}),e.jsxs("div",{className:"flex justify-end gap-2 mt-4",children:[e.jsx("button",{onClick:s,className:"text-xs px-3 py-1.5 rounded border border-slate-300 text-slate-700 hover:bg-slate-50",children:"Cancel"}),e.jsx("button",{onClick:c,className:"text-xs px-3 py-1.5 rounded border border-slate-300 text-slate-700 hover:bg-slate-50",children:"Open preview"}),e.jsx("button",{onClick:o,className:"text-xs px-3 py-1.5 bg-brand-500 text-white rounded hover:bg-brand-600",children:"Download HTML"})]})]})}const at=7800;function Ta(t,s,a){const n=t.replace(/\/$/,""),r=[];for(const l of a){const u=`${l.ruleId}::${l.target.selector}`,h=`:${l.currentState.pseudoState} · ${l.currentState.theme} · ${l.currentState.direction}`,f=r.find(b=>`${b.ruleId}::${b.target.selector}`===u);if(f){f._states.includes(h)||f._states.push(h);continue}r.push({...l,_states:[h]})}const i=`a11y: ${r.length} new violation${r.length===1?"":"s"} in ${s??"audited component"}`,o=[];o.push(`**Component:** \`${s??"unknown"}\``),o.push(""),o.push("Detected by WCAG Component Auditor as **new** vs the saved baseline — these are violations introduced since the last accepted baseline."),o.push(""),o.push("---"),o.push("");for(const l of r)o.push(`### \`${l.ruleId}\` — ${l.impact}`),o.push(""),o.push(l.description),o.push(""),o.push(`- **WCAG:** ${l.wcagCriterion} (${l.wcagLevel})`),o.push(`- **Selector:** \`${l.target.selector}\``),o.push(`- **Found in state(s):** ${l._states.join(", ")}`),l.helpUrl&&o.push(`- **More info:** ${l.helpUrl}`),o.push(""),o.push("```html"),o.push(l.target.outerHTML),o.push("```"),o.push("");o.push("---"),o.push(""),o.push("_Filed via WCAG Component Auditor (delta-only — inherited debt not included)._");const c=o.join(`
|
|
6
6
|
`),d=new URLSearchParams({title:i,body:c});let p=`${n}/issues/new?${d.toString()}`;return p.length>at&&(p=p.slice(0,at)),{url:p,title:i,body:c}}const nt=7800;function Ia(t,s,a){const n=t.replace(/\/$/,""),r=[];for(const l of a){const u=`${l.ruleId}::${l.target.selector}`,h=`:${l.currentState.pseudoState} · ${l.currentState.theme} · ${l.currentState.direction}`,f=r.find(b=>`${b.ruleId}::${b.target.selector}`===u);if(f){f._states.includes(h)||f._states.push(h);continue}r.push({...l,_states:[h]})}const i=`a11y: ${r.length} new violation${r.length===1?"":"s"} in ${s??"audited component"}`,o=[];o.push(`Component: ${s??"unknown"}`),o.push(""),o.push("Detected by WCAG Component Auditor as NEW vs the saved baseline — these are violations introduced since the last accepted baseline."),o.push(""),o.push("---"),o.push("");for(const l of r)o.push(`Rule: ${l.ruleId} (${l.impact})`),o.push(`WCAG: ${l.wcagCriterion} ${l.wcagLevel}`),o.push(`Description: ${l.description}`),o.push(`Selector: ${l.target.selector}`),o.push(`Found in state(s): ${l._states.join(", ")}`),l.helpUrl&&o.push(`More info: ${l.helpUrl}`),o.push(""),o.push(`HTML: ${l.target.outerHTML}`),o.push(""),o.push("---"),o.push("");o.push("Filed via WCAG Component Auditor (delta-only — inherited debt not included).");const c=o.join(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./modulepreload-polyfill-B5Qt9EMX.js";import{c as t,j as o,R as e}from"./styles-BQt6R4jA.js";import{E as s,A as i}from"./ErrorBoundary-
|
|
1
|
+
import"./modulepreload-polyfill-B5Qt9EMX.js";import{c as t,j as o,R as e}from"./styles-BQt6R4jA.js";import{E as s,A as i}from"./ErrorBoundary-DgAfR24x.js";import{i as m}from"./crash-reporter-Dc5lvxvY.js";import"./_commonjsHelpers-Cpj98o6Y.js";import"./state-PELIq3oj.js";import"./preload-helper-D7HrI6pR.js";import"./forensic-log-D_OzBe7B.js";m("devtools-panel");const r=document.getElementById("root");if(!r)throw new Error("devtools panel: #root not found");t(r).render(o.jsx(e.StrictMode,{children:o.jsx(s,{children:o.jsx(i,{})})}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./modulepreload-polyfill-B5Qt9EMX.js";import{c as t,j as r,R as e}from"./styles-BQt6R4jA.js";import{E as i,A as s}from"./ErrorBoundary-
|
|
1
|
+
import"./modulepreload-polyfill-B5Qt9EMX.js";import{c as t,j as r,R as e}from"./styles-BQt6R4jA.js";import{E as i,A as s}from"./ErrorBoundary-DgAfR24x.js";import{i as m}from"./crash-reporter-Dc5lvxvY.js";import"./_commonjsHelpers-Cpj98o6Y.js";import"./state-PELIq3oj.js";import"./preload-helper-D7HrI6pR.js";import"./forensic-log-D_OzBe7B.js";m("side-panel");const o=document.getElementById("root");if(!o)throw new Error("side-panel: #root not found");t(o).render(r.jsx(e.StrictMode,{children:r.jsx(i,{children:r.jsx(s,{})})}));
|
package/dist/devtools/panel.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<title>wcagcheckr</title>
|
|
6
|
-
<script type="module" crossorigin src="/assets/devtools-panel-
|
|
6
|
+
<script type="module" crossorigin src="/assets/devtools-panel-DMy1lkHx.js"></script>
|
|
7
7
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-B5Qt9EMX.js">
|
|
8
8
|
<link rel="modulepreload" crossorigin href="/assets/_commonjsHelpers-Cpj98o6Y.js">
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/crash-reporter-Dc5lvxvY.js">
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/styles-BQt6R4jA.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-D7HrI6pR.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/forensic-log-D_OzBe7B.js">
|
|
14
|
-
<link rel="modulepreload" crossorigin href="/assets/ErrorBoundary-
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/ErrorBoundary-DgAfR24x.js">
|
|
15
15
|
<link rel="stylesheet" crossorigin href="/assets/styles-B2kGiUw-.css">
|
|
16
16
|
</head>
|
|
17
17
|
<body class="bg-slate-50">
|
package/dist/manifest.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "wcagcheckr",
|
|
4
4
|
"description": "Audit components across hover, focus, dark mode, forced colors, RTL — every state your users actually encounter. Per-component baselines surface only NEW violations.",
|
|
5
|
-
"version": "1.0.0.
|
|
6
|
-
"version_name": "1.0.0-rc.
|
|
5
|
+
"version": "1.0.0.54",
|
|
6
|
+
"version_name": "1.0.0-rc.54",
|
|
7
7
|
"author": "Locustware",
|
|
8
8
|
"homepage_url": "https://wcagcheckr.com",
|
|
9
9
|
"icons": {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>WCAG Component Auditor</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/side-panel-
|
|
7
|
+
<script type="module" crossorigin src="/assets/side-panel-jJsT7mmk.js"></script>
|
|
8
8
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-B5Qt9EMX.js">
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/_commonjsHelpers-Cpj98o6Y.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/crash-reporter-Dc5lvxvY.js">
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/styles-BQt6R4jA.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-D7HrI6pR.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/forensic-log-D_OzBe7B.js">
|
|
15
|
-
<link rel="modulepreload" crossorigin href="/assets/ErrorBoundary-
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/ErrorBoundary-DgAfR24x.js">
|
|
16
16
|
<link rel="stylesheet" crossorigin href="/assets/styles-B2kGiUw-.css">
|
|
17
17
|
</head>
|
|
18
18
|
<body class="m-0 p-0">
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wcag-checkr/ci",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.54",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Headless wcagcheckr accessibility audit runner for CI/CD pipelines. Drives the wcagcheckr Chrome extension via Playwright, runs full-page audits across the state matrix (108 combinations: hover, focus, dark mode, RTL, breakpoints), outputs JSON / SARIF / JUnit, exits with severity-aware codes.",
|
|
6
6
|
"license": "UNLICENSED",
|