@yuktishaalaa/yuktai 3.0.13 → 3.0.14

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,7 @@
1
+ var m=null,h=null,l=!1,f=!1;function g(){return typeof navigator>"u"?!1:/Android|iPhone|iPad|iPod|Mobile|Tablet/i.test(navigator.userAgent)}function p(){if(g())return"wasm";try{if(typeof navigator<"u"&&"gpu"in navigator&&navigator.gpu!==void 0)return"webgpu"}catch{}return"wasm"}async function w(){if(!f){if(l){for(;l;)await new Promise(e=>setTimeout(e,200));return}l=!0;try{let{pipeline:e,env:t}=await import("@huggingface/transformers");t.allowRemoteModels=!0,t.allowLocalModels=!1,typeof window<"u"&&typeof caches<"u"&&(t.useWasmCache=!0);let n=p(),o=g();console.log(`yuktai: Transformers.js \u2014 device: ${n}, mobile: ${o}`),m=await e("feature-extraction","Xenova/all-MiniLM-L6-v2",{device:n,dtype:o?"q4":"fp32"}),h=await e("text2text-generation","Xenova/flan-t5-small",{device:n,dtype:o?"q4":"fp32"}),f=!0,l=!1,console.log("yuktai: Transformers.js models loaded \u2705")}catch(e){throw l=!1,console.error("yuktai: Transformers.js model load failed",e),e}}}function y(){return new Promise(e=>{let t=setTimeout(e,1500),n=new MutationObserver(()=>{clearTimeout(t),t=setTimeout(()=>{n.disconnect(),e()},500)});n.observe(document.body,{childList:!0,subtree:!0})})}function b(){let e=[],t=new Set,n=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, td, th, label, figcaption, blockquote, span, a, button, div");for(let s of n){if(s.closest("[data-yuktai-panel]")||s.querySelector("p, h1, h2, h3, h4, li, td, div"))continue;let i=s.innerText?.trim();if(!i||i.length<15||t.has(i))continue;t.add(i),e.push(i);let c=s.getAttribute("aria-label")?.trim();c&&c.length>8&&!t.has(c)&&(t.add(c),e.push(c))}let o=document.title?.trim();o&&!t.has(o)&&e.unshift(o);let r=document.querySelector('meta[name="description"]')?.getAttribute("content")?.trim();return r&&!t.has(r)&&e.unshift(r),e.join(" ").slice(0,8e3)}function v(e,t=150,n=30){if(typeof e!="string")try{e=String(e??"")}catch{return[]}let o=e.trim();if(!o)return[];let a=Math.min(n,Math.floor(t/2)),r=o.split(/\s+/),s=[],u=t-a;for(let i=0;i<r.length;i+=u){let c=r.slice(i,i+t).join(" ");c.trim().length>20&&s.push(c)}return s}function k(e,t){let n=0,o=0,a=0;for(let r=0;r<e.length;r++)n+=e[r]*t[r],o+=e[r]*e[r],a+=t[r]*t[r];return n/(Math.sqrt(o)*Math.sqrt(a)+1e-8)}async function d(e){let t=await m(e,{pooling:"mean",normalize:!0}),n=t?.data??t;return Array.from(n)}async function T(e,t,n=3){let o=await d(e),a=await Promise.all(t.map(async r=>{let s=await d(r),u=k(o,s);return{chunk:r,score:u}}));return a.sort((r,s)=>s.score-r.score),a.slice(0,n).map(r=>r.chunk)}async function x(e){if(!e.trim())return{success:!1,answer:"",error:"Please type a question."};try{await w(),await y();let t=b();if(!t||t.length<50)return{success:!1,answer:"",error:"Not enough content on this page."};let n=v(t);if(n.length===0)return{success:!1,answer:"",error:"Could not process page content."};let r=`Answer the question based on the context. Give a complete answer in 2-3 sentences.
2
+
3
+ Context: ${(await T(e,n,3)).join(" ").slice(0,1200)}
4
+
5
+ Question: ${e}
6
+
7
+ Answer:`,u=(await h(r,{max_new_tokens:120,min_new_tokens:10}))?.[0]?.generated_text?.trim()||"";return u?{success:!0,answer:u}:{success:!0,answer:"I could not find a specific answer on this page."}}catch(t){console.error("yuktai: Transformers RAG error",t);let n=t instanceof Error?t.message:"";return n.includes("Out of memory")||n.includes("memory")?{success:!1,answer:"",error:"Not enough device memory. Try on a device with more RAM or use desktop Chrome with Gemini Nano."}:{success:!1,answer:"",error:n||"Transformers.js error."}}}function P(){try{return typeof WebAssembly<"u"&&typeof Worker<"u"}catch{return!1}}function A(){return f?"ready":l?"loading":"idle"}export{x as a,P as b,A as c};
package/dist/index.js CHANGED
@@ -1,29 +1,15 @@
1
- "use strict";var wt=Object.create;var ae=Object.defineProperty;var vt=Object.getOwnPropertyDescriptor;var kt=Object.getOwnPropertyNames;var At=Object.getPrototypeOf,St=Object.prototype.hasOwnProperty;var xe=(e,t)=>()=>(e&&(t=e(e=0)),t);var he=(e,t)=>{for(var n in t)ae(e,n,{get:t[n],enumerable:!0})},Be=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of kt(t))!St.call(e,a)&&a!==n&&ae(e,a,{get:()=>t[a],enumerable:!(i=vt(t,a))||i.enumerable});return e};var Ne=(e,t,n)=>(n=e!=null?wt(At(e)):{},Be(t||!e||!e.__esModule?ae(n,"default",{value:e,enumerable:!0}):n,e)),Tt=e=>Be(ae({},"__esModule",{value:!0}),e);var f=xe(()=>{});var ut={};he(ut,{askPage:()=>Pe});function Ut(){return new Promise(e=>{let t=setTimeout(e,1500),n=new MutationObserver(()=>{clearTimeout(t),t=setTimeout(()=>{n.disconnect(),e()},500)});n.observe(document.body,{childList:!0,subtree:!0})})}function Jt(){let e=[],t=document.querySelectorAll("*");for(let n of t){if(n.closest("[data-yuktai-panel]"))continue;let i=n.innerText?.trim();i&&i.length>30&&e.push(i);let a=n.getAttribute("aria-label");if(a&&a.length>10&&e.push(a),(n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement)&&(n.placeholder&&e.push(n.placeholder),n.value&&e.push(n.value)),n instanceof HTMLButtonElement){let s=n.innerText||n.getAttribute("aria-label");s&&e.push(s)}}return e.join(" ").slice(0,3500)}async function Pe(e){if(!e.trim())return{success:!1,answer:"",error:"Please type a question."};try{let t=window,n=t.LanguageModel||t.ai?.languageModel;if(!n)return{success:!1,answer:"",error:"Gemini Nano not available."};await Ut();let i=Jt();if(!i||i.length<100)return{success:!1,answer:"",error:"Page content not readable."};let a;try{a=await n.create({systemPrompt:`Answer ONLY using page content.
1
+ "use strict";var vt=Object.create;var oe=Object.defineProperty;var kt=Object.getOwnPropertyDescriptor;var At=Object.getOwnPropertyNames;var St=Object.getPrototypeOf,Tt=Object.prototype.hasOwnProperty;var xe=(e,t)=>()=>(e&&(t=e(e=0)),t);var he=(e,t)=>{for(var n in t)oe(e,n,{get:t[n],enumerable:!0})},Be=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of At(t))!Tt.call(e,a)&&a!==n&&oe(e,a,{get:()=>t[a],enumerable:!(i=kt(t,a))||i.enumerable});return e};var Ne=(e,t,n)=>(n=e!=null?vt(St(e)):{},Be(t||!e||!e.__esModule?oe(n,"default",{value:e,enumerable:!0}):n,e)),Et=e=>Be(oe({},"__esModule",{value:!0}),e);var f=xe(()=>{});var ut={};he(ut,{askPage:()=>Pe});function Jt(){return new Promise(e=>{let t=setTimeout(e,1500),n=new MutationObserver(()=>{clearTimeout(t),t=setTimeout(()=>{n.disconnect(),e()},500)});n.observe(document.body,{childList:!0,subtree:!0})})}function Xt(){let e=[],t=document.querySelectorAll("*");for(let n of t){if(n.closest("[data-yuktai-panel]"))continue;let i=n.innerText?.trim();i&&i.length>30&&e.push(i);let a=n.getAttribute("aria-label");if(a&&a.length>10&&e.push(a),(n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement)&&(n.placeholder&&e.push(n.placeholder),n.value&&e.push(n.value)),n instanceof HTMLButtonElement){let s=n.innerText||n.getAttribute("aria-label");s&&e.push(s)}}return e.join(" ").slice(0,3500)}async function Pe(e){if(!e.trim())return{success:!1,answer:"",error:"Please type a question."};try{let t=window,n=t.LanguageModel||t.ai?.languageModel;if(!n)return{success:!1,answer:"",error:"Gemini Nano not available."};await Jt();let i=Xt();if(!i||i.length<100)return{success:!1,answer:"",error:"Page content not readable."};let a;try{a=await n.create({systemPrompt:`Answer ONLY using page content.
2
2
  Keep answer short (2\u20133 sentences).
3
3
  If not found say: "I could not find that on this page."`,outputLanguage:"en"})}catch{a=await n.create()}let s=`Page:
4
4
  ${i}
5
5
 
6
- Q: ${e}`,o=await a.prompt(s);return a?.destroy&&a.destroy(),{success:!0,answer:o?.trim()||"No answer found."}}catch(t){return{success:!1,answer:"",error:t instanceof Error?t.message:"Error occurred"}}}var Re=xe(()=>{"use strict";f()});var gt={};he(gt,{askPageWithTransformers:()=>ze,getModelLoadStatus:()=>X,isTransformersSupported:()=>J});function Xt(){try{if(typeof navigator<"u"&&"gpu"in navigator&&navigator.gpu!==void 0)return"webgpu"}catch{}return"wasm"}async function Qt(){if(!Ie){if(_){for(;_;)await new Promise(e=>setTimeout(e,200));return}_=!0;try{let{pipeline:e,env:t}=await import("@huggingface/transformers");t.allowRemoteModels=!0,t.allowLocalModels=!1,typeof window<"u"&&typeof caches<"u"?t.useBrowserCache=!0:t.useBrowserCache=!1;let n=Xt();console.log("yuktai: Transformers.js using device:",n),ft=await e("feature-extraction","Xenova/all-MiniLM-L6-v2",{device:n}),mt=await e("text2text-generation","Xenova/flan-t5-small",{device:n}),Ie=!0,_=!1,console.log("yuktai: Transformers.js models loaded \u2705")}catch(e){throw _=!1,console.error("yuktai: Transformers.js model load failed",e),e}}}function Zt(){return new Promise(e=>{let t=setTimeout(e,1500),n=new MutationObserver(()=>{clearTimeout(t),t=setTimeout(()=>{n.disconnect(),e()},500)});n.observe(document.body,{childList:!0,subtree:!0})})}function en(){let e=[],t=new Set,n=document.querySelectorAll(`
7
- p, h1, h2, h3, h4, h5, h6,
8
- li, ul, ol, dl, dt, dd,
9
- td, th, tr, caption,
10
- blockquote, q, cite,
11
- figcaption, figure,
12
- label, legend, fieldset,
13
- span, a, b, strong, em, i, u, s, mark, small,
14
- abbr, acronym, dfn, code, pre, kbd, samp, var,
15
- article, section, main, aside, nav, header, footer,
16
- div, button, summary, details,
17
- time, address, bdi, bdo,
18
- ins, del, sub, sup,
19
- title, caption
20
- `);for(let a of n){if(a.closest("[data-yuktai-panel]"))continue;let s=window.getComputedStyle(a);if(s.display==="none"||s.visibility==="hidden"||s.opacity==="0"||a.querySelector("p, h1, h2, h3, h4, h5, h6, li, td, div, article, section"))continue;let c=a.innerText?.trim();if(!c||c.length<15||t.has(c))continue;t.add(c),e.push(c);let p=a.getAttribute("aria-label")?.trim();p&&p.length>8&&p!==c&&!t.has(p)&&(t.add(p),e.push(p));let u=a.getAttribute("aria-description")?.trim();u&&u.length>8&&!t.has(u)&&(t.add(u),e.push(u));let x=a.getAttribute("title")?.trim();x&&x.length>8&&x!==c&&!t.has(x)&&(t.add(x),e.push(x)),a.querySelectorAll("img").forEach(h=>{let P=h.getAttribute("alt")?.trim();P&&P.length>8&&!t.has(P)&&(t.add(P),e.push(P))})}document.querySelectorAll("input, textarea").forEach(a=>{a.closest("[data-yuktai-panel]")||(a.placeholder&&!t.has(a.placeholder)&&(t.add(a.placeholder),e.push(a.placeholder)),a.value&&a.value.length>10&&!t.has(a.value)&&(t.add(a.value),e.push(a.value)))}),document.querySelectorAll("select").forEach(a=>{a.closest("[data-yuktai-panel]")||Array.from(a.options).forEach(s=>{let o=s.text?.trim();o&&o.length>5&&!t.has(o)&&(t.add(o),e.push(o))})}),document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:title"], meta[property="og:description"]').forEach(a=>{let s=a.getAttribute("content")?.trim();s&&s.length>10&&!t.has(s)&&(t.add(s),e.push(s))});let i=document.title?.trim();return i&&!t.has(i)&&(t.add(i),e.unshift(i)),e.join(" ").slice(0,8e3)}function tn(e,t=200,n=50){if(typeof e!="string")try{e=String(e??"")}catch{return[]}let i=e.trim();if(!i)return[];let a=Math.min(n,Math.floor(t/2)),s=i.split(/\s+/),o=[],c=t-a;for(let p=0;p<s.length;p+=c){let u=s.slice(p,p+t).join(" ");u.trim().length>20&&o.push(u)}return o}function nn(e,t){let n=0,i=0,a=0;for(let s=0;s<e.length;s++)n+=e[s]*t[s],i+=e[s]*e[s],a+=t[s]*t[s];return n/(Math.sqrt(i)*Math.sqrt(a)+1e-8)}async function pt(e){let t=await ft(e,{pooling:"mean",normalize:!0}),n=t?.data??t;return Array.from(n)}async function an(e,t,n=5){let i=await pt(e),a=await Promise.all(t.map(async s=>{let o=await pt(s),c=nn(i,o);return{chunk:s,score:c}}));return a.sort((s,o)=>o.score-s.score),a.slice(0,n).map(s=>s.chunk)}async function ze(e){if(!e.trim())return{success:!1,answer:"",error:"Please type a question."};try{await Qt(),await Zt();let t=en();if(!t||t.length<50)return{success:!1,answer:"",error:"Not enough content on this page."};let n=tn(t);if(n.length===0)return{success:!1,answer:"",error:"Could not process page content."};let s=`Answer the question based on the context below. Give a complete and helpful answer in 2-3 sentences.
6
+ Q: ${e}`,o=await a.prompt(s);return a?.destroy&&a.destroy(),{success:!0,answer:o?.trim()||"No answer found."}}catch(t){return{success:!1,answer:"",error:t instanceof Error?t.message:"Error occurred"}}}var Re=xe(()=>{"use strict";f()});var bt={};he(bt,{askPageWithTransformers:()=>ze,getModelLoadStatus:()=>X,isTransformersSupported:()=>J});function gt(){return typeof navigator>"u"?!1:/Android|iPhone|iPad|iPod|Mobile|Tablet/i.test(navigator.userAgent)}function Qt(){if(gt())return"wasm";try{if(typeof navigator<"u"&&"gpu"in navigator&&navigator.gpu!==void 0)return"webgpu"}catch{}return"wasm"}async function Zt(){if(!Ie){if(_){for(;_;)await new Promise(e=>setTimeout(e,200));return}_=!0;try{let{pipeline:e,env:t}=await import("@huggingface/transformers");t.allowRemoteModels=!0,t.allowLocalModels=!1,typeof window<"u"&&typeof caches<"u"&&(t.useWasmCache=!0);let n=Qt(),i=gt();console.log(`yuktai: Transformers.js \u2014 device: ${n}, mobile: ${i}`),ft=await e("feature-extraction","Xenova/all-MiniLM-L6-v2",{device:n,dtype:i?"q4":"fp32"}),mt=await e("text2text-generation","Xenova/flan-t5-small",{device:n,dtype:i?"q4":"fp32"}),Ie=!0,_=!1,console.log("yuktai: Transformers.js models loaded \u2705")}catch(e){throw _=!1,console.error("yuktai: Transformers.js model load failed",e),e}}}function en(){return new Promise(e=>{let t=setTimeout(e,1500),n=new MutationObserver(()=>{clearTimeout(t),t=setTimeout(()=>{n.disconnect(),e()},500)});n.observe(document.body,{childList:!0,subtree:!0})})}function tn(){let e=[],t=new Set,n=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, td, th, label, figcaption, blockquote, span, a, button, div");for(let o of n){if(o.closest("[data-yuktai-panel]")||o.querySelector("p, h1, h2, h3, h4, li, td, div"))continue;let p=o.innerText?.trim();if(!p||p.length<15||t.has(p))continue;t.add(p),e.push(p);let u=o.getAttribute("aria-label")?.trim();u&&u.length>8&&!t.has(u)&&(t.add(u),e.push(u))}let i=document.title?.trim();i&&!t.has(i)&&e.unshift(i);let s=document.querySelector('meta[name="description"]')?.getAttribute("content")?.trim();return s&&!t.has(s)&&e.unshift(s),e.join(" ").slice(0,8e3)}function nn(e,t=150,n=30){if(typeof e!="string")try{e=String(e??"")}catch{return[]}let i=e.trim();if(!i)return[];let a=Math.min(n,Math.floor(t/2)),s=i.split(/\s+/),o=[],c=t-a;for(let p=0;p<s.length;p+=c){let u=s.slice(p,p+t).join(" ");u.trim().length>20&&o.push(u)}return o}function on(e,t){let n=0,i=0,a=0;for(let s=0;s<e.length;s++)n+=e[s]*t[s],i+=e[s]*e[s],a+=t[s]*t[s];return n/(Math.sqrt(i)*Math.sqrt(a)+1e-8)}async function pt(e){let t=await ft(e,{pooling:"mean",normalize:!0}),n=t?.data??t;return Array.from(n)}async function an(e,t,n=3){let i=await pt(e),a=await Promise.all(t.map(async s=>{let o=await pt(s),c=on(i,o);return{chunk:s,score:c}}));return a.sort((s,o)=>o.score-s.score),a.slice(0,n).map(s=>s.chunk)}async function ze(e){if(!e.trim())return{success:!1,answer:"",error:"Please type a question."};try{await Zt(),await en();let t=tn();if(!t||t.length<50)return{success:!1,answer:"",error:"Not enough content on this page."};let n=nn(t);if(n.length===0)return{success:!1,answer:"",error:"Could not process page content."};let s=`Answer the question based on the context. Give a complete answer in 2-3 sentences.
21
7
 
22
- Context: ${(await an(e,n,5)).join(" ").slice(0,1500)}
8
+ Context: ${(await an(e,n,3)).join(" ").slice(0,1200)}
23
9
 
24
10
  Question: ${e}
25
11
 
26
- Answer:`,c=(await mt(s,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_text?.trim()||"";return!c||c.length===0?{success:!0,answer:"I could not find a specific answer on this page."}:{success:!0,answer:c}}catch(t){return console.error("yuktai: Transformers RAG error",t),{success:!1,answer:"",error:t instanceof Error?t.message:"Transformers.js error."}}}function J(){try{return typeof WebAssembly<"u"&&typeof Worker<"u"}catch{return!1}}function X(){return Ie?"ready":_?"loading":"idle"}var ft,mt,_,Ie,pe=xe(()=>{"use strict";f();ft=null,mt=null,_=!1,Ie=!1});var pn={};he(pn,{Runtime:()=>W,YuktAI:()=>un,YuktAIWrapper:()=>fe,aiPlugin:()=>Z,default:()=>fe,voicePlugin:()=>ee,wcag:()=>C,wcagPlugin:()=>C});module.exports=Tt(pn);f();f();f();function Oe(){let e=window;return e.Rewriter||e.ai?.rewriter||null}async function we(){try{let e=Oe();if(!e)return!1;if(typeof e.availability=="function"){let t=await e.availability();return t==="readily"||t==="available"||t==="downloadable"}return typeof e.capabilities=="function"?(await e.capabilities())?.available!=="no":typeof e.create=="function"}catch{return!1}}async function Et(e){if(!e||e.trim().length<20)return{success:!1,original:e,rewritten:e,error:"Text too short"};try{let t=Oe();if(!t)throw new Error("Rewriter API not available");let n=await t.create({tone:"more-casual",format:"plain-text",length:"as-is",outputLanguage:"en"}),i=await n.rewrite(e,{context:"Rewrite this text in simple plain English. Use short sentences. Avoid jargon. Make it easy to understand for everyone."});return n.destroy(),{success:!0,original:e,rewritten:i.trim()}}catch(t){return{success:!1,original:e,rewritten:e,error:t instanceof Error?t.message:"Rewrite failed"}}}async function qe(){if(!await we())return{fixed:0,error:"Chrome Built-in AI Rewriter not available. Enable via chrome://flags."};let t=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, blockquote, td, th, label, figcaption"),n=0;for(let i of t){let a=i.innerText?.trim();if(!a||a.length<20||i.closest("[data-yuktai-panel]"))continue;let s=await Et(a);s.success&&s.rewritten!==a&&(i.dataset.yuktaiOriginal=a,i.innerText=s.rewritten,n++)}return{fixed:n}}function De(){let e=document.querySelectorAll("[data-yuktai-original]");for(let t of e){let n=t.dataset.yuktaiOriginal;n&&(t.innerText=n,delete t.dataset.yuktaiOriginal)}}f();var _e="yuktai-summary-box";function Ge(){let e=window;return e.Summarizer||e.ai?.summarizer||null}async function ve(){try{let e=Ge();if(!e)return!1;if(typeof e.availability=="function"){let t=await e.availability();return t==="readily"||t==="available"||t==="downloadable"}return typeof e.capabilities=="function"?(await e.capabilities())?.available!=="no":typeof e.create=="function"}catch{return!1}}function Ct(){let e=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, blockquote, article, section"),t=[];for(let n of e){if(n.closest("[data-yuktai-panel]"))continue;let i=window.getComputedStyle(n);if(i.display==="none"||i.visibility==="hidden")continue;let a=n.innerText?.trim();a&&a.length>10&&t.push(a)}return t.join(" ").slice(0,5e3)}async function je(){if(!await ve())return{success:!1,summary:"",error:"Chrome Built-in AI Summarizer not available. Enable via chrome://flags."};let t=Ct();if(!t||t.length<100)return{success:!1,summary:"",error:"Not enough text on this page to summarise."};try{let n=Ge();if(!n)throw new Error("Summarizer API not available");let i=await n.create({type:"tl;dr",format:"plain-text",length:"short",outputLanguage:"en"}),a=await i.summarize(t,{context:"Summarise this page in 2-3 simple sentences for a screen reader user who wants to know if this page is relevant to them."});return i.destroy(),Lt(a.trim()),{success:!0,summary:a.trim()}}catch(n){return{success:!1,summary:"",error:n instanceof Error?n.message:"Summary failed"}}}function Lt(e){oe();let t=document.createElement("div");t.id=_e,t.setAttribute("data-yuktai-panel","true"),t.setAttribute("role","region"),t.setAttribute("aria-label","Page summary by yuktai"),t.style.cssText=`
12
+ Answer:`,c=(await mt(s,{max_new_tokens:120,min_new_tokens:10}))?.[0]?.generated_text?.trim()||"";return c?{success:!0,answer:c}:{success:!0,answer:"I could not find a specific answer on this page."}}catch(t){console.error("yuktai: Transformers RAG error",t);let n=t instanceof Error?t.message:"";return n.includes("Out of memory")||n.includes("memory")?{success:!1,answer:"",error:"Not enough device memory. Try on a device with more RAM or use desktop Chrome with Gemini Nano."}:{success:!1,answer:"",error:n||"Transformers.js error."}}}function J(){try{return typeof WebAssembly<"u"&&typeof Worker<"u"}catch{return!1}}function X(){return Ie?"ready":_?"loading":"idle"}var ft,mt,_,Ie,pe=xe(()=>{"use strict";f();ft=null,mt=null,_=!1,Ie=!1});var fn={};he(fn,{Runtime:()=>$,YuktAI:()=>pn,YuktAIWrapper:()=>fe,aiPlugin:()=>Z,default:()=>fe,voicePlugin:()=>ee,wcag:()=>C,wcagPlugin:()=>C});module.exports=Et(fn);f();f();f();function Oe(){let e=window;return e.Rewriter||e.ai?.rewriter||null}async function we(){try{let e=Oe();if(!e)return!1;if(typeof e.availability=="function"){let t=await e.availability();return t==="readily"||t==="available"||t==="downloadable"}return typeof e.capabilities=="function"?(await e.capabilities())?.available!=="no":typeof e.create=="function"}catch{return!1}}async function Ct(e){if(!e||e.trim().length<20)return{success:!1,original:e,rewritten:e,error:"Text too short"};try{let t=Oe();if(!t)throw new Error("Rewriter API not available");let n=await t.create({tone:"more-casual",format:"plain-text",length:"as-is",outputLanguage:"en"}),i=await n.rewrite(e,{context:"Rewrite this text in simple plain English. Use short sentences. Avoid jargon. Make it easy to understand for everyone."});return n.destroy(),{success:!0,original:e,rewritten:i.trim()}}catch(t){return{success:!1,original:e,rewritten:e,error:t instanceof Error?t.message:"Rewrite failed"}}}async function De(){if(!await we())return{fixed:0,error:"Chrome Built-in AI Rewriter not available. Enable via chrome://flags."};let t=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, blockquote, td, th, label, figcaption"),n=0;for(let i of t){let a=i.innerText?.trim();if(!a||a.length<20||i.closest("[data-yuktai-panel]"))continue;let s=await Ct(a);s.success&&s.rewritten!==a&&(i.dataset.yuktaiOriginal=a,i.innerText=s.rewritten,n++)}return{fixed:n}}function _e(){let e=document.querySelectorAll("[data-yuktai-original]");for(let t of e){let n=t.dataset.yuktaiOriginal;n&&(t.innerText=n,delete t.dataset.yuktaiOriginal)}}f();var Ge="yuktai-summary-box";function qe(){let e=window;return e.Summarizer||e.ai?.summarizer||null}async function ve(){try{let e=qe();if(!e)return!1;if(typeof e.availability=="function"){let t=await e.availability();return t==="readily"||t==="available"||t==="downloadable"}return typeof e.capabilities=="function"?(await e.capabilities())?.available!=="no":typeof e.create=="function"}catch{return!1}}function Lt(){let e=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, blockquote, article, section"),t=[];for(let n of e){if(n.closest("[data-yuktai-panel]"))continue;let i=window.getComputedStyle(n);if(i.display==="none"||i.visibility==="hidden")continue;let a=n.innerText?.trim();a&&a.length>10&&t.push(a)}return t.join(" ").slice(0,5e3)}async function je(){if(!await ve())return{success:!1,summary:"",error:"Chrome Built-in AI Summarizer not available. Enable via chrome://flags."};let t=Lt();if(!t||t.length<100)return{success:!1,summary:"",error:"Not enough text on this page to summarise."};try{let n=qe();if(!n)throw new Error("Summarizer API not available");let i=await n.create({type:"tl;dr",format:"plain-text",length:"short",outputLanguage:"en"}),a=await i.summarize(t,{context:"Summarise this page in 2-3 simple sentences for a screen reader user who wants to know if this page is relevant to them."});return i.destroy(),Mt(a.trim()),{success:!0,summary:a.trim()}}catch(n){return{success:!1,summary:"",error:n instanceof Error?n.message:"Summary failed"}}}function Mt(e){ae();let t=document.createElement("div");t.id=Ge,t.setAttribute("data-yuktai-panel","true"),t.setAttribute("role","region"),t.setAttribute("aria-label","Page summary by yuktai"),t.style.cssText=`
27
13
  position: fixed;
28
14
  top: 0;
29
15
  left: 0;
@@ -44,7 +30,7 @@ Answer:`,c=(await mt(s,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_
44
30
  background: none; border: none; color: #ffffff;
45
31
  font-size: 20px; cursor: pointer; padding: 0 4px;
46
32
  line-height: 1; flex-shrink: 0;
47
- `,i.addEventListener("click",oe),t.appendChild(n),t.appendChild(i),document.body.prepend(t)}function oe(){let e=document.getElementById(_e);e&&e.remove()}f();var re=[{code:"en",label:"English"},{code:"hi",label:"Hindi"},{code:"es",label:"Spanish"},{code:"fr",label:"French"},{code:"de",label:"German"},{code:"it",label:"Italian"},{code:"pt",label:"Portuguese"},{code:"nl",label:"Dutch"},{code:"pl",label:"Polish"},{code:"ru",label:"Russian"},{code:"ja",label:"Japanese"},{code:"ko",label:"Korean"},{code:"zh",label:"Chinese"},{code:"ar",label:"Arabic"},{code:"tr",label:"Turkish"},{code:"vi",label:"Vietnamese"},{code:"bn",label:"Bengali"},{code:"id",label:"Indonesian"}],ie="en";function Mt(){let e=window;return e.Translator||e.translation||null}async function Pt(e){try{let t=window;if(!Mt())return!1;if(t.Translator&&typeof t.Translator.availability=="function")try{let i=await t.Translator.availability({sourceLanguage:"en",targetLanguage:e});return i==="readily"||i==="available"||i==="downloadable"||i==="after-download"}catch{}return t.Translator&&typeof t.Translator.canTranslate=="function"?await t.Translator.canTranslate({sourceLanguage:"en",targetLanguage:e})!=="no":t.translation&&typeof t.translation.canTranslate=="function"?await t.translation.canTranslate({sourceLanguage:"en",targetLanguage:e})!=="no":!1}catch{return!1}}async function Rt(e){let t=window,n={sourceLanguage:"en",targetLanguage:e};if(t.Translator&&typeof t.Translator.create=="function")return await t.Translator.create(n);if(t.translation&&typeof t.translation.createTranslator=="function")return await t.translation.createTranslator(n);throw new Error("Translation API not available")}async function Ve(e){if(e===ie)return{success:!0,language:e,fixed:0};if(e==="en")return ke(),ie="en",{success:!0,language:"en",fixed:0};if(!await Pt(e))return{success:!1,language:e,fixed:0,error:`Translation to ${e} not available. Enable via chrome://flags.`};try{let n=await Rt(e),i=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, blockquote, td, th, label, figcaption, span, a"),a=0;for(let s of i){if(s.closest("[data-yuktai-panel]")||s.children.length>0)continue;let o=s.innerText?.trim();if(!o||o.length<2)continue;s.dataset.yuktaiTranslationOriginal||(s.dataset.yuktaiTranslationOriginal=o);let c=await n.translate(o);c&&c!==o&&(s.innerText=c,a++)}return typeof n.destroy=="function"&&n.destroy(),ie=e,{success:!0,language:e,fixed:a}}catch(n){return{success:!1,language:e,fixed:0,error:n instanceof Error?n.message:"Translation failed"}}}function ke(){let e=document.querySelectorAll("[data-yuktai-translation-original]");for(let t of e){let n=t.dataset.yuktaiTranslationOriginal;n&&(t.innerText=n,delete t.dataset.yuktaiTranslationOriginal)}ie="en"}f();var It=[{phrases:["go to main","skip to main","main content"],action:"focus-main",label:"Jump to main content"},{phrases:["go to navigation","go to nav","open menu"],action:"focus-nav",label:"Jump to navigation"},{phrases:["go to search","search","find"],action:"focus-search",label:"Jump to search"},{phrases:["scroll down","page down","next"],action:"scroll-down",label:"Scroll down"},{phrases:["scroll up","page up","back up"],action:"scroll-up",label:"Scroll up"},{phrases:["go back","previous page"],action:"go-back",label:"Go back"},{phrases:["click","press","select"],action:"click-focused",label:"Click focused element"},{phrases:["next item","tab forward","tab"],action:"tab-forward",label:"Move to next element"},{phrases:["previous item","tab back","shift tab"],action:"tab-back",label:"Move to previous element"},{phrases:["stop listening","stop voice","quiet"],action:"stop-voice",label:"Stop voice control"}],M=null,se=!1,O=null;function Ae(){return!!(window.SpeechRecognition||window.webkitSpeechRecognition)}function zt(e){let t=e.toLowerCase().trim();for(let n of It)for(let i of n.phrases)if(t.includes(i))return{action:n.action,label:n.label};return null}function Ht(e){switch(e){case"focus-main":{let t=document.querySelector("main, [role='main'], #main");t&&(t.focus(),t.scrollIntoView({behavior:"smooth"}));break}case"focus-nav":{let t=document.querySelector("nav, [role='navigation']");t&&(t.focus(),t.scrollIntoView({behavior:"smooth"}));break}case"focus-search":{let t=document.querySelector("input[type='search'], input[role='searchbox'], [aria-label*='search' i]");t&&(t.focus(),t.scrollIntoView({behavior:"smooth"}));break}case"scroll-down":{window.scrollBy({top:400,behavior:"smooth"});break}case"scroll-up":{window.scrollBy({top:-400,behavior:"smooth"});break}case"go-back":{window.history.back();break}case"click-focused":{let t=document.activeElement;t&&t!==document.body&&t.click();break}case"tab-forward":{let t=Ke(),n=t.indexOf(document.activeElement),i=t[n+1]||t[0];i&&i.focus();break}case"tab-back":{let t=Ke(),n=t.indexOf(document.activeElement),i=t[n-1]||t[t.length-1];i&&i.focus();break}case"stop-voice":{Se();break}}}function Ke(){return Array.from(document.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(e=>!e.closest("[data-yuktai-panel]"))}function Ye(e){if(!Ae())return!1;if(se)return!0;e&&(O=e);let t=window.SpeechRecognition||window.webkitSpeechRecognition;return M=new t,M.continuous=!0,M.interimResults=!1,M.lang="en-US",M.onresult=n=>{let i=n.results[n.results.length-1][0].transcript,a=zt(i);if(a){Ht(a.action);let s={success:!0,command:i,action:a.label};if(O&&O(s),a.action==="stop-voice")return}},M.onend=()=>{se&&M?.start()},M.onerror=n=>{n.error!=="no-speech"&&O&&O({success:!1,command:"",action:"",error:`Voice error: ${n.error}`})},M.start(),se=!0,$t(),!0}function Se(){se=!1,M&&(M.stop(),M=null),O=null,Je()}var Ue="yuktai-voice-indicator";function $t(){Je();let e=document.createElement("div");e.id=Ue,e.setAttribute("data-yuktai-panel","true"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-label","yuktai voice control is listening"),e.style.cssText=`
33
+ `,i.addEventListener("click",ae),t.appendChild(n),t.appendChild(i),document.body.prepend(t)}function ae(){let e=document.getElementById(Ge);e&&e.remove()}f();var re=[{code:"en",label:"English"},{code:"hi",label:"Hindi"},{code:"es",label:"Spanish"},{code:"fr",label:"French"},{code:"de",label:"German"},{code:"it",label:"Italian"},{code:"pt",label:"Portuguese"},{code:"nl",label:"Dutch"},{code:"pl",label:"Polish"},{code:"ru",label:"Russian"},{code:"ja",label:"Japanese"},{code:"ko",label:"Korean"},{code:"zh",label:"Chinese"},{code:"ar",label:"Arabic"},{code:"tr",label:"Turkish"},{code:"vi",label:"Vietnamese"},{code:"bn",label:"Bengali"},{code:"id",label:"Indonesian"}],ie="en";function Pt(){let e=window;return e.Translator||e.translation||null}async function Rt(e){try{let t=window;if(!Pt())return!1;if(t.Translator&&typeof t.Translator.availability=="function")try{let i=await t.Translator.availability({sourceLanguage:"en",targetLanguage:e});return i==="readily"||i==="available"||i==="downloadable"||i==="after-download"}catch{}return t.Translator&&typeof t.Translator.canTranslate=="function"?await t.Translator.canTranslate({sourceLanguage:"en",targetLanguage:e})!=="no":t.translation&&typeof t.translation.canTranslate=="function"?await t.translation.canTranslate({sourceLanguage:"en",targetLanguage:e})!=="no":!1}catch{return!1}}async function It(e){let t=window,n={sourceLanguage:"en",targetLanguage:e};if(t.Translator&&typeof t.Translator.create=="function")return await t.Translator.create(n);if(t.translation&&typeof t.translation.createTranslator=="function")return await t.translation.createTranslator(n);throw new Error("Translation API not available")}async function Ve(e){if(e===ie)return{success:!0,language:e,fixed:0};if(e==="en")return ke(),ie="en",{success:!0,language:"en",fixed:0};if(!await Rt(e))return{success:!1,language:e,fixed:0,error:`Translation to ${e} not available. Enable via chrome://flags.`};try{let n=await It(e),i=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, blockquote, td, th, label, figcaption, span, a"),a=0;for(let s of i){if(s.closest("[data-yuktai-panel]")||s.children.length>0)continue;let o=s.innerText?.trim();if(!o||o.length<2)continue;s.dataset.yuktaiTranslationOriginal||(s.dataset.yuktaiTranslationOriginal=o);let c=await n.translate(o);c&&c!==o&&(s.innerText=c,a++)}return typeof n.destroy=="function"&&n.destroy(),ie=e,{success:!0,language:e,fixed:a}}catch(n){return{success:!1,language:e,fixed:0,error:n instanceof Error?n.message:"Translation failed"}}}function ke(){let e=document.querySelectorAll("[data-yuktai-translation-original]");for(let t of e){let n=t.dataset.yuktaiTranslationOriginal;n&&(t.innerText=n,delete t.dataset.yuktaiTranslationOriginal)}ie="en"}f();var zt=[{phrases:["go to main","skip to main","main content"],action:"focus-main",label:"Jump to main content"},{phrases:["go to navigation","go to nav","open menu"],action:"focus-nav",label:"Jump to navigation"},{phrases:["go to search","search","find"],action:"focus-search",label:"Jump to search"},{phrases:["scroll down","page down","next"],action:"scroll-down",label:"Scroll down"},{phrases:["scroll up","page up","back up"],action:"scroll-up",label:"Scroll up"},{phrases:["go back","previous page"],action:"go-back",label:"Go back"},{phrases:["click","press","select"],action:"click-focused",label:"Click focused element"},{phrases:["next item","tab forward","tab"],action:"tab-forward",label:"Move to next element"},{phrases:["previous item","tab back","shift tab"],action:"tab-back",label:"Move to previous element"},{phrases:["stop listening","stop voice","quiet"],action:"stop-voice",label:"Stop voice control"}],M=null,se=!1,N=null;function Ae(){return!!(window.SpeechRecognition||window.webkitSpeechRecognition)}function Ht(e){let t=e.toLowerCase().trim();for(let n of zt)for(let i of n.phrases)if(t.includes(i))return{action:n.action,label:n.label};return null}function $t(e){switch(e){case"focus-main":{let t=document.querySelector("main, [role='main'], #main");t&&(t.focus(),t.scrollIntoView({behavior:"smooth"}));break}case"focus-nav":{let t=document.querySelector("nav, [role='navigation']");t&&(t.focus(),t.scrollIntoView({behavior:"smooth"}));break}case"focus-search":{let t=document.querySelector("input[type='search'], input[role='searchbox'], [aria-label*='search' i]");t&&(t.focus(),t.scrollIntoView({behavior:"smooth"}));break}case"scroll-down":{window.scrollBy({top:400,behavior:"smooth"});break}case"scroll-up":{window.scrollBy({top:-400,behavior:"smooth"});break}case"go-back":{window.history.back();break}case"click-focused":{let t=document.activeElement;t&&t!==document.body&&t.click();break}case"tab-forward":{let t=Ke(),n=t.indexOf(document.activeElement),i=t[n+1]||t[0];i&&i.focus();break}case"tab-back":{let t=Ke(),n=t.indexOf(document.activeElement),i=t[n-1]||t[t.length-1];i&&i.focus();break}case"stop-voice":{Se();break}}}function Ke(){return Array.from(document.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(e=>!e.closest("[data-yuktai-panel]"))}function Ye(e){if(!Ae())return!1;if(se)return!0;e&&(N=e);let t=window.SpeechRecognition||window.webkitSpeechRecognition;return M=new t,M.continuous=!0,M.interimResults=!1,M.lang="en-US",M.onresult=n=>{let i=n.results[n.results.length-1][0].transcript,a=Ht(i);if(a){$t(a.action);let s={success:!0,command:i,action:a.label};if(N&&N(s),a.action==="stop-voice")return}},M.onend=()=>{se&&M?.start()},M.onerror=n=>{n.error!=="no-speech"&&N&&N({success:!1,command:"",action:"",error:`Voice error: ${n.error}`})},M.start(),se=!0,Wt(),!0}function Se(){se=!1,M&&(M.stop(),M=null),N=null,Je()}var Ue="yuktai-voice-indicator";function Wt(){Je();let e=document.createElement("div");e.id=Ue,e.setAttribute("data-yuktai-panel","true"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-label","yuktai voice control is listening"),e.style.cssText=`
48
34
  position: fixed;
49
35
  bottom: 80px;
50
36
  left: 50%;
@@ -74,7 +60,7 @@ Answer:`,c=(await mt(s,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_
74
60
  0%, 100% { opacity: 1; transform: scale(1); }
75
61
  50% { opacity: 0.4; transform: scale(0.7); }
76
62
  }
77
- `,document.head.appendChild(i)}let n=document.createElement("span");n.textContent="Listening for commands...",e.appendChild(t),e.appendChild(n),document.body.appendChild(e)}function Je(){let e=document.getElementById(Ue);e&&e.remove()}f();var Wt=["button:not([aria-label]):not([aria-labelledby])","a:not([aria-label]):not([aria-labelledby])","input:not([aria-label]):not([aria-labelledby]):not([id])","select:not([aria-label]):not([aria-labelledby])","textarea:not([aria-label]):not([aria-labelledby])","[role='button']:not([aria-label])","[role='link']:not([aria-label])","[role='checkbox']:not([aria-label])","[role='tab']:not([aria-label])"].join(", ");function Xe(){let e=window;return e.Writer||e.ai?.writer||null}async function Te(){try{let e=Xe();if(!e)return!1;if(typeof e.availability=="function"){let t=await e.availability();return t==="readily"||t==="available"||t==="downloadable"}return typeof e.capabilities=="function"?(await e.capabilities())?.available!=="no":typeof e.create=="function"}catch{return!1}}function Ft(e){let t=[],n=e.innerText?.trim();n&&t.push(`element text: "${n}"`);let i=e.placeholder?.trim();i&&t.push(`placeholder: "${i}"`);let a=e.getAttribute("name")?.trim();a&&t.push(`name: "${a}"`);let s=e.getAttribute("type")?.trim();s&&t.push(`type: "${s}"`);let o=e.id;if(o){let u=document.querySelector(`label[for="${o}"]`);u&&t.push(`label: "${u.innerText?.trim()}"`)}let c=e.parentElement?.innerText?.trim().slice(0,60);c&&t.push(`parent context: "${c}"`),t.push(`tag: ${e.tagName.toLowerCase()}`);let p=e.getAttribute("role");return p&&t.push(`role: ${p}`),t.join(". ")}async function Bt(e,t){let n=`
63
+ `,document.head.appendChild(i)}let n=document.createElement("span");n.textContent="Listening for commands...",e.appendChild(t),e.appendChild(n),document.body.appendChild(e)}function Je(){let e=document.getElementById(Ue);e&&e.remove()}f();var Ft=["button:not([aria-label]):not([aria-labelledby])","a:not([aria-label]):not([aria-labelledby])","input:not([aria-label]):not([aria-labelledby]):not([id])","select:not([aria-label]):not([aria-labelledby])","textarea:not([aria-label]):not([aria-labelledby])","[role='button']:not([aria-label])","[role='link']:not([aria-label])","[role='checkbox']:not([aria-label])","[role='tab']:not([aria-label])"].join(", ");function Xe(){let e=window;return e.Writer||e.ai?.writer||null}async function Te(){try{let e=Xe();if(!e)return!1;if(typeof e.availability=="function"){let t=await e.availability();return t==="readily"||t==="available"||t==="downloadable"}return typeof e.capabilities=="function"?(await e.capabilities())?.available!=="no":typeof e.create=="function"}catch{return!1}}function Bt(e){let t=[],n=e.innerText?.trim();n&&t.push(`element text: "${n}"`);let i=e.placeholder?.trim();i&&t.push(`placeholder: "${i}"`);let a=e.getAttribute("name")?.trim();a&&t.push(`name: "${a}"`);let s=e.getAttribute("type")?.trim();s&&t.push(`type: "${s}"`);let o=e.id;if(o){let u=document.querySelector(`label[for="${o}"]`);u&&t.push(`label: "${u.innerText?.trim()}"`)}let c=e.parentElement?.innerText?.trim().slice(0,60);c&&t.push(`parent context: "${c}"`),t.push(`tag: ${e.tagName.toLowerCase()}`);let p=e.getAttribute("role");return p&&t.push(`role: ${p}`),t.join(". ")}async function Nt(e,t){let n=`
78
64
  Generate a short, clear aria-label for an HTML element.
79
65
  The label must be 2-6 words maximum.
80
66
  The label must describe what the element does or what it is.
@@ -85,7 +71,7 @@ Answer:`,c=(await mt(s,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_
85
71
  ${t}
86
72
 
87
73
  Output only the label. Nothing else.
88
- `.trim();return(await e.write(n)).trim().replace(/^["']|["']$/g,"").replace(/\.$/,"").trim()}async function Qe(){if(!await Te())return{success:!1,fixed:0,elements:[],error:"Chrome Built-in AI Writer not available. Enable via chrome://flags."};let t=document.querySelectorAll(Wt);if(t.length===0)return{success:!0,fixed:0,elements:[]};try{let n=Xe();if(!n)throw new Error("Writer API not available");let i=await n.create({tone:"neutral",format:"plain-text",length:"short",outputLanguage:"en"}),a=0,s=[];for(let o of t){if(o.closest("[data-yuktai-panel]"))continue;let c=window.getComputedStyle(o);if(c.display==="none"||c.visibility==="hidden")continue;let p=Ft(o),u=await Bt(i,p);u&&u.length>0&&(o.dataset.yuktaiLabelOriginal=o.getAttribute("aria-label")||"",o.setAttribute("aria-label",u),a++,s.push({tag:o.tagName.toLowerCase(),label:u}))}return i.destroy(),{success:!0,fixed:a,elements:s}}catch(n){return{success:!1,fixed:0,elements:[],error:n instanceof Error?n.message:"Label generation failed"}}}function Ze(){let e=document.querySelectorAll("[data-yuktai-label-original]");for(let t of e){let n=t.dataset.yuktaiLabelOriginal;n?t.setAttribute("aria-label",n):t.removeAttribute("aria-label"),delete t.dataset.yuktaiLabelOriginal}}var de=null,et=null;var tt=null,Ee=null,v=null,q=null,le=null,Ce=null,D=null,ce={deuteranopia:"yuktai-cb-d",protanopia:"yuktai-cb-p",tritanopia:"yuktai-cb-t"};var nt=new Set(["input","select","textarea"]);var Le={nav:"navigation",header:"banner",footer:"contentinfo",main:"main",aside:"complementary"};function Me(e,t="polite"){if(typeof window>"u"||!D?.speechEnabled||!window.speechSynthesis)return;window.speechSynthesis.cancel();let n=new SpeechSynthesisUtterance(e);n.rate=1,n.pitch=1,n.volume=1;let i=window.speechSynthesis.getVoices();i.length>0&&(n.voice=i[0]),window.speechSynthesis.speak(n)}function ct(e,t="info"){if(typeof document>"u")return;let i={success:{bg:"#0f9d58",border:"#0a7a44",icon:"\u2713"},error:{bg:"#d93025",border:"#b52a1c",icon:"\u2715"},warning:{bg:"#f29900",border:"#c67c00",icon:"\u26A0"},info:{bg:"#1a73e8",border:"#1557b0",icon:"\u2139"}}[t];v||(v=document.createElement("div"),v.setAttribute("role","alert"),v.setAttribute("aria-live","assertive"),v.setAttribute("aria-atomic","true"),v.style.cssText=`
74
+ `.trim();return(await e.write(n)).trim().replace(/^["']|["']$/g,"").replace(/\.$/,"").trim()}async function Qe(){if(!await Te())return{success:!1,fixed:0,elements:[],error:"Chrome Built-in AI Writer not available. Enable via chrome://flags."};let t=document.querySelectorAll(Ft);if(t.length===0)return{success:!0,fixed:0,elements:[]};try{let n=Xe();if(!n)throw new Error("Writer API not available");let i=await n.create({tone:"neutral",format:"plain-text",length:"short",outputLanguage:"en"}),a=0,s=[];for(let o of t){if(o.closest("[data-yuktai-panel]"))continue;let c=window.getComputedStyle(o);if(c.display==="none"||c.visibility==="hidden")continue;let p=Bt(o),u=await Nt(i,p);u&&u.length>0&&(o.dataset.yuktaiLabelOriginal=o.getAttribute("aria-label")||"",o.setAttribute("aria-label",u),a++,s.push({tag:o.tagName.toLowerCase(),label:u}))}return i.destroy(),{success:!0,fixed:a,elements:s}}catch(n){return{success:!1,fixed:0,elements:[],error:n instanceof Error?n.message:"Label generation failed"}}}function Ze(){let e=document.querySelectorAll("[data-yuktai-label-original]");for(let t of e){let n=t.dataset.yuktaiLabelOriginal;n?t.setAttribute("aria-label",n):t.removeAttribute("aria-label"),delete t.dataset.yuktaiLabelOriginal}}var de=null,et=null;var tt=null,Ee=null,h=null,O=null,le=null,Ce=null,D=null,ce={deuteranopia:"yuktai-cb-d",protanopia:"yuktai-cb-p",tritanopia:"yuktai-cb-t"};var nt=new Set(["input","select","textarea"]);var Le={nav:"navigation",header:"banner",footer:"contentinfo",main:"main",aside:"complementary"};function Me(e,t="polite"){if(typeof window>"u"||!D?.speechEnabled||!window.speechSynthesis)return;window.speechSynthesis.cancel();let n=new SpeechSynthesisUtterance(e);n.rate=1,n.pitch=1,n.volume=1;let i=window.speechSynthesis.getVoices();i.length>0&&(n.voice=i[0]),window.speechSynthesis.speak(n)}function ct(e,t="info"){if(typeof document>"u")return;let i={success:{bg:"#0f9d58",border:"#0a7a44",icon:"\u2713"},error:{bg:"#d93025",border:"#b52a1c",icon:"\u2715"},warning:{bg:"#f29900",border:"#c67c00",icon:"\u26A0"},info:{bg:"#1a73e8",border:"#1557b0",icon:"\u2139"}}[t];h||(h=document.createElement("div"),h.setAttribute("role","alert"),h.setAttribute("aria-live","assertive"),h.setAttribute("aria-atomic","true"),h.style.cssText=`
89
75
  position: fixed;
90
76
  top: 80px;
91
77
  right: 16px;
@@ -104,14 +90,14 @@ Answer:`,c=(await mt(s,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_
104
90
  transition: transform 0.3s, opacity 0.3s;
105
91
  transform: translateX(120%);
106
92
  opacity: 0;
107
- `,document.body.appendChild(v)),v.style.background=i.bg,v.style.border=`1px solid ${i.border}`,v.style.color="#fff",v.innerHTML=`
93
+ `,document.body.appendChild(h)),h.style.background=i.bg,h.style.border=`1px solid ${i.border}`,h.style.color="#fff",h.innerHTML=`
108
94
  <span style="font-size:18px;font-weight:700">${i.icon}</span>
109
95
  <span style="flex:1;line-height:1.4">${e}</span>
110
96
  <button
111
97
  onclick="this.parentElement.style.transform='translateX(120%)';this.parentElement.style.opacity='0'"
112
98
  style="background:none;border:none;color:#fff;cursor:pointer;font-size:18px;padding:0;line-height:1"
113
99
  aria-label="Close notification">\xD7</button>
114
- `,window.innerWidth<=480&&(v.style.right="8px",v.style.left="8px",v.style.maxWidth="none",v.style.width="auto"),requestAnimationFrame(()=>{v&&(v.style.transform="translateX(0)",v.style.opacity="1")}),setTimeout(()=>{v&&(v.style.transform="translateX(120%)",v.style.opacity="0")},5e3)}function g(e,t="info",n=!0){de&&(de.textContent=e),ct(e,t),n&&Me(e,t==="error"?"assertive":"polite")}function Nt(){if(typeof document>"u"||tt)return;let e=[{label:"Skip to main content",selector:"main,[role='main'],#main,#main-content"},{label:"Skip to navigation",selector:"nav,[role='navigation'],#nav,#navigation"},{label:"Skip to search",selector:"[role='search'],#search,input[type='search']"}],t=document.createElement("div");t.setAttribute("data-yuktai-skip-bar","true"),t.setAttribute("role","navigation"),t.setAttribute("aria-label","Skip links"),t.style.cssText=`
100
+ `,window.innerWidth<=480&&(h.style.right="8px",h.style.left="8px",h.style.maxWidth="none",h.style.width="auto"),requestAnimationFrame(()=>{h&&(h.style.transform="translateX(0)",h.style.opacity="1")}),setTimeout(()=>{h&&(h.style.transform="translateX(120%)",h.style.opacity="0")},5e3)}function g(e,t="info",n=!0){de&&(de.textContent=e),ct(e,t),n&&Me(e,t==="error"?"assertive":"polite")}function Ot(){if(typeof document>"u"||tt)return;let e=[{label:"Skip to main content",selector:"main,[role='main'],#main,#main-content"},{label:"Skip to navigation",selector:"nav,[role='navigation'],#nav,#navigation"},{label:"Skip to search",selector:"[role='search'],#search,input[type='search']"}],t=document.createElement("div");t.setAttribute("data-yuktai-skip-bar","true"),t.setAttribute("role","navigation"),t.setAttribute("aria-label","Skip links"),t.style.cssText=`
115
101
  position: fixed;
116
102
  top: 0;
117
103
  left: 0;
@@ -136,7 +122,7 @@ Answer:`,c=(await mt(s,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_
136
122
  white-space: nowrap;
137
123
  border: 2px solid transparent;
138
124
  transition: background 0.15s, border-color 0.15s;
139
- `,c.addEventListener("focus",()=>{t.style.transform="translateY(0)"}),c.addEventListener("blur",()=>{setTimeout(()=>{t.matches(":focus-within")||(t.style.transform="translateY(-100%)")},2e3)}),c.addEventListener("click",p=>{p.preventDefault(),o.focus(),o.scrollIntoView({behavior:"smooth",block:"start"}),g(`Jumped to ${a.replace("Skip to ","")}`,"info"),t.style.transform="translateY(-100%)"}),t.appendChild(c)}),!n)return;window.innerWidth<768&&(t.style.transform="translateY(0)",t.style.position="sticky"),window.addEventListener("resize",()=>{window.innerWidth<768&&(t.style.transform="translateY(0)")}),document.body.insertBefore(t,document.body.firstChild),tt=t}function Ot(){if(typeof document>"u"||document.querySelector("[data-yuktai-focus-style]"))return;let e=document.createElement("style");e.setAttribute("data-yuktai-focus-style","true"),e.textContent=`
125
+ `,c.addEventListener("focus",()=>{t.style.transform="translateY(0)"}),c.addEventListener("blur",()=>{setTimeout(()=>{t.matches(":focus-within")||(t.style.transform="translateY(-100%)")},2e3)}),c.addEventListener("click",p=>{p.preventDefault(),o.focus(),o.scrollIntoView({behavior:"smooth",block:"start"}),g(`Jumped to ${a.replace("Skip to ","")}`,"info"),t.style.transform="translateY(-100%)"}),t.appendChild(c)}),!n)return;window.innerWidth<768&&(t.style.transform="translateY(0)",t.style.position="sticky"),window.addEventListener("resize",()=>{window.innerWidth<768&&(t.style.transform="translateY(0)")}),document.body.insertBefore(t,document.body.firstChild),tt=t}function Dt(){if(typeof document>"u"||document.querySelector("[data-yuktai-focus-style]"))return;let e=document.createElement("style");e.setAttribute("data-yuktai-focus-style","true"),e.textContent=`
140
126
 
141
127
  /* \u2500\u2500 Focus indicator \u2014 WCAG 2.4.11 minimum 2px solid \u2500\u2500 */
142
128
  [data-yuktai-a11y] *:focus-visible {
@@ -282,7 +268,7 @@ Answer:`,c=(await mt(s,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_
282
268
  width: auto !important;
283
269
  }
284
270
  }
285
- `,document.head.appendChild(e),document.documentElement.setAttribute("data-yuktai-a11y","true")}function qt(){typeof document>"u"||document.querySelector("[data-yuktai-kb-init]")||(document.documentElement.setAttribute("data-yuktai-kb-init","true"),document.addEventListener("keydown",e=>{let t=document.activeElement;if(!t)return;let n=t.getAttribute("role")||"";if(e.key==="Escape"){let i=t.closest("[role='dialog'],[role='alertdialog']");if(i){i.style.display="none",g("Dialog closed","info");return}let a=t.closest("[role='menu'],[role='menubar']");a&&(a.style.display="none",g("Menu closed","info"))}if(n==="menuitem"||t.closest("[role='menu'],[role='menubar']")){let i=t.closest("[role='menu'],[role='menubar']");if(!i)return;let a=Array.from(i.querySelectorAll("[role='menuitem']:not([disabled])")),s=a.indexOf(t);e.key==="ArrowDown"||e.key==="ArrowRight"?(e.preventDefault(),a[(s+1)%a.length]?.focus()):e.key==="ArrowUp"||e.key==="ArrowLeft"?(e.preventDefault(),a[(s-1+a.length)%a.length]?.focus()):e.key==="Home"?(e.preventDefault(),a[0]?.focus()):e.key==="End"&&(e.preventDefault(),a[a.length-1]?.focus())}if(n==="tab"||t.closest("[role='tablist']")){let i=t.closest("[role='tablist']");if(!i)return;let a=Array.from(i.querySelectorAll("[role='tab']:not([disabled])")),s=a.indexOf(t);if(e.key==="ArrowRight"||e.key==="ArrowDown"){e.preventDefault();let o=a[(s+1)%a.length];o?.focus(),o?.click()}else if(e.key==="ArrowLeft"||e.key==="ArrowUp"){e.preventDefault();let o=a[(s-1+a.length)%a.length];o?.focus(),o?.click()}}if(n==="option"||t.closest("[role='listbox']")){let i=t.closest("[role='listbox']");if(!i)return;let a=Array.from(i.querySelectorAll("[role='option']:not([aria-disabled='true'])")),s=a.indexOf(t);e.key==="ArrowDown"?(e.preventDefault(),a[(s+1)%a.length]?.focus()):e.key==="ArrowUp"?(e.preventDefault(),a[(s-1+a.length)%a.length]?.focus()):(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),t.setAttribute("aria-selected","true"),a.forEach(o=>{o!==t&&o.setAttribute("aria-selected","false")}),g(`Selected: ${t.textContent?.trim()}`,"success"))}e.altKey&&e.key==="a"&&(e.preventDefault(),Dt()),e.key==="Tab"&&D?.speechEnabled&&setTimeout(()=>{let i=document.activeElement;if(!i)return;let a=i.getAttribute("aria-label")||i.getAttribute("title")||i.textContent?.trim()||i.tagName.toLowerCase(),s=i.getAttribute("role")||i.tagName.toLowerCase();Me(`${a}, ${s}`)},100)}))}function ue(e){let t=e.querySelectorAll('button:not([disabled]),a[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"]),[role="button"]');if(t.length===0)return;let n=t[0],i=t[t.length-1];n.focus(),e.addEventListener("keydown",a=>{a.key==="Tab"&&(a.shiftKey?document.activeElement===n&&(a.preventDefault(),i.focus()):document.activeElement===i&&(a.preventDefault(),n.focus()))})}function Dt(){if(typeof document>"u")return;if(q){q.remove(),q=null;return}let e=document.createElement("div");e.setAttribute("role","dialog"),e.setAttribute("aria-label","Keyboard shortcuts"),e.setAttribute("aria-modal","true"),e.setAttribute("data-yuktai-cheatsheet","true"),e.style.cssText=`
271
+ `,document.head.appendChild(e),document.documentElement.setAttribute("data-yuktai-a11y","true")}function _t(){typeof document>"u"||document.querySelector("[data-yuktai-kb-init]")||(document.documentElement.setAttribute("data-yuktai-kb-init","true"),document.addEventListener("keydown",e=>{let t=document.activeElement;if(!t)return;let n=t.getAttribute("role")||"";if(e.key==="Escape"){let i=t.closest("[role='dialog'],[role='alertdialog']");if(i){i.style.display="none",g("Dialog closed","info");return}let a=t.closest("[role='menu'],[role='menubar']");a&&(a.style.display="none",g("Menu closed","info"))}if(n==="menuitem"||t.closest("[role='menu'],[role='menubar']")){let i=t.closest("[role='menu'],[role='menubar']");if(!i)return;let a=Array.from(i.querySelectorAll("[role='menuitem']:not([disabled])")),s=a.indexOf(t);e.key==="ArrowDown"||e.key==="ArrowRight"?(e.preventDefault(),a[(s+1)%a.length]?.focus()):e.key==="ArrowUp"||e.key==="ArrowLeft"?(e.preventDefault(),a[(s-1+a.length)%a.length]?.focus()):e.key==="Home"?(e.preventDefault(),a[0]?.focus()):e.key==="End"&&(e.preventDefault(),a[a.length-1]?.focus())}if(n==="tab"||t.closest("[role='tablist']")){let i=t.closest("[role='tablist']");if(!i)return;let a=Array.from(i.querySelectorAll("[role='tab']:not([disabled])")),s=a.indexOf(t);if(e.key==="ArrowRight"||e.key==="ArrowDown"){e.preventDefault();let o=a[(s+1)%a.length];o?.focus(),o?.click()}else if(e.key==="ArrowLeft"||e.key==="ArrowUp"){e.preventDefault();let o=a[(s-1+a.length)%a.length];o?.focus(),o?.click()}}if(n==="option"||t.closest("[role='listbox']")){let i=t.closest("[role='listbox']");if(!i)return;let a=Array.from(i.querySelectorAll("[role='option']:not([aria-disabled='true'])")),s=a.indexOf(t);e.key==="ArrowDown"?(e.preventDefault(),a[(s+1)%a.length]?.focus()):e.key==="ArrowUp"?(e.preventDefault(),a[(s-1+a.length)%a.length]?.focus()):(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),t.setAttribute("aria-selected","true"),a.forEach(o=>{o!==t&&o.setAttribute("aria-selected","false")}),g(`Selected: ${t.textContent?.trim()}`,"success"))}e.altKey&&e.key==="a"&&(e.preventDefault(),Gt()),e.key==="Tab"&&D?.speechEnabled&&setTimeout(()=>{let i=document.activeElement;if(!i)return;let a=i.getAttribute("aria-label")||i.getAttribute("title")||i.textContent?.trim()||i.tagName.toLowerCase(),s=i.getAttribute("role")||i.tagName.toLowerCase();Me(`${a}, ${s}`)},100)}))}function ue(e){let t=e.querySelectorAll('button:not([disabled]),a[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"]),[role="button"]');if(t.length===0)return;let n=t[0],i=t[t.length-1];n.focus(),e.addEventListener("keydown",a=>{a.key==="Tab"&&(a.shiftKey?document.activeElement===n&&(a.preventDefault(),i.focus()):document.activeElement===i&&(a.preventDefault(),n.focus()))})}function Gt(){if(typeof document>"u")return;if(O){O.remove(),O=null;return}let e=document.createElement("div");e.setAttribute("role","dialog"),e.setAttribute("aria-label","Keyboard shortcuts"),e.setAttribute("aria-modal","true"),e.setAttribute("data-yuktai-cheatsheet","true"),e.style.cssText=`
286
272
  position: fixed;
287
273
  top: 50%;
288
274
  left: 50%;
@@ -312,7 +298,7 @@ Answer:`,c=(await mt(s,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_
312
298
  <span style="font-size:12px;color:#ccc;text-align:right;flex:1;margin-left:12px">${a}</span>
313
299
  </div>
314
300
  `).join("")}
315
- `,e.querySelector("[data-yuktai-close]")?.addEventListener("click",()=>{e.remove(),q=null}),e.addEventListener("keydown",i=>{i.key==="Escape"&&(e.remove(),q=null)}),document.body.appendChild(e),q=e,ue(e),g("Keyboard shortcuts opened. Press Escape to close.","info")}function _t(e){if(typeof document>"u"||!D?.showAuditBadge||typeof window<"u"&&!window.location.hostname.includes("localhost")&&!window.location.hostname.includes("127.0.0.1"))return;Ee&&Ee.remove();let t=e.score,n=t>=90?"#0f9d58":t>=70?"#f29900":"#d93025",i=t>=90?"\u267F":t>=70?"\u26A0":"\u2715",a=document.createElement("button");a.setAttribute("aria-label",`Accessibility score: ${t} out of 100`),a.setAttribute("data-yuktai-badge","true"),a.style.cssText=`
301
+ `,e.querySelector("[data-yuktai-close]")?.addEventListener("click",()=>{e.remove(),O=null}),e.addEventListener("keydown",i=>{i.key==="Escape"&&(e.remove(),O=null)}),document.body.appendChild(e),O=e,ue(e),g("Keyboard shortcuts opened. Press Escape to close.","info")}function qt(e){if(typeof document>"u"||!D?.showAuditBadge||typeof window<"u"&&!window.location.hostname.includes("localhost")&&!window.location.hostname.includes("127.0.0.1"))return;Ee&&Ee.remove();let t=e.score,n=t>=90?"#0f9d58":t>=70?"#f29900":"#d93025",i=t>=90?"\u267F":t>=70?"\u26A0":"\u2715",a=document.createElement("button");a.setAttribute("aria-label",`Accessibility score: ${t} out of 100`),a.setAttribute("data-yuktai-badge","true"),a.style.cssText=`
316
302
  position: fixed;
317
303
  bottom: 16px;
318
304
  left: 16px;
@@ -331,7 +317,7 @@ Answer:`,c=(await mt(s,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_
331
317
  align-items: center;
332
318
  gap: 6px;
333
319
  transition: transform 0.15s;
334
- `,a.innerHTML=`${i} ${t}/100 <span style="font-weight:400;opacity:0.85">${e.details.length} issues</span>`,a.addEventListener("click",()=>Gt(e)),document.body.appendChild(a),Ee=a}function Gt(e){let t=document.querySelector("[data-yuktai-audit-details]");if(t){t.remove();return}let n=document.createElement("div");n.setAttribute("data-yuktai-audit-details","true"),n.setAttribute("role","dialog"),n.setAttribute("aria-label","Accessibility audit details"),n.style.cssText=`
320
+ `,a.innerHTML=`${i} ${t}/100 <span style="font-weight:400;opacity:0.85">${e.details.length} issues</span>`,a.addEventListener("click",()=>jt(e)),document.body.appendChild(a),Ee=a}function jt(e){let t=document.querySelector("[data-yuktai-audit-details]");if(t){t.remove();return}let n=document.createElement("div");n.setAttribute("data-yuktai-audit-details","true"),n.setAttribute("role","dialog"),n.setAttribute("aria-label","Accessibility audit details"),n.style.cssText=`
335
321
  position: fixed;
336
322
  bottom: 56px;
337
323
  left: 16px;
@@ -392,7 +378,7 @@ Answer:`,c=(await mt(s,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_
392
378
  No, sign out
393
379
  </button>
394
380
  </div>
395
- `;let n=t.querySelector("[data-yuktai-extend]"),i=t.querySelector("[data-yuktai-dismiss]");n?.addEventListener("click",()=>{t.remove(),le=null,g("Session extended. You have more time.","success"),D?.timeoutWarning&&dt(D.timeoutWarning)}),i?.addEventListener("click",()=>{t.remove(),le=null}),document.body.appendChild(t),le=t,ue(t),g("Warning: Your session will expire soon. Do you need more time?","warning")},e*1e3))}function jt(e){if(typeof document>"u")return;let t=document.documentElement;if(t.toggleAttribute("data-yuktai-high-contrast",!!e.highContrast),t.toggleAttribute("data-yuktai-dark",!!e.darkMode),t.toggleAttribute("data-yuktai-reduce-motion",!!e.reduceMotion),t.toggleAttribute("data-yuktai-large-targets",!!e.largeTargets),t.toggleAttribute("data-yuktai-keyboard",!!e.keyboardHints),t.toggleAttribute("data-yuktai-dyslexia",!!e.dyslexiaFont),e.localFont?document.body.style.fontFamily=`"${e.localFont}", system-ui, sans-serif`:e.dyslexiaFont||(document.body.style.fontFamily=""),e.fontSizeMultiplier&&e.fontSizeMultiplier!==1?document.documentElement.style.fontSize=`${e.fontSizeMultiplier*100}%`:document.documentElement.style.fontSize="",e.colorBlindMode&&e.colorBlindMode!=="none"){let n=e.colorBlindMode==="achromatopsia"?"grayscale(100%)":`url(#${ce[e.colorBlindMode]})`;document.body.style.filter=n}else document.body.style.filter=""}function Vt(e){try{let t=localStorage.getItem("yuktai-a11y-prefs");t&&Object.assign(e,JSON.parse(t))}catch{}}async function at(e){if(e){if(!await we()){g("Plain English requires Chrome 127+","warning");return}g("Rewriting page in plain English...","info",!1);let n=await qe();g(n.error?`Plain English failed: ${n.error}`:`${n.fixed} sections rewritten in plain English`,n.error?"error":"success",!1)}else De(),g("Original text restored","info",!1)}async function ot(e){if(e){if(!await ve()){g("Page summariser requires Chrome 127+","warning");return}g("Generating page summary...","info",!1);let n=await je();g(n.error?`Summary failed: ${n.error}`:"Page summary added at top",n.error?"error":"success",!1)}else oe(),g("Page summary removed","info",!1)}async function it(e){if(e==="en"){ke(),g("Page restored to English","info",!1);return}g(`Translating page to ${e}...`,"info",!1);let t=await Ve(e);g(t.error?`Translation failed: ${t.error}`:`Page translated to ${e}`,t.error?"error":"success",!1)}async function rt(e){if(e){if(!Ae()){g("Voice control not supported in this browser","warning");return}Ye(t=>{t.success&&g(`Voice: ${t.action}`,"info",!1)}),g("Voice control started. Say a command.","success",!1)}else Se(),g("Voice control stopped","info",!1)}async function st(e){if(e){if(!await Te()){g("Smart labels requires Chrome 127+","warning");return}g("Generating smart labels...","info",!1);let n=await Qe();g(n.error?`Smart labels failed: ${n.error}`:`${n.fixed} elements labelled`,n.error?"error":"success",!1)}else Ze(),g("Smart labels removed","info",!1)}function Kt(){if(typeof document>"u"||de)return;let e=document.createElement("div");e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),e.setAttribute("aria-relevant","text"),e.style.cssText="position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);",document.body.appendChild(e),de=e}function Yt(){if(typeof document>"u"||et)return;let e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttribute("aria-hidden","true"),e.style.cssText="position:absolute;width:0;height:0;overflow:hidden;",e.innerHTML=`
381
+ `;let n=t.querySelector("[data-yuktai-extend]"),i=t.querySelector("[data-yuktai-dismiss]");n?.addEventListener("click",()=>{t.remove(),le=null,g("Session extended. You have more time.","success"),D?.timeoutWarning&&dt(D.timeoutWarning)}),i?.addEventListener("click",()=>{t.remove(),le=null}),document.body.appendChild(t),le=t,ue(t),g("Warning: Your session will expire soon. Do you need more time?","warning")},e*1e3))}function Vt(e){if(typeof document>"u")return;let t=document.documentElement;if(t.toggleAttribute("data-yuktai-high-contrast",!!e.highContrast),t.toggleAttribute("data-yuktai-dark",!!e.darkMode),t.toggleAttribute("data-yuktai-reduce-motion",!!e.reduceMotion),t.toggleAttribute("data-yuktai-large-targets",!!e.largeTargets),t.toggleAttribute("data-yuktai-keyboard",!!e.keyboardHints),t.toggleAttribute("data-yuktai-dyslexia",!!e.dyslexiaFont),e.localFont?document.body.style.fontFamily=`"${e.localFont}", system-ui, sans-serif`:e.dyslexiaFont||(document.body.style.fontFamily=""),e.fontSizeMultiplier&&e.fontSizeMultiplier!==1?document.documentElement.style.fontSize=`${e.fontSizeMultiplier*100}%`:document.documentElement.style.fontSize="",e.colorBlindMode&&e.colorBlindMode!=="none"){let n=e.colorBlindMode==="achromatopsia"?"grayscale(100%)":`url(#${ce[e.colorBlindMode]})`;document.body.style.filter=n}else document.body.style.filter=""}function Kt(e){try{let t=localStorage.getItem("yuktai-a11y-prefs");t&&Object.assign(e,JSON.parse(t))}catch{}}async function ot(e){if(e){if(!await we()){g("Plain English requires Chrome 127+","warning");return}g("Rewriting page in plain English...","info",!1);let n=await De();g(n.error?`Plain English failed: ${n.error}`:`${n.fixed} sections rewritten in plain English`,n.error?"error":"success",!1)}else _e(),g("Original text restored","info",!1)}async function at(e){if(e){if(!await ve()){g("Page summariser requires Chrome 127+","warning");return}g("Generating page summary...","info",!1);let n=await je();g(n.error?`Summary failed: ${n.error}`:"Page summary added at top",n.error?"error":"success",!1)}else ae(),g("Page summary removed","info",!1)}async function it(e){if(e==="en"){ke(),g("Page restored to English","info",!1);return}g(`Translating page to ${e}...`,"info",!1);let t=await Ve(e);g(t.error?`Translation failed: ${t.error}`:`Page translated to ${e}`,t.error?"error":"success",!1)}async function rt(e){if(e){if(!Ae()){g("Voice control not supported in this browser","warning");return}Ye(t=>{t.success&&g(`Voice: ${t.action}`,"info",!1)}),g("Voice control started. Say a command.","success",!1)}else Se(),g("Voice control stopped","info",!1)}async function st(e){if(e){if(!await Te()){g("Smart labels requires Chrome 127+","warning");return}g("Generating smart labels...","info",!1);let n=await Qe();g(n.error?`Smart labels failed: ${n.error}`:`${n.fixed} elements labelled`,n.error?"error":"success",!1)}else Ze(),g("Smart labels removed","info",!1)}function Yt(){if(typeof document>"u"||de)return;let e=document.createElement("div");e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),e.setAttribute("aria-relevant","text"),e.style.cssText="position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);",document.body.appendChild(e),de=e}function Ut(){if(typeof document>"u"||et)return;let e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttribute("aria-hidden","true"),e.style.cssText="position:absolute;width:0;height:0;overflow:hidden;",e.innerHTML=`
396
382
  <defs>
397
383
  <filter id="${ce.deuteranopia}">
398
384
  <feColorMatrix type="matrix"
@@ -407,4 +393,4 @@ Answer:`,c=(await mt(s,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_
407
393
  values="0.95 0.05 0 0 0 0 0.433 0.567 0 0 0 0.475 0.525 0 0 0 0 0 1 0"/>
408
394
  </filter>
409
395
  </defs>
410
- `,document.body.appendChild(e),et=e}function lt(e){let t={critical:20,serious:10,moderate:5,minor:2},n=e.details.reduce((i,a)=>i+(t[a.severity]||0),0);return Math.max(0,Math.min(100,100-n))}var C={name:"yuktai-a11y",version:"4.0.0",observer:null,async execute(e){if(!e.enabled)return this.stopObserver(),"yuktai: disabled.";D=e,Vt(e),Kt(),Yt(),Ot(),qt(),e.showSkipLinks!==!1&&Nt(),e.showPreferencePanel,jt(e);let t=this.applyFixes(e);t.score=lt(t),e.showAuditBadge&&_t(t),e.timeoutWarning&&dt(e.timeoutWarning),e.autoFix&&this.startObserver(e),e.plainEnglish&&await at(!0),e.summarisePage&&await ot(!0),e.translateLanguage&&e.translateLanguage!=="en"&&await it(e.translateLanguage),e.voiceControl&&await rt(!0),e.smartLabels&&await st(!0);let n=`${t.fixed} fixes applied. Score: ${t.score}/100.`;return g(n,t.score>=90?"success":"info",!1),`yuktai v4.0.0: ${n} Scanned ${t.scanned} elements in ${t.renderTime}ms.`},applyFixes(e){let t={fixed:0,scanned:0,renderTime:0,score:100,details:[]};if(typeof document>"u")return t;let n=performance.now(),i=document.querySelectorAll("*");t.scanned=i.length;let a=(s,o,c,p)=>{t.details.push({tag:s,fix:o,severity:c,element:p.outerHTML.slice(0,100)}),t.fixed++};return i.forEach(s=>{let o=s,c=o.tagName.toLowerCase();if(c==="html"&&!o.getAttribute("lang")&&(o.setAttribute("lang","en"),a(c,'lang="en" added',"critical",o)),c==="meta"){let u=o.getAttribute("name"),x=o.getAttribute("content")||"";u==="viewport"&&x.includes("user-scalable=no")&&(o.setAttribute("content",x.replace("user-scalable=no","user-scalable=yes")),a(c,"user-scalable=yes restored","serious",o)),u==="viewport"&&/maximum-scale=1(?:[^0-9]|$)/.test(x)&&(o.setAttribute("content",x.replace(/maximum-scale=1(?=[^0-9]|$)/,"maximum-scale=5")),a(c,"maximum-scale=5 restored","serious",o))}if(c==="main"&&!o.getAttribute("tabindex")&&(o.setAttribute("tabindex","-1"),o.getAttribute("id")||o.setAttribute("id","main-content")),c==="img"&&(o.hasAttribute("alt")||(o.setAttribute("alt",""),o.setAttribute("aria-hidden","true"),a(c,'alt="" aria-hidden="true"',"serious",o))),c==="svg"&&(!o.getAttribute("aria-hidden")&&!o.getAttribute("aria-label")&&!s.querySelector("title")&&(o.setAttribute("aria-hidden","true"),a(c,'aria-hidden="true" (decorative svg)',"minor",o)),o.getAttribute("focusable")||o.setAttribute("focusable","false")),c==="iframe"&&!o.getAttribute("title")&&!o.getAttribute("aria-label")&&(o.setAttribute("title","embedded content"),o.setAttribute("aria-label","embedded content"),a(c,"title + aria-label added","serious",o)),c==="button"){if(!o.innerText?.trim()&&!o.getAttribute("aria-label")){let u=o.getAttribute("title")||"button";o.setAttribute("aria-label",u),a(c,`aria-label="${u}" (empty button)`,"critical",o)}o.hasAttribute("disabled")&&!o.getAttribute("aria-disabled")&&(o.setAttribute("aria-disabled","true"),t.fixed++)}if(c==="a"){let u=o;!o.innerText?.trim()&&!o.getAttribute("aria-label")&&(o.setAttribute("aria-label",o.getAttribute("title")||"link"),a(c,"aria-label added (empty link)","critical",o)),u.target==="_blank"&&!u.rel?.includes("noopener")&&(u.rel="noopener noreferrer",t.fixed++)}if(nt.has(c)){let u=o;if(!o.getAttribute("aria-label")&&!o.getAttribute("aria-labelledby")){let x=o.getAttribute("placeholder")||o.getAttribute("name")||c;o.setAttribute("aria-label",x),a(c,`aria-label="${x}"`,"serious",o)}if(o.hasAttribute("required")&&!o.getAttribute("aria-required")&&(o.setAttribute("aria-required","true"),t.fixed++),c==="input"&&!u.autocomplete){let x=u.name||"";u.type==="email"||x.includes("email")?u.autocomplete="email":u.type==="tel"||x.includes("tel")?u.autocomplete="tel":u.type==="password"&&(u.autocomplete="current-password"),t.fixed++}}c==="th"&&!o.getAttribute("scope")&&(o.setAttribute("scope",o.closest("thead")?"col":"row"),a(c,"scope added to <th>","moderate",o)),Le[c]&&!o.getAttribute("role")&&(o.setAttribute("role",Le[c]),a(c,`role="${Le[c]}"`,"minor",o));let p=o.getAttribute("role")||"";p==="tab"&&!o.getAttribute("aria-selected")&&(o.setAttribute("aria-selected","false"),t.fixed++),["alert","status","log"].includes(p)&&!o.getAttribute("aria-live")&&(o.setAttribute("aria-live",p==="alert"?"assertive":"polite"),a(c,`aria-live added on role=${p}`,"moderate",o)),p==="combobox"&&!o.getAttribute("aria-expanded")&&(o.setAttribute("aria-expanded","false"),a(c,'aria-expanded="false" on combobox',"serious",o)),(p==="checkbox"||p==="radio")&&!o.getAttribute("aria-checked")&&(o.setAttribute("aria-checked","false"),a(c,`aria-checked="false" on role=${p}`,"serious",o))}),t.renderTime=parseFloat((performance.now()-n).toFixed(2)),t},scan(){let e={fixed:0,scanned:0,renderTime:0,score:100,details:[]};if(typeof document>"u")return e;let t=performance.now(),n=document.querySelectorAll("*");e.scanned=n.length;let i=(a,s,o,c)=>e.details.push({tag:a,fix:s,severity:o,element:c.outerHTML.slice(0,100)});return n.forEach(a=>{let s=a,o=s.tagName.toLowerCase();(o==="a"||o==="button")&&!s.innerText?.trim()&&!s.getAttribute("aria-label")&&i(o,"needs aria-label (empty)","critical",s),o==="img"&&!s.hasAttribute("alt")&&i(o,"needs alt text","serious",s),nt.has(o)&&!s.getAttribute("aria-label")&&!s.getAttribute("aria-labelledby")&&i(o,"needs aria-label","serious",s),o==="iframe"&&!s.getAttribute("title")&&!s.getAttribute("aria-label")&&i(o,"iframe needs title","serious",s)}),e.fixed=e.details.length,e.score=lt(e),e.renderTime=parseFloat((performance.now()-t).toFixed(2)),e},startObserver(e){this.observer||typeof document>"u"||(this.observer=new MutationObserver(()=>this.applyFixes(e)),this.observer.observe(document.body,{childList:!0,subtree:!0,attributes:!1}))},stopObserver(){this.observer?.disconnect(),this.observer=null},announce:g,speak:Me,showVisualAlert:ct,trapFocus:ue,handlePlainEnglish:at,handleSummarisePage:ot,handleTranslate:it,handleVoiceControl:rt,handleSmartLabels:st,SUPPORTED_LANGUAGES:re};f();f();var b=Ne(require("react"));f();var T=require("react");Re();pe();var r=require("react/jsx-runtime"),He={highContrast:!1,reduceMotion:!1,autoFix:!0,dyslexiaFont:!1,fontScale:100,localFont:"",darkMode:!1,largeTargets:!1,speechEnabled:!1,colorBlindMode:"none",showAuditBadge:!1,timeoutWarning:void 0,plainEnglish:!1,summarisePage:!1,translateLanguage:"en",voiceControl:!1,smartLabels:!1},G=[80,90,100,110,120,130],on=[{value:"none",label:"None"},{value:"deuteranopia",label:"Deuteranopia"},{value:"protanopia",label:"Protanopia"},{value:"tritanopia",label:"Tritanopia"},{value:"achromatopsia",label:"Greyscale"}],rn=["Prompt API for Gemini Nano","Summarization API for Gemini Nano","Writer API for Gemini Nano","Rewriter API for Gemini Nano","Translation API"];function sn(){let[e,t]=(0,T.useState)(typeof window<"u"?window.innerWidth:1024);return(0,T.useEffect)(()=>{let n=()=>t(window.innerWidth);return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[]),{isMobile:e<=480,isTablet:e>480&&e<=768}}function ln({checked:e,onChange:t,label:n,disabled:i=!1}){return(0,r.jsxs)("label",{"aria-label":n,style:{position:"relative",display:"inline-flex",width:"40px",height:"24px",cursor:i?"not-allowed":"pointer",flexShrink:0,opacity:i?.4:1},children:[(0,r.jsx)("input",{type:"checkbox",checked:e,disabled:i,onChange:a=>t(a.target.checked),style:{opacity:0,width:0,height:0,position:"absolute"}}),(0,r.jsx)("span",{style:{position:"absolute",inset:0,borderRadius:"99px",background:e?"#0d9488":"#cbd5e1",transition:"background 0.2s"}}),(0,r.jsx)("span",{style:{position:"absolute",top:"3px",left:e?"19px":"3px",width:"18px",height:"18px",background:"#fff",borderRadius:"50%",transition:"left 0.2s",boxShadow:"0 1px 3px rgba(0,0,0,0.2)",pointerEvents:"none"}})]})}function j({label:e,color:t="#64748b",badge:n,concept:i}){return(0,r.jsxs)("div",{style:{margin:"10px 18px 4px"},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,r.jsx)("p",{style:{margin:0,fontSize:"10px",fontWeight:600,color:t,letterSpacing:"0.06em",textTransform:"uppercase"},children:e}),n&&(0,r.jsx)("span",{style:{fontSize:"9px",fontWeight:500,padding:"1px 7px",borderRadius:"99px",background:"#f5f3ff",color:"#7c3aed",border:"0.5px solid #c4b5fd",whiteSpace:"nowrap"},children:n})]}),i&&(0,r.jsx)("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#94a3b8",fontStyle:"italic"},children:i})]})}function R({icon:e,label:t,desc:n,checked:i,onChange:a,disabled:s=!1,disabledReason:o,tip:c}){return(0,r.jsxs)("div",{title:s?o:c,style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 18px",gap:"12px"},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"10px",flex:1,minWidth:0},children:[(0,r.jsx)("span",{"aria-hidden":"true",style:{width:"32px",height:"32px",borderRadius:"8px",background:s?"#f1f5f9":"#f0fdfa",color:s?"#94a3b8":"#0d9488",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"15px",flexShrink:0,fontWeight:700},children:e}),(0,r.jsxs)("div",{style:{minWidth:0},children:[(0,r.jsx)("p",{style:{margin:0,fontSize:"13px",fontWeight:500,color:s?"#94a3b8":"#0f172a",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:t}),(0,r.jsx)("p",{style:{margin:0,fontSize:"10px",color:"#94a3b8"},children:s?o:n})]})]}),(0,r.jsx)(ln,{checked:i,onChange:a,label:`Toggle ${t}`,disabled:s})]})}function S(){return(0,r.jsx)("div",{style:{height:"1px",background:"#f1f5f9"}})}function Q({steps:e}){return(0,r.jsxs)("div",{style:{margin:"0 18px 8px",padding:"8px 10px",background:"#f8fafc",borderRadius:"8px",border:"0.5px solid #e2e8f0"},children:[(0,r.jsx)("p",{style:{margin:"0 0 4px",fontSize:"9px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.05em"},children:"How to use"}),e.map((t,n)=>(0,r.jsxs)("p",{style:{margin:"0 0 2px",fontSize:"10px",color:"#475569"},children:[n+1,". ",t]},n))]})}var $e=(0,T.forwardRef)(({position:e,settings:t,report:n,isActive:i,aiSupported:a,voiceSupported:s,set:o,onApply:c,onReset:p,onClose:u},x)=>{let{isMobile:h,isTablet:P}=sn(),[te,me]=(0,T.useState)([]),[I,F]=(0,T.useState)(""),[H,z]=(0,T.useState)(""),[k,V]=(0,T.useState)(!1),[m,$]=(0,T.useState)(null),[L,B]=(0,T.useState)("idle");(0,T.useEffect)(()=>{let l=window;!!(l.LanguageModel||l.ai?.languageModel)&&a?$("gemini"):J()&&$("transformers")},[a]),(0,T.useEffect)(()=>{if(m!=="transformers")return;let l=setInterval(()=>{B(X())},500);return()=>clearInterval(l)},[m]);let w=async()=>{if(!(!I.trim()||k)){if(!m){z("\u26A0\uFE0F No AI engine available on this device.");return}V(!0),z("");try{let l;m==="gemini"?l=await Pe(I):(B("loading"),l=await ze(I),B("ready")),z(l.success&&l.answer?l.answer.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/#+\s/g,"").trim():"\u26A0\uFE0F "+(l.error||"No answer found on this page"))}catch{z("\u26A0\uFE0F Failed to get answer. Please try again.")}V(!1)}};(0,T.useEffect)(()=>{(async()=>{try{let N=window;if(!N.queryLocalFonts)return;let ge=await N.queryLocalFonts(),be=[...new Set(ge.map(ye=>ye.family))].sort();me(be.slice(0,50))}catch{}})()},[]);let ne=m==="gemini"?"Gemini Nano":m==="transformers"?"Transformers.js \xB7 All devices":"Detecting...",K=m==="transformers"&&L==="loading"?"Loading AI model... (first time only)":"...",Y=h?{position:"fixed",bottom:0,left:0,right:0,zIndex:9999,background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px 16px 0 0",boxShadow:"0 -8px 32px rgba(0,0,0,0.12)",maxHeight:"90vh",overflowY:"auto",fontFamily:"system-ui,-apple-system,sans-serif",width:"100%"}:{position:"fixed",bottom:"84px",[e]:"24px",zIndex:9999,width:P?"300px":"320px",maxWidth:"calc(100vw - 48px)",background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px",boxShadow:"0 8px 32px rgba(0,0,0,0.12)",maxHeight:"80vh",overflowY:"auto",fontFamily:"system-ui,-apple-system,sans-serif"};return(0,r.jsxs)("div",{ref:x,role:"dialog","aria-modal":"true","aria-label":"yuktai accessibility preferences","data-yuktai-panel":"true",style:Y,children:[(0,r.jsxs)("div",{style:{padding:"14px 18px 12px",borderBottom:"1px solid #f1f5f9",display:"flex",alignItems:"flex-start",justifyContent:"space-between",position:"sticky",top:0,background:"#fff",zIndex:1},children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"7px",marginBottom:"4px",flexWrap:"wrap"},children:[(0,r.jsx)("span",{style:{fontSize:"10px",fontWeight:700,padding:"2px 7px",borderRadius:"99px",background:"#f0fdfa",color:"#0d9488",letterSpacing:"0.05em",fontFamily:"monospace"},children:"@yuktishaalaa/yuktai v2.1.0"}),i&&(0,r.jsx)("span",{style:{fontSize:"10px",fontWeight:700,padding:"2px 7px",borderRadius:"99px",background:"#f0fdfa",color:"#0f766e",border:"1px solid #99f6e4"},children:"\u25CF ACTIVE"})]}),(0,r.jsx)("p",{style:{margin:"0 0 1px",fontSize:"15px",fontWeight:600,color:"#0f172a"},children:"Accessibility"}),(0,r.jsx)("p",{style:{margin:0,fontSize:"11px",color:"#64748b"},children:"WCAG 2.2 \xB7 Open source \xB7 Zero cost \xB7 All devices"})]}),(0,r.jsx)("button",{onClick:u,"aria-label":"Close accessibility panel",style:{background:"none",border:"none",cursor:"pointer",padding:"4px",color:"#94a3b8",fontSize:"20px",lineHeight:1,borderRadius:"6px",flexShrink:0,minWidth:h?"44px":"auto",minHeight:h?"44px":"auto",display:"flex",alignItems:"center",justifyContent:"center"},children:"\xD7"})]}),(0,r.jsx)(j,{label:"\u267F Core Accessibility",concept:"Rule-based engine \u2014 works on all browsers and devices"}),(0,r.jsx)(Q,{steps:["Toggle any feature on","Click Apply settings","Preferences saved automatically"]}),(0,r.jsx)(R,{icon:"\u{1F527}",label:"Auto-fix ARIA",desc:"Injects missing labels and roles automatically",checked:t.autoFix,onChange:l=>o("autoFix",l),tip:"Fixes aria-label, alt text, roles on every element"}),(0,r.jsx)(S,{}),(0,r.jsx)(R,{icon:"\u{1F50A}",label:"Speak on focus",desc:"Browser reads elements aloud as you tab",checked:t.speechEnabled,onChange:l=>o("speechEnabled",l),tip:"Uses browser SpeechSynthesis \u2014 no install needed"}),(0,r.jsx)(S,{}),(0,r.jsx)(R,{icon:"\u{1F399}\uFE0F",label:"Voice control",desc:"Say commands to navigate the page",checked:t.voiceControl,onChange:l=>o("voiceControl",l),disabled:!s,disabledReason:"Not supported in this browser",tip:'Say "scroll down", "go to main", "click"'}),(0,r.jsx)(S,{}),(0,r.jsx)(j,{label:"\u{1F916} AI Features",color:"#7c3aed",badge:"Gemini Nano",concept:"Large Language Model running privately on your device \u2014 Chrome 127+ only"}),(0,r.jsx)("div",{style:{margin:"4px 18px 6px",padding:"8px 10px",background:a?"#f0fdfa":"#f5f3ff",borderRadius:"8px",border:`0.5px solid ${a?"#99f6e4":"#c4b5fd"}`,fontSize:"10px",color:a?"#0f766e":"#7c3aed",lineHeight:1.5},children:a?"\u2705 Gemini Nano detected \u2014 AI features ready. Runs privately on your device.":"\u2699\uFE0F AI features need one-time setup \u2014 see guide below."}),!a&&(0,r.jsxs)("div",{style:{margin:"0 18px 8px",padding:"10px 12px",background:"#fafafa",borderRadius:"8px",border:"0.5px solid #e2e8f0",fontSize:"11px",color:"#475569",lineHeight:1.7},children:[(0,r.jsx)("p",{style:{margin:"0 0 6px",fontWeight:600,color:"#0f172a",fontSize:"11px"},children:"\u{1F6E0} One-time setup \u2014 5 steps:"}),(0,r.jsxs)("p",{style:{margin:"0 0 3px"},children:["1. Open Chrome \u2192 ",(0,r.jsx)("code",{style:{background:"#f1f5f9",padding:"1px 5px",borderRadius:"4px",fontSize:"10px",color:"#0d9488",fontFamily:"monospace"},children:"chrome://flags"})]}),(0,r.jsx)("p",{style:{margin:"0 0 3px"},children:"2. Enable each flag:"}),(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:"2px",margin:"4px 0 6px 10px"},children:rn.map(l=>(0,r.jsxs)("span",{style:{fontSize:"10px",color:"#7c3aed",fontFamily:"monospace"},children:["\u2192 ",l]},l))}),(0,r.jsxs)("p",{style:{margin:"0 0 3px"},children:["3. Click ",(0,r.jsx)("strong",{style:{color:"#0f172a"},children:"Relaunch"})]}),(0,r.jsxs)("p",{style:{margin:"0 0 3px"},children:["4. ",(0,r.jsx)("code",{style:{background:"#f1f5f9",padding:"1px 5px",borderRadius:"4px",fontSize:"10px",color:"#0d9488",fontFamily:"monospace"},children:"chrome://components"})," \u2192 Optimization Guide On Device Model \u2192 Check for update"]}),(0,r.jsx)("p",{style:{margin:"0"},children:"5. Refresh \u2014 AI features unlock automatically \u2705"})]}),(0,r.jsx)(R,{icon:"\u{1F4DD}",label:"Plain English mode",desc:"Rewrites complex text in simple language",checked:t.plainEnglish,onChange:l=>o("plainEnglish",l),disabled:!a,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: LLM text rewriting"}),(0,r.jsx)(S,{}),(0,r.jsx)(R,{icon:"\u{1F4CB}",label:"Summarise page",desc:"3-sentence summary appears at top",checked:t.summarisePage,onChange:l=>o("summarisePage",l),disabled:!a,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: Abstractive summarisation"}),(0,r.jsx)(S,{}),(0,r.jsx)(R,{icon:"\u{1F3F7}\uFE0F",label:"Smart aria-labels",desc:"AI generates meaningful labels for elements",checked:t.smartLabels,onChange:l=>o("smartLabels",l),disabled:!a,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: Context-aware label generation"}),(0,r.jsx)(S,{}),(0,r.jsx)(j,{label:"\u{1F441}\uFE0F Visual",concept:"CSS filter-based \u2014 works on all browsers and devices"}),(0,r.jsx)(Q,{steps:["Toggle any visual mode","Changes apply instantly","Works on mobile and desktop"]}),(0,r.jsx)(R,{icon:"\u25D1",label:"High contrast",desc:"Boosts contrast for low vision users",checked:t.highContrast,onChange:l=>o("highContrast",l),tip:"CSS filter: contrast()"}),(0,r.jsx)(S,{}),(0,r.jsx)(R,{icon:"\u{1F319}",label:"Dark mode",desc:"Inverts colours \u2014 easy on eyes at night",checked:t.darkMode,onChange:l=>o("darkMode",l),tip:"CSS filter: invert + hue-rotate"}),(0,r.jsx)(S,{}),(0,r.jsx)(R,{icon:"\u23F8\uFE0F",label:"Reduce motion",desc:"Disables all animations",checked:t.reduceMotion,onChange:l=>o("reduceMotion",l),tip:"WCAG 2.3.3 \u2014 vestibular disorders"}),(0,r.jsx)(S,{}),(0,r.jsx)(R,{icon:"\u{1F446}",label:"Large targets",desc:"44\xD744px minimum touch targets",checked:t.largeTargets,onChange:l=>o("largeTargets",l),tip:"WCAG 2.5.8 \u2014 motor impaired users"}),(0,r.jsx)(S,{}),(0,r.jsxs)("div",{style:{padding:"10px 18px"},children:[(0,r.jsx)("p",{style:{margin:"0 0 2px",fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F3A8} Colour blindness"}),(0,r.jsx)("p",{style:{margin:"0 0 8px",fontSize:"10px",color:"#94a3b8"},children:"SVG colour matrix filters \u2014 all devices"}),(0,r.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:on.map(l=>(0,r.jsx)("button",{onClick:()=>o("colorBlindMode",l.value),"aria-pressed":t.colorBlindMode===l.value,style:{padding:"4px 10px",borderRadius:"20px",fontSize:"11px",fontWeight:500,border:`1px solid ${t.colorBlindMode===l.value?"#0d9488":"#e2e8f0"}`,background:t.colorBlindMode===l.value?"#f0fdfa":"#fff",color:t.colorBlindMode===l.value?"#0d9488":"#64748b",cursor:"pointer",minHeight:h?"36px":"auto"},children:l.label},l.value))})]}),(0,r.jsx)(S,{}),(0,r.jsx)(j,{label:"\u{1F524} Font",concept:"Browser Font API + CSS \u2014 Chrome 103+"}),(0,r.jsx)(Q,{steps:["Toggle dyslexia font or pick from device","Adjust size with + / \u2212","Saved across visits"]}),(0,r.jsx)(R,{icon:"Aa",label:"Dyslexia-friendly font",desc:"Atkinson Hyperlegible \u2014 research-backed",checked:t.dyslexiaFont,onChange:l=>o("dyslexiaFont",l),tip:"By Braille Institute \u2014 free and open source"}),(0,r.jsx)(S,{}),(0,r.jsxs)("div",{style:{padding:"10px 18px"},children:[(0,r.jsx)("p",{style:{margin:"0 0 2px",fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F5A5}\uFE0F Local font"}),(0,r.jsx)("p",{style:{margin:"0 0 8px",fontSize:"10px",color:"#94a3b8"},children:"window.queryLocalFonts() \u2014 Chrome 103+"}),te.length>0?(0,r.jsxs)("select",{value:t.localFont,onChange:l=>o("localFont",l.target.value),"aria-label":"Choose a font from your device",style:{width:"100%",padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"13px",color:"#0f172a",background:"#fff",cursor:"pointer",height:h?"44px":"36px"},children:[(0,r.jsx)("option",{value:"",children:"System default"}),te.map(l=>(0,r.jsx)("option",{value:l,style:{fontFamily:l},children:l},l))]}):(0,r.jsx)("p",{style:{margin:0,fontSize:"11px",color:"#94a3b8"},children:"Allow font access when Chrome prompts you."})]}),(0,r.jsx)(S,{}),(0,r.jsxs)("div",{style:{padding:"10px 18px 14px"},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"10px"},children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{style:{margin:0,fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F4CF} Text size"}),(0,r.jsx)("p",{style:{margin:0,fontSize:"10px",color:"#94a3b8"},children:"Scales all text on the page"})]}),(0,r.jsxs)("span",{style:{fontSize:"12px",fontWeight:600,color:"#0d9488",background:"#f0fdfa",padding:"2px 8px",borderRadius:"99px"},children:[t.fontScale,"%"]})]}),(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,r.jsx)("button",{onClick:()=>{let l=G.indexOf(t.fontScale);l>0&&o("fontScale",G[l-1])},disabled:t.fontScale<=80,"aria-label":"Decrease text size",style:{width:h?"44px":"30px",height:h?"44px":"30px",borderRadius:"8px",border:"1px solid #e2e8f0",background:"#fff",cursor:t.fontScale<=80?"not-allowed":"pointer",fontSize:"16px",color:t.fontScale<=80?"#cbd5e1":"#0f172a",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:"\u2212"}),(0,r.jsx)("div",{style:{flex:1,display:"flex",gap:"3px"},children:G.map(l=>(0,r.jsx)("button",{onClick:()=>o("fontScale",l),"aria-label":`Set text size to ${l}%`,style:{flex:1,height:"6px",borderRadius:"99px",border:"none",cursor:"pointer",padding:0,background:l<=t.fontScale?"#0d9488":"#e2e8f0",transition:"background 0.15s"}},l))}),(0,r.jsx)("button",{onClick:()=>{let l=G.indexOf(t.fontScale);l<G.length-1&&o("fontScale",G[l+1])},disabled:t.fontScale>=130,"aria-label":"Increase text size",style:{width:h?"44px":"30px",height:h?"44px":"30px",borderRadius:"8px",border:"1px solid #e2e8f0",background:"#fff",cursor:t.fontScale>=130?"not-allowed":"pointer",fontSize:"16px",color:t.fontScale>=130?"#cbd5e1":"#0f172a",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:"+"})]})]}),(0,r.jsx)(S,{}),(0,r.jsx)(j,{label:"\u{1F310} Translate",color:"#7c3aed",badge:"Gemini Nano",concept:"Chrome Translation API \u2014 on device, no internet after setup"}),(0,r.jsx)(Q,{steps:["Enable Gemini Nano first","Pick your language","Full page translates instantly"]}),(0,r.jsxs)("div",{style:{padding:"6px 18px 12px"},children:[(0,r.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:re.slice(0,h?8:18).map(l=>(0,r.jsx)("button",{onClick:()=>o("translateLanguage",l.code),"aria-pressed":t.translateLanguage===l.code,disabled:!a,style:{padding:"4px 10px",borderRadius:"20px",fontSize:"11px",fontWeight:500,border:`1px solid ${t.translateLanguage===l.code?"#7c3aed":"#e2e8f0"}`,background:t.translateLanguage===l.code?"#f5f3ff":"#fff",color:t.translateLanguage===l.code?"#7c3aed":"#64748b",cursor:a?"pointer":"not-allowed",opacity:a?1:.5,minHeight:h?"36px":"auto"},children:l.label},l.code))}),!a&&(0,r.jsx)("p",{style:{margin:"6px 0 0",fontSize:"10px",color:"#94a3b8"},children:"Enable Gemini Nano using the setup guide above."})]}),(0,r.jsx)(S,{}),(0,r.jsx)(j,{label:"\u{1F4AC} Ask This Page",color:"#0d9488",badge:ne,concept:"RAG \u2014 Retrieval Augmented Generation. Works on all devices including mobile."}),(0,r.jsx)(Q,{steps:["Type any question about this page","Press Ask or hit Enter",m==="transformers"?"Transformers.js answers \u2014 works on mobile, offline":"Gemini Nano reads page and answers privately","Zero cost. No data leaves your device."]}),(0,r.jsxs)("div",{style:{margin:"0 18px 8px",padding:"6px 10px",background:m==="gemini"?"#f0fdfa":m==="transformers"?"#f5f3ff":"#f8fafc",borderRadius:"8px",border:`0.5px solid ${m==="gemini"?"#99f6e4":m==="transformers"?"#c4b5fd":"#e2e8f0"}`,fontSize:"10px",color:m==="gemini"?"#0f766e":m==="transformers"?"#7c3aed":"#94a3b8"},children:[m==="gemini"&&"\u2705 Using Gemini Nano \u2014 on device, private, instant",m==="transformers"&&"\u2705 Using Transformers.js \u2014 works on mobile and all browsers",!m&&"\u23F3 Detecting AI engine...",m==="transformers"&&L==="loading"&&" \xB7 Loading model...",m==="transformers"&&L==="ready"&&" \xB7 Model ready \u2705"]}),(0,r.jsxs)("div",{style:{padding:"0 18px 14px"},children:[(0,r.jsxs)("div",{style:{display:"flex",gap:"6px",marginBottom:"8px"},children:[(0,r.jsx)("input",{type:"text",value:I,onChange:l=>F(l.target.value),onKeyDown:l=>{l.key==="Enter"&&w()},placeholder:"e.g. What does this page do?",disabled:k||!m,"aria-label":"Ask a question about this page",style:{flex:1,padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"12px",color:"#0f172a",background:m?"#fff":"#f8fafc",outline:"none",height:h?"44px":"36px"}}),(0,r.jsx)("button",{onClick:w,disabled:k||!I.trim()||!m,"aria-label":"Ask question",style:{padding:"8px 14px",borderRadius:"8px",border:"none",background:m&&I.trim()&&!k?"#0d9488":"#e2e8f0",color:m&&I.trim()&&!k?"#fff":"#94a3b8",fontSize:"12px",fontWeight:600,cursor:m&&I.trim()&&!k?"pointer":"not-allowed",flexShrink:0,height:h?"44px":"36px",minWidth:"52px",transition:"background 0.2s"},children:k?K:"Ask"})]}),H&&(0,r.jsxs)("div",{role:"status","aria-live":"polite",style:{padding:"10px 12px",background:"#f0fdfa",border:"1px solid #99f6e4",borderRadius:"8px",fontSize:"12px",color:"#0f766e",lineHeight:1.6,maxHeight:"180px",overflowY:"auto"},children:[(0,r.jsx)("strong",{style:{display:"block",marginBottom:"4px",fontSize:"11px",color:"#0d9488"},children:"\u{1F4AC} Answer"}),H,(0,r.jsx)("button",{onClick:()=>{z(""),F("")},style:{display:"block",marginTop:"6px",background:"none",border:"none",color:"#94a3b8",fontSize:"10px",cursor:"pointer",padding:0},children:"Clear"})]})]}),n&&(0,r.jsx)("div",{role:"status",style:{margin:"0 14px 10px",padding:"8px 12px",background:"#f0fdfa",border:"1px solid #99f6e4",borderRadius:"8px",fontSize:"12px",color:"#0f766e",fontWeight:500,fontFamily:"monospace"},children:n.fixed>0?`\u2713 ${n.fixed} fixes \xB7 ${n.scanned} nodes \xB7 ${n.renderTime}ms \xB7 Score: ${n.score}/100`:`\u2713 0 auto-fixes needed \xB7 ${n.scanned} nodes \xB7 ${n.renderTime}ms`}),(0,r.jsxs)("div",{style:{display:"flex",gap:"8px",padding:"12px 14px 14px",position:h?"sticky":"relative",bottom:h?0:"auto",background:"#fff",borderTop:"1px solid #f1f5f9"},children:[(0,r.jsx)("button",{onClick:p,style:{flex:1,padding:h?"12px 0":"8px 0",fontSize:"13px",fontWeight:500,borderRadius:"9px",border:"1px solid #e2e8f0",background:"#fff",color:"#64748b",cursor:"pointer"},children:"Reset"}),(0,r.jsx)("button",{onClick:c,style:{flex:2,padding:h?"12px 0":"8px 0",fontSize:"13px",fontWeight:600,borderRadius:"9px",border:"none",background:"#0d9488",color:"#fff",cursor:"pointer"},children:"Apply settings"})]})]})});$e.displayName="WidgetPanel";pe();var y=require("react/jsx-runtime");async function cn(){try{if(typeof window>"u")return!1;let e=window;if(e.LanguageModel)try{if(typeof e.LanguageModel.availability=="function"){let n=await e.LanguageModel.availability();if(n==="readily"||n==="available"||n==="downloadable")return!0}else return!0}catch{}if(e.Summarizer)try{let n=await e.Summarizer.availability?.();if(!n||n==="readily"||n==="available")return!0}catch{}if(e.Rewriter)try{let n=await e.Rewriter.availability?.();if(!n||n==="readily"||n==="available")return!0}catch{}if(e.Writer)try{let n=await e.Writer.availability?.();if(!n||n==="readily"||n==="available")return!0}catch{}let t=e.ai||globalThis.ai;if(t){if(t.languageModel?.availability)try{let n=await t.languageModel.availability();if(n==="readily"||n==="available")return!0}catch{}if(t.languageModel&&typeof t.languageModel.create=="function"||t.summarizer||t.rewriter||t.writer||t.languageModel)return!0}return!!(e.Translator||e.translation?.canTranslate)}catch{return!1}}function fe({position:e="left",children:t,config:n={},showRag:i=!1}){let[a,s]=(0,b.useState)(!1),[o,c]=(0,b.useState)(He),[p,u]=(0,b.useState)(null),[x,h]=(0,b.useState)(!1),[P,te]=(0,b.useState)(!1),[me,I]=(0,b.useState)(!1),F=b.default.useRef(null),[H,z]=(0,b.useState)(!1),[k,V]=(0,b.useState)(""),[m,$]=(0,b.useState)(""),[L,B]=(0,b.useState)(!1),[w,ne]=(0,b.useState)(null),[K,Y]=(0,b.useState)("idle");(0,b.useEffect)(()=>{if(typeof window>"u")return;let d=window;!!(d.LanguageModel||d.ai?.languageModel)&&P?ne("gemini"):J()&&ne("transformers")},[P]),(0,b.useEffect)(()=>{if(w!=="transformers")return;let d=setInterval(()=>Y(X()),500);return()=>clearInterval(d)},[w]);let l=(0,b.useCallback)(async()=>{if(!(!k.trim()||L)){if(!w){$("\u26A0\uFE0F No AI engine available on this device.");return}B(!0),$("");try{let d;if(w==="gemini"){let{askPage:A}=await Promise.resolve().then(()=>(Re(),ut));d=await A(k)}else{Y("loading");let{askPageWithTransformers:A}=await Promise.resolve().then(()=>(pe(),gt));d=await A(k),Y("ready")}$(d.success&&d.answer?d.answer.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/#+\s/g,"").trim():"\u26A0\uFE0F "+(d.error||"No answer found."))}catch{$("\u26A0\uFE0F Something went wrong. Please try again.")}B(!1)}},[k,L,w]);(0,b.useEffect)(()=>{if(typeof window>"u")return;let A=setTimeout(async()=>{let U=window;console.log("yuktai: Checking AI APIs..."),console.log("yuktai: window.LanguageModel =",U.LanguageModel);let Fe=await cn();te(Fe),console.log(Fe?"yuktai: Chrome Built-in AI detected \u2705":"yuktai: Chrome Built-in AI not detected \u2014 Transformers.js will handle RAG on mobile"),I(!!(U.SpeechRecognition||U.webkitSpeechRecognition))},800);return()=>clearTimeout(A)},[]),(0,b.useEffect)(()=>{if(!(typeof window>"u"))try{let d=localStorage.getItem("yuktai-a11y-prefs");d&&c(A=>({...A,...JSON.parse(d)}))}catch{}},[]);let N=(0,b.useCallback)(async d=>{let A={enabled:!0,highContrast:d.highContrast,darkMode:d.darkMode,reduceMotion:d.reduceMotion,largeTargets:d.largeTargets,speechEnabled:d.speechEnabled,autoFix:d.autoFix,dyslexiaFont:d.dyslexiaFont,localFont:d.localFont,fontSizeMultiplier:d.fontScale/100,colorBlindMode:d.colorBlindMode,showAuditBadge:d.showAuditBadge,showSkipLinks:!0,showPreferencePanel:!1,plainEnglish:d.plainEnglish,summarisePage:d.summarisePage,translateLanguage:d.translateLanguage,voiceControl:d.voiceControl,smartLabels:d.smartLabels,...n};await C.execute(A),u(C.applyFixes(A)),h(!0)},[n]),ge=(0,b.useCallback)(async()=>{try{localStorage.setItem("yuktai-a11y-prefs",JSON.stringify(o))}catch{}await N(o),s(!1)},[o,N]),be=(0,b.useCallback)(()=>{c(He);try{localStorage.removeItem("yuktai-a11y-prefs")}catch{}let d=document.documentElement;["data-yuktai-high-contrast","data-yuktai-dark","data-yuktai-reduce-motion","data-yuktai-large-targets","data-yuktai-keyboard","data-yuktai-dyslexia"].forEach(A=>d.removeAttribute(A)),document.body.style.filter="",document.body.style.fontFamily="",document.documentElement.style.fontSize="",u(null),h(!1)},[]),ye=(0,b.useCallback)((d,A)=>{c(U=>({...U,[d]:A}))},[]);(0,b.useEffect)(()=>{let d=A=>{A.key==="Escape"&&(a&&s(!1),H&&z(!1))};return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[a,H]),(0,b.useEffect)(()=>{a&&F.current&&C.trapFocus(F.current)},[a]);let yt=w==="transformers"&&K==="loading"?"Loading AI... (first time only)":"...",We=w==="gemini"?"Gemini Nano \xB7 On device \xB7 Instant":w==="transformers"?"Transformers.js \xB7 All devices \xB7 Offline":"Detecting engine...",xt={position:"fixed",bottom:"24px",[e]:"24px",zIndex:9998,width:"52px",height:"52px",borderRadius:"50%",background:x?"#0d9488":"#1a73e8",color:"#fff",border:"none",cursor:"pointer",fontSize:"22px",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 4px 16px rgba(0,0,0,0.25)",transition:"transform 0.15s, background 0.2s"},ht={position:"fixed",bottom:"84px",[e]:"24px",zIndex:9998,width:"52px",height:"52px",borderRadius:"50%",background:H?"#7c3aed":"#6d28d9",color:"#fff",border:"none",cursor:"pointer",fontSize:"22px",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 4px 16px rgba(0,0,0,0.25)",transition:"transform 0.15s, background 0.2s"};return(0,y.jsxs)(y.Fragment,{children:[t,i&&(0,y.jsx)("button",{style:ht,"aria-label":"Ask a question about this page","aria-haspopup":"dialog","aria-expanded":H,title:`Ask this page \xB7 ${We}`,onClick:()=>{z(d=>!d),s(!1)},onMouseEnter:d=>{d.currentTarget.style.transform="scale(1.08)"},onMouseLeave:d=>{d.currentTarget.style.transform="scale(1)"},children:"\u{1F4AC}"}),i&&H&&(0,y.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"Ask this page","data-yuktai-panel":"true",style:{position:"fixed",bottom:"148px",[e]:"24px",zIndex:9999,width:"300px",maxWidth:"calc(100vw - 48px)",background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px",boxShadow:"0 8px 32px rgba(0,0,0,0.12)",fontFamily:"system-ui,-apple-system,sans-serif",padding:"14px"},children:[(0,y.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:"10px"},children:[(0,y.jsxs)("div",{children:[(0,y.jsx)("p",{style:{margin:"0 0 2px",fontSize:"13px",fontWeight:600,color:"#0f172a"},children:"\u{1F4AC} Ask this page"}),(0,y.jsx)("p",{style:{margin:0,fontSize:"10px",color:w==="gemini"?"#0d9488":"#7c3aed"},children:We}),w==="transformers"&&K==="loading"&&(0,y.jsx)("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#94a3b8"},children:"Downloading AI model \u2014 first time only (~90MB)"}),w==="transformers"&&K==="ready"&&(0,y.jsx)("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#0d9488"},children:"Model ready \u2705 \u2014 works offline now"})]}),(0,y.jsx)("button",{onClick:()=>z(!1),"aria-label":"Close ask panel",style:{background:"none",border:"none",cursor:"pointer",color:"#94a3b8",fontSize:"18px",lineHeight:1,padding:"2px",borderRadius:"4px"},children:"\xD7"})]}),(0,y.jsxs)("div",{style:{display:"flex",gap:"6px",marginBottom:"8px"},children:[(0,y.jsx)("input",{type:"text",value:k,onChange:d=>V(d.target.value),onKeyDown:d=>{d.key==="Enter"&&l()},placeholder:"e.g. What does this page do?",disabled:L||!w,"aria-label":"Ask a question about this page",style:{flex:1,padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"12px",color:"#0f172a",background:w?"#fff":"#f8fafc",outline:"none",height:"36px"}}),(0,y.jsx)("button",{onClick:l,disabled:L||!k.trim()||!w,"aria-label":"Submit question",style:{padding:"8px 12px",borderRadius:"8px",border:"none",background:w&&k.trim()&&!L?"#7c3aed":"#e2e8f0",color:w&&k.trim()&&!L?"#fff":"#94a3b8",fontSize:"12px",fontWeight:600,cursor:w&&k.trim()&&!L?"pointer":"not-allowed",height:"36px",minWidth:"48px",transition:"background 0.2s"},children:L?yt:"Ask"})]}),m&&(0,y.jsxs)("div",{style:{padding:"10px",background:"#f5f3ff",borderRadius:"8px",fontSize:"12px",color:"#4c1d95",lineHeight:1.6,maxHeight:"180px",overflowY:"auto"},children:[(0,y.jsx)("strong",{style:{display:"block",marginBottom:"4px",fontSize:"11px",color:"#7c3aed"},children:"\u{1F4AC} Answer"}),m,(0,y.jsx)("button",{onClick:()=>{$(""),V("")},style:{display:"block",marginTop:"6px",background:"none",border:"none",color:"#94a3b8",fontSize:"10px",cursor:"pointer",padding:0},children:"Clear"})]}),!w&&(0,y.jsx)("p",{style:{margin:"4px 0 0",fontSize:"10px",color:"#94a3b8"},children:"Detecting AI engine..."})]}),(0,y.jsx)("button",{style:xt,"aria-label":"Open accessibility preferences","aria-haspopup":"dialog","aria-expanded":a,"data-yuktai-pref-toggle":"true",onClick:()=>{s(d=>!d),z(!1)},onMouseEnter:d=>{d.currentTarget.style.transform="scale(1.08)"},onMouseLeave:d=>{d.currentTarget.style.transform="scale(1)"},children:"\u267F"}),a&&(0,y.jsx)($e,{ref:F,position:e,settings:o,report:p,isActive:x,aiSupported:P,voiceSupported:me,set:ye,onApply:ge,onReset:be,onClose:()=>s(!1)})]})}f();var Z={name:"ai.text",async execute(e){return`\u{1F916} YuktAI says: ${e}`}};f();var ee={name:"voice.text",async execute(e){return!e||e.trim()===""?"\u{1F3A4} No speech detected":`\u{1F3A4} You said: ${e}`}};f();var W=class{plugins=new Map;register(t,n){if(!n||typeof n.execute!="function")throw new Error(`Invalid plugin: ${t}`);this.plugins.set(t,n)}use(t){return this.plugins.get(t)}async run(t,n){try{let i=this.use(t);if(!i)throw new Error(`Plugin not found: ${t}`);return await i.execute(n)}catch(i){throw console.error(`[YuktAI Runtime Error in ${t}]:`,i),i}}getPlugins(){return Array.from(this.plugins.keys())}};function dn(){if(typeof globalThis>"u")return new W;if(!globalThis.__yuktai_runtime__){let e=new W;e.register(C.name,C),e.register(Z.name,Z),e.register(ee.name,ee),globalThis.__yuktai_runtime__=e}return globalThis.__yuktai_runtime__}var bt=typeof window<"u"?dn():new W,un={wcagPlugin:C,list(){return bt.getPlugins()},use(e){return bt.use(e)},fix(e){return C.applyFixes({enabled:!0,autoFix:!0,...e})},scan(){return C.scan()}};
396
+ `,document.body.appendChild(e),et=e}function lt(e){let t={critical:20,serious:10,moderate:5,minor:2},n=e.details.reduce((i,a)=>i+(t[a.severity]||0),0);return Math.max(0,Math.min(100,100-n))}var C={name:"yuktai-a11y",version:"4.0.0",observer:null,async execute(e){if(!e.enabled)return this.stopObserver(),"yuktai: disabled.";D=e,Kt(e),Yt(),Ut(),Dt(),_t(),e.showSkipLinks!==!1&&Ot(),e.showPreferencePanel,Vt(e);let t=this.applyFixes(e);t.score=lt(t),e.showAuditBadge&&qt(t),e.timeoutWarning&&dt(e.timeoutWarning),e.autoFix&&this.startObserver(e),e.plainEnglish&&await ot(!0),e.summarisePage&&await at(!0),e.translateLanguage&&e.translateLanguage!=="en"&&await it(e.translateLanguage),e.voiceControl&&await rt(!0),e.smartLabels&&await st(!0);let n=`${t.fixed} fixes applied. Score: ${t.score}/100.`;return g(n,t.score>=90?"success":"info",!1),`yuktai v4.0.0: ${n} Scanned ${t.scanned} elements in ${t.renderTime}ms.`},applyFixes(e){let t={fixed:0,scanned:0,renderTime:0,score:100,details:[]};if(typeof document>"u")return t;let n=performance.now(),i=document.querySelectorAll("*");t.scanned=i.length;let a=(s,o,c,p)=>{t.details.push({tag:s,fix:o,severity:c,element:p.outerHTML.slice(0,100)}),t.fixed++};return i.forEach(s=>{let o=s,c=o.tagName.toLowerCase();if(c==="html"&&!o.getAttribute("lang")&&(o.setAttribute("lang","en"),a(c,'lang="en" added',"critical",o)),c==="meta"){let u=o.getAttribute("name"),A=o.getAttribute("content")||"";u==="viewport"&&A.includes("user-scalable=no")&&(o.setAttribute("content",A.replace("user-scalable=no","user-scalable=yes")),a(c,"user-scalable=yes restored","serious",o)),u==="viewport"&&/maximum-scale=1(?:[^0-9]|$)/.test(A)&&(o.setAttribute("content",A.replace(/maximum-scale=1(?=[^0-9]|$)/,"maximum-scale=5")),a(c,"maximum-scale=5 restored","serious",o))}if(c==="main"&&!o.getAttribute("tabindex")&&(o.setAttribute("tabindex","-1"),o.getAttribute("id")||o.setAttribute("id","main-content")),c==="img"&&(o.hasAttribute("alt")||(o.setAttribute("alt",""),o.setAttribute("aria-hidden","true"),a(c,'alt="" aria-hidden="true"',"serious",o))),c==="svg"&&(!o.getAttribute("aria-hidden")&&!o.getAttribute("aria-label")&&!s.querySelector("title")&&(o.setAttribute("aria-hidden","true"),a(c,'aria-hidden="true" (decorative svg)',"minor",o)),o.getAttribute("focusable")||o.setAttribute("focusable","false")),c==="iframe"&&!o.getAttribute("title")&&!o.getAttribute("aria-label")&&(o.setAttribute("title","embedded content"),o.setAttribute("aria-label","embedded content"),a(c,"title + aria-label added","serious",o)),c==="button"){if(!o.innerText?.trim()&&!o.getAttribute("aria-label")){let u=o.getAttribute("title")||"button";o.setAttribute("aria-label",u),a(c,`aria-label="${u}" (empty button)`,"critical",o)}o.hasAttribute("disabled")&&!o.getAttribute("aria-disabled")&&(o.setAttribute("aria-disabled","true"),t.fixed++)}if(c==="a"){let u=o;!o.innerText?.trim()&&!o.getAttribute("aria-label")&&(o.setAttribute("aria-label",o.getAttribute("title")||"link"),a(c,"aria-label added (empty link)","critical",o)),u.target==="_blank"&&!u.rel?.includes("noopener")&&(u.rel="noopener noreferrer",t.fixed++)}if(nt.has(c)){let u=o;if(!o.getAttribute("aria-label")&&!o.getAttribute("aria-labelledby")){let A=o.getAttribute("placeholder")||o.getAttribute("name")||c;o.setAttribute("aria-label",A),a(c,`aria-label="${A}"`,"serious",o)}if(o.hasAttribute("required")&&!o.getAttribute("aria-required")&&(o.setAttribute("aria-required","true"),t.fixed++),c==="input"&&!u.autocomplete){let A=u.name||"";u.type==="email"||A.includes("email")?u.autocomplete="email":u.type==="tel"||A.includes("tel")?u.autocomplete="tel":u.type==="password"&&(u.autocomplete="current-password"),t.fixed++}}c==="th"&&!o.getAttribute("scope")&&(o.setAttribute("scope",o.closest("thead")?"col":"row"),a(c,"scope added to <th>","moderate",o)),Le[c]&&!o.getAttribute("role")&&(o.setAttribute("role",Le[c]),a(c,`role="${Le[c]}"`,"minor",o));let p=o.getAttribute("role")||"";p==="tab"&&!o.getAttribute("aria-selected")&&(o.setAttribute("aria-selected","false"),t.fixed++),["alert","status","log"].includes(p)&&!o.getAttribute("aria-live")&&(o.setAttribute("aria-live",p==="alert"?"assertive":"polite"),a(c,`aria-live added on role=${p}`,"moderate",o)),p==="combobox"&&!o.getAttribute("aria-expanded")&&(o.setAttribute("aria-expanded","false"),a(c,'aria-expanded="false" on combobox',"serious",o)),(p==="checkbox"||p==="radio")&&!o.getAttribute("aria-checked")&&(o.setAttribute("aria-checked","false"),a(c,`aria-checked="false" on role=${p}`,"serious",o))}),t.renderTime=parseFloat((performance.now()-n).toFixed(2)),t},scan(){let e={fixed:0,scanned:0,renderTime:0,score:100,details:[]};if(typeof document>"u")return e;let t=performance.now(),n=document.querySelectorAll("*");e.scanned=n.length;let i=(a,s,o,c)=>e.details.push({tag:a,fix:s,severity:o,element:c.outerHTML.slice(0,100)});return n.forEach(a=>{let s=a,o=s.tagName.toLowerCase();(o==="a"||o==="button")&&!s.innerText?.trim()&&!s.getAttribute("aria-label")&&i(o,"needs aria-label (empty)","critical",s),o==="img"&&!s.hasAttribute("alt")&&i(o,"needs alt text","serious",s),nt.has(o)&&!s.getAttribute("aria-label")&&!s.getAttribute("aria-labelledby")&&i(o,"needs aria-label","serious",s),o==="iframe"&&!s.getAttribute("title")&&!s.getAttribute("aria-label")&&i(o,"iframe needs title","serious",s)}),e.fixed=e.details.length,e.score=lt(e),e.renderTime=parseFloat((performance.now()-t).toFixed(2)),e},startObserver(e){this.observer||typeof document>"u"||(this.observer=new MutationObserver(()=>this.applyFixes(e)),this.observer.observe(document.body,{childList:!0,subtree:!0,attributes:!1}))},stopObserver(){this.observer?.disconnect(),this.observer=null},announce:g,speak:Me,showVisualAlert:ct,trapFocus:ue,handlePlainEnglish:ot,handleSummarisePage:at,handleTranslate:it,handleVoiceControl:rt,handleSmartLabels:st,SUPPORTED_LANGUAGES:re};f();f();var b=Ne(require("react"));f();var T=require("react");Re();pe();var r=require("react/jsx-runtime"),He={highContrast:!1,reduceMotion:!1,autoFix:!0,dyslexiaFont:!1,fontScale:100,localFont:"",darkMode:!1,largeTargets:!1,speechEnabled:!1,colorBlindMode:"none",showAuditBadge:!1,timeoutWarning:void 0,plainEnglish:!1,summarisePage:!1,translateLanguage:"en",voiceControl:!1,smartLabels:!1},G=[80,90,100,110,120,130],rn=[{value:"none",label:"None"},{value:"deuteranopia",label:"Deuteranopia"},{value:"protanopia",label:"Protanopia"},{value:"tritanopia",label:"Tritanopia"},{value:"achromatopsia",label:"Greyscale"}],sn=["Prompt API for Gemini Nano","Summarization API for Gemini Nano","Writer API for Gemini Nano","Rewriter API for Gemini Nano","Translation API"];function ln(){let[e,t]=(0,T.useState)(typeof window<"u"?window.innerWidth:1024);return(0,T.useEffect)(()=>{let n=()=>t(window.innerWidth);return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[]),{isMobile:e<=480,isTablet:e>480&&e<=768}}function cn({checked:e,onChange:t,label:n,disabled:i=!1}){return(0,r.jsxs)("label",{"aria-label":n,style:{position:"relative",display:"inline-flex",width:"40px",height:"24px",cursor:i?"not-allowed":"pointer",flexShrink:0,opacity:i?.4:1},children:[(0,r.jsx)("input",{type:"checkbox",checked:e,disabled:i,onChange:a=>t(a.target.checked),style:{opacity:0,width:0,height:0,position:"absolute"}}),(0,r.jsx)("span",{style:{position:"absolute",inset:0,borderRadius:"99px",background:e?"#0d9488":"#cbd5e1",transition:"background 0.2s"}}),(0,r.jsx)("span",{style:{position:"absolute",top:"3px",left:e?"19px":"3px",width:"18px",height:"18px",background:"#fff",borderRadius:"50%",transition:"left 0.2s",boxShadow:"0 1px 3px rgba(0,0,0,0.2)",pointerEvents:"none"}})]})}function q({label:e,color:t="#64748b",badge:n,concept:i}){return(0,r.jsxs)("div",{style:{margin:"10px 18px 4px"},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,r.jsx)("p",{style:{margin:0,fontSize:"10px",fontWeight:600,color:t,letterSpacing:"0.06em",textTransform:"uppercase"},children:e}),n&&(0,r.jsx)("span",{style:{fontSize:"9px",fontWeight:500,padding:"1px 7px",borderRadius:"99px",background:"#f5f3ff",color:"#7c3aed",border:"0.5px solid #c4b5fd",whiteSpace:"nowrap"},children:n})]}),i&&(0,r.jsx)("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#94a3b8",fontStyle:"italic"},children:i})]})}function P({icon:e,label:t,desc:n,checked:i,onChange:a,disabled:s=!1,disabledReason:o,tip:c}){return(0,r.jsxs)("div",{title:s?o:c,style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 18px",gap:"12px"},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"10px",flex:1,minWidth:0},children:[(0,r.jsx)("span",{"aria-hidden":"true",style:{width:"32px",height:"32px",borderRadius:"8px",background:s?"#f1f5f9":"#f0fdfa",color:s?"#94a3b8":"#0d9488",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"15px",flexShrink:0,fontWeight:700},children:e}),(0,r.jsxs)("div",{style:{minWidth:0},children:[(0,r.jsx)("p",{style:{margin:0,fontSize:"13px",fontWeight:500,color:s?"#94a3b8":"#0f172a",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:t}),(0,r.jsx)("p",{style:{margin:0,fontSize:"10px",color:"#94a3b8"},children:s?o:n})]})]}),(0,r.jsx)(cn,{checked:i,onChange:a,label:`Toggle ${t}`,disabled:s})]})}function S(){return(0,r.jsx)("div",{style:{height:"1px",background:"#f1f5f9"}})}function Q({steps:e}){return(0,r.jsxs)("div",{style:{margin:"0 18px 8px",padding:"8px 10px",background:"#f8fafc",borderRadius:"8px",border:"0.5px solid #e2e8f0"},children:[(0,r.jsx)("p",{style:{margin:"0 0 4px",fontSize:"9px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.05em"},children:"How to use"}),e.map((t,n)=>(0,r.jsxs)("p",{style:{margin:"0 0 2px",fontSize:"10px",color:"#475569"},children:[n+1,". ",t]},n))]})}var $e=(0,T.forwardRef)(({position:e,settings:t,report:n,isActive:i,aiSupported:a,voiceSupported:s,set:o,onApply:c,onReset:p,onClose:u},A)=>{let{isMobile:w,isTablet:j}=ln(),[te,me]=(0,T.useState)([]),[R,W]=(0,T.useState)(""),[z,I]=(0,T.useState)(""),[v,V]=(0,T.useState)(!1),[m,H]=(0,T.useState)(null),[L,F]=(0,T.useState)("idle");(0,T.useEffect)(()=>{let l=window;!!(l.LanguageModel||l.ai?.languageModel)&&a?H("gemini"):J()&&H("transformers")},[a]),(0,T.useEffect)(()=>{if(m!=="transformers")return;let l=setInterval(()=>{F(X())},500);return()=>clearInterval(l)},[m]);let x=async()=>{if(!(!R.trim()||v)){if(!m){I("\u26A0\uFE0F No AI engine available on this device.");return}V(!0),I("");try{let l;m==="gemini"?l=await Pe(R):(F("loading"),l=await ze(R),F("ready")),I(l.success&&l.answer?l.answer.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/#+\s/g,"").trim():"\u26A0\uFE0F "+(l.error||"No answer found on this page"))}catch{I("\u26A0\uFE0F Failed to get answer. Please try again.")}V(!1)}};(0,T.useEffect)(()=>{(async()=>{try{let B=window;if(!B.queryLocalFonts)return;let ge=await B.queryLocalFonts(),be=[...new Set(ge.map(ye=>ye.family))].sort();me(be.slice(0,50))}catch{}})()},[]);let ne=m==="gemini"?"Gemini Nano":m==="transformers"?"Transformers.js \xB7 All devices":"Detecting...",K=m==="transformers"&&L==="loading"?"Loading AI model... (first time only)":"...",Y=w?{position:"fixed",bottom:0,left:0,right:0,zIndex:9999,background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px 16px 0 0",boxShadow:"0 -8px 32px rgba(0,0,0,0.12)",maxHeight:"90vh",overflowY:"auto",fontFamily:"system-ui,-apple-system,sans-serif",width:"100%"}:{position:"fixed",bottom:"84px",[e]:"24px",zIndex:9999,width:j?"300px":"320px",maxWidth:"calc(100vw - 48px)",background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px",boxShadow:"0 8px 32px rgba(0,0,0,0.12)",maxHeight:"80vh",overflowY:"auto",fontFamily:"system-ui,-apple-system,sans-serif"};return(0,r.jsxs)("div",{ref:A,role:"dialog","aria-modal":"true","aria-label":"yuktai accessibility preferences","data-yuktai-panel":"true",style:Y,children:[(0,r.jsxs)("div",{style:{padding:"14px 18px 12px",borderBottom:"1px solid #f1f5f9",display:"flex",alignItems:"flex-start",justifyContent:"space-between",position:"sticky",top:0,background:"#fff",zIndex:1},children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"7px",marginBottom:"4px",flexWrap:"wrap"},children:[(0,r.jsx)("span",{style:{fontSize:"10px",fontWeight:700,padding:"2px 7px",borderRadius:"99px",background:"#f0fdfa",color:"#0d9488",letterSpacing:"0.05em",fontFamily:"monospace"},children:"@yuktishaalaa/yuktai v2.1.0"}),i&&(0,r.jsx)("span",{style:{fontSize:"10px",fontWeight:700,padding:"2px 7px",borderRadius:"99px",background:"#f0fdfa",color:"#0f766e",border:"1px solid #99f6e4"},children:"\u25CF ACTIVE"})]}),(0,r.jsx)("p",{style:{margin:"0 0 1px",fontSize:"15px",fontWeight:600,color:"#0f172a"},children:"Accessibility"}),(0,r.jsx)("p",{style:{margin:0,fontSize:"11px",color:"#64748b"},children:"WCAG 2.2 \xB7 Open source \xB7 Zero cost \xB7 All devices"})]}),(0,r.jsx)("button",{onClick:u,"aria-label":"Close accessibility panel",style:{background:"none",border:"none",cursor:"pointer",padding:"4px",color:"#94a3b8",fontSize:"20px",lineHeight:1,borderRadius:"6px",flexShrink:0,minWidth:w?"44px":"auto",minHeight:w?"44px":"auto",display:"flex",alignItems:"center",justifyContent:"center"},children:"\xD7"})]}),(0,r.jsx)(q,{label:"\u267F Core Accessibility",concept:"Rule-based engine \u2014 works on all browsers and devices"}),(0,r.jsx)(Q,{steps:["Toggle any feature on","Click Apply settings","Preferences saved automatically"]}),(0,r.jsx)(P,{icon:"\u{1F527}",label:"Auto-fix ARIA",desc:"Injects missing labels and roles automatically",checked:t.autoFix,onChange:l=>o("autoFix",l),tip:"Fixes aria-label, alt text, roles on every element"}),(0,r.jsx)(S,{}),(0,r.jsx)(P,{icon:"\u{1F50A}",label:"Speak on focus",desc:"Browser reads elements aloud as you tab",checked:t.speechEnabled,onChange:l=>o("speechEnabled",l),tip:"Uses browser SpeechSynthesis \u2014 no install needed"}),(0,r.jsx)(S,{}),(0,r.jsx)(P,{icon:"\u{1F399}\uFE0F",label:"Voice control",desc:"Say commands to navigate the page",checked:t.voiceControl,onChange:l=>o("voiceControl",l),disabled:!s,disabledReason:"Not supported in this browser",tip:'Say "scroll down", "go to main", "click"'}),(0,r.jsx)(S,{}),(0,r.jsx)(q,{label:"\u{1F916} AI Features",color:"#7c3aed",badge:"Gemini Nano",concept:"Large Language Model running privately on your device \u2014 Chrome 127+ only"}),(0,r.jsx)("div",{style:{margin:"4px 18px 6px",padding:"8px 10px",background:a?"#f0fdfa":"#f5f3ff",borderRadius:"8px",border:`0.5px solid ${a?"#99f6e4":"#c4b5fd"}`,fontSize:"10px",color:a?"#0f766e":"#7c3aed",lineHeight:1.5},children:a?"\u2705 Gemini Nano detected \u2014 AI features ready. Runs privately on your device.":"\u2699\uFE0F AI features need one-time setup \u2014 see guide below."}),!a&&(0,r.jsxs)("div",{style:{margin:"0 18px 8px",padding:"10px 12px",background:"#fafafa",borderRadius:"8px",border:"0.5px solid #e2e8f0",fontSize:"11px",color:"#475569",lineHeight:1.7},children:[(0,r.jsx)("p",{style:{margin:"0 0 6px",fontWeight:600,color:"#0f172a",fontSize:"11px"},children:"\u{1F6E0} One-time setup \u2014 5 steps:"}),(0,r.jsxs)("p",{style:{margin:"0 0 3px"},children:["1. Open Chrome \u2192 ",(0,r.jsx)("code",{style:{background:"#f1f5f9",padding:"1px 5px",borderRadius:"4px",fontSize:"10px",color:"#0d9488",fontFamily:"monospace"},children:"chrome://flags"})]}),(0,r.jsx)("p",{style:{margin:"0 0 3px"},children:"2. Enable each flag:"}),(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:"2px",margin:"4px 0 6px 10px"},children:sn.map(l=>(0,r.jsxs)("span",{style:{fontSize:"10px",color:"#7c3aed",fontFamily:"monospace"},children:["\u2192 ",l]},l))}),(0,r.jsxs)("p",{style:{margin:"0 0 3px"},children:["3. Click ",(0,r.jsx)("strong",{style:{color:"#0f172a"},children:"Relaunch"})]}),(0,r.jsxs)("p",{style:{margin:"0 0 3px"},children:["4. ",(0,r.jsx)("code",{style:{background:"#f1f5f9",padding:"1px 5px",borderRadius:"4px",fontSize:"10px",color:"#0d9488",fontFamily:"monospace"},children:"chrome://components"})," \u2192 Optimization Guide On Device Model \u2192 Check for update"]}),(0,r.jsx)("p",{style:{margin:"0"},children:"5. Refresh \u2014 AI features unlock automatically \u2705"})]}),(0,r.jsx)(P,{icon:"\u{1F4DD}",label:"Plain English mode",desc:"Rewrites complex text in simple language",checked:t.plainEnglish,onChange:l=>o("plainEnglish",l),disabled:!a,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: LLM text rewriting"}),(0,r.jsx)(S,{}),(0,r.jsx)(P,{icon:"\u{1F4CB}",label:"Summarise page",desc:"3-sentence summary appears at top",checked:t.summarisePage,onChange:l=>o("summarisePage",l),disabled:!a,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: Abstractive summarisation"}),(0,r.jsx)(S,{}),(0,r.jsx)(P,{icon:"\u{1F3F7}\uFE0F",label:"Smart aria-labels",desc:"AI generates meaningful labels for elements",checked:t.smartLabels,onChange:l=>o("smartLabels",l),disabled:!a,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: Context-aware label generation"}),(0,r.jsx)(S,{}),(0,r.jsx)(q,{label:"\u{1F441}\uFE0F Visual",concept:"CSS filter-based \u2014 works on all browsers and devices"}),(0,r.jsx)(Q,{steps:["Toggle any visual mode","Changes apply instantly","Works on mobile and desktop"]}),(0,r.jsx)(P,{icon:"\u25D1",label:"High contrast",desc:"Boosts contrast for low vision users",checked:t.highContrast,onChange:l=>o("highContrast",l),tip:"CSS filter: contrast()"}),(0,r.jsx)(S,{}),(0,r.jsx)(P,{icon:"\u{1F319}",label:"Dark mode",desc:"Inverts colours \u2014 easy on eyes at night",checked:t.darkMode,onChange:l=>o("darkMode",l),tip:"CSS filter: invert + hue-rotate"}),(0,r.jsx)(S,{}),(0,r.jsx)(P,{icon:"\u23F8\uFE0F",label:"Reduce motion",desc:"Disables all animations",checked:t.reduceMotion,onChange:l=>o("reduceMotion",l),tip:"WCAG 2.3.3 \u2014 vestibular disorders"}),(0,r.jsx)(S,{}),(0,r.jsx)(P,{icon:"\u{1F446}",label:"Large targets",desc:"44\xD744px minimum touch targets",checked:t.largeTargets,onChange:l=>o("largeTargets",l),tip:"WCAG 2.5.8 \u2014 motor impaired users"}),(0,r.jsx)(S,{}),(0,r.jsxs)("div",{style:{padding:"10px 18px"},children:[(0,r.jsx)("p",{style:{margin:"0 0 2px",fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F3A8} Colour blindness"}),(0,r.jsx)("p",{style:{margin:"0 0 8px",fontSize:"10px",color:"#94a3b8"},children:"SVG colour matrix filters \u2014 all devices"}),(0,r.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:rn.map(l=>(0,r.jsx)("button",{onClick:()=>o("colorBlindMode",l.value),"aria-pressed":t.colorBlindMode===l.value,style:{padding:"4px 10px",borderRadius:"20px",fontSize:"11px",fontWeight:500,border:`1px solid ${t.colorBlindMode===l.value?"#0d9488":"#e2e8f0"}`,background:t.colorBlindMode===l.value?"#f0fdfa":"#fff",color:t.colorBlindMode===l.value?"#0d9488":"#64748b",cursor:"pointer",minHeight:w?"36px":"auto"},children:l.label},l.value))})]}),(0,r.jsx)(S,{}),(0,r.jsx)(q,{label:"\u{1F524} Font",concept:"Browser Font API + CSS \u2014 Chrome 103+"}),(0,r.jsx)(Q,{steps:["Toggle dyslexia font or pick from device","Adjust size with + / \u2212","Saved across visits"]}),(0,r.jsx)(P,{icon:"Aa",label:"Dyslexia-friendly font",desc:"Atkinson Hyperlegible \u2014 research-backed",checked:t.dyslexiaFont,onChange:l=>o("dyslexiaFont",l),tip:"By Braille Institute \u2014 free and open source"}),(0,r.jsx)(S,{}),(0,r.jsxs)("div",{style:{padding:"10px 18px"},children:[(0,r.jsx)("p",{style:{margin:"0 0 2px",fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F5A5}\uFE0F Local font"}),(0,r.jsx)("p",{style:{margin:"0 0 8px",fontSize:"10px",color:"#94a3b8"},children:"window.queryLocalFonts() \u2014 Chrome 103+"}),te.length>0?(0,r.jsxs)("select",{value:t.localFont,onChange:l=>o("localFont",l.target.value),"aria-label":"Choose a font from your device",style:{width:"100%",padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"13px",color:"#0f172a",background:"#fff",cursor:"pointer",height:w?"44px":"36px"},children:[(0,r.jsx)("option",{value:"",children:"System default"}),te.map(l=>(0,r.jsx)("option",{value:l,style:{fontFamily:l},children:l},l))]}):(0,r.jsx)("p",{style:{margin:0,fontSize:"11px",color:"#94a3b8"},children:"Allow font access when Chrome prompts you."})]}),(0,r.jsx)(S,{}),(0,r.jsxs)("div",{style:{padding:"10px 18px 14px"},children:[(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"10px"},children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{style:{margin:0,fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F4CF} Text size"}),(0,r.jsx)("p",{style:{margin:0,fontSize:"10px",color:"#94a3b8"},children:"Scales all text on the page"})]}),(0,r.jsxs)("span",{style:{fontSize:"12px",fontWeight:600,color:"#0d9488",background:"#f0fdfa",padding:"2px 8px",borderRadius:"99px"},children:[t.fontScale,"%"]})]}),(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,r.jsx)("button",{onClick:()=>{let l=G.indexOf(t.fontScale);l>0&&o("fontScale",G[l-1])},disabled:t.fontScale<=80,"aria-label":"Decrease text size",style:{width:w?"44px":"30px",height:w?"44px":"30px",borderRadius:"8px",border:"1px solid #e2e8f0",background:"#fff",cursor:t.fontScale<=80?"not-allowed":"pointer",fontSize:"16px",color:t.fontScale<=80?"#cbd5e1":"#0f172a",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:"\u2212"}),(0,r.jsx)("div",{style:{flex:1,display:"flex",gap:"3px"},children:G.map(l=>(0,r.jsx)("button",{onClick:()=>o("fontScale",l),"aria-label":`Set text size to ${l}%`,style:{flex:1,height:"6px",borderRadius:"99px",border:"none",cursor:"pointer",padding:0,background:l<=t.fontScale?"#0d9488":"#e2e8f0",transition:"background 0.15s"}},l))}),(0,r.jsx)("button",{onClick:()=>{let l=G.indexOf(t.fontScale);l<G.length-1&&o("fontScale",G[l+1])},disabled:t.fontScale>=130,"aria-label":"Increase text size",style:{width:w?"44px":"30px",height:w?"44px":"30px",borderRadius:"8px",border:"1px solid #e2e8f0",background:"#fff",cursor:t.fontScale>=130?"not-allowed":"pointer",fontSize:"16px",color:t.fontScale>=130?"#cbd5e1":"#0f172a",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:"+"})]})]}),(0,r.jsx)(S,{}),(0,r.jsx)(q,{label:"\u{1F310} Translate",color:"#7c3aed",badge:"Gemini Nano",concept:"Chrome Translation API \u2014 on device, no internet after setup"}),(0,r.jsx)(Q,{steps:["Enable Gemini Nano first","Pick your language","Full page translates instantly"]}),(0,r.jsxs)("div",{style:{padding:"6px 18px 12px"},children:[(0,r.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:re.slice(0,w?8:18).map(l=>(0,r.jsx)("button",{onClick:()=>o("translateLanguage",l.code),"aria-pressed":t.translateLanguage===l.code,disabled:!a,style:{padding:"4px 10px",borderRadius:"20px",fontSize:"11px",fontWeight:500,border:`1px solid ${t.translateLanguage===l.code?"#7c3aed":"#e2e8f0"}`,background:t.translateLanguage===l.code?"#f5f3ff":"#fff",color:t.translateLanguage===l.code?"#7c3aed":"#64748b",cursor:a?"pointer":"not-allowed",opacity:a?1:.5,minHeight:w?"36px":"auto"},children:l.label},l.code))}),!a&&(0,r.jsx)("p",{style:{margin:"6px 0 0",fontSize:"10px",color:"#94a3b8"},children:"Enable Gemini Nano using the setup guide above."})]}),(0,r.jsx)(S,{}),(0,r.jsx)(q,{label:"\u{1F4AC} Ask This Page",color:"#0d9488",badge:ne,concept:"RAG \u2014 Retrieval Augmented Generation. Works on all devices including mobile."}),(0,r.jsx)(Q,{steps:["Type any question about this page","Press Ask or hit Enter",m==="transformers"?"Transformers.js answers \u2014 works on mobile, offline":"Gemini Nano reads page and answers privately","Zero cost. No data leaves your device."]}),(0,r.jsxs)("div",{style:{margin:"0 18px 8px",padding:"6px 10px",background:m==="gemini"?"#f0fdfa":m==="transformers"?"#f5f3ff":"#f8fafc",borderRadius:"8px",border:`0.5px solid ${m==="gemini"?"#99f6e4":m==="transformers"?"#c4b5fd":"#e2e8f0"}`,fontSize:"10px",color:m==="gemini"?"#0f766e":m==="transformers"?"#7c3aed":"#94a3b8"},children:[m==="gemini"&&"\u2705 Using Gemini Nano \u2014 on device, private, instant",m==="transformers"&&"\u2705 Using Transformers.js \u2014 works on mobile and all browsers",!m&&"\u23F3 Detecting AI engine...",m==="transformers"&&L==="loading"&&" \xB7 Loading model...",m==="transformers"&&L==="ready"&&" \xB7 Model ready \u2705"]}),(0,r.jsxs)("div",{style:{padding:"0 18px 14px"},children:[(0,r.jsxs)("div",{style:{display:"flex",gap:"6px",marginBottom:"8px"},children:[(0,r.jsx)("input",{type:"text",value:R,onChange:l=>W(l.target.value),onKeyDown:l=>{l.key==="Enter"&&x()},placeholder:"e.g. What does this page do?",disabled:v||!m,"aria-label":"Ask a question about this page",style:{flex:1,padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"12px",color:"#0f172a",background:m?"#fff":"#f8fafc",outline:"none",height:w?"44px":"36px"}}),(0,r.jsx)("button",{onClick:x,disabled:v||!R.trim()||!m,"aria-label":"Ask question",style:{padding:"8px 14px",borderRadius:"8px",border:"none",background:m&&R.trim()&&!v?"#0d9488":"#e2e8f0",color:m&&R.trim()&&!v?"#fff":"#94a3b8",fontSize:"12px",fontWeight:600,cursor:m&&R.trim()&&!v?"pointer":"not-allowed",flexShrink:0,height:w?"44px":"36px",minWidth:"52px",transition:"background 0.2s"},children:v?K:"Ask"})]}),z&&(0,r.jsxs)("div",{role:"status","aria-live":"polite",style:{padding:"10px 12px",background:"#f0fdfa",border:"1px solid #99f6e4",borderRadius:"8px",fontSize:"12px",color:"#0f766e",lineHeight:1.6,maxHeight:"180px",overflowY:"auto"},children:[(0,r.jsx)("strong",{style:{display:"block",marginBottom:"4px",fontSize:"11px",color:"#0d9488"},children:"\u{1F4AC} Answer"}),z,(0,r.jsx)("button",{onClick:()=>{I(""),W("")},style:{display:"block",marginTop:"6px",background:"none",border:"none",color:"#94a3b8",fontSize:"10px",cursor:"pointer",padding:0},children:"Clear"})]})]}),n&&(0,r.jsx)("div",{role:"status",style:{margin:"0 14px 10px",padding:"8px 12px",background:"#f0fdfa",border:"1px solid #99f6e4",borderRadius:"8px",fontSize:"12px",color:"#0f766e",fontWeight:500,fontFamily:"monospace"},children:n.fixed>0?`\u2713 ${n.fixed} fixes \xB7 ${n.scanned} nodes \xB7 ${n.renderTime}ms \xB7 Score: ${n.score}/100`:`\u2713 0 auto-fixes needed \xB7 ${n.scanned} nodes \xB7 ${n.renderTime}ms`}),(0,r.jsxs)("div",{style:{display:"flex",gap:"8px",padding:"12px 14px 14px",position:w?"sticky":"relative",bottom:w?0:"auto",background:"#fff",borderTop:"1px solid #f1f5f9"},children:[(0,r.jsx)("button",{onClick:p,style:{flex:1,padding:w?"12px 0":"8px 0",fontSize:"13px",fontWeight:500,borderRadius:"9px",border:"1px solid #e2e8f0",background:"#fff",color:"#64748b",cursor:"pointer"},children:"Reset"}),(0,r.jsx)("button",{onClick:c,style:{flex:2,padding:w?"12px 0":"8px 0",fontSize:"13px",fontWeight:600,borderRadius:"9px",border:"none",background:"#0d9488",color:"#fff",cursor:"pointer"},children:"Apply settings"})]})]})});$e.displayName="WidgetPanel";pe();var y=require("react/jsx-runtime");async function dn(){try{if(typeof window>"u")return!1;let e=window;if(e.LanguageModel)try{if(typeof e.LanguageModel.availability=="function"){let n=await e.LanguageModel.availability();if(n==="readily"||n==="available"||n==="downloadable")return!0}else return!0}catch{}if(e.Summarizer)try{let n=await e.Summarizer.availability?.();if(!n||n==="readily"||n==="available")return!0}catch{}if(e.Rewriter)try{let n=await e.Rewriter.availability?.();if(!n||n==="readily"||n==="available")return!0}catch{}if(e.Writer)try{let n=await e.Writer.availability?.();if(!n||n==="readily"||n==="available")return!0}catch{}let t=e.ai||globalThis.ai;if(t){if(t.languageModel?.availability)try{let n=await t.languageModel.availability();if(n==="readily"||n==="available")return!0}catch{}if(t.languageModel&&typeof t.languageModel.create=="function"||t.summarizer||t.rewriter||t.writer||t.languageModel)return!0}return!!(e.Translator||e.translation?.canTranslate)}catch{return!1}}function fe({position:e="left",children:t,config:n={},showRag:i=!1}){let[a,s]=(0,b.useState)(!1),[o,c]=(0,b.useState)(He),[p,u]=(0,b.useState)(null),[A,w]=(0,b.useState)(!1),[j,te]=(0,b.useState)(!1),[me,R]=(0,b.useState)(!1),W=b.default.useRef(null),[z,I]=(0,b.useState)(!1),[v,V]=(0,b.useState)(""),[m,H]=(0,b.useState)(""),[L,F]=(0,b.useState)(!1),[x,ne]=(0,b.useState)(null),[K,Y]=(0,b.useState)("idle");(0,b.useEffect)(()=>{if(typeof window>"u")return;let d=window;!!(d.LanguageModel||d.ai?.languageModel)&&j?ne("gemini"):J()&&ne("transformers")},[j]),(0,b.useEffect)(()=>{if(x!=="transformers")return;let d=setInterval(()=>Y(X()),500);return()=>clearInterval(d)},[x]);let l=(0,b.useCallback)(async()=>{if(!(!v.trim()||L)){if(!x){H("\u26A0\uFE0F No AI engine available on this device.");return}F(!0),H("");try{let d;if(x==="gemini"){let{askPage:k}=await Promise.resolve().then(()=>(Re(),ut));d=await k(v)}else{Y("loading");let{askPageWithTransformers:k}=await Promise.resolve().then(()=>(pe(),bt));d=await k(v),Y("ready")}H(d.success&&d.answer?d.answer.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/#+\s/g,"").trim():"\u26A0\uFE0F "+(d.error||"No answer found."))}catch{H("\u26A0\uFE0F Something went wrong. Please try again.")}F(!1)}},[v,L,x]);(0,b.useEffect)(()=>{if(typeof window>"u")return;let k=setTimeout(async()=>{let U=window;console.log("yuktai: Checking AI APIs..."),console.log("yuktai: window.LanguageModel =",U.LanguageModel);let Fe=await dn();te(Fe),console.log(Fe?"yuktai: Chrome Built-in AI detected \u2705":"yuktai: Chrome Built-in AI not detected \u2014 Transformers.js will handle RAG on mobile"),R(!!(U.SpeechRecognition||U.webkitSpeechRecognition))},800);return()=>clearTimeout(k)},[]),(0,b.useEffect)(()=>{if(!(typeof window>"u"))try{let d=localStorage.getItem("yuktai-a11y-prefs");d&&c(k=>({...k,...JSON.parse(d)}))}catch{}},[]);let B=(0,b.useCallback)(async d=>{let k={enabled:!0,highContrast:d.highContrast,darkMode:d.darkMode,reduceMotion:d.reduceMotion,largeTargets:d.largeTargets,speechEnabled:d.speechEnabled,autoFix:d.autoFix,dyslexiaFont:d.dyslexiaFont,localFont:d.localFont,fontSizeMultiplier:d.fontScale/100,colorBlindMode:d.colorBlindMode,showAuditBadge:d.showAuditBadge,showSkipLinks:!0,showPreferencePanel:!1,plainEnglish:d.plainEnglish,summarisePage:d.summarisePage,translateLanguage:d.translateLanguage,voiceControl:d.voiceControl,smartLabels:d.smartLabels,...n};await C.execute(k),u(C.applyFixes(k)),w(!0)},[n]),ge=(0,b.useCallback)(async()=>{try{localStorage.setItem("yuktai-a11y-prefs",JSON.stringify(o))}catch{}await B(o),s(!1)},[o,B]),be=(0,b.useCallback)(()=>{c(He);try{localStorage.removeItem("yuktai-a11y-prefs")}catch{}let d=document.documentElement;["data-yuktai-high-contrast","data-yuktai-dark","data-yuktai-reduce-motion","data-yuktai-large-targets","data-yuktai-keyboard","data-yuktai-dyslexia"].forEach(k=>d.removeAttribute(k)),document.body.style.filter="",document.body.style.fontFamily="",document.documentElement.style.fontSize="",u(null),w(!1)},[]),ye=(0,b.useCallback)((d,k)=>{c(U=>({...U,[d]:k}))},[]);(0,b.useEffect)(()=>{let d=k=>{k.key==="Escape"&&(a&&s(!1),z&&I(!1))};return window.addEventListener("keydown",d),()=>window.removeEventListener("keydown",d)},[a,z]),(0,b.useEffect)(()=>{a&&W.current&&C.trapFocus(W.current)},[a]);let xt=x==="transformers"&&K==="loading"?"Loading AI... (first time only)":"...",We=x==="gemini"?"Gemini Nano \xB7 On device \xB7 Instant":x==="transformers"?"Transformers.js \xB7 All devices \xB7 Offline":"Detecting engine...",ht={position:"fixed",bottom:"24px",[e]:"24px",zIndex:9998,width:"52px",height:"52px",borderRadius:"50%",background:A?"#0d9488":"#1a73e8",color:"#fff",border:"none",cursor:"pointer",fontSize:"22px",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 4px 16px rgba(0,0,0,0.25)",transition:"transform 0.15s, background 0.2s"},wt={position:"fixed",bottom:"84px",[e]:"24px",zIndex:9998,width:"52px",height:"52px",borderRadius:"50%",background:z?"#7c3aed":"#6d28d9",color:"#fff",border:"none",cursor:"pointer",fontSize:"22px",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 4px 16px rgba(0,0,0,0.25)",transition:"transform 0.15s, background 0.2s"};return(0,y.jsxs)(y.Fragment,{children:[t,i&&(0,y.jsx)("button",{style:wt,"aria-label":"Ask a question about this page","aria-haspopup":"dialog","aria-expanded":z,title:`Ask this page \xB7 ${We}`,onClick:()=>{I(d=>!d),s(!1)},onMouseEnter:d=>{d.currentTarget.style.transform="scale(1.08)"},onMouseLeave:d=>{d.currentTarget.style.transform="scale(1)"},children:"\u{1F4AC}"}),i&&z&&(0,y.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":"Ask this page","data-yuktai-panel":"true",style:{position:"fixed",bottom:"148px",[e]:"24px",zIndex:9999,width:"300px",maxWidth:"calc(100vw - 48px)",background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px",boxShadow:"0 8px 32px rgba(0,0,0,0.12)",fontFamily:"system-ui,-apple-system,sans-serif",padding:"14px"},children:[(0,y.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:"10px"},children:[(0,y.jsxs)("div",{children:[(0,y.jsx)("p",{style:{margin:"0 0 2px",fontSize:"13px",fontWeight:600,color:"#0f172a"},children:"\u{1F4AC} Ask this page"}),(0,y.jsx)("p",{style:{margin:0,fontSize:"10px",color:x==="gemini"?"#0d9488":"#7c3aed"},children:We}),x==="transformers"&&K==="loading"&&(0,y.jsx)("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#94a3b8"},children:"Downloading AI model \u2014 first time only (~90MB)"}),x==="transformers"&&K==="ready"&&(0,y.jsx)("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#0d9488"},children:"Model ready \u2705 \u2014 works offline now"})]}),(0,y.jsx)("button",{onClick:()=>I(!1),"aria-label":"Close ask panel",style:{background:"none",border:"none",cursor:"pointer",color:"#94a3b8",fontSize:"18px",lineHeight:1,padding:"2px",borderRadius:"4px"},children:"\xD7"})]}),(0,y.jsxs)("div",{style:{display:"flex",gap:"6px",marginBottom:"8px"},children:[(0,y.jsx)("input",{type:"text",value:v,onChange:d=>V(d.target.value),onKeyDown:d=>{d.key==="Enter"&&l()},placeholder:"e.g. What does this page do?",disabled:L||!x,"aria-label":"Ask a question about this page",style:{flex:1,padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"12px",color:"#0f172a",background:x?"#fff":"#f8fafc",outline:"none",height:"36px"}}),(0,y.jsx)("button",{onClick:l,disabled:L||!v.trim()||!x,"aria-label":"Submit question",style:{padding:"8px 12px",borderRadius:"8px",border:"none",background:x&&v.trim()&&!L?"#7c3aed":"#e2e8f0",color:x&&v.trim()&&!L?"#fff":"#94a3b8",fontSize:"12px",fontWeight:600,cursor:x&&v.trim()&&!L?"pointer":"not-allowed",height:"36px",minWidth:"48px",transition:"background 0.2s"},children:L?xt:"Ask"})]}),m&&(0,y.jsxs)("div",{style:{padding:"10px",background:"#f5f3ff",borderRadius:"8px",fontSize:"12px",color:"#4c1d95",lineHeight:1.6,maxHeight:"180px",overflowY:"auto"},children:[(0,y.jsx)("strong",{style:{display:"block",marginBottom:"4px",fontSize:"11px",color:"#7c3aed"},children:"\u{1F4AC} Answer"}),m,(0,y.jsx)("button",{onClick:()=>{H(""),V("")},style:{display:"block",marginTop:"6px",background:"none",border:"none",color:"#94a3b8",fontSize:"10px",cursor:"pointer",padding:0},children:"Clear"})]}),!x&&(0,y.jsx)("p",{style:{margin:"4px 0 0",fontSize:"10px",color:"#94a3b8"},children:"Detecting AI engine..."})]}),(0,y.jsx)("button",{style:ht,"aria-label":"Open accessibility preferences","aria-haspopup":"dialog","aria-expanded":a,"data-yuktai-pref-toggle":"true",onClick:()=>{s(d=>!d),I(!1)},onMouseEnter:d=>{d.currentTarget.style.transform="scale(1.08)"},onMouseLeave:d=>{d.currentTarget.style.transform="scale(1)"},children:"\u267F"}),a&&(0,y.jsx)($e,{ref:W,position:e,settings:o,report:p,isActive:A,aiSupported:j,voiceSupported:me,set:ye,onApply:ge,onReset:be,onClose:()=>s(!1)})]})}f();var Z={name:"ai.text",async execute(e){return`\u{1F916} YuktAI says: ${e}`}};f();var ee={name:"voice.text",async execute(e){return!e||e.trim()===""?"\u{1F3A4} No speech detected":`\u{1F3A4} You said: ${e}`}};f();var $=class{plugins=new Map;register(t,n){if(!n||typeof n.execute!="function")throw new Error(`Invalid plugin: ${t}`);this.plugins.set(t,n)}use(t){return this.plugins.get(t)}async run(t,n){try{let i=this.use(t);if(!i)throw new Error(`Plugin not found: ${t}`);return await i.execute(n)}catch(i){throw console.error(`[YuktAI Runtime Error in ${t}]:`,i),i}}getPlugins(){return Array.from(this.plugins.keys())}};function un(){if(typeof globalThis>"u")return new $;if(!globalThis.__yuktai_runtime__){let e=new $;e.register(C.name,C),e.register(Z.name,Z),e.register(ee.name,ee),globalThis.__yuktai_runtime__=e}return globalThis.__yuktai_runtime__}var yt=typeof window<"u"?un():new $,pn={wcagPlugin:C,list(){return yt.getPlugins()},use(e){return yt.use(e)},fix(e){return C.applyFixes({enabled:!0,autoFix:!0,...e})},scan(){return C.scan()}};
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{a as ze}from"./chunk-3VGU4YGK.mjs";import{a as He,b as te,c as ae}from"./chunk-VYW2VAGT.mjs";function We(){let e=window;return e.Rewriter||e.ai?.rewriter||null}async function xe(){try{let e=We();if(!e)return!1;if(typeof e.availability=="function"){let t=await e.availability();return t==="readily"||t==="available"||t==="downloadable"}return typeof e.capabilities=="function"?(await e.capabilities())?.available!=="no":typeof e.create=="function"}catch{return!1}}async function ct(e){if(!e||e.trim().length<20)return{success:!1,original:e,rewritten:e,error:"Text too short"};try{let t=We();if(!t)throw new Error("Rewriter API not available");let a=await t.create({tone:"more-casual",format:"plain-text",length:"as-is",outputLanguage:"en"}),i=await a.rewrite(e,{context:"Rewrite this text in simple plain English. Use short sentences. Avoid jargon. Make it easy to understand for everyone."});return a.destroy(),{success:!0,original:e,rewritten:i.trim()}}catch(t){return{success:!1,original:e,rewritten:e,error:t instanceof Error?t.message:"Rewrite failed"}}}async function $e(){if(!await xe())return{fixed:0,error:"Chrome Built-in AI Rewriter not available. Enable via chrome://flags."};let t=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, blockquote, td, th, label, figcaption"),a=0;for(let i of t){let n=i.innerText?.trim();if(!n||n.length<20||i.closest("[data-yuktai-panel]"))continue;let l=await ct(n);l.success&&l.rewritten!==n&&(i.dataset.yuktaiOriginal=n,i.innerText=l.rewritten,a++)}return{fixed:a}}function Fe(){let e=document.querySelectorAll("[data-yuktai-original]");for(let t of e){let a=t.dataset.yuktaiOriginal;a&&(t.innerText=a,delete t.dataset.yuktaiOriginal)}}var Be="yuktai-summary-box";function Ne(){let e=window;return e.Summarizer||e.ai?.summarizer||null}async function he(){try{let e=Ne();if(!e)return!1;if(typeof e.availability=="function"){let t=await e.availability();return t==="readily"||t==="available"||t==="downloadable"}return typeof e.capabilities=="function"?(await e.capabilities())?.available!=="no":typeof e.create=="function"}catch{return!1}}function ut(){let e=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, blockquote, article, section"),t=[];for(let a of e){if(a.closest("[data-yuktai-panel]"))continue;let i=window.getComputedStyle(a);if(i.display==="none"||i.visibility==="hidden")continue;let n=a.innerText?.trim();n&&n.length>10&&t.push(n)}return t.join(" ").slice(0,5e3)}async function Oe(){if(!await he())return{success:!1,summary:"",error:"Chrome Built-in AI Summarizer not available. Enable via chrome://flags."};let t=ut();if(!t||t.length<100)return{success:!1,summary:"",error:"Not enough text on this page to summarise."};try{let a=Ne();if(!a)throw new Error("Summarizer API not available");let i=await a.create({type:"tl;dr",format:"plain-text",length:"short",outputLanguage:"en"}),n=await i.summarize(t,{context:"Summarise this page in 2-3 simple sentences for a screen reader user who wants to know if this page is relevant to them."});return i.destroy(),pt(n.trim()),{success:!0,summary:n.trim()}}catch(a){return{success:!1,summary:"",error:a instanceof Error?a.message:"Summary failed"}}}function pt(e){oe();let t=document.createElement("div");t.id=Be,t.setAttribute("data-yuktai-panel","true"),t.setAttribute("role","region"),t.setAttribute("aria-label","Page summary by yuktai"),t.style.cssText=`
1
+ import{a as ze}from"./chunk-3VGU4YGK.mjs";import{a as He,b as te,c as ae}from"./chunk-XQMQZMAH.mjs";function We(){let e=window;return e.Rewriter||e.ai?.rewriter||null}async function xe(){try{let e=We();if(!e)return!1;if(typeof e.availability=="function"){let t=await e.availability();return t==="readily"||t==="available"||t==="downloadable"}return typeof e.capabilities=="function"?(await e.capabilities())?.available!=="no":typeof e.create=="function"}catch{return!1}}async function ct(e){if(!e||e.trim().length<20)return{success:!1,original:e,rewritten:e,error:"Text too short"};try{let t=We();if(!t)throw new Error("Rewriter API not available");let a=await t.create({tone:"more-casual",format:"plain-text",length:"as-is",outputLanguage:"en"}),i=await a.rewrite(e,{context:"Rewrite this text in simple plain English. Use short sentences. Avoid jargon. Make it easy to understand for everyone."});return a.destroy(),{success:!0,original:e,rewritten:i.trim()}}catch(t){return{success:!1,original:e,rewritten:e,error:t instanceof Error?t.message:"Rewrite failed"}}}async function $e(){if(!await xe())return{fixed:0,error:"Chrome Built-in AI Rewriter not available. Enable via chrome://flags."};let t=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, blockquote, td, th, label, figcaption"),a=0;for(let i of t){let n=i.innerText?.trim();if(!n||n.length<20||i.closest("[data-yuktai-panel]"))continue;let l=await ct(n);l.success&&l.rewritten!==n&&(i.dataset.yuktaiOriginal=n,i.innerText=l.rewritten,a++)}return{fixed:a}}function Fe(){let e=document.querySelectorAll("[data-yuktai-original]");for(let t of e){let a=t.dataset.yuktaiOriginal;a&&(t.innerText=a,delete t.dataset.yuktaiOriginal)}}var Be="yuktai-summary-box";function Ne(){let e=window;return e.Summarizer||e.ai?.summarizer||null}async function he(){try{let e=Ne();if(!e)return!1;if(typeof e.availability=="function"){let t=await e.availability();return t==="readily"||t==="available"||t==="downloadable"}return typeof e.capabilities=="function"?(await e.capabilities())?.available!=="no":typeof e.create=="function"}catch{return!1}}function ut(){let e=document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, blockquote, article, section"),t=[];for(let a of e){if(a.closest("[data-yuktai-panel]"))continue;let i=window.getComputedStyle(a);if(i.display==="none"||i.visibility==="hidden")continue;let n=a.innerText?.trim();n&&n.length>10&&t.push(n)}return t.join(" ").slice(0,5e3)}async function Oe(){if(!await he())return{success:!1,summary:"",error:"Chrome Built-in AI Summarizer not available. Enable via chrome://flags."};let t=ut();if(!t||t.length<100)return{success:!1,summary:"",error:"Not enough text on this page to summarise."};try{let a=Ne();if(!a)throw new Error("Summarizer API not available");let i=await a.create({type:"tl;dr",format:"plain-text",length:"short",outputLanguage:"en"}),n=await i.summarize(t,{context:"Summarise this page in 2-3 simple sentences for a screen reader user who wants to know if this page is relevant to them."});return i.destroy(),pt(n.trim()),{success:!0,summary:n.trim()}}catch(a){return{success:!1,summary:"",error:a instanceof Error?a.message:"Summary failed"}}}function pt(e){oe();let t=document.createElement("div");t.id=Be,t.setAttribute("data-yuktai-panel","true"),t.setAttribute("role","region"),t.setAttribute("aria-label","Page summary by yuktai"),t.style.cssText=`
2
2
  position: fixed;
3
3
  top: 0;
4
4
  left: 0;
@@ -382,4 +382,4 @@ import{a as ze}from"./chunk-3VGU4YGK.mjs";import{a as He,b as te,c as ae}from"./
382
382
  values="0.95 0.05 0 0 0 0 0.433 0.567 0 0 0 0.475 0.525 0 0 0 0 0 1 0"/>
383
383
  </filter>
384
384
  </defs>
385
- `,document.body.appendChild(e),Ue=e}function ot(e){let t={critical:20,serious:10,moderate:5,minor:2},a=e.details.reduce((i,n)=>i+(t[n.severity]||0),0);return Math.max(0,Math.min(100,100-a))}var C={name:"yuktai-a11y",version:"4.0.0",observer:null,async execute(e){if(!e.enabled)return this.stopObserver(),"yuktai: disabled.";D=e,Rt(e),Pt(),It(),St(),Tt(),e.showSkipLinks!==!1&&At(),e.showPreferencePanel,Mt(e);let t=this.applyFixes(e);t.score=ot(t),e.showAuditBadge&&Ct(t),e.timeoutWarning&&it(e.timeoutWarning),e.autoFix&&this.startObserver(e),e.plainEnglish&&await Qe(!0),e.summarisePage&&await Ze(!0),e.translateLanguage&&e.translateLanguage!=="en"&&await et(e.translateLanguage),e.voiceControl&&await tt(!0),e.smartLabels&&await at(!0);let a=`${t.fixed} fixes applied. Score: ${t.score}/100.`;return m(a,t.score>=90?"success":"info",!1),`yuktai v4.0.0: ${a} Scanned ${t.scanned} elements in ${t.renderTime}ms.`},applyFixes(e){let t={fixed:0,scanned:0,renderTime:0,score:100,details:[]};if(typeof document>"u")return t;let a=performance.now(),i=document.querySelectorAll("*");t.scanned=i.length;let n=(l,o,d,g)=>{t.details.push({tag:l,fix:o,severity:d,element:g.outerHTML.slice(0,100)}),t.fixed++};return i.forEach(l=>{let o=l,d=o.tagName.toLowerCase();if(d==="html"&&!o.getAttribute("lang")&&(o.setAttribute("lang","en"),n(d,'lang="en" added',"critical",o)),d==="meta"){let u=o.getAttribute("name"),v=o.getAttribute("content")||"";u==="viewport"&&v.includes("user-scalable=no")&&(o.setAttribute("content",v.replace("user-scalable=no","user-scalable=yes")),n(d,"user-scalable=yes restored","serious",o)),u==="viewport"&&/maximum-scale=1(?:[^0-9]|$)/.test(v)&&(o.setAttribute("content",v.replace(/maximum-scale=1(?=[^0-9]|$)/,"maximum-scale=5")),n(d,"maximum-scale=5 restored","serious",o))}if(d==="main"&&!o.getAttribute("tabindex")&&(o.setAttribute("tabindex","-1"),o.getAttribute("id")||o.setAttribute("id","main-content")),d==="img"&&(o.hasAttribute("alt")||(o.setAttribute("alt",""),o.setAttribute("aria-hidden","true"),n(d,'alt="" aria-hidden="true"',"serious",o))),d==="svg"&&(!o.getAttribute("aria-hidden")&&!o.getAttribute("aria-label")&&!l.querySelector("title")&&(o.setAttribute("aria-hidden","true"),n(d,'aria-hidden="true" (decorative svg)',"minor",o)),o.getAttribute("focusable")||o.setAttribute("focusable","false")),d==="iframe"&&!o.getAttribute("title")&&!o.getAttribute("aria-label")&&(o.setAttribute("title","embedded content"),o.setAttribute("aria-label","embedded content"),n(d,"title + aria-label added","serious",o)),d==="button"){if(!o.innerText?.trim()&&!o.getAttribute("aria-label")){let u=o.getAttribute("title")||"button";o.setAttribute("aria-label",u),n(d,`aria-label="${u}" (empty button)`,"critical",o)}o.hasAttribute("disabled")&&!o.getAttribute("aria-disabled")&&(o.setAttribute("aria-disabled","true"),t.fixed++)}if(d==="a"){let u=o;!o.innerText?.trim()&&!o.getAttribute("aria-label")&&(o.setAttribute("aria-label",o.getAttribute("title")||"link"),n(d,"aria-label added (empty link)","critical",o)),u.target==="_blank"&&!u.rel?.includes("noopener")&&(u.rel="noopener noreferrer",t.fixed++)}if(Xe.has(d)){let u=o;if(!o.getAttribute("aria-label")&&!o.getAttribute("aria-labelledby")){let v=o.getAttribute("placeholder")||o.getAttribute("name")||d;o.setAttribute("aria-label",v),n(d,`aria-label="${v}"`,"serious",o)}if(o.hasAttribute("required")&&!o.getAttribute("aria-required")&&(o.setAttribute("aria-required","true"),t.fixed++),d==="input"&&!u.autocomplete){let v=u.name||"";u.type==="email"||v.includes("email")?u.autocomplete="email":u.type==="tel"||v.includes("tel")?u.autocomplete="tel":u.type==="password"&&(u.autocomplete="current-password"),t.fixed++}}d==="th"&&!o.getAttribute("scope")&&(o.setAttribute("scope",o.closest("thead")?"col":"row"),n(d,"scope added to <th>","moderate",o)),Ee[d]&&!o.getAttribute("role")&&(o.setAttribute("role",Ee[d]),n(d,`role="${Ee[d]}"`,"minor",o));let g=o.getAttribute("role")||"";g==="tab"&&!o.getAttribute("aria-selected")&&(o.setAttribute("aria-selected","false"),t.fixed++),["alert","status","log"].includes(g)&&!o.getAttribute("aria-live")&&(o.setAttribute("aria-live",g==="alert"?"assertive":"polite"),n(d,`aria-live added on role=${g}`,"moderate",o)),g==="combobox"&&!o.getAttribute("aria-expanded")&&(o.setAttribute("aria-expanded","false"),n(d,'aria-expanded="false" on combobox',"serious",o)),(g==="checkbox"||g==="radio")&&!o.getAttribute("aria-checked")&&(o.setAttribute("aria-checked","false"),n(d,`aria-checked="false" on role=${g}`,"serious",o))}),t.renderTime=parseFloat((performance.now()-a).toFixed(2)),t},scan(){let e={fixed:0,scanned:0,renderTime:0,score:100,details:[]};if(typeof document>"u")return e;let t=performance.now(),a=document.querySelectorAll("*");e.scanned=a.length;let i=(n,l,o,d)=>e.details.push({tag:n,fix:l,severity:o,element:d.outerHTML.slice(0,100)});return a.forEach(n=>{let l=n,o=l.tagName.toLowerCase();(o==="a"||o==="button")&&!l.innerText?.trim()&&!l.getAttribute("aria-label")&&i(o,"needs aria-label (empty)","critical",l),o==="img"&&!l.hasAttribute("alt")&&i(o,"needs alt text","serious",l),Xe.has(o)&&!l.getAttribute("aria-label")&&!l.getAttribute("aria-labelledby")&&i(o,"needs aria-label","serious",l),o==="iframe"&&!l.getAttribute("title")&&!l.getAttribute("aria-label")&&i(o,"iframe needs title","serious",l)}),e.fixed=e.details.length,e.score=ot(e),e.renderTime=parseFloat((performance.now()-t).toFixed(2)),e},startObserver(e){this.observer||typeof document>"u"||(this.observer=new MutationObserver(()=>this.applyFixes(e)),this.observer.observe(document.body,{childList:!0,subtree:!0,attributes:!1}))},stopObserver(){this.observer?.disconnect(),this.observer=null},announce:m,speak:Ce,showVisualAlert:nt,trapFocus:ce,handlePlainEnglish:Qe,handleSummarisePage:Ze,handleTranslate:et,handleVoiceControl:tt,handleSmartLabels:at,SUPPORTED_LANGUAGES:ie};import Bt,{useEffect as q,useState as L,useCallback as Q}from"react";import{forwardRef as zt,useEffect as ue,useState as H}from"react";import{jsx as r,jsxs as p}from"react/jsx-runtime";var Le={highContrast:!1,reduceMotion:!1,autoFix:!0,dyslexiaFont:!1,fontScale:100,localFont:"",darkMode:!1,largeTargets:!1,speechEnabled:!1,colorBlindMode:"none",showAuditBadge:!1,timeoutWarning:void 0,plainEnglish:!1,summarisePage:!1,translateLanguage:"en",voiceControl:!1,smartLabels:!1},G=[80,90,100,110,120,130],Ht=[{value:"none",label:"None"},{value:"deuteranopia",label:"Deuteranopia"},{value:"protanopia",label:"Protanopia"},{value:"tritanopia",label:"Tritanopia"},{value:"achromatopsia",label:"Greyscale"}],Wt=["Prompt API for Gemini Nano","Summarization API for Gemini Nano","Writer API for Gemini Nano","Rewriter API for Gemini Nano","Translation API"];function $t(){let[e,t]=H(typeof window<"u"?window.innerWidth:1024);return ue(()=>{let a=()=>t(window.innerWidth);return window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[]),{isMobile:e<=480,isTablet:e>480&&e<=768}}function Ft({checked:e,onChange:t,label:a,disabled:i=!1}){return p("label",{"aria-label":a,style:{position:"relative",display:"inline-flex",width:"40px",height:"24px",cursor:i?"not-allowed":"pointer",flexShrink:0,opacity:i?.4:1},children:[r("input",{type:"checkbox",checked:e,disabled:i,onChange:n=>t(n.target.checked),style:{opacity:0,width:0,height:0,position:"absolute"}}),r("span",{style:{position:"absolute",inset:0,borderRadius:"99px",background:e?"#0d9488":"#cbd5e1",transition:"background 0.2s"}}),r("span",{style:{position:"absolute",top:"3px",left:e?"19px":"3px",width:"18px",height:"18px",background:"#fff",borderRadius:"50%",transition:"left 0.2s",boxShadow:"0 1px 3px rgba(0,0,0,0.2)",pointerEvents:"none"}})]})}function _({label:e,color:t="#64748b",badge:a,concept:i}){return p("div",{style:{margin:"10px 18px 4px"},children:[p("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[r("p",{style:{margin:0,fontSize:"10px",fontWeight:600,color:t,letterSpacing:"0.06em",textTransform:"uppercase"},children:e}),a&&r("span",{style:{fontSize:"9px",fontWeight:500,padding:"1px 7px",borderRadius:"99px",background:"#f5f3ff",color:"#7c3aed",border:"0.5px solid #c4b5fd",whiteSpace:"nowrap"},children:a})]}),i&&r("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#94a3b8",fontStyle:"italic"},children:i})]})}function M({icon:e,label:t,desc:a,checked:i,onChange:n,disabled:l=!1,disabledReason:o,tip:d}){return p("div",{title:l?o:d,style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 18px",gap:"12px"},children:[p("div",{style:{display:"flex",alignItems:"center",gap:"10px",flex:1,minWidth:0},children:[r("span",{"aria-hidden":"true",style:{width:"32px",height:"32px",borderRadius:"8px",background:l?"#f1f5f9":"#f0fdfa",color:l?"#94a3b8":"#0d9488",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"15px",flexShrink:0,fontWeight:700},children:e}),p("div",{style:{minWidth:0},children:[r("p",{style:{margin:0,fontSize:"13px",fontWeight:500,color:l?"#94a3b8":"#0f172a",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:t}),r("p",{style:{margin:0,fontSize:"10px",color:"#94a3b8"},children:l?o:a})]})]}),r(Ft,{checked:i,onChange:n,label:`Toggle ${t}`,disabled:l})]})}function k(){return r("div",{style:{height:"1px",background:"#f1f5f9"}})}function X({steps:e}){return p("div",{style:{margin:"0 18px 8px",padding:"8px 10px",background:"#f8fafc",borderRadius:"8px",border:"0.5px solid #e2e8f0"},children:[r("p",{style:{margin:"0 0 4px",fontSize:"9px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.05em"},children:"How to use"}),e.map((t,a)=>p("p",{style:{margin:"0 0 2px",fontSize:"10px",color:"#475569"},children:[a+1,". ",t]},a))]})}var Me=zt(({position:e,settings:t,report:a,isActive:i,aiSupported:n,voiceSupported:l,set:o,onApply:d,onReset:g,onClose:u},v)=>{let{isMobile:x,isTablet:j}=$t(),[Z,me]=H([]),[R,$]=H(""),[I,P]=H(""),[h,K]=H(!1),[f,z]=H(null),[S,F]=H("idle");ue(()=>{let s=window;!!(s.LanguageModel||s.ai?.languageModel)&&n?z("gemini"):te()&&z("transformers")},[n]),ue(()=>{if(f!=="transformers")return;let s=setInterval(()=>{F(ae())},500);return()=>clearInterval(s)},[f]);let b=async()=>{if(!(!R.trim()||h)){if(!f){P("\u26A0\uFE0F No AI engine available on this device.");return}K(!0),P("");try{let s;f==="gemini"?s=await ze(R):(F("loading"),s=await He(R),F("ready")),P(s.success&&s.answer?s.answer.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/#+\s/g,"").trim():"\u26A0\uFE0F "+(s.error||"No answer found on this page"))}catch{P("\u26A0\uFE0F Failed to get answer. Please try again.")}K(!1)}};ue(()=>{(async()=>{try{let B=window;if(!B.queryLocalFonts)return;let ge=await B.queryLocalFonts(),be=[...new Set(ge.map(ye=>ye.family))].sort();me(be.slice(0,50))}catch{}})()},[]);let ee=f==="gemini"?"Gemini Nano":f==="transformers"?"Transformers.js \xB7 All devices":"Detecting...",Y=f==="transformers"&&S==="loading"?"Loading AI model... (first time only)":"...",U=x?{position:"fixed",bottom:0,left:0,right:0,zIndex:9999,background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px 16px 0 0",boxShadow:"0 -8px 32px rgba(0,0,0,0.12)",maxHeight:"90vh",overflowY:"auto",fontFamily:"system-ui,-apple-system,sans-serif",width:"100%"}:{position:"fixed",bottom:"84px",[e]:"24px",zIndex:9999,width:j?"300px":"320px",maxWidth:"calc(100vw - 48px)",background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px",boxShadow:"0 8px 32px rgba(0,0,0,0.12)",maxHeight:"80vh",overflowY:"auto",fontFamily:"system-ui,-apple-system,sans-serif"};return p("div",{ref:v,role:"dialog","aria-modal":"true","aria-label":"yuktai accessibility preferences","data-yuktai-panel":"true",style:U,children:[p("div",{style:{padding:"14px 18px 12px",borderBottom:"1px solid #f1f5f9",display:"flex",alignItems:"flex-start",justifyContent:"space-between",position:"sticky",top:0,background:"#fff",zIndex:1},children:[p("div",{children:[p("div",{style:{display:"flex",alignItems:"center",gap:"7px",marginBottom:"4px",flexWrap:"wrap"},children:[r("span",{style:{fontSize:"10px",fontWeight:700,padding:"2px 7px",borderRadius:"99px",background:"#f0fdfa",color:"#0d9488",letterSpacing:"0.05em",fontFamily:"monospace"},children:"@yuktishaalaa/yuktai v2.1.0"}),i&&r("span",{style:{fontSize:"10px",fontWeight:700,padding:"2px 7px",borderRadius:"99px",background:"#f0fdfa",color:"#0f766e",border:"1px solid #99f6e4"},children:"\u25CF ACTIVE"})]}),r("p",{style:{margin:"0 0 1px",fontSize:"15px",fontWeight:600,color:"#0f172a"},children:"Accessibility"}),r("p",{style:{margin:0,fontSize:"11px",color:"#64748b"},children:"WCAG 2.2 \xB7 Open source \xB7 Zero cost \xB7 All devices"})]}),r("button",{onClick:u,"aria-label":"Close accessibility panel",style:{background:"none",border:"none",cursor:"pointer",padding:"4px",color:"#94a3b8",fontSize:"20px",lineHeight:1,borderRadius:"6px",flexShrink:0,minWidth:x?"44px":"auto",minHeight:x?"44px":"auto",display:"flex",alignItems:"center",justifyContent:"center"},children:"\xD7"})]}),r(_,{label:"\u267F Core Accessibility",concept:"Rule-based engine \u2014 works on all browsers and devices"}),r(X,{steps:["Toggle any feature on","Click Apply settings","Preferences saved automatically"]}),r(M,{icon:"\u{1F527}",label:"Auto-fix ARIA",desc:"Injects missing labels and roles automatically",checked:t.autoFix,onChange:s=>o("autoFix",s),tip:"Fixes aria-label, alt text, roles on every element"}),r(k,{}),r(M,{icon:"\u{1F50A}",label:"Speak on focus",desc:"Browser reads elements aloud as you tab",checked:t.speechEnabled,onChange:s=>o("speechEnabled",s),tip:"Uses browser SpeechSynthesis \u2014 no install needed"}),r(k,{}),r(M,{icon:"\u{1F399}\uFE0F",label:"Voice control",desc:"Say commands to navigate the page",checked:t.voiceControl,onChange:s=>o("voiceControl",s),disabled:!l,disabledReason:"Not supported in this browser",tip:'Say "scroll down", "go to main", "click"'}),r(k,{}),r(_,{label:"\u{1F916} AI Features",color:"#7c3aed",badge:"Gemini Nano",concept:"Large Language Model running privately on your device \u2014 Chrome 127+ only"}),r("div",{style:{margin:"4px 18px 6px",padding:"8px 10px",background:n?"#f0fdfa":"#f5f3ff",borderRadius:"8px",border:`0.5px solid ${n?"#99f6e4":"#c4b5fd"}`,fontSize:"10px",color:n?"#0f766e":"#7c3aed",lineHeight:1.5},children:n?"\u2705 Gemini Nano detected \u2014 AI features ready. Runs privately on your device.":"\u2699\uFE0F AI features need one-time setup \u2014 see guide below."}),!n&&p("div",{style:{margin:"0 18px 8px",padding:"10px 12px",background:"#fafafa",borderRadius:"8px",border:"0.5px solid #e2e8f0",fontSize:"11px",color:"#475569",lineHeight:1.7},children:[r("p",{style:{margin:"0 0 6px",fontWeight:600,color:"#0f172a",fontSize:"11px"},children:"\u{1F6E0} One-time setup \u2014 5 steps:"}),p("p",{style:{margin:"0 0 3px"},children:["1. Open Chrome \u2192 ",r("code",{style:{background:"#f1f5f9",padding:"1px 5px",borderRadius:"4px",fontSize:"10px",color:"#0d9488",fontFamily:"monospace"},children:"chrome://flags"})]}),r("p",{style:{margin:"0 0 3px"},children:"2. Enable each flag:"}),r("div",{style:{display:"flex",flexDirection:"column",gap:"2px",margin:"4px 0 6px 10px"},children:Wt.map(s=>p("span",{style:{fontSize:"10px",color:"#7c3aed",fontFamily:"monospace"},children:["\u2192 ",s]},s))}),p("p",{style:{margin:"0 0 3px"},children:["3. Click ",r("strong",{style:{color:"#0f172a"},children:"Relaunch"})]}),p("p",{style:{margin:"0 0 3px"},children:["4. ",r("code",{style:{background:"#f1f5f9",padding:"1px 5px",borderRadius:"4px",fontSize:"10px",color:"#0d9488",fontFamily:"monospace"},children:"chrome://components"})," \u2192 Optimization Guide On Device Model \u2192 Check for update"]}),r("p",{style:{margin:"0"},children:"5. Refresh \u2014 AI features unlock automatically \u2705"})]}),r(M,{icon:"\u{1F4DD}",label:"Plain English mode",desc:"Rewrites complex text in simple language",checked:t.plainEnglish,onChange:s=>o("plainEnglish",s),disabled:!n,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: LLM text rewriting"}),r(k,{}),r(M,{icon:"\u{1F4CB}",label:"Summarise page",desc:"3-sentence summary appears at top",checked:t.summarisePage,onChange:s=>o("summarisePage",s),disabled:!n,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: Abstractive summarisation"}),r(k,{}),r(M,{icon:"\u{1F3F7}\uFE0F",label:"Smart aria-labels",desc:"AI generates meaningful labels for elements",checked:t.smartLabels,onChange:s=>o("smartLabels",s),disabled:!n,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: Context-aware label generation"}),r(k,{}),r(_,{label:"\u{1F441}\uFE0F Visual",concept:"CSS filter-based \u2014 works on all browsers and devices"}),r(X,{steps:["Toggle any visual mode","Changes apply instantly","Works on mobile and desktop"]}),r(M,{icon:"\u25D1",label:"High contrast",desc:"Boosts contrast for low vision users",checked:t.highContrast,onChange:s=>o("highContrast",s),tip:"CSS filter: contrast()"}),r(k,{}),r(M,{icon:"\u{1F319}",label:"Dark mode",desc:"Inverts colours \u2014 easy on eyes at night",checked:t.darkMode,onChange:s=>o("darkMode",s),tip:"CSS filter: invert + hue-rotate"}),r(k,{}),r(M,{icon:"\u23F8\uFE0F",label:"Reduce motion",desc:"Disables all animations",checked:t.reduceMotion,onChange:s=>o("reduceMotion",s),tip:"WCAG 2.3.3 \u2014 vestibular disorders"}),r(k,{}),r(M,{icon:"\u{1F446}",label:"Large targets",desc:"44\xD744px minimum touch targets",checked:t.largeTargets,onChange:s=>o("largeTargets",s),tip:"WCAG 2.5.8 \u2014 motor impaired users"}),r(k,{}),p("div",{style:{padding:"10px 18px"},children:[r("p",{style:{margin:"0 0 2px",fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F3A8} Colour blindness"}),r("p",{style:{margin:"0 0 8px",fontSize:"10px",color:"#94a3b8"},children:"SVG colour matrix filters \u2014 all devices"}),r("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:Ht.map(s=>r("button",{onClick:()=>o("colorBlindMode",s.value),"aria-pressed":t.colorBlindMode===s.value,style:{padding:"4px 10px",borderRadius:"20px",fontSize:"11px",fontWeight:500,border:`1px solid ${t.colorBlindMode===s.value?"#0d9488":"#e2e8f0"}`,background:t.colorBlindMode===s.value?"#f0fdfa":"#fff",color:t.colorBlindMode===s.value?"#0d9488":"#64748b",cursor:"pointer",minHeight:x?"36px":"auto"},children:s.label},s.value))})]}),r(k,{}),r(_,{label:"\u{1F524} Font",concept:"Browser Font API + CSS \u2014 Chrome 103+"}),r(X,{steps:["Toggle dyslexia font or pick from device","Adjust size with + / \u2212","Saved across visits"]}),r(M,{icon:"Aa",label:"Dyslexia-friendly font",desc:"Atkinson Hyperlegible \u2014 research-backed",checked:t.dyslexiaFont,onChange:s=>o("dyslexiaFont",s),tip:"By Braille Institute \u2014 free and open source"}),r(k,{}),p("div",{style:{padding:"10px 18px"},children:[r("p",{style:{margin:"0 0 2px",fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F5A5}\uFE0F Local font"}),r("p",{style:{margin:"0 0 8px",fontSize:"10px",color:"#94a3b8"},children:"window.queryLocalFonts() \u2014 Chrome 103+"}),Z.length>0?p("select",{value:t.localFont,onChange:s=>o("localFont",s.target.value),"aria-label":"Choose a font from your device",style:{width:"100%",padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"13px",color:"#0f172a",background:"#fff",cursor:"pointer",height:x?"44px":"36px"},children:[r("option",{value:"",children:"System default"}),Z.map(s=>r("option",{value:s,style:{fontFamily:s},children:s},s))]}):r("p",{style:{margin:0,fontSize:"11px",color:"#94a3b8"},children:"Allow font access when Chrome prompts you."})]}),r(k,{}),p("div",{style:{padding:"10px 18px 14px"},children:[p("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"10px"},children:[p("div",{children:[r("p",{style:{margin:0,fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F4CF} Text size"}),r("p",{style:{margin:0,fontSize:"10px",color:"#94a3b8"},children:"Scales all text on the page"})]}),p("span",{style:{fontSize:"12px",fontWeight:600,color:"#0d9488",background:"#f0fdfa",padding:"2px 8px",borderRadius:"99px"},children:[t.fontScale,"%"]})]}),p("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[r("button",{onClick:()=>{let s=G.indexOf(t.fontScale);s>0&&o("fontScale",G[s-1])},disabled:t.fontScale<=80,"aria-label":"Decrease text size",style:{width:x?"44px":"30px",height:x?"44px":"30px",borderRadius:"8px",border:"1px solid #e2e8f0",background:"#fff",cursor:t.fontScale<=80?"not-allowed":"pointer",fontSize:"16px",color:t.fontScale<=80?"#cbd5e1":"#0f172a",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:"\u2212"}),r("div",{style:{flex:1,display:"flex",gap:"3px"},children:G.map(s=>r("button",{onClick:()=>o("fontScale",s),"aria-label":`Set text size to ${s}%`,style:{flex:1,height:"6px",borderRadius:"99px",border:"none",cursor:"pointer",padding:0,background:s<=t.fontScale?"#0d9488":"#e2e8f0",transition:"background 0.15s"}},s))}),r("button",{onClick:()=>{let s=G.indexOf(t.fontScale);s<G.length-1&&o("fontScale",G[s+1])},disabled:t.fontScale>=130,"aria-label":"Increase text size",style:{width:x?"44px":"30px",height:x?"44px":"30px",borderRadius:"8px",border:"1px solid #e2e8f0",background:"#fff",cursor:t.fontScale>=130?"not-allowed":"pointer",fontSize:"16px",color:t.fontScale>=130?"#cbd5e1":"#0f172a",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:"+"})]})]}),r(k,{}),r(_,{label:"\u{1F310} Translate",color:"#7c3aed",badge:"Gemini Nano",concept:"Chrome Translation API \u2014 on device, no internet after setup"}),r(X,{steps:["Enable Gemini Nano first","Pick your language","Full page translates instantly"]}),p("div",{style:{padding:"6px 18px 12px"},children:[r("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:ie.slice(0,x?8:18).map(s=>r("button",{onClick:()=>o("translateLanguage",s.code),"aria-pressed":t.translateLanguage===s.code,disabled:!n,style:{padding:"4px 10px",borderRadius:"20px",fontSize:"11px",fontWeight:500,border:`1px solid ${t.translateLanguage===s.code?"#7c3aed":"#e2e8f0"}`,background:t.translateLanguage===s.code?"#f5f3ff":"#fff",color:t.translateLanguage===s.code?"#7c3aed":"#64748b",cursor:n?"pointer":"not-allowed",opacity:n?1:.5,minHeight:x?"36px":"auto"},children:s.label},s.code))}),!n&&r("p",{style:{margin:"6px 0 0",fontSize:"10px",color:"#94a3b8"},children:"Enable Gemini Nano using the setup guide above."})]}),r(k,{}),r(_,{label:"\u{1F4AC} Ask This Page",color:"#0d9488",badge:ee,concept:"RAG \u2014 Retrieval Augmented Generation. Works on all devices including mobile."}),r(X,{steps:["Type any question about this page","Press Ask or hit Enter",f==="transformers"?"Transformers.js answers \u2014 works on mobile, offline":"Gemini Nano reads page and answers privately","Zero cost. No data leaves your device."]}),p("div",{style:{margin:"0 18px 8px",padding:"6px 10px",background:f==="gemini"?"#f0fdfa":f==="transformers"?"#f5f3ff":"#f8fafc",borderRadius:"8px",border:`0.5px solid ${f==="gemini"?"#99f6e4":f==="transformers"?"#c4b5fd":"#e2e8f0"}`,fontSize:"10px",color:f==="gemini"?"#0f766e":f==="transformers"?"#7c3aed":"#94a3b8"},children:[f==="gemini"&&"\u2705 Using Gemini Nano \u2014 on device, private, instant",f==="transformers"&&"\u2705 Using Transformers.js \u2014 works on mobile and all browsers",!f&&"\u23F3 Detecting AI engine...",f==="transformers"&&S==="loading"&&" \xB7 Loading model...",f==="transformers"&&S==="ready"&&" \xB7 Model ready \u2705"]}),p("div",{style:{padding:"0 18px 14px"},children:[p("div",{style:{display:"flex",gap:"6px",marginBottom:"8px"},children:[r("input",{type:"text",value:R,onChange:s=>$(s.target.value),onKeyDown:s=>{s.key==="Enter"&&b()},placeholder:"e.g. What does this page do?",disabled:h||!f,"aria-label":"Ask a question about this page",style:{flex:1,padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"12px",color:"#0f172a",background:f?"#fff":"#f8fafc",outline:"none",height:x?"44px":"36px"}}),r("button",{onClick:b,disabled:h||!R.trim()||!f,"aria-label":"Ask question",style:{padding:"8px 14px",borderRadius:"8px",border:"none",background:f&&R.trim()&&!h?"#0d9488":"#e2e8f0",color:f&&R.trim()&&!h?"#fff":"#94a3b8",fontSize:"12px",fontWeight:600,cursor:f&&R.trim()&&!h?"pointer":"not-allowed",flexShrink:0,height:x?"44px":"36px",minWidth:"52px",transition:"background 0.2s"},children:h?Y:"Ask"})]}),I&&p("div",{role:"status","aria-live":"polite",style:{padding:"10px 12px",background:"#f0fdfa",border:"1px solid #99f6e4",borderRadius:"8px",fontSize:"12px",color:"#0f766e",lineHeight:1.6,maxHeight:"180px",overflowY:"auto"},children:[r("strong",{style:{display:"block",marginBottom:"4px",fontSize:"11px",color:"#0d9488"},children:"\u{1F4AC} Answer"}),I,r("button",{onClick:()=>{P(""),$("")},style:{display:"block",marginTop:"6px",background:"none",border:"none",color:"#94a3b8",fontSize:"10px",cursor:"pointer",padding:0},children:"Clear"})]})]}),a&&r("div",{role:"status",style:{margin:"0 14px 10px",padding:"8px 12px",background:"#f0fdfa",border:"1px solid #99f6e4",borderRadius:"8px",fontSize:"12px",color:"#0f766e",fontWeight:500,fontFamily:"monospace"},children:a.fixed>0?`\u2713 ${a.fixed} fixes \xB7 ${a.scanned} nodes \xB7 ${a.renderTime}ms \xB7 Score: ${a.score}/100`:`\u2713 0 auto-fixes needed \xB7 ${a.scanned} nodes \xB7 ${a.renderTime}ms`}),p("div",{style:{display:"flex",gap:"8px",padding:"12px 14px 14px",position:x?"sticky":"relative",bottom:x?0:"auto",background:"#fff",borderTop:"1px solid #f1f5f9"},children:[r("button",{onClick:g,style:{flex:1,padding:x?"12px 0":"8px 0",fontSize:"13px",fontWeight:500,borderRadius:"9px",border:"1px solid #e2e8f0",background:"#fff",color:"#64748b",cursor:"pointer"},children:"Reset"}),r("button",{onClick:d,style:{flex:2,padding:x?"12px 0":"8px 0",fontSize:"13px",fontWeight:600,borderRadius:"9px",border:"none",background:"#0d9488",color:"#fff",cursor:"pointer"},children:"Apply settings"})]})]})});Me.displayName="WidgetPanel";import{Fragment as Ot,jsx as A,jsxs as V}from"react/jsx-runtime";async function Nt(){try{if(typeof window>"u")return!1;let e=window;if(e.LanguageModel)try{if(typeof e.LanguageModel.availability=="function"){let a=await e.LanguageModel.availability();if(a==="readily"||a==="available"||a==="downloadable")return!0}else return!0}catch{}if(e.Summarizer)try{let a=await e.Summarizer.availability?.();if(!a||a==="readily"||a==="available")return!0}catch{}if(e.Rewriter)try{let a=await e.Rewriter.availability?.();if(!a||a==="readily"||a==="available")return!0}catch{}if(e.Writer)try{let a=await e.Writer.availability?.();if(!a||a==="readily"||a==="available")return!0}catch{}let t=e.ai||globalThis.ai;if(t){if(t.languageModel?.availability)try{let a=await t.languageModel.availability();if(a==="readily"||a==="available")return!0}catch{}if(t.languageModel&&typeof t.languageModel.create=="function"||t.summarizer||t.rewriter||t.writer||t.languageModel)return!0}return!!(e.Translator||e.translation?.canTranslate)}catch{return!1}}function Re({position:e="left",children:t,config:a={},showRag:i=!1}){let[n,l]=L(!1),[o,d]=L(Le),[g,u]=L(null),[v,x]=L(!1),[j,Z]=L(!1),[me,R]=L(!1),$=Bt.useRef(null),[I,P]=L(!1),[h,K]=L(""),[f,z]=L(""),[S,F]=L(!1),[b,ee]=L(null),[Y,U]=L("idle");q(()=>{if(typeof window>"u")return;let c=window;!!(c.LanguageModel||c.ai?.languageModel)&&j?ee("gemini"):te()&&ee("transformers")},[j]),q(()=>{if(b!=="transformers")return;let c=setInterval(()=>U(ae()),500);return()=>clearInterval(c)},[b]);let s=Q(async()=>{if(!(!h.trim()||S)){if(!b){z("\u26A0\uFE0F No AI engine available on this device.");return}F(!0),z("");try{let c;if(b==="gemini"){let{askPage:w}=await import("./rag-MKBAGH6J.mjs");c=await w(h)}else{U("loading");let{askPageWithTransformers:w}=await import("./transformers-rag-VGPGANGM.mjs");c=await w(h),U("ready")}z(c.success&&c.answer?c.answer.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/#+\s/g,"").trim():"\u26A0\uFE0F "+(c.error||"No answer found."))}catch{z("\u26A0\uFE0F Something went wrong. Please try again.")}F(!1)}},[h,S,b]);q(()=>{if(typeof window>"u")return;let w=setTimeout(async()=>{let J=window;console.log("yuktai: Checking AI APIs..."),console.log("yuktai: window.LanguageModel =",J.LanguageModel);let Ie=await Nt();Z(Ie),console.log(Ie?"yuktai: Chrome Built-in AI detected \u2705":"yuktai: Chrome Built-in AI not detected \u2014 Transformers.js will handle RAG on mobile"),R(!!(J.SpeechRecognition||J.webkitSpeechRecognition))},800);return()=>clearTimeout(w)},[]),q(()=>{if(!(typeof window>"u"))try{let c=localStorage.getItem("yuktai-a11y-prefs");c&&d(w=>({...w,...JSON.parse(c)}))}catch{}},[]);let B=Q(async c=>{let w={enabled:!0,highContrast:c.highContrast,darkMode:c.darkMode,reduceMotion:c.reduceMotion,largeTargets:c.largeTargets,speechEnabled:c.speechEnabled,autoFix:c.autoFix,dyslexiaFont:c.dyslexiaFont,localFont:c.localFont,fontSizeMultiplier:c.fontScale/100,colorBlindMode:c.colorBlindMode,showAuditBadge:c.showAuditBadge,showSkipLinks:!0,showPreferencePanel:!1,plainEnglish:c.plainEnglish,summarisePage:c.summarisePage,translateLanguage:c.translateLanguage,voiceControl:c.voiceControl,smartLabels:c.smartLabels,...a};await C.execute(w),u(C.applyFixes(w)),x(!0)},[a]),ge=Q(async()=>{try{localStorage.setItem("yuktai-a11y-prefs",JSON.stringify(o))}catch{}await B(o),l(!1)},[o,B]),be=Q(()=>{d(Le);try{localStorage.removeItem("yuktai-a11y-prefs")}catch{}let c=document.documentElement;["data-yuktai-high-contrast","data-yuktai-dark","data-yuktai-reduce-motion","data-yuktai-large-targets","data-yuktai-keyboard","data-yuktai-dyslexia"].forEach(w=>c.removeAttribute(w)),document.body.style.filter="",document.body.style.fontFamily="",document.documentElement.style.fontSize="",u(null),x(!1)},[]),ye=Q((c,w)=>{d(J=>({...J,[c]:w}))},[]);q(()=>{let c=w=>{w.key==="Escape"&&(n&&l(!1),I&&P(!1))};return window.addEventListener("keydown",c),()=>window.removeEventListener("keydown",c)},[n,I]),q(()=>{n&&$.current&&C.trapFocus($.current)},[n]);let st=b==="transformers"&&Y==="loading"?"Loading AI... (first time only)":"...",Pe=b==="gemini"?"Gemini Nano \xB7 On device \xB7 Instant":b==="transformers"?"Transformers.js \xB7 All devices \xB7 Offline":"Detecting engine...",lt={position:"fixed",bottom:"24px",[e]:"24px",zIndex:9998,width:"52px",height:"52px",borderRadius:"50%",background:v?"#0d9488":"#1a73e8",color:"#fff",border:"none",cursor:"pointer",fontSize:"22px",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 4px 16px rgba(0,0,0,0.25)",transition:"transform 0.15s, background 0.2s"},dt={position:"fixed",bottom:"84px",[e]:"24px",zIndex:9998,width:"52px",height:"52px",borderRadius:"50%",background:I?"#7c3aed":"#6d28d9",color:"#fff",border:"none",cursor:"pointer",fontSize:"22px",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 4px 16px rgba(0,0,0,0.25)",transition:"transform 0.15s, background 0.2s"};return V(Ot,{children:[t,i&&A("button",{style:dt,"aria-label":"Ask a question about this page","aria-haspopup":"dialog","aria-expanded":I,title:`Ask this page \xB7 ${Pe}`,onClick:()=>{P(c=>!c),l(!1)},onMouseEnter:c=>{c.currentTarget.style.transform="scale(1.08)"},onMouseLeave:c=>{c.currentTarget.style.transform="scale(1)"},children:"\u{1F4AC}"}),i&&I&&V("div",{role:"dialog","aria-modal":"true","aria-label":"Ask this page","data-yuktai-panel":"true",style:{position:"fixed",bottom:"148px",[e]:"24px",zIndex:9999,width:"300px",maxWidth:"calc(100vw - 48px)",background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px",boxShadow:"0 8px 32px rgba(0,0,0,0.12)",fontFamily:"system-ui,-apple-system,sans-serif",padding:"14px"},children:[V("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:"10px"},children:[V("div",{children:[A("p",{style:{margin:"0 0 2px",fontSize:"13px",fontWeight:600,color:"#0f172a"},children:"\u{1F4AC} Ask this page"}),A("p",{style:{margin:0,fontSize:"10px",color:b==="gemini"?"#0d9488":"#7c3aed"},children:Pe}),b==="transformers"&&Y==="loading"&&A("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#94a3b8"},children:"Downloading AI model \u2014 first time only (~90MB)"}),b==="transformers"&&Y==="ready"&&A("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#0d9488"},children:"Model ready \u2705 \u2014 works offline now"})]}),A("button",{onClick:()=>P(!1),"aria-label":"Close ask panel",style:{background:"none",border:"none",cursor:"pointer",color:"#94a3b8",fontSize:"18px",lineHeight:1,padding:"2px",borderRadius:"4px"},children:"\xD7"})]}),V("div",{style:{display:"flex",gap:"6px",marginBottom:"8px"},children:[A("input",{type:"text",value:h,onChange:c=>K(c.target.value),onKeyDown:c=>{c.key==="Enter"&&s()},placeholder:"e.g. What does this page do?",disabled:S||!b,"aria-label":"Ask a question about this page",style:{flex:1,padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"12px",color:"#0f172a",background:b?"#fff":"#f8fafc",outline:"none",height:"36px"}}),A("button",{onClick:s,disabled:S||!h.trim()||!b,"aria-label":"Submit question",style:{padding:"8px 12px",borderRadius:"8px",border:"none",background:b&&h.trim()&&!S?"#7c3aed":"#e2e8f0",color:b&&h.trim()&&!S?"#fff":"#94a3b8",fontSize:"12px",fontWeight:600,cursor:b&&h.trim()&&!S?"pointer":"not-allowed",height:"36px",minWidth:"48px",transition:"background 0.2s"},children:S?st:"Ask"})]}),f&&V("div",{style:{padding:"10px",background:"#f5f3ff",borderRadius:"8px",fontSize:"12px",color:"#4c1d95",lineHeight:1.6,maxHeight:"180px",overflowY:"auto"},children:[A("strong",{style:{display:"block",marginBottom:"4px",fontSize:"11px",color:"#7c3aed"},children:"\u{1F4AC} Answer"}),f,A("button",{onClick:()=>{z(""),K("")},style:{display:"block",marginTop:"6px",background:"none",border:"none",color:"#94a3b8",fontSize:"10px",cursor:"pointer",padding:0},children:"Clear"})]}),!b&&A("p",{style:{margin:"4px 0 0",fontSize:"10px",color:"#94a3b8"},children:"Detecting AI engine..."})]}),A("button",{style:lt,"aria-label":"Open accessibility preferences","aria-haspopup":"dialog","aria-expanded":n,"data-yuktai-pref-toggle":"true",onClick:()=>{l(c=>!c),P(!1)},onMouseEnter:c=>{c.currentTarget.style.transform="scale(1.08)"},onMouseLeave:c=>{c.currentTarget.style.transform="scale(1)"},children:"\u267F"}),n&&A(Me,{ref:$,position:e,settings:o,report:g,isActive:v,aiSupported:j,voiceSupported:me,set:ye,onApply:ge,onReset:be,onClose:()=>l(!1)})]})}var pe={name:"ai.text",async execute(e){return`\u{1F916} YuktAI says: ${e}`}};var fe={name:"voice.text",async execute(e){return!e||e.trim()===""?"\u{1F3A4} No speech detected":`\u{1F3A4} You said: ${e}`}};var W=class{plugins=new Map;register(t,a){if(!a||typeof a.execute!="function")throw new Error(`Invalid plugin: ${t}`);this.plugins.set(t,a)}use(t){return this.plugins.get(t)}async run(t,a){try{let i=this.use(t);if(!i)throw new Error(`Plugin not found: ${t}`);return await i.execute(a)}catch(i){throw console.error(`[YuktAI Runtime Error in ${t}]:`,i),i}}getPlugins(){return Array.from(this.plugins.keys())}};function Dt(){if(typeof globalThis>"u")return new W;if(!globalThis.__yuktai_runtime__){let e=new W;e.register(C.name,C),e.register(pe.name,pe),e.register(fe.name,fe),globalThis.__yuktai_runtime__=e}return globalThis.__yuktai_runtime__}var rt=typeof window<"u"?Dt():new W,za={wcagPlugin:C,list(){return rt.getPlugins()},use(e){return rt.use(e)},fix(e){return C.applyFixes({enabled:!0,autoFix:!0,...e})},scan(){return C.scan()}};export{W as Runtime,za as YuktAI,Re as YuktAIWrapper,pe as aiPlugin,Re as default,fe as voicePlugin,C as wcag,C as wcagPlugin};
385
+ `,document.body.appendChild(e),Ue=e}function ot(e){let t={critical:20,serious:10,moderate:5,minor:2},a=e.details.reduce((i,n)=>i+(t[n.severity]||0),0);return Math.max(0,Math.min(100,100-a))}var C={name:"yuktai-a11y",version:"4.0.0",observer:null,async execute(e){if(!e.enabled)return this.stopObserver(),"yuktai: disabled.";D=e,Rt(e),Pt(),It(),St(),Tt(),e.showSkipLinks!==!1&&At(),e.showPreferencePanel,Mt(e);let t=this.applyFixes(e);t.score=ot(t),e.showAuditBadge&&Ct(t),e.timeoutWarning&&it(e.timeoutWarning),e.autoFix&&this.startObserver(e),e.plainEnglish&&await Qe(!0),e.summarisePage&&await Ze(!0),e.translateLanguage&&e.translateLanguage!=="en"&&await et(e.translateLanguage),e.voiceControl&&await tt(!0),e.smartLabels&&await at(!0);let a=`${t.fixed} fixes applied. Score: ${t.score}/100.`;return m(a,t.score>=90?"success":"info",!1),`yuktai v4.0.0: ${a} Scanned ${t.scanned} elements in ${t.renderTime}ms.`},applyFixes(e){let t={fixed:0,scanned:0,renderTime:0,score:100,details:[]};if(typeof document>"u")return t;let a=performance.now(),i=document.querySelectorAll("*");t.scanned=i.length;let n=(l,o,d,g)=>{t.details.push({tag:l,fix:o,severity:d,element:g.outerHTML.slice(0,100)}),t.fixed++};return i.forEach(l=>{let o=l,d=o.tagName.toLowerCase();if(d==="html"&&!o.getAttribute("lang")&&(o.setAttribute("lang","en"),n(d,'lang="en" added',"critical",o)),d==="meta"){let u=o.getAttribute("name"),v=o.getAttribute("content")||"";u==="viewport"&&v.includes("user-scalable=no")&&(o.setAttribute("content",v.replace("user-scalable=no","user-scalable=yes")),n(d,"user-scalable=yes restored","serious",o)),u==="viewport"&&/maximum-scale=1(?:[^0-9]|$)/.test(v)&&(o.setAttribute("content",v.replace(/maximum-scale=1(?=[^0-9]|$)/,"maximum-scale=5")),n(d,"maximum-scale=5 restored","serious",o))}if(d==="main"&&!o.getAttribute("tabindex")&&(o.setAttribute("tabindex","-1"),o.getAttribute("id")||o.setAttribute("id","main-content")),d==="img"&&(o.hasAttribute("alt")||(o.setAttribute("alt",""),o.setAttribute("aria-hidden","true"),n(d,'alt="" aria-hidden="true"',"serious",o))),d==="svg"&&(!o.getAttribute("aria-hidden")&&!o.getAttribute("aria-label")&&!l.querySelector("title")&&(o.setAttribute("aria-hidden","true"),n(d,'aria-hidden="true" (decorative svg)',"minor",o)),o.getAttribute("focusable")||o.setAttribute("focusable","false")),d==="iframe"&&!o.getAttribute("title")&&!o.getAttribute("aria-label")&&(o.setAttribute("title","embedded content"),o.setAttribute("aria-label","embedded content"),n(d,"title + aria-label added","serious",o)),d==="button"){if(!o.innerText?.trim()&&!o.getAttribute("aria-label")){let u=o.getAttribute("title")||"button";o.setAttribute("aria-label",u),n(d,`aria-label="${u}" (empty button)`,"critical",o)}o.hasAttribute("disabled")&&!o.getAttribute("aria-disabled")&&(o.setAttribute("aria-disabled","true"),t.fixed++)}if(d==="a"){let u=o;!o.innerText?.trim()&&!o.getAttribute("aria-label")&&(o.setAttribute("aria-label",o.getAttribute("title")||"link"),n(d,"aria-label added (empty link)","critical",o)),u.target==="_blank"&&!u.rel?.includes("noopener")&&(u.rel="noopener noreferrer",t.fixed++)}if(Xe.has(d)){let u=o;if(!o.getAttribute("aria-label")&&!o.getAttribute("aria-labelledby")){let v=o.getAttribute("placeholder")||o.getAttribute("name")||d;o.setAttribute("aria-label",v),n(d,`aria-label="${v}"`,"serious",o)}if(o.hasAttribute("required")&&!o.getAttribute("aria-required")&&(o.setAttribute("aria-required","true"),t.fixed++),d==="input"&&!u.autocomplete){let v=u.name||"";u.type==="email"||v.includes("email")?u.autocomplete="email":u.type==="tel"||v.includes("tel")?u.autocomplete="tel":u.type==="password"&&(u.autocomplete="current-password"),t.fixed++}}d==="th"&&!o.getAttribute("scope")&&(o.setAttribute("scope",o.closest("thead")?"col":"row"),n(d,"scope added to <th>","moderate",o)),Ee[d]&&!o.getAttribute("role")&&(o.setAttribute("role",Ee[d]),n(d,`role="${Ee[d]}"`,"minor",o));let g=o.getAttribute("role")||"";g==="tab"&&!o.getAttribute("aria-selected")&&(o.setAttribute("aria-selected","false"),t.fixed++),["alert","status","log"].includes(g)&&!o.getAttribute("aria-live")&&(o.setAttribute("aria-live",g==="alert"?"assertive":"polite"),n(d,`aria-live added on role=${g}`,"moderate",o)),g==="combobox"&&!o.getAttribute("aria-expanded")&&(o.setAttribute("aria-expanded","false"),n(d,'aria-expanded="false" on combobox',"serious",o)),(g==="checkbox"||g==="radio")&&!o.getAttribute("aria-checked")&&(o.setAttribute("aria-checked","false"),n(d,`aria-checked="false" on role=${g}`,"serious",o))}),t.renderTime=parseFloat((performance.now()-a).toFixed(2)),t},scan(){let e={fixed:0,scanned:0,renderTime:0,score:100,details:[]};if(typeof document>"u")return e;let t=performance.now(),a=document.querySelectorAll("*");e.scanned=a.length;let i=(n,l,o,d)=>e.details.push({tag:n,fix:l,severity:o,element:d.outerHTML.slice(0,100)});return a.forEach(n=>{let l=n,o=l.tagName.toLowerCase();(o==="a"||o==="button")&&!l.innerText?.trim()&&!l.getAttribute("aria-label")&&i(o,"needs aria-label (empty)","critical",l),o==="img"&&!l.hasAttribute("alt")&&i(o,"needs alt text","serious",l),Xe.has(o)&&!l.getAttribute("aria-label")&&!l.getAttribute("aria-labelledby")&&i(o,"needs aria-label","serious",l),o==="iframe"&&!l.getAttribute("title")&&!l.getAttribute("aria-label")&&i(o,"iframe needs title","serious",l)}),e.fixed=e.details.length,e.score=ot(e),e.renderTime=parseFloat((performance.now()-t).toFixed(2)),e},startObserver(e){this.observer||typeof document>"u"||(this.observer=new MutationObserver(()=>this.applyFixes(e)),this.observer.observe(document.body,{childList:!0,subtree:!0,attributes:!1}))},stopObserver(){this.observer?.disconnect(),this.observer=null},announce:m,speak:Ce,showVisualAlert:nt,trapFocus:ce,handlePlainEnglish:Qe,handleSummarisePage:Ze,handleTranslate:et,handleVoiceControl:tt,handleSmartLabels:at,SUPPORTED_LANGUAGES:ie};import Bt,{useEffect as q,useState as L,useCallback as Q}from"react";import{forwardRef as zt,useEffect as ue,useState as H}from"react";import{jsx as r,jsxs as p}from"react/jsx-runtime";var Le={highContrast:!1,reduceMotion:!1,autoFix:!0,dyslexiaFont:!1,fontScale:100,localFont:"",darkMode:!1,largeTargets:!1,speechEnabled:!1,colorBlindMode:"none",showAuditBadge:!1,timeoutWarning:void 0,plainEnglish:!1,summarisePage:!1,translateLanguage:"en",voiceControl:!1,smartLabels:!1},G=[80,90,100,110,120,130],Ht=[{value:"none",label:"None"},{value:"deuteranopia",label:"Deuteranopia"},{value:"protanopia",label:"Protanopia"},{value:"tritanopia",label:"Tritanopia"},{value:"achromatopsia",label:"Greyscale"}],Wt=["Prompt API for Gemini Nano","Summarization API for Gemini Nano","Writer API for Gemini Nano","Rewriter API for Gemini Nano","Translation API"];function $t(){let[e,t]=H(typeof window<"u"?window.innerWidth:1024);return ue(()=>{let a=()=>t(window.innerWidth);return window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[]),{isMobile:e<=480,isTablet:e>480&&e<=768}}function Ft({checked:e,onChange:t,label:a,disabled:i=!1}){return p("label",{"aria-label":a,style:{position:"relative",display:"inline-flex",width:"40px",height:"24px",cursor:i?"not-allowed":"pointer",flexShrink:0,opacity:i?.4:1},children:[r("input",{type:"checkbox",checked:e,disabled:i,onChange:n=>t(n.target.checked),style:{opacity:0,width:0,height:0,position:"absolute"}}),r("span",{style:{position:"absolute",inset:0,borderRadius:"99px",background:e?"#0d9488":"#cbd5e1",transition:"background 0.2s"}}),r("span",{style:{position:"absolute",top:"3px",left:e?"19px":"3px",width:"18px",height:"18px",background:"#fff",borderRadius:"50%",transition:"left 0.2s",boxShadow:"0 1px 3px rgba(0,0,0,0.2)",pointerEvents:"none"}})]})}function _({label:e,color:t="#64748b",badge:a,concept:i}){return p("div",{style:{margin:"10px 18px 4px"},children:[p("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[r("p",{style:{margin:0,fontSize:"10px",fontWeight:600,color:t,letterSpacing:"0.06em",textTransform:"uppercase"},children:e}),a&&r("span",{style:{fontSize:"9px",fontWeight:500,padding:"1px 7px",borderRadius:"99px",background:"#f5f3ff",color:"#7c3aed",border:"0.5px solid #c4b5fd",whiteSpace:"nowrap"},children:a})]}),i&&r("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#94a3b8",fontStyle:"italic"},children:i})]})}function M({icon:e,label:t,desc:a,checked:i,onChange:n,disabled:l=!1,disabledReason:o,tip:d}){return p("div",{title:l?o:d,style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 18px",gap:"12px"},children:[p("div",{style:{display:"flex",alignItems:"center",gap:"10px",flex:1,minWidth:0},children:[r("span",{"aria-hidden":"true",style:{width:"32px",height:"32px",borderRadius:"8px",background:l?"#f1f5f9":"#f0fdfa",color:l?"#94a3b8":"#0d9488",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"15px",flexShrink:0,fontWeight:700},children:e}),p("div",{style:{minWidth:0},children:[r("p",{style:{margin:0,fontSize:"13px",fontWeight:500,color:l?"#94a3b8":"#0f172a",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:t}),r("p",{style:{margin:0,fontSize:"10px",color:"#94a3b8"},children:l?o:a})]})]}),r(Ft,{checked:i,onChange:n,label:`Toggle ${t}`,disabled:l})]})}function k(){return r("div",{style:{height:"1px",background:"#f1f5f9"}})}function X({steps:e}){return p("div",{style:{margin:"0 18px 8px",padding:"8px 10px",background:"#f8fafc",borderRadius:"8px",border:"0.5px solid #e2e8f0"},children:[r("p",{style:{margin:"0 0 4px",fontSize:"9px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.05em"},children:"How to use"}),e.map((t,a)=>p("p",{style:{margin:"0 0 2px",fontSize:"10px",color:"#475569"},children:[a+1,". ",t]},a))]})}var Me=zt(({position:e,settings:t,report:a,isActive:i,aiSupported:n,voiceSupported:l,set:o,onApply:d,onReset:g,onClose:u},v)=>{let{isMobile:x,isTablet:j}=$t(),[Z,me]=H([]),[R,$]=H(""),[I,P]=H(""),[h,K]=H(!1),[f,z]=H(null),[S,F]=H("idle");ue(()=>{let s=window;!!(s.LanguageModel||s.ai?.languageModel)&&n?z("gemini"):te()&&z("transformers")},[n]),ue(()=>{if(f!=="transformers")return;let s=setInterval(()=>{F(ae())},500);return()=>clearInterval(s)},[f]);let b=async()=>{if(!(!R.trim()||h)){if(!f){P("\u26A0\uFE0F No AI engine available on this device.");return}K(!0),P("");try{let s;f==="gemini"?s=await ze(R):(F("loading"),s=await He(R),F("ready")),P(s.success&&s.answer?s.answer.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/#+\s/g,"").trim():"\u26A0\uFE0F "+(s.error||"No answer found on this page"))}catch{P("\u26A0\uFE0F Failed to get answer. Please try again.")}K(!1)}};ue(()=>{(async()=>{try{let B=window;if(!B.queryLocalFonts)return;let ge=await B.queryLocalFonts(),be=[...new Set(ge.map(ye=>ye.family))].sort();me(be.slice(0,50))}catch{}})()},[]);let ee=f==="gemini"?"Gemini Nano":f==="transformers"?"Transformers.js \xB7 All devices":"Detecting...",Y=f==="transformers"&&S==="loading"?"Loading AI model... (first time only)":"...",U=x?{position:"fixed",bottom:0,left:0,right:0,zIndex:9999,background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px 16px 0 0",boxShadow:"0 -8px 32px rgba(0,0,0,0.12)",maxHeight:"90vh",overflowY:"auto",fontFamily:"system-ui,-apple-system,sans-serif",width:"100%"}:{position:"fixed",bottom:"84px",[e]:"24px",zIndex:9999,width:j?"300px":"320px",maxWidth:"calc(100vw - 48px)",background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px",boxShadow:"0 8px 32px rgba(0,0,0,0.12)",maxHeight:"80vh",overflowY:"auto",fontFamily:"system-ui,-apple-system,sans-serif"};return p("div",{ref:v,role:"dialog","aria-modal":"true","aria-label":"yuktai accessibility preferences","data-yuktai-panel":"true",style:U,children:[p("div",{style:{padding:"14px 18px 12px",borderBottom:"1px solid #f1f5f9",display:"flex",alignItems:"flex-start",justifyContent:"space-between",position:"sticky",top:0,background:"#fff",zIndex:1},children:[p("div",{children:[p("div",{style:{display:"flex",alignItems:"center",gap:"7px",marginBottom:"4px",flexWrap:"wrap"},children:[r("span",{style:{fontSize:"10px",fontWeight:700,padding:"2px 7px",borderRadius:"99px",background:"#f0fdfa",color:"#0d9488",letterSpacing:"0.05em",fontFamily:"monospace"},children:"@yuktishaalaa/yuktai v2.1.0"}),i&&r("span",{style:{fontSize:"10px",fontWeight:700,padding:"2px 7px",borderRadius:"99px",background:"#f0fdfa",color:"#0f766e",border:"1px solid #99f6e4"},children:"\u25CF ACTIVE"})]}),r("p",{style:{margin:"0 0 1px",fontSize:"15px",fontWeight:600,color:"#0f172a"},children:"Accessibility"}),r("p",{style:{margin:0,fontSize:"11px",color:"#64748b"},children:"WCAG 2.2 \xB7 Open source \xB7 Zero cost \xB7 All devices"})]}),r("button",{onClick:u,"aria-label":"Close accessibility panel",style:{background:"none",border:"none",cursor:"pointer",padding:"4px",color:"#94a3b8",fontSize:"20px",lineHeight:1,borderRadius:"6px",flexShrink:0,minWidth:x?"44px":"auto",minHeight:x?"44px":"auto",display:"flex",alignItems:"center",justifyContent:"center"},children:"\xD7"})]}),r(_,{label:"\u267F Core Accessibility",concept:"Rule-based engine \u2014 works on all browsers and devices"}),r(X,{steps:["Toggle any feature on","Click Apply settings","Preferences saved automatically"]}),r(M,{icon:"\u{1F527}",label:"Auto-fix ARIA",desc:"Injects missing labels and roles automatically",checked:t.autoFix,onChange:s=>o("autoFix",s),tip:"Fixes aria-label, alt text, roles on every element"}),r(k,{}),r(M,{icon:"\u{1F50A}",label:"Speak on focus",desc:"Browser reads elements aloud as you tab",checked:t.speechEnabled,onChange:s=>o("speechEnabled",s),tip:"Uses browser SpeechSynthesis \u2014 no install needed"}),r(k,{}),r(M,{icon:"\u{1F399}\uFE0F",label:"Voice control",desc:"Say commands to navigate the page",checked:t.voiceControl,onChange:s=>o("voiceControl",s),disabled:!l,disabledReason:"Not supported in this browser",tip:'Say "scroll down", "go to main", "click"'}),r(k,{}),r(_,{label:"\u{1F916} AI Features",color:"#7c3aed",badge:"Gemini Nano",concept:"Large Language Model running privately on your device \u2014 Chrome 127+ only"}),r("div",{style:{margin:"4px 18px 6px",padding:"8px 10px",background:n?"#f0fdfa":"#f5f3ff",borderRadius:"8px",border:`0.5px solid ${n?"#99f6e4":"#c4b5fd"}`,fontSize:"10px",color:n?"#0f766e":"#7c3aed",lineHeight:1.5},children:n?"\u2705 Gemini Nano detected \u2014 AI features ready. Runs privately on your device.":"\u2699\uFE0F AI features need one-time setup \u2014 see guide below."}),!n&&p("div",{style:{margin:"0 18px 8px",padding:"10px 12px",background:"#fafafa",borderRadius:"8px",border:"0.5px solid #e2e8f0",fontSize:"11px",color:"#475569",lineHeight:1.7},children:[r("p",{style:{margin:"0 0 6px",fontWeight:600,color:"#0f172a",fontSize:"11px"},children:"\u{1F6E0} One-time setup \u2014 5 steps:"}),p("p",{style:{margin:"0 0 3px"},children:["1. Open Chrome \u2192 ",r("code",{style:{background:"#f1f5f9",padding:"1px 5px",borderRadius:"4px",fontSize:"10px",color:"#0d9488",fontFamily:"monospace"},children:"chrome://flags"})]}),r("p",{style:{margin:"0 0 3px"},children:"2. Enable each flag:"}),r("div",{style:{display:"flex",flexDirection:"column",gap:"2px",margin:"4px 0 6px 10px"},children:Wt.map(s=>p("span",{style:{fontSize:"10px",color:"#7c3aed",fontFamily:"monospace"},children:["\u2192 ",s]},s))}),p("p",{style:{margin:"0 0 3px"},children:["3. Click ",r("strong",{style:{color:"#0f172a"},children:"Relaunch"})]}),p("p",{style:{margin:"0 0 3px"},children:["4. ",r("code",{style:{background:"#f1f5f9",padding:"1px 5px",borderRadius:"4px",fontSize:"10px",color:"#0d9488",fontFamily:"monospace"},children:"chrome://components"})," \u2192 Optimization Guide On Device Model \u2192 Check for update"]}),r("p",{style:{margin:"0"},children:"5. Refresh \u2014 AI features unlock automatically \u2705"})]}),r(M,{icon:"\u{1F4DD}",label:"Plain English mode",desc:"Rewrites complex text in simple language",checked:t.plainEnglish,onChange:s=>o("plainEnglish",s),disabled:!n,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: LLM text rewriting"}),r(k,{}),r(M,{icon:"\u{1F4CB}",label:"Summarise page",desc:"3-sentence summary appears at top",checked:t.summarisePage,onChange:s=>o("summarisePage",s),disabled:!n,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: Abstractive summarisation"}),r(k,{}),r(M,{icon:"\u{1F3F7}\uFE0F",label:"Smart aria-labels",desc:"AI generates meaningful labels for elements",checked:t.smartLabels,onChange:s=>o("smartLabels",s),disabled:!n,disabledReason:"Enable Gemini Nano \u2014 see setup above",tip:"AI concept: Context-aware label generation"}),r(k,{}),r(_,{label:"\u{1F441}\uFE0F Visual",concept:"CSS filter-based \u2014 works on all browsers and devices"}),r(X,{steps:["Toggle any visual mode","Changes apply instantly","Works on mobile and desktop"]}),r(M,{icon:"\u25D1",label:"High contrast",desc:"Boosts contrast for low vision users",checked:t.highContrast,onChange:s=>o("highContrast",s),tip:"CSS filter: contrast()"}),r(k,{}),r(M,{icon:"\u{1F319}",label:"Dark mode",desc:"Inverts colours \u2014 easy on eyes at night",checked:t.darkMode,onChange:s=>o("darkMode",s),tip:"CSS filter: invert + hue-rotate"}),r(k,{}),r(M,{icon:"\u23F8\uFE0F",label:"Reduce motion",desc:"Disables all animations",checked:t.reduceMotion,onChange:s=>o("reduceMotion",s),tip:"WCAG 2.3.3 \u2014 vestibular disorders"}),r(k,{}),r(M,{icon:"\u{1F446}",label:"Large targets",desc:"44\xD744px minimum touch targets",checked:t.largeTargets,onChange:s=>o("largeTargets",s),tip:"WCAG 2.5.8 \u2014 motor impaired users"}),r(k,{}),p("div",{style:{padding:"10px 18px"},children:[r("p",{style:{margin:"0 0 2px",fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F3A8} Colour blindness"}),r("p",{style:{margin:"0 0 8px",fontSize:"10px",color:"#94a3b8"},children:"SVG colour matrix filters \u2014 all devices"}),r("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:Ht.map(s=>r("button",{onClick:()=>o("colorBlindMode",s.value),"aria-pressed":t.colorBlindMode===s.value,style:{padding:"4px 10px",borderRadius:"20px",fontSize:"11px",fontWeight:500,border:`1px solid ${t.colorBlindMode===s.value?"#0d9488":"#e2e8f0"}`,background:t.colorBlindMode===s.value?"#f0fdfa":"#fff",color:t.colorBlindMode===s.value?"#0d9488":"#64748b",cursor:"pointer",minHeight:x?"36px":"auto"},children:s.label},s.value))})]}),r(k,{}),r(_,{label:"\u{1F524} Font",concept:"Browser Font API + CSS \u2014 Chrome 103+"}),r(X,{steps:["Toggle dyslexia font or pick from device","Adjust size with + / \u2212","Saved across visits"]}),r(M,{icon:"Aa",label:"Dyslexia-friendly font",desc:"Atkinson Hyperlegible \u2014 research-backed",checked:t.dyslexiaFont,onChange:s=>o("dyslexiaFont",s),tip:"By Braille Institute \u2014 free and open source"}),r(k,{}),p("div",{style:{padding:"10px 18px"},children:[r("p",{style:{margin:"0 0 2px",fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F5A5}\uFE0F Local font"}),r("p",{style:{margin:"0 0 8px",fontSize:"10px",color:"#94a3b8"},children:"window.queryLocalFonts() \u2014 Chrome 103+"}),Z.length>0?p("select",{value:t.localFont,onChange:s=>o("localFont",s.target.value),"aria-label":"Choose a font from your device",style:{width:"100%",padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"13px",color:"#0f172a",background:"#fff",cursor:"pointer",height:x?"44px":"36px"},children:[r("option",{value:"",children:"System default"}),Z.map(s=>r("option",{value:s,style:{fontFamily:s},children:s},s))]}):r("p",{style:{margin:0,fontSize:"11px",color:"#94a3b8"},children:"Allow font access when Chrome prompts you."})]}),r(k,{}),p("div",{style:{padding:"10px 18px 14px"},children:[p("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"10px"},children:[p("div",{children:[r("p",{style:{margin:0,fontSize:"12px",fontWeight:500,color:"#0f172a"},children:"\u{1F4CF} Text size"}),r("p",{style:{margin:0,fontSize:"10px",color:"#94a3b8"},children:"Scales all text on the page"})]}),p("span",{style:{fontSize:"12px",fontWeight:600,color:"#0d9488",background:"#f0fdfa",padding:"2px 8px",borderRadius:"99px"},children:[t.fontScale,"%"]})]}),p("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[r("button",{onClick:()=>{let s=G.indexOf(t.fontScale);s>0&&o("fontScale",G[s-1])},disabled:t.fontScale<=80,"aria-label":"Decrease text size",style:{width:x?"44px":"30px",height:x?"44px":"30px",borderRadius:"8px",border:"1px solid #e2e8f0",background:"#fff",cursor:t.fontScale<=80?"not-allowed":"pointer",fontSize:"16px",color:t.fontScale<=80?"#cbd5e1":"#0f172a",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:"\u2212"}),r("div",{style:{flex:1,display:"flex",gap:"3px"},children:G.map(s=>r("button",{onClick:()=>o("fontScale",s),"aria-label":`Set text size to ${s}%`,style:{flex:1,height:"6px",borderRadius:"99px",border:"none",cursor:"pointer",padding:0,background:s<=t.fontScale?"#0d9488":"#e2e8f0",transition:"background 0.15s"}},s))}),r("button",{onClick:()=>{let s=G.indexOf(t.fontScale);s<G.length-1&&o("fontScale",G[s+1])},disabled:t.fontScale>=130,"aria-label":"Increase text size",style:{width:x?"44px":"30px",height:x?"44px":"30px",borderRadius:"8px",border:"1px solid #e2e8f0",background:"#fff",cursor:t.fontScale>=130?"not-allowed":"pointer",fontSize:"16px",color:t.fontScale>=130?"#cbd5e1":"#0f172a",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:"+"})]})]}),r(k,{}),r(_,{label:"\u{1F310} Translate",color:"#7c3aed",badge:"Gemini Nano",concept:"Chrome Translation API \u2014 on device, no internet after setup"}),r(X,{steps:["Enable Gemini Nano first","Pick your language","Full page translates instantly"]}),p("div",{style:{padding:"6px 18px 12px"},children:[r("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:ie.slice(0,x?8:18).map(s=>r("button",{onClick:()=>o("translateLanguage",s.code),"aria-pressed":t.translateLanguage===s.code,disabled:!n,style:{padding:"4px 10px",borderRadius:"20px",fontSize:"11px",fontWeight:500,border:`1px solid ${t.translateLanguage===s.code?"#7c3aed":"#e2e8f0"}`,background:t.translateLanguage===s.code?"#f5f3ff":"#fff",color:t.translateLanguage===s.code?"#7c3aed":"#64748b",cursor:n?"pointer":"not-allowed",opacity:n?1:.5,minHeight:x?"36px":"auto"},children:s.label},s.code))}),!n&&r("p",{style:{margin:"6px 0 0",fontSize:"10px",color:"#94a3b8"},children:"Enable Gemini Nano using the setup guide above."})]}),r(k,{}),r(_,{label:"\u{1F4AC} Ask This Page",color:"#0d9488",badge:ee,concept:"RAG \u2014 Retrieval Augmented Generation. Works on all devices including mobile."}),r(X,{steps:["Type any question about this page","Press Ask or hit Enter",f==="transformers"?"Transformers.js answers \u2014 works on mobile, offline":"Gemini Nano reads page and answers privately","Zero cost. No data leaves your device."]}),p("div",{style:{margin:"0 18px 8px",padding:"6px 10px",background:f==="gemini"?"#f0fdfa":f==="transformers"?"#f5f3ff":"#f8fafc",borderRadius:"8px",border:`0.5px solid ${f==="gemini"?"#99f6e4":f==="transformers"?"#c4b5fd":"#e2e8f0"}`,fontSize:"10px",color:f==="gemini"?"#0f766e":f==="transformers"?"#7c3aed":"#94a3b8"},children:[f==="gemini"&&"\u2705 Using Gemini Nano \u2014 on device, private, instant",f==="transformers"&&"\u2705 Using Transformers.js \u2014 works on mobile and all browsers",!f&&"\u23F3 Detecting AI engine...",f==="transformers"&&S==="loading"&&" \xB7 Loading model...",f==="transformers"&&S==="ready"&&" \xB7 Model ready \u2705"]}),p("div",{style:{padding:"0 18px 14px"},children:[p("div",{style:{display:"flex",gap:"6px",marginBottom:"8px"},children:[r("input",{type:"text",value:R,onChange:s=>$(s.target.value),onKeyDown:s=>{s.key==="Enter"&&b()},placeholder:"e.g. What does this page do?",disabled:h||!f,"aria-label":"Ask a question about this page",style:{flex:1,padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"12px",color:"#0f172a",background:f?"#fff":"#f8fafc",outline:"none",height:x?"44px":"36px"}}),r("button",{onClick:b,disabled:h||!R.trim()||!f,"aria-label":"Ask question",style:{padding:"8px 14px",borderRadius:"8px",border:"none",background:f&&R.trim()&&!h?"#0d9488":"#e2e8f0",color:f&&R.trim()&&!h?"#fff":"#94a3b8",fontSize:"12px",fontWeight:600,cursor:f&&R.trim()&&!h?"pointer":"not-allowed",flexShrink:0,height:x?"44px":"36px",minWidth:"52px",transition:"background 0.2s"},children:h?Y:"Ask"})]}),I&&p("div",{role:"status","aria-live":"polite",style:{padding:"10px 12px",background:"#f0fdfa",border:"1px solid #99f6e4",borderRadius:"8px",fontSize:"12px",color:"#0f766e",lineHeight:1.6,maxHeight:"180px",overflowY:"auto"},children:[r("strong",{style:{display:"block",marginBottom:"4px",fontSize:"11px",color:"#0d9488"},children:"\u{1F4AC} Answer"}),I,r("button",{onClick:()=>{P(""),$("")},style:{display:"block",marginTop:"6px",background:"none",border:"none",color:"#94a3b8",fontSize:"10px",cursor:"pointer",padding:0},children:"Clear"})]})]}),a&&r("div",{role:"status",style:{margin:"0 14px 10px",padding:"8px 12px",background:"#f0fdfa",border:"1px solid #99f6e4",borderRadius:"8px",fontSize:"12px",color:"#0f766e",fontWeight:500,fontFamily:"monospace"},children:a.fixed>0?`\u2713 ${a.fixed} fixes \xB7 ${a.scanned} nodes \xB7 ${a.renderTime}ms \xB7 Score: ${a.score}/100`:`\u2713 0 auto-fixes needed \xB7 ${a.scanned} nodes \xB7 ${a.renderTime}ms`}),p("div",{style:{display:"flex",gap:"8px",padding:"12px 14px 14px",position:x?"sticky":"relative",bottom:x?0:"auto",background:"#fff",borderTop:"1px solid #f1f5f9"},children:[r("button",{onClick:g,style:{flex:1,padding:x?"12px 0":"8px 0",fontSize:"13px",fontWeight:500,borderRadius:"9px",border:"1px solid #e2e8f0",background:"#fff",color:"#64748b",cursor:"pointer"},children:"Reset"}),r("button",{onClick:d,style:{flex:2,padding:x?"12px 0":"8px 0",fontSize:"13px",fontWeight:600,borderRadius:"9px",border:"none",background:"#0d9488",color:"#fff",cursor:"pointer"},children:"Apply settings"})]})]})});Me.displayName="WidgetPanel";import{Fragment as Ot,jsx as A,jsxs as V}from"react/jsx-runtime";async function Nt(){try{if(typeof window>"u")return!1;let e=window;if(e.LanguageModel)try{if(typeof e.LanguageModel.availability=="function"){let a=await e.LanguageModel.availability();if(a==="readily"||a==="available"||a==="downloadable")return!0}else return!0}catch{}if(e.Summarizer)try{let a=await e.Summarizer.availability?.();if(!a||a==="readily"||a==="available")return!0}catch{}if(e.Rewriter)try{let a=await e.Rewriter.availability?.();if(!a||a==="readily"||a==="available")return!0}catch{}if(e.Writer)try{let a=await e.Writer.availability?.();if(!a||a==="readily"||a==="available")return!0}catch{}let t=e.ai||globalThis.ai;if(t){if(t.languageModel?.availability)try{let a=await t.languageModel.availability();if(a==="readily"||a==="available")return!0}catch{}if(t.languageModel&&typeof t.languageModel.create=="function"||t.summarizer||t.rewriter||t.writer||t.languageModel)return!0}return!!(e.Translator||e.translation?.canTranslate)}catch{return!1}}function Re({position:e="left",children:t,config:a={},showRag:i=!1}){let[n,l]=L(!1),[o,d]=L(Le),[g,u]=L(null),[v,x]=L(!1),[j,Z]=L(!1),[me,R]=L(!1),$=Bt.useRef(null),[I,P]=L(!1),[h,K]=L(""),[f,z]=L(""),[S,F]=L(!1),[b,ee]=L(null),[Y,U]=L("idle");q(()=>{if(typeof window>"u")return;let c=window;!!(c.LanguageModel||c.ai?.languageModel)&&j?ee("gemini"):te()&&ee("transformers")},[j]),q(()=>{if(b!=="transformers")return;let c=setInterval(()=>U(ae()),500);return()=>clearInterval(c)},[b]);let s=Q(async()=>{if(!(!h.trim()||S)){if(!b){z("\u26A0\uFE0F No AI engine available on this device.");return}F(!0),z("");try{let c;if(b==="gemini"){let{askPage:w}=await import("./rag-MKBAGH6J.mjs");c=await w(h)}else{U("loading");let{askPageWithTransformers:w}=await import("./transformers-rag-HW4QKA5T.mjs");c=await w(h),U("ready")}z(c.success&&c.answer?c.answer.replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/#+\s/g,"").trim():"\u26A0\uFE0F "+(c.error||"No answer found."))}catch{z("\u26A0\uFE0F Something went wrong. Please try again.")}F(!1)}},[h,S,b]);q(()=>{if(typeof window>"u")return;let w=setTimeout(async()=>{let J=window;console.log("yuktai: Checking AI APIs..."),console.log("yuktai: window.LanguageModel =",J.LanguageModel);let Ie=await Nt();Z(Ie),console.log(Ie?"yuktai: Chrome Built-in AI detected \u2705":"yuktai: Chrome Built-in AI not detected \u2014 Transformers.js will handle RAG on mobile"),R(!!(J.SpeechRecognition||J.webkitSpeechRecognition))},800);return()=>clearTimeout(w)},[]),q(()=>{if(!(typeof window>"u"))try{let c=localStorage.getItem("yuktai-a11y-prefs");c&&d(w=>({...w,...JSON.parse(c)}))}catch{}},[]);let B=Q(async c=>{let w={enabled:!0,highContrast:c.highContrast,darkMode:c.darkMode,reduceMotion:c.reduceMotion,largeTargets:c.largeTargets,speechEnabled:c.speechEnabled,autoFix:c.autoFix,dyslexiaFont:c.dyslexiaFont,localFont:c.localFont,fontSizeMultiplier:c.fontScale/100,colorBlindMode:c.colorBlindMode,showAuditBadge:c.showAuditBadge,showSkipLinks:!0,showPreferencePanel:!1,plainEnglish:c.plainEnglish,summarisePage:c.summarisePage,translateLanguage:c.translateLanguage,voiceControl:c.voiceControl,smartLabels:c.smartLabels,...a};await C.execute(w),u(C.applyFixes(w)),x(!0)},[a]),ge=Q(async()=>{try{localStorage.setItem("yuktai-a11y-prefs",JSON.stringify(o))}catch{}await B(o),l(!1)},[o,B]),be=Q(()=>{d(Le);try{localStorage.removeItem("yuktai-a11y-prefs")}catch{}let c=document.documentElement;["data-yuktai-high-contrast","data-yuktai-dark","data-yuktai-reduce-motion","data-yuktai-large-targets","data-yuktai-keyboard","data-yuktai-dyslexia"].forEach(w=>c.removeAttribute(w)),document.body.style.filter="",document.body.style.fontFamily="",document.documentElement.style.fontSize="",u(null),x(!1)},[]),ye=Q((c,w)=>{d(J=>({...J,[c]:w}))},[]);q(()=>{let c=w=>{w.key==="Escape"&&(n&&l(!1),I&&P(!1))};return window.addEventListener("keydown",c),()=>window.removeEventListener("keydown",c)},[n,I]),q(()=>{n&&$.current&&C.trapFocus($.current)},[n]);let st=b==="transformers"&&Y==="loading"?"Loading AI... (first time only)":"...",Pe=b==="gemini"?"Gemini Nano \xB7 On device \xB7 Instant":b==="transformers"?"Transformers.js \xB7 All devices \xB7 Offline":"Detecting engine...",lt={position:"fixed",bottom:"24px",[e]:"24px",zIndex:9998,width:"52px",height:"52px",borderRadius:"50%",background:v?"#0d9488":"#1a73e8",color:"#fff",border:"none",cursor:"pointer",fontSize:"22px",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 4px 16px rgba(0,0,0,0.25)",transition:"transform 0.15s, background 0.2s"},dt={position:"fixed",bottom:"84px",[e]:"24px",zIndex:9998,width:"52px",height:"52px",borderRadius:"50%",background:I?"#7c3aed":"#6d28d9",color:"#fff",border:"none",cursor:"pointer",fontSize:"22px",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 4px 16px rgba(0,0,0,0.25)",transition:"transform 0.15s, background 0.2s"};return V(Ot,{children:[t,i&&A("button",{style:dt,"aria-label":"Ask a question about this page","aria-haspopup":"dialog","aria-expanded":I,title:`Ask this page \xB7 ${Pe}`,onClick:()=>{P(c=>!c),l(!1)},onMouseEnter:c=>{c.currentTarget.style.transform="scale(1.08)"},onMouseLeave:c=>{c.currentTarget.style.transform="scale(1)"},children:"\u{1F4AC}"}),i&&I&&V("div",{role:"dialog","aria-modal":"true","aria-label":"Ask this page","data-yuktai-panel":"true",style:{position:"fixed",bottom:"148px",[e]:"24px",zIndex:9999,width:"300px",maxWidth:"calc(100vw - 48px)",background:"#fff",border:"1px solid #e2e8f0",borderRadius:"16px",boxShadow:"0 8px 32px rgba(0,0,0,0.12)",fontFamily:"system-ui,-apple-system,sans-serif",padding:"14px"},children:[V("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:"10px"},children:[V("div",{children:[A("p",{style:{margin:"0 0 2px",fontSize:"13px",fontWeight:600,color:"#0f172a"},children:"\u{1F4AC} Ask this page"}),A("p",{style:{margin:0,fontSize:"10px",color:b==="gemini"?"#0d9488":"#7c3aed"},children:Pe}),b==="transformers"&&Y==="loading"&&A("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#94a3b8"},children:"Downloading AI model \u2014 first time only (~90MB)"}),b==="transformers"&&Y==="ready"&&A("p",{style:{margin:"2px 0 0",fontSize:"9px",color:"#0d9488"},children:"Model ready \u2705 \u2014 works offline now"})]}),A("button",{onClick:()=>P(!1),"aria-label":"Close ask panel",style:{background:"none",border:"none",cursor:"pointer",color:"#94a3b8",fontSize:"18px",lineHeight:1,padding:"2px",borderRadius:"4px"},children:"\xD7"})]}),V("div",{style:{display:"flex",gap:"6px",marginBottom:"8px"},children:[A("input",{type:"text",value:h,onChange:c=>K(c.target.value),onKeyDown:c=>{c.key==="Enter"&&s()},placeholder:"e.g. What does this page do?",disabled:S||!b,"aria-label":"Ask a question about this page",style:{flex:1,padding:"8px 10px",borderRadius:"8px",border:"1px solid #e2e8f0",fontSize:"12px",color:"#0f172a",background:b?"#fff":"#f8fafc",outline:"none",height:"36px"}}),A("button",{onClick:s,disabled:S||!h.trim()||!b,"aria-label":"Submit question",style:{padding:"8px 12px",borderRadius:"8px",border:"none",background:b&&h.trim()&&!S?"#7c3aed":"#e2e8f0",color:b&&h.trim()&&!S?"#fff":"#94a3b8",fontSize:"12px",fontWeight:600,cursor:b&&h.trim()&&!S?"pointer":"not-allowed",height:"36px",minWidth:"48px",transition:"background 0.2s"},children:S?st:"Ask"})]}),f&&V("div",{style:{padding:"10px",background:"#f5f3ff",borderRadius:"8px",fontSize:"12px",color:"#4c1d95",lineHeight:1.6,maxHeight:"180px",overflowY:"auto"},children:[A("strong",{style:{display:"block",marginBottom:"4px",fontSize:"11px",color:"#7c3aed"},children:"\u{1F4AC} Answer"}),f,A("button",{onClick:()=>{z(""),K("")},style:{display:"block",marginTop:"6px",background:"none",border:"none",color:"#94a3b8",fontSize:"10px",cursor:"pointer",padding:0},children:"Clear"})]}),!b&&A("p",{style:{margin:"4px 0 0",fontSize:"10px",color:"#94a3b8"},children:"Detecting AI engine..."})]}),A("button",{style:lt,"aria-label":"Open accessibility preferences","aria-haspopup":"dialog","aria-expanded":n,"data-yuktai-pref-toggle":"true",onClick:()=>{l(c=>!c),P(!1)},onMouseEnter:c=>{c.currentTarget.style.transform="scale(1.08)"},onMouseLeave:c=>{c.currentTarget.style.transform="scale(1)"},children:"\u267F"}),n&&A(Me,{ref:$,position:e,settings:o,report:g,isActive:v,aiSupported:j,voiceSupported:me,set:ye,onApply:ge,onReset:be,onClose:()=>l(!1)})]})}var pe={name:"ai.text",async execute(e){return`\u{1F916} YuktAI says: ${e}`}};var fe={name:"voice.text",async execute(e){return!e||e.trim()===""?"\u{1F3A4} No speech detected":`\u{1F3A4} You said: ${e}`}};var W=class{plugins=new Map;register(t,a){if(!a||typeof a.execute!="function")throw new Error(`Invalid plugin: ${t}`);this.plugins.set(t,a)}use(t){return this.plugins.get(t)}async run(t,a){try{let i=this.use(t);if(!i)throw new Error(`Plugin not found: ${t}`);return await i.execute(a)}catch(i){throw console.error(`[YuktAI Runtime Error in ${t}]:`,i),i}}getPlugins(){return Array.from(this.plugins.keys())}};function Dt(){if(typeof globalThis>"u")return new W;if(!globalThis.__yuktai_runtime__){let e=new W;e.register(C.name,C),e.register(pe.name,pe),e.register(fe.name,fe),globalThis.__yuktai_runtime__=e}return globalThis.__yuktai_runtime__}var rt=typeof window<"u"?Dt():new W,za={wcagPlugin:C,list(){return rt.getPlugins()},use(e){return rt.use(e)},fix(e){return C.applyFixes({enabled:!0,autoFix:!0,...e})},scan(){return C.scan()}};export{W as Runtime,za as YuktAI,Re as YuktAIWrapper,pe as aiPlugin,Re as default,fe as voicePlugin,C as wcag,C as wcagPlugin};
@@ -1 +1 @@
1
- import{a,b,c}from"./chunk-VYW2VAGT.mjs";export{a as askPageWithTransformers,c as getModelLoadStatus,b as isTransformersSupported};
1
+ import{a,b,c}from"./chunk-XQMQZMAH.mjs";export{a as askPageWithTransformers,c as getModelLoadStatus,b as isTransformersSupported};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuktishaalaa/yuktai",
3
- "version": "3.0.13",
3
+ "version": "3.0.14",
4
4
  "description": "Universal runtime accessibility plugin — auto-fixes WCAG 2.2 violations with on-device AI features. Zero API keys.",
5
5
  "author": "Sandeep Miriyala — Yuktishaalaa AI Lab",
6
6
  "license": "ISC",
@@ -1,21 +0,0 @@
1
- var p=null,g=null,d=!1,m=!1;function w(){try{if(typeof navigator<"u"&&"gpu"in navigator&&navigator.gpu!==void 0)return"webgpu"}catch{}return"wasm"}async function b(){if(!m){if(d){for(;d;)await new Promise(t=>setTimeout(t,200));return}d=!0;try{let{pipeline:t,env:e}=await import("@huggingface/transformers");e.allowRemoteModels=!0,e.allowLocalModels=!1,typeof window<"u"&&typeof caches<"u"?e.useBrowserCache=!0:e.useBrowserCache=!1;let s=w();console.log("yuktai: Transformers.js using device:",s),p=await t("feature-extraction","Xenova/all-MiniLM-L6-v2",{device:s}),g=await t("text2text-generation","Xenova/flan-t5-small",{device:s}),m=!0,d=!1,console.log("yuktai: Transformers.js models loaded \u2705")}catch(t){throw d=!1,console.error("yuktai: Transformers.js model load failed",t),t}}}function v(){return new Promise(t=>{let e=setTimeout(t,1500),s=new MutationObserver(()=>{clearTimeout(e),e=setTimeout(()=>{s.disconnect(),t()},500)});s.observe(document.body,{childList:!0,subtree:!0})})}function k(){let t=[],e=new Set,s=document.querySelectorAll(`
2
- p, h1, h2, h3, h4, h5, h6,
3
- li, ul, ol, dl, dt, dd,
4
- td, th, tr, caption,
5
- blockquote, q, cite,
6
- figcaption, figure,
7
- label, legend, fieldset,
8
- span, a, b, strong, em, i, u, s, mark, small,
9
- abbr, acronym, dfn, code, pre, kbd, samp, var,
10
- article, section, main, aside, nav, header, footer,
11
- div, button, summary, details,
12
- time, address, bdi, bdo,
13
- ins, del, sub, sup,
14
- title, caption
15
- `);for(let n of s){if(n.closest("[data-yuktai-panel]"))continue;let r=window.getComputedStyle(n);if(r.display==="none"||r.visibility==="hidden"||r.opacity==="0"||n.querySelector("p, h1, h2, h3, h4, h5, h6, li, td, div, article, section"))continue;let o=n.innerText?.trim();if(!o||o.length<15||e.has(o))continue;e.add(o),t.push(o);let l=n.getAttribute("aria-label")?.trim();l&&l.length>8&&l!==o&&!e.has(l)&&(e.add(l),t.push(l));let c=n.getAttribute("aria-description")?.trim();c&&c.length>8&&!e.has(c)&&(e.add(c),t.push(c));let u=n.getAttribute("title")?.trim();u&&u.length>8&&u!==o&&!e.has(u)&&(e.add(u),t.push(u)),n.querySelectorAll("img").forEach(y=>{let f=y.getAttribute("alt")?.trim();f&&f.length>8&&!e.has(f)&&(e.add(f),t.push(f))})}document.querySelectorAll("input, textarea").forEach(n=>{n.closest("[data-yuktai-panel]")||(n.placeholder&&!e.has(n.placeholder)&&(e.add(n.placeholder),t.push(n.placeholder)),n.value&&n.value.length>10&&!e.has(n.value)&&(e.add(n.value),t.push(n.value)))}),document.querySelectorAll("select").forEach(n=>{n.closest("[data-yuktai-panel]")||Array.from(n.options).forEach(r=>{let a=r.text?.trim();a&&a.length>5&&!e.has(a)&&(e.add(a),t.push(a))})}),document.querySelectorAll('meta[name="description"], meta[name="keywords"], meta[property="og:title"], meta[property="og:description"]').forEach(n=>{let r=n.getAttribute("content")?.trim();r&&r.length>10&&!e.has(r)&&(e.add(r),t.push(r))});let i=document.title?.trim();return i&&!e.has(i)&&(e.add(i),t.unshift(i)),t.join(" ").slice(0,8e3)}function T(t,e=200,s=50){if(typeof t!="string")try{t=String(t??"")}catch{return[]}let i=t.trim();if(!i)return[];let n=Math.min(s,Math.floor(e/2)),r=i.split(/\s+/),a=[],o=e-n;for(let l=0;l<r.length;l+=o){let c=r.slice(l,l+e).join(" ");c.trim().length>20&&a.push(c)}return a}function x(t,e){let s=0,i=0,n=0;for(let r=0;r<t.length;r++)s+=t[r]*e[r],i+=t[r]*t[r],n+=e[r]*e[r];return s/(Math.sqrt(i)*Math.sqrt(n)+1e-8)}async function h(t){let e=await p(t,{pooling:"mean",normalize:!0}),s=e?.data??e;return Array.from(s)}async function A(t,e,s=5){let i=await h(t),n=await Promise.all(e.map(async r=>{let a=await h(r),o=x(i,a);return{chunk:r,score:o}}));return n.sort((r,a)=>a.score-r.score),n.slice(0,s).map(r=>r.chunk)}async function L(t){if(!t.trim())return{success:!1,answer:"",error:"Please type a question."};try{await b(),await v();let e=k();if(!e||e.length<50)return{success:!1,answer:"",error:"Not enough content on this page."};let s=T(e);if(s.length===0)return{success:!1,answer:"",error:"Could not process page content."};let r=`Answer the question based on the context below. Give a complete and helpful answer in 2-3 sentences.
16
-
17
- Context: ${(await A(t,s,5)).join(" ").slice(0,1500)}
18
-
19
- Question: ${t}
20
-
21
- Answer:`,o=(await g(r,{max_new_tokens:150,min_new_tokens:10}))?.[0]?.generated_text?.trim()||"";return!o||o.length===0?{success:!0,answer:"I could not find a specific answer on this page."}:{success:!0,answer:o}}catch(e){return console.error("yuktai: Transformers RAG error",e),{success:!1,answer:"",error:e instanceof Error?e.message:"Transformers.js error."}}}function P(){try{return typeof WebAssembly<"u"&&typeof Worker<"u"}catch{return!1}}function E(){return m?"ready":d?"loading":"idle"}export{L as a,P as b,E as c};