PageSourceSearch

https://access-power-widget.lovable.app/assets/AIAltTextGenerator-B9-B426L.js

js access-power-widget.lovable.app collected 2026-10-03 03:19:28 UTC 3,396 bytes, 7 lines download raw bytes

1import{r as c,j as m}from"./index-Bz_gH6uL.js";import{T as u}from"./ToolAnalysisLayout-9qXFRABo.js";import{p as g,b as A}from"./parsingUtils-DhbIw5xT.js";import{u as f}from"./useAIAccessibilityAnalysis-E2Y7yFoN.js";import"./textarea-8chg0if2.js";import"./tabs-DP4VFpC6.js";import"./index-D4RehSaz.js";import"./table-CZZoHoDo.js";import"./scoringUtils-Dprupo87.js";import"./useAnalysisPersistence-UgBeclv_.js";import"./shield-DJMnoBgF.js";import"./chart-column-7BGpquxA.js";import"./code-ByKkvRKm.js";import"./file-text-Bepy2Z1A.js";import"./circle-alert-CiuvQiZ1.js";import"./loader-circle-Ovh9YlES.js";import"./download-CJEf19Vz.js";import"./file-down-DYSm0Su8.js";import"./clock-on2Nz2q2.js";const p={correct:`<img src="team.jpg" alt="Echipa de 5 persoane colaborând la un laptop în sala de conferințe" />
2<img src="product.jpg" alt="Cană ceramică albastră de 350ml cu mâner ergonomic" />
3<img src="chart.png" alt="Grafic circular: 60% vânzări online, 25% magazin fizic, 15% telefonic" />`,incorrect:`<img src="photo.jpg" alt="photo" />
4<img src="IMG_20240301_142356.jpg" alt="IMG_20240301_142356.jpg" />
5<img src="hero.jpg" alt="https://example.com/images/hero.jpg" />
6<img src="banner.png" alt="CLICK HERE FOR MORE INFO!!!" />
7<img src="team.jpg" alt="image image image" />`},h=["image","photo","picture","graphic","icon","img","imagine","fotografie","poza","grafic","pictograma"],d=/^https?:\/\//i,b=/\.(jpg|jpeg|png|gif|svg|webp|bmp|ico|tiff?)$/i,E=/^[A-Z\s!?.,:;]{10,}$/,x=/\b(\w+)\b(?:\s+\1\b){2,}/i;function C(s){const a=g(s),i=[],n=Array.from(a.querySelectorAll("img[alt]"));return n.length===0?(i.push({id:"no-alt-images",label:"Imagini cu alt",status:"warning",details:"Nu au fost găsite imagini cu atribut alt pentru evaluarea calității."}),i):(n.forEach((r,o)=>{const t=r.getAttribute("alt")||"";r.getAttribute("src");const l=A(r);if(!t.trim())return;const e=[];h.includes(t.trim().toLowerCase())&&e.push(`Text generic ("${t}") — nu descrie conținutul real al imaginii`),d.test(t.trim())&&e.push("Alt text-ul este un URL — înlocuiți cu o descriere a imaginii"),b.test(t.trim())&&e.push("Alt text-ul pare a fi un nume de fișier"),E.test(t.trim())&&e.push("Text complet cu majuscule — screen readerele pot citi literă cu literă"),x.test(t.trim())&&e.push("Conține cuvinte repetate inutile"),t.trim().length>0&&t.trim().length<4&&e.push(`Prea scurt (${t.trim().length} caractere) — probabil nu e suficient de descriptiv`),e.length>0?i.push({id:`aialt-issues-${o}`,label:`Calitate scăzută alt text ${l}`,status:"fail",details:`Alt: "${t.substring(0,40)}${t.length>40?"...":""}". Probleme: ${e.join("; ")}.`,wcagCriterion:"WCAG 1.1.1 Non-text Content"}):i.push({id:`aialt-ok-${o}`,label:`Alt text de calitate ${l}`,status:"pass",details:`Alt text bun: "${t.substring(0,50)}${t.length>50?"...":""}".`,wcagCriterion:"WCAG 1.1.1 Non-text Content"})}),i)}const D=()=>{const{isAnalyzing:s,analyzeWithAI:a}=f(),i=c.useCallback(r=>C(r),[]),n=c.useCallback(r=>a(r,"alt-text"),[a]);return m.jsx(u,{title:"Evaluator Alt Text (AI + Euristici)",description:"Analiză hibridă: euristici locale instant + analiză AI profundă pentru evaluarea calității textelor alternative.",wcagCriterion:"WCAG 1.1.1 Non-text Content (Level A)",correctExample:p.correct,incorrectExample:p.incorrect,onAnalyze:i,onAnalyzeAsync:n,isAsyncAnalyzing:s})};export{D as AIAltTextGenerator};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.