@reticular/speakable 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,10 @@
1
+ "use strict";var SpeakableBrowser=(()=>{var Xe=Object.create;var $=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var Qe=Object.getOwnPropertyNames;var et=Object.getPrototypeOf,tt=Object.prototype.hasOwnProperty;var nt=(e,t)=>()=>(e&&(t=e(e=0)),t);var rt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),it=(e,t)=>{for(var n in t)$(e,n,{get:t[n],enumerable:!0})},ae=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Qe(t))!tt.call(e,i)&&i!==n&&$(e,i,{get:()=>t[i],enumerable:!(r=Ze(t,i))||r.enumerable});return e};var st=(e,t,n)=>(n=e!=null?Xe(et(e)):{},ae(t||!e||!e.__esModule?$(n,"default",{value:e,enumerable:!0}):n,e)),ot=e=>ae($({},"__esModule",{value:!0}),e);var xe=rt((Zn,Z)=>{"use strict";var A=String,ve=function(){return{isColorSupported:!1,reset:A,bold:A,dim:A,italic:A,underline:A,inverse:A,hidden:A,strikethrough:A,black:A,red:A,green:A,yellow:A,blue:A,magenta:A,cyan:A,white:A,gray:A,bgBlack:A,bgRed:A,bgGreen:A,bgYellow:A,bgBlue:A,bgMagenta:A,bgCyan:A,bgWhite:A,blackBright:A,redBright:A,greenBright:A,yellowBright:A,blueBright:A,magentaBright:A,cyanBright:A,whiteBright:A,bgBlackBright:A,bgRedBright:A,bgGreenBright:A,bgYellowBright:A,bgBlueBright:A,bgMagentaBright:A,bgCyanBright:A,bgWhiteBright:A}};Z.exports=ve();Z.exports.createColors=ve});var De={};it(De,{awaitCustomElementsReady:()=>O});function Le(e,t){return new Promise(n=>{let r=!1,i=setTimeout(()=>{r||(r=!0,n(!1))},t);e.then(()=>{r||(r=!0,clearTimeout(i),n(!0))},()=>{r||(r=!0,clearTimeout(i),n(!0))})})}function Xt(e){let t=new Set,n="documentElement"in e?e.documentElement:e;if(!n)return[];let r=s=>{s.localName&&s.localName.includes("-")&&t.add(s.localName)};return r(n),n.querySelectorAll("*").forEach(r),Array.from(t)}function Zt(e){let t="documentElement"in e?e.documentElement:e;if(!t)return[];let n=[],r=i=>{let s=i.updateComplete;s&&typeof s.then=="function"&&n.push(s)};return r(t),t.querySelectorAll("*").forEach(r),n}async function O(e,t=2e3){let n=[];if(!(typeof customElements<"u"&&customElements!==null))return n;let i=Xt(e);await Promise.all(i.map(async o=>{if(customElements.get(o))return;await Le(customElements.whenDefined(o),t)||n.push({tag:o,message:`Custom element "${o}" did not upgrade within ${t}ms; analysis may reflect a pre-hydration state.`})}));let s=Zt(e);return s.length>0&&await Le(Promise.all(s),t),n}var F=nt(()=>{"use strict"});var Fn={};var ce=["button","link","heading","textbox","checkbox","radio","combobox","listbox","option","list","listitem","navigation","main","banner","contentinfo","region","img","article","complementary","form","search","generic","paragraph","blockquote","code","staticText","table","row","cell","columnheader","rowheader","term","definition","figure","caption","group","dialog","meter","progressbar","status","switch","slider","spinbutton","tab","tablist","tabpanel","document","application","separator"],j={major:1,minor:0};function U(e,t=new Set){let n=[];if(t.has(e))return n.push({message:"Circular reference detected in aria-labelledby chain",element:e}),{name:"",warnings:n};t.add(e);let r=e.getAttribute("aria-labelledby");if(r)return{name:at(e,r,t,n),warnings:n};let i=e.getAttribute("aria-label");if(i&&i.trim())return{name:i.trim(),warnings:n};if(ut(e)){let o=ct(e);if(o)return{name:o,warnings:n}}if(e.tagName.toLowerCase()==="img"){let o=e.getAttribute("alt");if(o!==null)return{name:o.trim(),warnings:n}}if(dt(e)){let o=lt(e,t);if(o)return{name:o,warnings:n}}let s=e.getAttribute("title");return s&&s.trim()?{name:s.trim(),warnings:n}:{name:"",warnings:n}}function at(e,t,n,r){let i=e.ownerDocument;if(!i)return"";let s=t.trim().split(/\s+/),o=[];for(let u of s){if(!u)continue;let d=i.getElementById(u);if(!d){r.push({message:`aria-labelledby references non-existent ID: ${u}`,element:e});continue}let g=U(d,new Set(n));r.push(...g.warnings);let h=g.name||L(d);h&&o.push(h)}return o.join(" ").trim()}function ct(e){let t=e.ownerDocument;if(!t)return"";let n=e.getAttribute("id");if(n){let i=t.querySelector(`label[for="${n}"]`);if(i)return L(i)}let r=e.closest("label");return r?L(r):""}function lt(e,t){return L(e)}function L(e){if(e.getAttribute("aria-hidden")==="true")return"";let t="";for(let n of Array.from(e.childNodes))if(n.nodeType===3)t+=n.textContent||"";else if(n.nodeType===1){let r=n;if(r.getAttribute("aria-hidden")==="true")continue;t+=L(r)}return t.trim()}function ut(e){let t=e.tagName.toLowerCase();return t==="input"||t==="textarea"||t==="select"||t==="button"}function dt(e){let t=e.tagName.toLowerCase(),n=e.getAttribute("role");return!!(["button","a","h1","h2","h3","h4","h5","h6","summary","figcaption","legend","caption","th","td","li","dt","dd"].includes(t)||n&&["button","link","heading","tab","treeitem","option","row","cell","columnheader","rowheader","tooltip","menuitem","menuitemcheckbox","menuitemradio"].includes(n))}function le(e){let t=[],n=e.getAttribute("aria-describedby");if(n){let i=ft(e,n,t);if(i)return{description:i,warnings:t}}let r=e.getAttribute("title");return r&&r.trim()?{description:r.trim(),warnings:t}:{description:"",warnings:t}}function ft(e,t,n){let r=e.ownerDocument;if(!r)return"";let i=t.trim().split(/\s+/),s=[];for(let o of i){if(!o)continue;let u=r.getElementById(o);if(!u){n.push({message:`aria-describedby references non-existent ID: ${o}`,element:e});continue}let d=L(u);d&&s.push(d)}return s.join(" ").trim()}var mt={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"listbox",h1:"heading",h2:"heading",h3:"heading",h4:"heading",h5:"heading",h6:"heading",nav:"navigation",main:"main",header:"banner",footer:"contentinfo",aside:"complementary",form:"form",section:"region",ul:"list",ol:"list",li:"listitem",img:"img",article:"article",p:"paragraph",blockquote:"blockquote",code:"code",pre:"code",table:"table",tr:"row",td:"cell",th:"columnheader",dl:"list",dt:"term",dd:"definition",figure:"figure",figcaption:"caption",details:"group",summary:"button",dialog:"dialog",meter:"meter",progress:"progressbar",output:"status",fieldset:"group",legend:"caption",iframe:"document",video:"application",audio:"application",hr:"separator",caption:"caption"},pt={button:"button",submit:"button",reset:"button",checkbox:"checkbox",radio:"radio",text:"textbox",email:"textbox",password:"textbox",search:"textbox",tel:"textbox",url:"textbox",number:"spinbutton",range:"slider"};function z(e){let t=[],n=e.getAttribute("role");if(n){let i=gt(n,e,t);if(i)return{role:i,warnings:t}}return{role:bt(e,t),warnings:t}}function gt(e,t,n){let r=e.trim().toLowerCase();return r==="presentation"||r==="none"?null:ce.includes(r)?r:(n.push({message:`Invalid or unsupported role: "${e}". Falling back to implicit role.`,element:t}),null)}function bt(e,t){let n=e.tagName.toLowerCase();if(n==="input")return ht(e);if(n==="select"){let i=e.hasAttribute("multiple"),s=parseInt(e.getAttribute("size")||"0",10);return i||s>1?"listbox":"combobox"}return n==="a"?e.hasAttribute("href")?"link":null:n==="header"?ue(e)?"banner":null:n==="footer"?ue(e)?"contentinfo":null:n==="th"?e.getAttribute("scope")==="row"?"rowheader":"columnheader":n==="section"?e.hasAttribute("aria-label")||e.hasAttribute("aria-labelledby")?"region":null:mt[n]||null}function ht(e){let t=(e.getAttribute("type")||"text").toLowerCase();return pt[t]||"textbox"}function ue(e){let t=e.parentElement;for(;t;){let n=t.tagName.toLowerCase();if(n==="article"||n==="section")return!1;t=t.parentElement}return!0}function G(e){if(e.getAttribute("aria-hidden")==="true")return!1;let t=e.getAttribute("role");return t==="presentation"||t==="none"?!1:z(e).role!==null}function me(e){let t=[],n={},r=C(e,"aria-expanded",t);r!==void 0&&(n.expanded=r);let i=de(e,"aria-checked",t);i!==void 0&&(n.checked=i);let s=de(e,"aria-pressed",t);s!==void 0&&(n.pressed=s);let o=C(e,"aria-selected",t);o!==void 0&&(n.selected=o);let u=C(e,"aria-disabled",t);u!==void 0&&(n.disabled=u);let d=C(e,"aria-invalid",t);d!==void 0&&(n.invalid=d);let g=C(e,"aria-required",t);g!==void 0&&(n.required=g);let h=C(e,"aria-readonly",t);h!==void 0&&(n.readonly=h);let E=C(e,"aria-busy",t);E!==void 0&&(n.busy=E);let v=yt(e,t);v!==void 0&&(n.current=v);let y=C(e,"aria-grabbed",t);y!==void 0&&(n.grabbed=y);let m=C(e,"aria-hidden",t);m!==void 0&&(n.hidden=m);let p=Et(e,t);p!==void 0&&(n.level=p);let a=fe(e,"aria-posinset",t);a!==void 0&&(n.posinset=a);let c=fe(e,"aria-setsize",t);return c!==void 0&&(n.setsize=c),At(e,n,t),{state:n,warnings:t}}function pe(e){let t=[],n=e.tagName.toLowerCase();if(n==="input")return vt(e,t);if(n==="textarea")return xt(e,t);if(n==="select")return Nt(e,t);let r=e.getAttribute("aria-valuenow");if(r!==null){let i=parseFloat(r);if(!isNaN(i)){let s=e.getAttribute("aria-valuemin"),o=e.getAttribute("aria-valuemax"),u=e.getAttribute("aria-valuetext");return{value:{current:i,min:s!==null?parseFloat(s):void 0,max:o!==null?parseFloat(o):void 0,text:u||void 0},warnings:t}}}return{value:void 0,warnings:t}}function C(e,t,n){let r=e.getAttribute(t);if(r===null)return;let i=r.toLowerCase().trim();if(i==="true")return!0;if(i==="false")return!1;n.push({message:`Invalid ${t} value: "${r}". Expected "true" or "false".`,element:e})}function de(e,t,n){let r=e.getAttribute(t);if(r===null)return;let i=r.toLowerCase().trim();if(i==="true")return!0;if(i==="false")return!1;if(i==="mixed")return"mixed";n.push({message:`Invalid ${t} value: "${r}". Expected "true", "false", or "mixed".`,element:e})}function yt(e,t){let n=e.getAttribute("aria-current");if(n===null)return;let r=n.toLowerCase().trim(),i=["page","step","location","date","time","true","false"];if(i.includes(r))return r==="false"?!1:r;t.push({message:`Invalid aria-current value: "${n}". Expected one of: ${i.join(", ")}.`,element:e})}function Et(e,t){let n=e.getAttribute("aria-level");if(n!==null){let s=parseInt(n,10);if(!isNaN(s)&&s>=1&&s<=6)return s;t.push({message:`Invalid aria-level value: "${n}". Expected integer 1-6.`,element:e});return}let i=e.tagName.toLowerCase().match(/^h([1-6])$/);if(i)return parseInt(i[1],10)}function fe(e,t,n){let r=e.getAttribute(t);if(r===null)return;let i=parseInt(r,10);if(isNaN(i)||i<1){n.push({message:`Invalid ${t} value: "${r}". Expected positive integer.`,element:e});return}return i}function At(e,t,n){if(e.tagName.toLowerCase()==="input"){let i=e,s=i.type.toLowerCase();(s==="checkbox"||s==="radio")&&t.checked===void 0&&(t.checked=i.checked)}if("disabled"in e){let i=e;t.disabled===void 0&&i.disabled&&(t.disabled=!0)}if("required"in e){let i=e;t.required===void 0&&i.required&&(t.required=!0)}if("readOnly"in e){let i=e;t.readonly===void 0&&i.readOnly&&(t.readonly=!0)}}function vt(e,t){let n=e.type.toLowerCase();if(n==="checkbox"||n==="radio")return{value:void 0,warnings:t};if(n==="button"||n==="submit"||n==="reset")return{value:void 0,warnings:t};let r=e.value;return r?{value:{current:r,text:r},warnings:t}:{value:void 0,warnings:t}}function xt(e,t){let n=e.value;return n?{value:{current:n,text:n},warnings:t}:{value:void 0,warnings:t}}function Nt(e,t){let n=e.value,i=e.options[e.selectedIndex]?.textContent||n;return n?{value:{current:n,text:i},warnings:t}:{value:void 0,warnings:t}}var wt=["a","button","input","select","textarea","area","iframe","object","embed","audio","video"];function ge(e){let t=e.getAttribute("tabindex"),n=t!==null?parseInt(t,10):void 0;return{focusable:Tt(e,n),...t!==null&&!isNaN(n)&&{tabindex:n}}}function Tt(e,t){let n=e.tagName.toLowerCase();return Ct(e)?!1:!!(t!==void 0&&!isNaN(t)||kt(e,n))}function kt(e,t){return t==="a"||t==="area"?e.hasAttribute("href"):!!wt.includes(t)}function Ct(e){return!!("disabled"in e&&e.disabled||e.getAttribute("aria-disabled")==="true")}function J(e){if(e.getAttribute("aria-hidden")==="true")return!0;if(typeof getComputedStyle=="function")try{let t=getComputedStyle(e);if(t.display==="none"||t.visibility==="hidden")return!0}catch{}return!1}function Y(e,t,n){if(e.nodeType===3){let r=(e.textContent||"").trim();r.length>0&&t.push({role:"staticText",name:r,state:{},focus:{focusable:!1},children:[]});return}if(e.nodeType===1){let r=e;if(J(r)||Rt(r))return;if(!G(r)){let s=St(r,n);t.push(...s);return}let i=Ae(r,n);i&&t.push(i)}}function Rt(e){if(e.tagName.toLowerCase()!=="label")return!1;let t=e.getAttribute("for");if(t){let i=e.ownerDocument?.getElementById(t);if(i&&be(i))return!0}let n=e.querySelector("input, select, textarea, button, meter, progress");return!!(n&&be(n))}function be(e){let t=e.tagName.toLowerCase();return t==="input"?(e.getAttribute("type")||"text").toLowerCase()!=="hidden":t==="select"||t==="textarea"||t==="button"||t==="meter"||t==="progress"}function St(e,t){return X(e,t)}function X(e,t){let n=[];if(e.shadowRoot){for(let r of Array.from(e.shadowRoot.childNodes))ye(r,n,t);return n}e.localName&&e.localName.includes("-")&&e.childNodes.length===0&&t.push({message:`Custom element <${e.localName}> has no accessible children and may have a closed shadow root; its content could not be analyzed.`,element:e});for(let r of Array.from(e.childNodes))Y(r,n,t);return n}function ye(e,t,n){if(e.nodeType===1){let r=e;if(r.localName==="slot"){let i=r,s=[];if(typeof i.assignedNodes=="function")try{s=Array.from(i.assignedNodes({flatten:!0}))}catch{s=[]}if(s.length>0)for(let o of s)Y(o,t,n);else for(let o of Array.from(i.childNodes))ye(o,t,n);return}}Y(e,t,n)}function Ee(e,t){let n=[];if(J(e))return{model:{version:j,root:{role:"generic",name:"",state:{},focus:{focusable:!1},children:[]},metadata:{extractedAt:new Date().toISOString(),...t&&{sourceHash:t}}},warnings:n};let i=Ae(e,n)||Dt(e,n);return{model:{version:j,root:i,metadata:{extractedAt:new Date().toISOString(),...t&&{sourceHash:t}}},warnings:n}}var he=new Set(["radio","option","listitem","tab"]);function Lt(e){let t=new Map;for(let r of e)he.has(r.role)&&t.set(r.role,(t.get(r.role)??0)+1);let n=new Map;for(let r of e){if(!he.has(r.role))continue;let i=t.get(r.role);if(i<2)continue;let s=(n.get(r.role)??0)+1;n.set(r.role,s),r.state.posinset===void 0&&(r.state.posinset=s),r.state.setsize===void 0&&(r.state.setsize=i)}}function Ae(e,t){if(J(e)||!G(e))return null;let n=z(e);if(t.push(...n.warnings.map(E=>({message:E.message,element:E.element}))),!n.role)return null;let r=U(e);t.push(...r.warnings.map(E=>({message:E.message,element:E.element})));let i=le(e);t.push(...i.warnings.map(E=>({message:E.message,element:E.element})));let s=me(e);t.push(...s.warnings.map(E=>({message:E.message,element:E.element})));let o=pe(e);t.push(...o.warnings.map(E=>({message:E.message,element:E.element})));let u=ge(e),d=X(e,t);return e.tagName.toLowerCase()==="select"&&n.role==="combobox"&&(d=[],s.state.expanded===void 0&&(s.state.expanded=!1)),Lt(d),{role:n.role,name:r.name,...i.description&&{description:i.description},...o.value&&{value:o.value},state:s.state,focus:u,children:d}}function Dt(e,t){let n=X(e,t);return{role:"generic",name:"",state:{},focus:{focusable:!1},children:n}}var w=st(xe(),1),T=e=>e;function R(e){return e?{error:w.default.red,warning:w.default.yellow,info:w.default.blue,success:w.default.green,heading:t=>w.default.bold(w.default.cyan(t)),title:t=>w.default.bold(w.default.cyan(t)),dim:w.default.dim,roleName:w.default.cyan,stateName:w.default.yellow,elementName:t=>w.default.bold(w.default.white(t)),sectionHeader:t=>w.default.bold(w.default.white(t)),description:w.default.dim,bold:w.default.bold,enabled:!0}:{error:T,warning:T,info:T,success:T,heading:T,title:T,dim:T,roleName:T,stateName:T,elementName:T,sectionHeader:T,description:T,bold:T,enabled:!1}}function Ne(e,t){let n=R(t??!1),r=[];return Q(e.root,r,n),r.join(`
2
+ `)}function Q(e,t,n){let r=Ot(e,n);r&&t.push(r);for(let i of e.children){if(i.name&&i.name===e.name&&e.children.length===1){for(let s of i.children)Q(s,t,n);continue}Q(i,t,n)}}function Ot(e,t){let n=[];e.name&&n.push(t.elementName(e.name));let r=It(e);r&&n.push(t.roleName(r));let i=Mt(e);if(i&&n.push(t.stateName(i)),e.value){let s=e.value.text||String(e.value.current);s&&n.push(s)}return e.description&&n.push(t.description(e.description)),n.join(", ")}function It(e){let t=e.role;switch(t){case"button":return"button";case"link":return"link";case"heading":return e.state.level?`heading level ${e.state.level}`:"heading";case"textbox":return"edit";case"checkbox":return"checkbox";case"radio":return"radio button";case"combobox":return"combo box";case"listbox":return"list box";case"option":return"option";case"list":return"list";case"listitem":return"list item";case"navigation":return"navigation landmark";case"main":return"main landmark";case"banner":return"banner landmark";case"contentinfo":return"content information landmark";case"region":return"region landmark";case"complementary":return"complementary landmark";case"form":return"form landmark";case"search":return"search landmark";case"img":return"graphic";case"article":return"article";case"generic":return"";case"staticText":case"paragraph":case"cell":case"term":case"definition":case"caption":return"";case"blockquote":return"block quote";case"code":return"code";case"table":return"table";case"row":return"row";case"columnheader":return"column header";case"rowheader":return"row header";case"figure":return"figure";case"dialog":return"dialog";case"meter":return"meter";case"progressbar":return"progress bar";case"status":return"status";case"group":return e.name?"grouping":"";case"document":return"document";case"application":return"embedded object";case"separator":return"separator";default:return t}}function Mt(e){let t=[];return e.state.expanded!==void 0&&t.push(e.state.expanded?"expanded":"collapsed"),e.state.checked!==void 0&&(e.state.checked==="mixed"?t.push("half checked"):t.push(e.state.checked?"checked":"not checked")),e.state.pressed!==void 0&&(e.state.pressed==="mixed"?t.push("half pressed"):t.push(e.state.pressed?"pressed":"not pressed")),e.state.selected!==void 0&&t.push(e.state.selected?"selected":"not selected"),e.state.disabled&&t.push("unavailable"),e.state.invalid&&t.push("invalid entry"),e.state.required&&t.push("required"),e.state.readonly&&t.push("read only"),e.state.busy&&t.push("busy"),e.state.current&&(e.state.current==="page"?t.push("current page"):e.state.current==="step"?t.push("current step"):e.state.current==="location"?t.push("current location"):e.state.current==="date"?t.push("current date"):e.state.current==="time"?t.push("current time"):e.state.current==="true"&&t.push("current")),e.state.grabbed!==void 0&&t.push(e.state.grabbed?"grabbed":"not grabbed"),t.join(", ")}function we(e,t){let n=R(t??!1),r=[];return ee(e.root,r,n),r.join(`
3
+ `)}function ee(e,t,n){let r=_t(e,n);r&&t.push(r);for(let i of e.children){if(i.name&&i.name===e.name&&e.children.length===1){for(let s of i.children)ee(s,t,n);continue}ee(i,t,n)}}function _t(e,t){let n=[];e.name&&n.push(t.elementName(e.name));let r=$t(e);r&&n.push(t.roleName(r));let i=Bt(e);if(i&&n.push(t.stateName(i)),e.value){let s=e.value.text||String(e.value.current);s&&n.push(s)}return e.description&&n.push(t.description(e.description)),n.join(", ")}function $t(e){let t=e.role;switch(t){case"button":return"button";case"link":return"clickable";case"heading":return e.state.level?`heading ${e.state.level}`:"heading";case"textbox":return"edit";case"checkbox":return"check box";case"radio":return"radio button";case"combobox":return"combo box";case"listbox":return"list box";case"option":return"option";case"list":return"list";case"listitem":return"list item";case"navigation":return"navigation region";case"main":return"main region";case"banner":return"banner region";case"contentinfo":return"content information region";case"region":return"region";case"img":return"graphic";case"article":return"article";case"complementary":return"complementary region";case"form":return"form";case"search":return"search region";case"generic":return"";case"staticText":case"paragraph":case"term":case"definition":case"caption":return"";case"blockquote":return"block quote";case"code":return"code";case"table":{let n=e.children.filter(s=>s.role==="row"),r=n.length,i=n.length>0?n[0].children.length:0;return`table with ${r} rows and ${i} columns`}case"row":return`row ${e.state.posinset??0}`;case"cell":return`column ${e.state.posinset??0}`;case"columnheader":return"column header";case"rowheader":return"row header";case"figure":return"figure";case"dialog":return"dialog";case"meter":return"meter";case"progressbar":return"progress bar";case"status":return"status";case"group":return e.name?"group":"";case"document":return"frame";case"application":return"embedded object";case"separator":return"separator";default:return t}}function Bt(e){let t=[];if(e.state.expanded!==void 0&&t.push(e.state.expanded?"expanded":"collapsed"),e.state.checked!==void 0&&(e.state.checked==="mixed"?t.push("partially checked"):e.state.checked?t.push("checked"):t.push("not checked")),e.state.pressed!==void 0&&(e.state.pressed==="mixed"?t.push("partially pressed"):e.state.pressed?t.push("pressed"):t.push("not pressed")),e.state.selected!==void 0&&t.push(e.state.selected?"selected":"not selected"),e.state.disabled&&t.push("unavailable"),e.state.invalid&&t.push("invalid entry"),e.state.required&&t.push("required"),e.state.readonly&&t.push("read only"),e.state.busy&&t.push("busy"),e.state.current)switch(e.state.current){case"page":t.push("current page");break;case"step":t.push("current step");break;case"location":t.push("current location");break;case"date":t.push("current date");break;case"time":t.push("current time");break;case"true":t.push("current");break}return e.state.grabbed!==void 0&&t.push(e.state.grabbed?"grabbed":"not grabbed"),t.join(", ")}function Te(e,t){let n=R(t??!1),r=[];return ne(e.root,r,n),r.join(`
4
+ `)}function ne(e,t,n){let r=Wt(e,n);r&&t.push(r);for(let i of e.children){if(i.name&&i.name===e.name&&e.children.length===1){for(let s of i.children)ne(s,t,n);continue}ne(i,t,n)}}function Ft(e){return e==="slider"||e==="spinbutton"||e==="combobox"}function Ht(e){return e==="progressbar"||e==="meter"}function Pt(e){return e.role!=="list"&&e.role!=="status"||e.name?!1:e.children.length>0}function Wt(e,t){if(Pt(e))return"";let n=[];if(Ft(e.role)&&e.value!==void 0){let o=e.value.text||String(e.value.current);o&&n.push(o),e.name&&n.push(t.elementName(e.name));let u=B(e);u&&n.push(t.roleName(u));let d=te(e);return d&&n.push(t.stateName(d)),e.description&&n.push(t.description(e.description)),n.join(", ")}if(Ht(e.role)&&e.value!==void 0){e.name&&n.push(t.elementName(e.name));let o=e.value.text||String(e.value.current);o&&n.push(o);let u=B(e);u&&n.push(t.roleName(u));let d=te(e);return d&&n.push(t.stateName(d)),e.description&&n.push(t.description(e.description)),n.join(", ")}if(Kt(e.role)){let o=B(e);o&&n.push(t.roleName(o)),e.name&&n.push(t.elementName(e.name))}else{e.name&&n.push(t.elementName(e.name));let o=B(e);o&&n.push(t.roleName(o))}let s=te(e);if(s&&n.push(t.stateName(s)),e.value){let o=e.value.text||String(e.value.current);o&&n.push(o)}return e.state.posinset!==void 0&&e.state.setsize!==void 0&&n.push(`${e.state.posinset} of ${e.state.setsize}`),e.description&&n.push(t.description(e.description)),n.join(", ")}function Kt(e){return e==="heading"||e==="navigation"||e==="main"||e==="banner"||e==="contentinfo"||e==="complementary"||e==="region"||e==="form"||e==="search"||e==="blockquote"||e==="figure"||e==="dialog"||e==="group"||e==="document"}function B(e){let t=e.role;switch(t){case"button":return"button";case"link":return"link";case"heading":return e.state.level?`heading level ${e.state.level}`:"heading";case"textbox":return"edit text";case"checkbox":return"checkbox";case"radio":return"radio button";case"combobox":return"combo box";case"listbox":return"list box";case"option":return"option";case"list":return"list";case"listitem":return"";case"navigation":return"navigation";case"main":return"main";case"banner":return"banner";case"contentinfo":return"content information";case"region":return"region";case"complementary":return"complementary";case"form":return"form";case"search":return"search";case"img":return"image";case"article":return"article";case"generic":return"";case"staticText":case"paragraph":case"cell":case"term":case"definition":case"caption":return"";case"blockquote":return"blockquote";case"code":return"code";case"table":{let n=e.children.filter(s=>s.role==="row"),r=n.length,i=n.length>0?n[0].children.length:0;return`table, ${r} rows, ${i} columns`}case"row":return"row";case"columnheader":return"column header";case"rowheader":return"row header";case"figure":return"figure";case"dialog":return"web dialog";case"meter":return"level indicator";case"progressbar":return"progress indicator";case"status":return"status";case"switch":return"switch";case"slider":return"slider";case"spinbutton":return"stepper";case"tab":return"tab";case"tablist":return e.name,"tab group";case"tabpanel":return"tab panel";case"group":return e.name?"group":"";case"document":return"frame";case"application":return"embedded object";case"separator":return"separator";default:return t}}function te(e){let t=[];return e.state.expanded!==void 0&&t.push(e.state.expanded?"expanded":"collapsed"),e.state.checked!==void 0&&(e.state.checked==="mixed"?t.push("mixed"):e.role==="switch"?t.push(e.state.checked?"on":"off"):e.role==="radio"?e.state.checked&&t.push("selected"):t.push(e.state.checked?"checked":"unchecked")),e.state.pressed!==void 0&&(e.state.pressed==="mixed"?t.push("mixed"):t.push(e.state.pressed?"selected":"unselected")),e.state.selected!==void 0&&e.role!=="tab"&&t.push(e.state.selected?"selected":"unselected"),e.state.disabled&&t.push("dimmed"),e.state.invalid&&t.push("invalid data"),e.state.required&&t.push("required"),e.state.readonly&&t.push("read only"),e.state.busy&&t.push("busy"),e.state.current&&(e.state.current==="page"?t.push("current page"):e.state.current==="step"?t.push("current step"):e.state.current==="location"?t.push("current location"):e.state.current==="date"?t.push("current date"):e.state.current==="time"?t.push("current time"):e.state.current==="true"&&t.push("current")),e.state.grabbed!==void 0&&t.push(e.state.grabbed?"grabbed":"not grabbed"),t.join(", ")}function Ce(e,t){let n=R(t??!1),r=[];return re(e.root,r,n),r.join(`
5
+ `)}function re(e,t,n){let r=Vt(e,n);r&&t.push(r);for(let i of e.children){if(i.name&&i.name===e.name&&e.children.length===1){for(let s of i.children)re(s,t,n);continue}re(i,t,n)}}function Vt(e,t){let n=[];if(qt(e.role)){let s=ke(e);s&&n.push(t.roleName(s)),e.name&&n.push(t.elementName(e.name))}else{e.name&&n.push(t.elementName(e.name));let s=ke(e);s&&n.push(t.roleName(s))}let i=jt(e);if(i&&n.push(t.stateName(i)),e.value){let s=e.value.text||String(e.value.current);s&&n.push(s)}return e.description&&n.push(t.description(e.description)),n.join(", ")}function qt(e){return["link","heading","navigation","main","banner","contentinfo","complementary","region","form","search","blockquote","figure","dialog","group","document"].includes(e)}function ke(e){let t=e.role;switch(t){case"button":return"button";case"link":return"link";case"heading":return e.state.level?`Heading level ${e.state.level}`:"Heading";case"textbox":return"edit";case"checkbox":return"check box";case"radio":return"radio button";case"combobox":return"combo box";case"listbox":return"list box";case"option":return"option";case"list":return"list";case"listitem":return"list item";case"navigation":return"navigation";case"main":return"main";case"banner":return"banner";case"contentinfo":return"content info";case"complementary":return"complementary";case"form":return"form";case"search":return"search";case"region":return"region";case"img":return"image";case"article":return"article";case"generic":return"";case"staticText":case"paragraph":case"cell":case"term":case"definition":case"caption":return"";case"blockquote":return"block quote";case"code":return"code";case"table":{let n=e.children.filter(s=>s.role==="row"),r=n.length,i=n.length>0?n[0].children.length:0;return`table, ${r} rows, ${i} columns`}case"row":return"row";case"columnheader":return"column header";case"rowheader":return"row header";case"figure":return"figure";case"dialog":return"dialog";case"meter":return"meter";case"progressbar":return"progress bar";case"status":return"status";case"group":return e.name?"group":"";case"document":return"document";case"application":return"application";case"separator":return"separator";default:return t}}function jt(e){let t=[];return e.state.expanded!==void 0&&t.push(e.state.expanded?"expanded":"collapsed"),e.state.checked!==void 0&&(e.state.checked==="mixed"?t.push("partially selected"):t.push(e.state.checked?"checked":"unchecked")),e.state.pressed!==void 0&&(e.state.pressed==="mixed"?t.push("partially pressed"):t.push(e.state.pressed?"pressed":"not pressed")),e.state.selected!==void 0&&t.push(e.state.selected?"selected":"not selected"),e.state.disabled&&t.push("disabled"),e.state.invalid&&t.push("invalid"),e.state.required&&t.push("required"),e.state.readonly&&t.push("read only"),e.state.busy&&t.push("busy"),e.state.current&&(e.state.current==="page"?t.push("current page"):e.state.current==="step"?t.push("current step"):e.state.current==="location"?t.push("current location"):e.state.current==="date"?t.push("current date"):e.state.current==="time"?t.push("current time"):e.state.current==="true"&&t.push("current")),e.state.grabbed!==void 0&&t.push(e.state.grabbed?"grabbed":"not grabbed"),t.join(", ")}function Re(e){let t={totalElements:0,roleDistribution:{},landmarkCount:0,headingCount:0,interactiveCount:0,focusableCount:0,statesUsed:new Set},n=[],r=[],i=[],s=[];return Se(e.root,t,n,r,i),Gt(n,s),Yt(r,s),Jt(i,s),{statistics:t,landmarks:n,headings:r,interactiveElements:i,issues:s}}function Se(e,t,n,r,i){e.role!=="generic"&&(t.totalElements++,t.roleDistribution[e.role]=(t.roleDistribution[e.role]||0)+1,Ut(e.role)&&(t.landmarkCount++,n.push(e)),e.role==="heading"&&(t.headingCount++,r.push(e)),zt(e.role)&&(t.interactiveCount++,i.push(e)),e.focus.focusable&&t.focusableCount++,Object.keys(e.state).forEach(s=>{e.state[s]!==void 0&&t.statesUsed.add(s)}));for(let s of e.children)Se(s,t,n,r,i)}function Ut(e){return["navigation","main","banner","contentinfo","region","complementary","form","search"].includes(e)}function zt(e){return["button","link","textbox","checkbox","radio","combobox","listbox","option"].includes(e)}function Gt(e,t){e.length===0&&t.push({severity:"info",message:"No landmarks found",suggestion:"Consider adding semantic landmarks (main, nav, aside, etc.)"}),e.forEach(r=>{!r.name&&["navigation","region","complementary","form"].includes(r.role)&&t.push({severity:"warning",message:`${r.role} landmark has no accessible name`,suggestion:`Add aria-label="${r.role==="navigation"?"Main navigation":"Descriptive name"}" to the ${r.role} element`,element:{role:r.role,name:r.name}})});let n=new Map;e.forEach(r=>{n.has(r.role)||n.set(r.role,[]),n.get(r.role).push(r)}),n.forEach((r,i)=>{if(r.length>1){let s=r.every(u=>!u.name),o=r.every(u=>u.name===r[0].name);(s||o)&&t.push({severity:"warning",message:`Multiple ${i} landmarks without distinguishing names`,suggestion:`Add unique aria-label attributes to distinguish between ${i} landmarks`})}})}function Yt(e,t){if(e.length===0)return;let n=e[0];n.state.level&&n.state.level!==1&&t.push({severity:"error",message:`First heading is h${n.state.level} (should be h1)`,suggestion:`Change <h${n.state.level}> to <h1> or add h1 before it`,element:{role:n.role,name:n.name}});for(let r=1;r<e.length;r++){let i=e[r-1].state.level||1,s=e[r].state.level||1;s>i+1&&t.push({severity:"error",message:`Heading hierarchy violation: h${i} followed by h${s} (skipped h${i+1})`,suggestion:`Change h${s} to h${i+1} or add intermediate heading levels`,element:{role:e[r].role,name:e[r].name}})}}function Jt(e,t){e.forEach(n=>{n.name||t.push({severity:"error",message:`${n.role} has no accessible name`,suggestion:n.role==="button"?"Add text content or aria-label to button":n.role==="link"?"Add text content or aria-label to link":`Add aria-label to ${n.role}`,element:{role:n.role,name:n.name}}),n.role==="textbox"&&!n.name&&t.push({severity:"error",message:"Input has no associated label",suggestion:"Add <label> element or aria-label attribute",element:{role:n.role,name:n.name}})})}var Qt=new Set(["navigation","main","banner","contentinfo","complementary","region","form","search"]),en=new Set(["button","link","textbox","checkbox","radio","combobox","listbox","option"]);function tn(e){let t={totalElements:0,interactiveElements:0,landmarks:0,headings:0};function n(r){r.role!=="generic"&&r.role!=="staticText"&&t.totalElements++,en.has(r.role)&&t.interactiveElements++,Qt.has(r.role)&&t.landmarks++,r.role==="heading"&&t.headings++;for(let i of r.children)n(i)}return n(e),t}function nn(e){return Re(e).issues.map(n=>({severity:n.severity,message:n.message,selector:n.element?`${n.element.role}${n.element.name?` "${n.element.name}"`:""}`:n.suggestion||""}))}function Oe(e=[]){return{nvda:[],jaws:[],voiceover:[],narrator:[],audit:[],stats:{totalElements:0,interactiveElements:0,landmarks:0,headings:0},warnings:[...e]}}function ie(e,t=[]){if(!e)return Oe(t);let n;try{n=Ee(e)}catch(v){return Oe([...t,`Analysis failed: ${v instanceof Error?v.message:String(v)}`])}let{model:r,warnings:i}=n,s=Ne(r,!1).split(`
6
+ `).filter(Boolean),o=we(r,!1).split(`
7
+ `).filter(Boolean),u=Te(r,!1).split(`
8
+ `).filter(Boolean),d=Ce(r,!1).split(`
9
+ `).filter(Boolean),g=nn(r),h=tn(r.root),E=[...t,...i.map(v=>v.message)];return{nvda:s,jaws:o,voiceover:u,narrator:d,audit:g,stats:h,warnings:E}}async function H(e,t){let{awaitCustomElementsReady:n}=await Promise.resolve().then(()=>(F(),De)),r=e??void 0,i=r&&r.ownerDocument?r.ownerDocument:r,s=i?await n(i,t):[];return ie(e,s.map(o=>o.message))}function k(e){if(e.id)return`#${Ie(e.id)}`;let t=e.ownerDocument;if(!t)return I(e);let n=[],r=e;for(;r&&r!==t.documentElement;){let s=rn(r,t);n.unshift(s);let o=n.join(" > ");try{let u=t.querySelectorAll(o);if(u.length===1&&u[0]===e)return o}catch{}r=r.parentElement}return n.length===0?I(e):n.join(" > ")}function rn(e,t){let n=I(e),r=e.parentElement;if(r){if(Array.from(r.children).filter(u=>I(u)===n).length===1)return n}else return n;let i=sn(e);if(i.length>0){let o=`${n}.${i.join(".")}`;if(r&&Array.from(r.children).filter(d=>I(d)!==n?!1:i.every(g=>d.classList.contains(g))).length===1)return o}let s=an(e);return`${n}:nth-child(${s})`}function I(e){return e.tagName.toLowerCase()}function sn(e){let t=Array.from(e.classList);return t.length===0?[]:t.filter(r=>!on(r)).sort().map(Ie)}function on(e){return!!(/^[a-f0-9]{5,}$/i.test(e)||/[_-][a-f0-9]{5,}$/i.test(e)||/_{2,}[A-Za-z0-9]{4,}$/.test(e))}function an(e){let t=e.parentElement;return t?Array.from(t.children).indexOf(e)+1:1}function Ie(e){if(!e)return e;let t="";for(let n=0;n<e.length;n++){let r=e[n],i=r.charCodeAt(0);if(n===0&&i>=48&&i<=57){t+=`\\3${r} `;continue}if(r==="!"||r==='"'||r==="#"||r==="$"||r==="%"||r==="&"||r==="'"||r==="("||r===")"||r==="*"||r==="+"||r===","||r==="."||r==="/"||r===":"||r===";"||r==="<"||r==="="||r===">"||r==="?"||r==="@"||r==="["||r==="\\"||r==="]"||r==="^"||r==="`"||r==="{"||r==="|"||r==="}"||r==="~"||r===" "){t+=`\\${r}`;continue}t+=r}return t}function cn(e,t){let n=e.getAttribute("aria-label");if(n&&n.trim())return n.trim();let r=e.getAttribute("aria-labelledby");if(r&&r.trim()){let s=r.trim().split(/\s+/),o=[];for(let d of s){let g=t.getElementById(d);g&&g.textContent&&o.push(g.textContent.trim())}let u=o.join(" ");if(u)return u}let i=e.textContent;return i&&i.trim()?i.trim():""}function ln(e){let t=e.getAttribute("role");if(t&&t.trim())return t.trim();switch(e.tagName.toLowerCase()){case"button":return"button";case"a":return e.hasAttribute("href")?"link":"generic";case"input":switch((e.getAttribute("type")||"text").toLowerCase()){case"button":case"submit":case"reset":case"image":return"button";case"checkbox":return"checkbox";case"radio":return"radio";case"range":return"slider";case"search":return"searchbox";default:return"textbox"}case"textarea":return"textbox";case"select":return e.hasAttribute("multiple")?"listbox":"combobox";case"nav":return"navigation";case"main":return"main";case"header":return"banner";case"footer":return"contentinfo";case"aside":return"complementary";case"form":return"form";case"section":return e.hasAttribute("aria-label")||e.hasAttribute("aria-labelledby")?"region":"generic";case"article":return"article";case"dialog":return"dialog";case"table":return"table";case"ul":case"ol":return"list";case"li":return"listitem";case"img":return e.getAttribute("alt")===""?"presentation":"img";case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return"heading";case"option":return"option";case"progress":return"progressbar";case"output":return"status";case"menu":return"menu";default:return"generic"}}function Me(e){let{document:t,onEvent:n,getTimestamp:r}=e,i=!1,s=null;function o(d){return{role:ln(d),accessibleName:cn(d,t),selector:k(d)}}function u(d){if(!i)return;let g=d.target;if(!g||!(g instanceof t.defaultView.Element))return;let h=o(g),E={type:"FOCUS_CHANGED",timestamp:r(),target:h,payload:{kind:"focus_changed",previousTarget:s}};n(E),s=h}return{start(){i||(i=!0,s=null,t.addEventListener("focusin",u))},stop(){i&&(i=!1,t.removeEventListener("focusin",u))},get isActive(){return i}}}var _e="role",un=new Set(["aria-label","aria-labelledby"]),dn=new Set(["aria-expanded","aria-selected","aria-checked","aria-disabled","aria-hidden"]),fn=[_e,"aria-label","aria-labelledby","aria-expanded","aria-selected","aria-checked","aria-disabled","aria-hidden"];function se(e,t){let n=e.getAttribute("aria-label");if(n&&n.trim())return n.trim();let r=e.getAttribute("aria-labelledby");if(r&&r.trim()){let s=r.trim().split(/\s+/),o=[];for(let d of s){let g=t.getElementById(d);g&&g.textContent&&o.push(g.textContent.trim())}let u=o.join(" ");if(u)return u}let i=e.textContent;return i&&i.trim()?i.trim():""}function mn(e){let t=e.getAttribute("role");if(t&&t.trim())return t.trim();switch(e.tagName.toLowerCase()){case"button":return"button";case"a":return e.hasAttribute("href")?"link":"generic";case"input":switch((e.getAttribute("type")||"text").toLowerCase()){case"button":case"submit":case"reset":case"image":return"button";case"checkbox":return"checkbox";case"radio":return"radio";case"range":return"slider";case"search":return"searchbox";default:return"textbox"}case"textarea":return"textbox";case"select":return e.hasAttribute("multiple")?"listbox":"combobox";case"nav":return"navigation";case"main":return"main";case"header":return"banner";case"footer":return"contentinfo";case"aside":return"complementary";case"form":return"form";case"section":return e.hasAttribute("aria-label")||e.hasAttribute("aria-labelledby")?"region":"generic";case"article":return"article";case"dialog":return"dialog";case"table":return"table";case"ul":case"ol":return"list";case"li":return"listitem";case"img":return e.getAttribute("alt")===""?"presentation":"img";case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":return"heading";case"option":return"option";case"progress":return"progressbar";case"output":return"status";case"menu":return"menu";default:return"generic"}}function $e(e){let{document:t,onEvent:n,getTimestamp:r}=e,i=null,s=!1;function o(m){if(s)for(let p of m){if(p.type!=="attributes")continue;let a=p.attributeName;if(!a)continue;let c=p.target;c instanceof Element&&(a===_e?u(c,p.oldValue):un.has(a)?d(c,a,p.oldValue):dn.has(a)&&g(c,a,p.oldValue))}}function u(m,p){let a=p?.trim()||E(m),c=m.getAttribute("role")?.trim()||E(m);if(a===c)return;let l=h(m),f={kind:"role_changed",previousRole:a,newRole:c};n({type:"ROLE_CHANGED",timestamp:r(),target:l,payload:f})}function d(m,p,a){let c,l;if(p==="aria-label"){if(c=a?.trim()||"",l=se(m,t),!c&&a===null){let x=m.getAttribute("aria-labelledby");x?c=v(m,x):c=m.textContent?.trim()||""}}else{if(c=a?v(m,a):"",!c&&a===null){let x=m.getAttribute("aria-label");x?c=x.trim():c=m.textContent?.trim()||""}l=se(m,t)}if(c===l)return;let f=h(m),b={kind:"accessible_name_changed",previousName:c,newName:l};n({type:"ACCESSIBLE_NAME_CHANGED",timestamp:r(),target:f,payload:b})}function g(m,p,a){let c=m.getAttribute(p),l=y(a),f=y(c);if(l===f)return;let b=h(m),x={kind:"state_changed",attribute:p,previousValue:l,newValue:f};n({type:"STATE_CHANGED",timestamp:r(),target:b,payload:x})}function h(m){return{role:mn(m),accessibleName:se(m,t),selector:k(m)}}function E(m){switch(m.tagName.toLowerCase()){case"button":return"button";case"a":return m.hasAttribute("href")?"link":"generic";case"input":switch((m.getAttribute("type")||"text").toLowerCase()){case"button":case"submit":case"reset":case"image":return"button";case"checkbox":return"checkbox";case"radio":return"radio";default:return"textbox"}default:return"generic"}}function v(m,p){let a=m.ownerDocument;if(!a)return"";let c=p.trim().split(/\s+/).filter(Boolean),l=[];for(let f of c){let b=a.getElementById(f);b&&b.textContent&&l.push(b.textContent.trim())}return l.join(" ")}function y(m){return m===null?null:m==="true"?!0:m==="false"?!1:m}return{start(){s||(s=!0,i=new MutationObserver(o),i.observe(t.body??t.documentElement,{attributes:!0,attributeOldValue:!0,attributeFilter:fn,subtree:!0}))},stop(){s&&(s=!1,i&&(i.disconnect(),i=null))},get isActive(){return s}}}var Be=new Set(["alert","status","log","marquee","timer"]),pn={alert:"assertive",status:"polite",log:"polite",marquee:"polite",timer:"polite"};function Fe(e,t){let n=null,r=null,i=new Set;function s(c){let l=c.getAttribute("aria-live");if(l==="assertive")return"assertive";if(l==="polite")return"polite";if(l==="off")return null;let f=c.getAttribute("role");return f&&Be.has(f)?pn[f]||"polite":l&&l!=="off"?"polite":null}function o(c){return c.getAttribute("aria-atomic")==="true"}function u(c){let l=c.getAttribute("role")||"region",f=c.getAttribute("aria-label")||c.getAttribute("aria-labelledby")||"",b=k(c);return{role:l,accessibleName:f,selector:b}}function d(c){let l=[];return c.forEach(f=>{if(f.nodeType===Node.TEXT_NODE){let b=f.textContent?.trim();b&&l.push(b)}else if(f.nodeType===Node.ELEMENT_NODE){let b=f.textContent?.trim();b&&l.push(b)}}),l.join(" ").trim()}function g(c,l,f){if(!l)return;let b=u(c);t({type:"ANNOUNCEMENT",target:b,payload:{kind:"announcement",politeness:f,text:l}})}function h(c){let l=c;for(;l;){if(l.nodeType===Node.ELEMENT_NODE&&i.has(l))return l;l=l.parentNode}return null}function E(c){let l=new Map;for(let f of c){let b=h(f.target);if(!b)continue;l.has(b)||l.set(b,{addedText:[],charDataChanged:!1});let x=l.get(b);if(f.type==="childList"&&f.addedNodes.length>0){let N=d(f.addedNodes);N&&x.addedText.push(N)}else f.type==="characterData"&&(x.charDataChanged=!0)}for(let[f,b]of l){let x=s(f);if(!x)continue;let N;o(f)?N=f.textContent?.trim()||"":b.addedText.length>0?N=b.addedText.join(" ").trim():b.charDataChanged?N=f.textContent?.trim()||"":N="",g(f,N,x)}}function v(c){for(let l of c)l.type==="childList"&&(l.addedNodes.forEach(f=>{if(f.nodeType!==Node.ELEMENT_NODE)return;let b=f;s(b)!==null&&!i.has(b)&&y(b),b.querySelectorAll("[aria-live], [role]").forEach(N=>{s(N)!==null&&!i.has(N)&&y(N)})}),l.removedNodes.forEach(f=>{if(f.nodeType!==Node.ELEMENT_NODE)return;let b=f;i.has(b)&&i.delete(b),b.querySelectorAll("[aria-live], [role]").forEach(N=>{i.delete(N)})}))}function y(c){i.add(c)}function m(){e.querySelectorAll("[aria-live]").forEach(l=>{s(l)!==null&&y(l)}),Be.forEach(l=>{e.querySelectorAll(`[role="${l}"]`).forEach(b=>{i.has(b)||y(b)})})}function p(){m(),n=new MutationObserver(E);let c=e.body;c&&n.observe(c,{childList:!0,characterData:!0,subtree:!0,characterDataOldValue:!0}),r=new MutationObserver(v),c&&r.observe(c,{childList:!0,subtree:!0})}function a(){n&&(n.disconnect(),n=null),r&&(r.disconnect(),r=null),i.clear()}return{start:p,stop:a}}function P(e,t){let n=e.getAttribute("aria-label");if(n&&n.trim())return n.trim();let r=e.getAttribute("aria-labelledby");if(r&&r.trim()){let o=r.trim().split(/\s+/),u=[];for(let g of o){let h=t.getElementById(g);h&&h.textContent&&u.push(h.textContent.trim())}let d=u.join(" ");if(d)return d}let i=e.getAttribute("title");if(i&&i.trim())return i.trim();let s=e.querySelector("h1, h2, h3, h4, h5, h6");return s&&s.textContent&&s.textContent.trim()?s.textContent.trim():""}function gn(e){let t=e.getAttribute("role");return t&&t.trim()?t.trim():e.tagName.toLowerCase()==="dialog"?"dialog":"generic"}function He(e){if(e.tagName.toLowerCase()==="dialog")return!0;let t=e.getAttribute("role");return t==="dialog"||t==="alertdialog"}function bn(e){return e.getAttribute("aria-modal")==="true"}function Pe(e){let{document:t,onEvent:n,getTimestamp:r}=e,i=!1,s=null,o=[];function u(y){return{role:gn(y),accessibleName:P(y,t),selector:k(y)}}function d(y){let m=P(y,t),p=bn(y),a=u(y);o.push({element:y,name:m,selector:a.selector});let c={type:"DIALOG_OPENED",timestamp:r(),target:a,payload:{kind:"dialog_opened",dialogName:m,isModal:p}};n(c)}function g(y){let m=P(y,t),p=u(y),a=o.findIndex(l=>l.element===y);a!==-1&&o.splice(a,1);let c={type:"DIALOG_CLOSED",timestamp:r(),target:p,payload:{kind:"dialog_closed",dialogName:m}};n(c)}function h(y){return o.some(m=>m.element===y)}function E(y){if(i)for(let m of y){if(m.type==="attributes"){let p=m.target;if(!(p instanceof t.defaultView.Element))continue;if(m.attributeName==="open"&&p.tagName.toLowerCase()==="dialog"&&(p.hasAttribute("open")?h(p)||d(p):h(p)&&g(p)),m.attributeName==="aria-modal"&&He(p)&&!h(p)&&v(p)&&d(p),m.attributeName==="role"){let a=m.oldValue,c=p.getAttribute("role"),l=a==="dialog"||a==="alertdialog",f=c==="dialog"||c==="alertdialog";!l&&f&&v(p)?d(p):l&&!f&&h(p)&&g(p)}}if(m.type==="childList"){for(let p=0;p<m.addedNodes.length;p++){let a=m.addedNodes[p];if(!(a instanceof t.defaultView.Element))continue;He(a)&&v(a)&&(h(a)||d(a));let c=a.querySelectorAll('dialog[open], [role="dialog"], [role="alertdialog"]');for(let l=0;l<c.length;l++){let f=c[l];v(f)&&!h(f)&&d(f)}}for(let p=0;p<m.removedNodes.length;p++){let a=m.removedNodes[p];if(!(a instanceof t.defaultView.Element))continue;h(a)&&g(a);let c=o.filter(l=>a.contains(l.element));for(let l of c)g(l.element)}}}}function v(y){return y.tagName.toLowerCase()==="dialog"?y.hasAttribute("open"):!0}return{start(){if(i)return;i=!0,o.length=0;let y=t.querySelectorAll('dialog[open], [role="dialog"], [role="alertdialog"]');for(let m=0;m<y.length;m++){let p=y[m];v(p)&&o.push({element:p,name:P(p,t),selector:k(p)})}s=new MutationObserver(E),s.observe(t.body||t.documentElement,{attributes:!0,attributeFilter:["open","role","aria-modal"],attributeOldValue:!0,childList:!0,subtree:!0})},stop(){i&&(i=!1,s&&(s.disconnect(),s=null),o.length=0)},get isActive(){return i},getOpenDialogs(){return o.map(y=>y.name)}}}function We(e){let{document:t}=e,n=!1,r=0,i=[];function s(){return Date.now()-r}function o(v){i.push(v)}function u(v){let y={...v,timestamp:s()};i.push(y)}let d=Me({document:t,onEvent:o,getTimestamp:s}),g=$e({document:t,onEvent:o,getTimestamp:s}),h=Fe(t,u),E=Pe({document:t,onEvent:o,getTimestamp:s});return{attach(){n||(n=!0,r=Date.now(),i=[],d.start(),g.start(),h.start(),E.start())},detach(){n&&(n=!1,d.stop(),g.stop(),h.stop(),E.stop())},getEvents(){return[...i]},reset(){i=[]},get isAttached(){return n},get dialogObserver(){return{getOpenDialogs(){return E.getOpenDialogs()}}}}}var M={Tab:{key:"Tab",code:"Tab",keyCode:9},Escape:{key:"Escape",code:"Escape",keyCode:27},Enter:{key:"Enter",code:"Enter",keyCode:13}," ":{key:" ",code:"Space",keyCode:32},ArrowUp:{key:"ArrowUp",code:"ArrowUp",keyCode:38},ArrowDown:{key:"ArrowDown",code:"ArrowDown",keyCode:40},ArrowLeft:{key:"ArrowLeft",code:"ArrowLeft",keyCode:37},ArrowRight:{key:"ArrowRight",code:"ArrowRight",keyCode:39}},hn=["button:not([disabled])","a[href]","input:not([disabled])","select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])'].join(", ");function Ke(e){return Array.from(e.querySelectorAll(hn))}function yn(e,t){let n=e.getAttribute("aria-label");if(n&&n.trim())return n.trim();let r=e.getAttribute("aria-labelledby");if(r&&r.trim()){let s=r.trim().split(/\s+/),o=[];for(let d of s){let g=t.getElementById(d);g&&g.textContent&&o.push(g.textContent.trim())}let u=o.join(" ");if(u)return u}let i=e.textContent;return i&&i.trim()?i.trim():""}function En(e){let t=e.getAttribute("role");if(t&&t.trim())return t.trim();switch(e.tagName.toLowerCase()){case"button":return"button";case"a":return e.hasAttribute("href")?"link":"generic";case"input":switch((e.getAttribute("type")||"text").toLowerCase()){case"button":case"submit":case"reset":case"image":return"button";case"checkbox":return"checkbox";case"radio":return"radio";case"range":return"slider";case"search":return"searchbox";default:return"textbox"}case"textarea":return"textbox";case"select":return e.hasAttribute("multiple")?"listbox":"combobox";case"dialog":return"dialog";default:return"generic"}}function W(e,t){return{role:En(e),accessibleName:yn(e,t),selector:k(e)}}function K(e,t){let n=e.activeElement||e.body,r={key:t.key,code:t.code,keyCode:t.keyCode,which:t.keyCode,shiftKey:t.shiftKey||!1,ctrlKey:t.ctrlKey||!1,altKey:t.altKey||!1,metaKey:t.metaKey||!1,bubbles:!0,cancelable:!0};n.dispatchEvent(new KeyboardEvent("keydown",r)),t.key.length===1&&n.dispatchEvent(new KeyboardEvent("keypress",r)),n.dispatchEvent(new KeyboardEvent("keyup",r))}function An(e){let t=e.split("+"),n=[],r=!1,i=!1,s=!1,o=!1,u=t[t.length-1];for(let d=0;d<t.length-1;d++)switch(t[d].toLowerCase()){case"shift":r=!0,n.push("Shift");break;case"control":case"ctrl":i=!0,n.push("Control");break;case"alt":s=!0,n.push("Alt");break;case"meta":case"cmd":case"command":o=!0,n.push("Meta");break}return{key:u,modifiers:n,shiftKey:r,ctrlKey:i,altKey:s,metaKey:o}}function vn(e){return M[e]?M[e]:e.length===1?{key:e,code:`Key${e.toUpperCase()}`,keyCode:e.toUpperCase().charCodeAt(0)}:{key:e,code:e,keyCode:0}}function xn(e,t,n,r){let i=t.querySelector(e);if(!i){let o={type:"WARNING",timestamp:r(),target:{role:"generic",accessibleName:"",selector:e},payload:{kind:"warning",message:`Element not found: ${e}`}};n(o);return}let s={bubbles:!0,cancelable:!0};i.dispatchEvent(new MouseEvent("mousedown",s)),i.dispatchEvent(new MouseEvent("mouseup",s)),i.dispatchEvent(new MouseEvent("click",s)),"focus"in i&&typeof i.focus=="function"&&i.focus()}function Nn(e,t,n){let r=Ke(e);if(r.length===0)return;let i=e.activeElement,s=-1;i&&(s=r.indexOf(i));let o=(s+1)%r.length,u=r[o];K(e,{...M.Tab,shiftKey:!1}),u&&typeof u.focus=="function"&&u.focus();let d=e.activeElement||e.body,g={type:"KEYBOARD_ACTION",timestamp:n(),target:W(d,e),payload:{kind:"keyboard_action",key:"Tab",modifiers:[]}};t(g)}function wn(e,t,n){let r=Ke(e);if(r.length===0)return;let i=e.activeElement,s=-1;i&&(s=r.indexOf(i));let o=s<=0?r.length-1:s-1,u=r[o];K(e,{...M.Tab,shiftKey:!0}),u&&typeof u.focus=="function"&&u.focus();let d=e.activeElement||e.body,g={type:"KEYBOARD_ACTION",timestamp:n(),target:W(d,e),payload:{kind:"keyboard_action",key:"Tab",modifiers:["Shift"]}};t(g)}function S(e,t,n,r){let i=M[e];if(!i)return;K(t,{...i});let s=t.activeElement||t.body,o={type:"KEYBOARD_ACTION",timestamp:r(),target:W(s,t),payload:{kind:"keyboard_action",key:e,modifiers:[]}};n(o)}function Tn(e,t,n,r){let i=An(e),s=vn(i.key);K(t,{...s,shiftKey:i.shiftKey,ctrlKey:i.ctrlKey,altKey:i.altKey,metaKey:i.metaKey});let o=t.activeElement||t.body,u={type:"KEYBOARD_ACTION",timestamp:r(),target:W(o,t),payload:{kind:"keyboard_action",key:i.key,modifiers:i.modifiers}};n(u)}async function kn(e,t,n,r){switch(e.type){case"click":xn(e.selector,t,n,r);break;case"tab":Nn(t,n,r);break;case"shiftTab":wn(t,n,r);break;case"escape":S("Escape",t,n,r);break;case"enter":S("Enter",t,n,r);break;case"space":S(" ",t,n,r);break;case"arrowUp":S("ArrowUp",t,n,r);break;case"arrowDown":S("ArrowDown",t,n,r);break;case"arrowLeft":S("ArrowLeft",t,n,r);break;case"arrowRight":S("ArrowRight",t,n,r);break;case"key":Tn(e.combo,t,n,r);break;case"wait":await new Promise(i=>setTimeout(i,e.ms));break}}async function Ve(e,t,n,r,i=100){for(let s=0;s<e.actions.length;s++){let o=e.actions[s];await kn(o,t,n,r),s<e.actions.length-1&&await new Promise(u=>setTimeout(u,i))}}var Cn={dialogFocusTimeout:100,rapidAnnouncementWindow:500,rapidAnnouncementThreshold:3,keyboardResponseTimeout:200};function qe(e){let t={...Cn,...e},n=[],r=[],i=[],s=[],o=null;function u(a,c,l,f){return{type:"WARNING",timestamp:a,target:l,payload:{kind:"warning",message:c,relatedEvent:f}}}function d(a){let c=[];for(let l=r.length-1;l>=0;l--){let f=r[l];if(f.resolved)continue;a-f.openedAt>t.dialogFocusTimeout&&(f.isModal&&c.push(u(a,"Focus was not moved into modal dialog",{role:"dialog",accessibleName:f.dialogName,selector:f.dialogSelector})),f.resolved=!0)}return c}function g(a){let c=[];for(let l=i.length-1;l>=0;l--){let f=i[l];if(f.resolved)continue;a-f.timestamp>t.keyboardResponseTimeout&&(c.push(u(a,"Keyboard action produced no accessibility response",f.event.target,f.event)),f.resolved=!0)}return c}function h(a){let c=[],l=a-t.rapidAnnouncementWindow;for(;s.length>0&&s[0]<l;)s.shift();return s.length>t.rapidAnnouncementThreshold&&(c.push(u(a,"Rapid announcements detected: assistive technology users may miss content",{role:"region",accessibleName:"",selector:"body"})),s.length=0),c}function E(a){let c=[];if(a.type!=="FOCUS_CHANGED")return c;let l=n.filter(b=>b.isModal);if(l.length===0)return c;let f=a.target.selector;for(let b of l)if(!y(f,b.selector)){c.push(u(a.timestamp,"Focus escaped modal dialog",a.target,a));break}return c}function v(a){let c=[];return a.type==="DOM_MUTATION"&&o!==null&&a.target.selector===o&&c.push(u(a.timestamp,"Focused element removed without focus management",a.target,a)),c}function y(a,c){return!!(a===c||a.startsWith(c+" ")||a.startsWith(c+" > ")||a.startsWith(c+">"))}function m(a){let c=[];switch(c.push(...d(a.timestamp)),c.push(...g(a.timestamp)),a.type){case"DIALOG_OPENED":{let l=a.payload,f={selector:a.target.selector,name:l.dialogName,isModal:l.isModal};n.push(f),l.isModal&&r.push({dialogSelector:a.target.selector,dialogName:l.dialogName,openedAt:a.timestamp,isModal:!0,resolved:!1});break}case"DIALOG_CLOSED":{let l=a.target.selector,f=n.findIndex(b=>b.selector===l);f!==-1&&n.splice(f,1);for(let b of r)b.dialogSelector===l&&!b.resolved&&(b.resolved=!0);break}case"FOCUS_CHANGED":{for(let l of r)l.resolved||y(a.target.selector,l.dialogSelector)&&(l.resolved=!0);for(let l of i)l.resolved||(l.resolved=!0);c.push(...E(a)),o=a.target.selector;break}case"ANNOUNCEMENT":{s.push(a.timestamp);for(let l of i)l.resolved||(l.resolved=!0);c.push(...h(a.timestamp));break}case"KEYBOARD_ACTION":{i.push({event:a,timestamp:a.timestamp,resolved:!1});break}case"DOM_MUTATION":{c.push(...v(a));for(let l of i)l.resolved||(l.resolved=!0);break}case"STATE_CHANGED":case"ROLE_CHANGED":case"ACCESSIBLE_NAME_CHANGED":{for(let l of i)l.resolved||(l.resolved=!0);break}default:break}return p(),c}function p(){for(let a=r.length-1;a>=0;a--)r[a].resolved&&r.splice(a,1);for(let a=i.length-1;a>=0;a--)i[a].resolved&&i.splice(a,1)}return{process(a){return m(a)},get openDialogs(){return n.map(a=>a.selector)}}}var _="1.7.0";var je="1.0",Rn=500,Sn=1e4,Ln=100;function Ue(e){let{document:t,componentName:n,storyName:r,settlePeriod:i=Rn,loadTimeout:s=Sn,heuristics:o=!0}=e,u=!1,d=null;return{async capture(g){if(u=!1,await Dn(t,s),u)return oe(n,r,g);let h=We({document:t});d=h;let E=o?qe():null,v=[],y=Date.now();if(h.attach(),u)return h.detach(),d=null,oe(n,r,g);function m(){return Date.now()-y}if(await Ve(g,t,x=>{v.push(x)},m,Ln),u)return h.detach(),d=null,oe(n,r,g);await In(i),h.detach(),d=null;let p=Date.now()-y,a=h.getEvents(),c=On(a,v);if(E){let x=[];for(let N of c){let q=E.process(N);x.push(...q)}for(let N of x)c.push(N);c.sort((N,q)=>N.timestamp-q.timestamp)}let l=c.filter(x=>x.type==="WARNING"),f={capturedAt:new Date().toISOString(),speakableVersion:_,sourceUrl:ze(t),userAgent:Ge()};return{version:je,component:n,story:r||null,interactionSequence:g.description,duration:p,events:c,warnings:l,metadata:f}},abort(){u=!0,d&&d.isAttached&&(d.detach(),d=null)}}}async function Dn(e,t){if(!e.body)return new Promise((n,r)=>{let i=setTimeout(()=>{r(new Error(`Document load timeout (${t}ms): ${ze(e)}`))},t),s=setInterval(()=>{e.body&&(clearTimeout(i),clearInterval(s),n())},50)})}function On(e,t){let n=[...e,...t];return n.sort((r,i)=>r.timestamp-i.timestamp),n}function ze(e){try{let t=e.URL;if(t&&t!=="about:blank"&&t!=="")return t}catch{}return"local"}function Ge(){try{if(typeof navigator<"u"&&navigator.userAgent)return navigator.userAgent}catch{}return"jsdom"}function In(e){return new Promise(t=>setTimeout(t,e))}function oe(e,t,n){return{version:je,component:e,story:t||null,interactionSequence:n.description,duration:0,events:[],warnings:[],metadata:{capturedAt:new Date().toISOString(),speakableVersion:_,sourceUrl:"local",userAgent:Ge()}}}F();async function V(e,t){let{componentName:n,storyName:r,sequence:i,settlePeriod:s,awaitUpgrade:o=!0,upgradeTimeoutMs:u}=t,d=[];o&&(d=(await O(e,u)).map(v=>v.message));let h=await Ue({document:e,componentName:n,storyName:r,...s!==void 0&&{settlePeriod:s}}).capture(i);if(d.length>0){let E=d.map(v=>({type:"WARNING",timestamp:0,target:{role:"generic",accessibleName:"",selector:":root"},payload:{kind:"warning",message:v}}));return{...h,events:[...E,...h.events],warnings:[...E,...h.warnings]}}return h}F();var D="speakable-harness";function Ye(e){if(!e||typeof e!="object")return!1;let t=e;return t.channel===D&&typeof t.id=="string"&&(t.kind==="analyze"||t.kind==="capture")}function Mn(e,t){if(t&&t.includes("*"))return!0;if(t&&t.length>0)return t.includes(e);try{return e===window.location.origin}catch{return!1}}function _n(e){return e?document.querySelector(e):document.documentElement}async function $n(e){try{if(e.kind==="analyze"){let n=_n(e.selector),r=await H(n);return{channel:D,id:e.id,ok:!0,kind:"analyze",result:r}}let t=await V(document,e.options);return{channel:D,id:e.id,ok:!0,kind:"capture",result:t}}catch(t){return{channel:D,id:e.id,ok:!1,error:t instanceof Error?t.message:String(t)}}}function Je(e={}){let t=window;if(!t.__SPEAKABLE_AGENT_INSTALLED__){t.__SPEAKABLE_AGENT_INSTALLED__=!0,window.addEventListener("message",async n=>{if(n.source!==window.parent||!Mn(n.origin,e.allowedOrigins)||!Ye(n.data))return;let r=await $n(n.data),i=e.allowedOrigins&&e.allowedOrigins.includes("*")?"*":n.origin;window.parent.postMessage(r,i)});try{window.parent.postMessage({channel:D,kind:"ready"},"*")}catch{}}}var Bn={analyzeElement:ie,analyzeElementWithUpgrade:H,captureTimeline:V,awaitCustomElementsReady:O,version:_};window.__SPEAKABLE__=Bn;try{Je()}catch{}return ot(Fn);})();
10
+ //# sourceMappingURL=speakable-browser.global.js.map