UNPKG

@qualweb/wcag-techniques

Version:
1 lines 466 kB
(()=>{var e={8290:(e,t,a)=>{e=a.nmd(e);var i="__lodash_hash_undefined__",n=9007199254740991,r="[object Arguments]",s="[object Boolean]",l="[object Date]",o="[object Function]",d="[object GeneratorFunction]",u="[object Map]",c="[object Number]",m="[object Object]",h="[object Promise]",p="[object RegExp]",g="[object Set]",k="[object String]",b="[object Symbol]",f="[object WeakMap]",v="[object ArrayBuffer]",y="[object DataView]",w="[object Float32Array]",j="[object Float64Array]",A="[object Int8Array]",T="[object Int16Array]",W="[object Int32Array]",x="[object Uint8Array]",C="[object Uint8ClampedArray]",E="[object Uint16Array]",R="[object Uint32Array]",q=/\w*$/,I=/^\[object .+?Constructor\]$/,_=/^(?:0|[1-9]\d*)$/,P={};P[r]=P["[object Array]"]=P[v]=P[y]=P[s]=P[l]=P[w]=P[j]=P[A]=P[T]=P[W]=P[u]=P[c]=P[m]=P[p]=P[g]=P[k]=P[b]=P[x]=P[C]=P[E]=P[R]=!0,P["[object Error]"]=P[o]=P[f]=!1;var F="object"==typeof a.g&&a.g&&a.g.Object===Object&&a.g,Q="object"==typeof self&&self&&self.Object===Object&&self,z=F||Q||Function("return this")(),O=t&&!t.nodeType&&t,G=O&&e&&!e.nodeType&&e,D=G&&G.exports===O;function V(e,t){return e.set(t[0],t[1]),e}function S(e,t){return e.add(t),e}function N(e,t,a,i){var n=-1,r=e?e.length:0;for(i&&r&&(a=e[++n]);++n<r;)a=t(a,e[n],n,e);return a}function M(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}function U(e){var t=-1,a=Array(e.size);return e.forEach((function(e,i){a[++t]=[i,e]})),a}function L(e,t){return function(a){return e(t(a))}}function H(e){var t=-1,a=Array(e.size);return e.forEach((function(e){a[++t]=e})),a}var K,B=Array.prototype,$=Function.prototype,X=Object.prototype,Z=z["__core-js_shared__"],J=(K=/[^.]+$/.exec(Z&&Z.keys&&Z.keys.IE_PROTO||""))?"Symbol(src)_1."+K:"",Y=$.toString,ee=X.hasOwnProperty,te=X.toString,ae=RegExp("^"+Y.call(ee).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ie=D?z.Buffer:void 0,ne=z.Symbol,re=z.Uint8Array,se=L(Object.getPrototypeOf,Object),le=Object.create,oe=X.propertyIsEnumerable,de=B.splice,ue=Object.getOwnPropertySymbols,ce=ie?ie.isBuffer:void 0,me=L(Object.keys,Object),he=Ge(z,"DataView"),pe=Ge(z,"Map"),ge=Ge(z,"Promise"),ke=Ge(z,"Set"),be=Ge(z,"WeakMap"),fe=Ge(Object,"create"),ve=Me(he),ye=Me(pe),we=Me(ge),je=Me(ke),Ae=Me(be),Te=ne?ne.prototype:void 0,We=Te?Te.valueOf:void 0;function xe(e){var t=-1,a=e?e.length:0;for(this.clear();++t<a;){var i=e[t];this.set(i[0],i[1])}}function Ce(e){var t=-1,a=e?e.length:0;for(this.clear();++t<a;){var i=e[t];this.set(i[0],i[1])}}function Ee(e){var t=-1,a=e?e.length:0;for(this.clear();++t<a;){var i=e[t];this.set(i[0],i[1])}}function Re(e){this.__data__=new Ce(e)}function qe(e,t){var a=Le(e)||function(e){return function(e){return function(e){return!!e&&"object"==typeof e}(e)&&He(e)}(e)&&ee.call(e,"callee")&&(!oe.call(e,"callee")||te.call(e)==r)}(e)?function(e,t){for(var a=-1,i=Array(e);++a<e;)i[a]=t(a);return i}(e.length,String):[],i=a.length,n=!!i;for(var s in e)!t&&!ee.call(e,s)||n&&("length"==s||Se(s,i))||a.push(s);return a}function Ie(e,t,a){var i=e[t];ee.call(e,t)&&Ue(i,a)&&(void 0!==a||t in e)||(e[t]=a)}function _e(e,t){for(var a=e.length;a--;)if(Ue(e[a][0],t))return a;return-1}function Pe(e,t,a,i,n,h,f){var I;if(i&&(I=h?i(e,n,h,f):i(e)),void 0!==I)return I;if(!$e(e))return e;var _=Le(e);if(_){if(I=function(e){var t=e.length,a=e.constructor(t);t&&"string"==typeof e[0]&&ee.call(e,"index")&&(a.index=e.index,a.input=e.input);return a}(e),!t)return function(e,t){var a=-1,i=e.length;t||(t=Array(i));for(;++a<i;)t[a]=e[a];return t}(e,I)}else{var F=Ve(e),Q=F==o||F==d;if(Ke(e))return function(e,t){if(t)return e.slice();var a=new e.constructor(e.length);return e.copy(a),a}(e,t);if(F==m||F==r||Q&&!h){if(M(e))return h?e:{};if(I=function(e){return"function"!=typeof e.constructor||Ne(e)?{}:(t=se(e),$e(t)?le(t):{});var t}(Q?{}:e),!t)return function(e,t){return ze(e,De(e),t)}(e,function(e,t){return e&&ze(t,Xe(t),e)}(I,e))}else{if(!P[F])return h?e:{};I=function(e,t,a,i){var n=e.constructor;switch(t){case v:return Qe(e);case s:case l:return new n(+e);case y:return function(e,t){var a=t?Qe(e.buffer):e.buffer;return new e.constructor(a,e.byteOffset,e.byteLength)}(e,i);case w:case j:case A:case T:case W:case x:case C:case E:case R:return function(e,t){var a=t?Qe(e.buffer):e.buffer;return new e.constructor(a,e.byteOffset,e.length)}(e,i);case u:return function(e,t,a){var i=t?a(U(e),!0):U(e);return N(i,V,new e.constructor)}(e,i,a);case c:case k:return new n(e);case p:return function(e){var t=new e.constructor(e.source,q.exec(e));return t.lastIndex=e.lastIndex,t}(e);case g:return function(e,t,a){var i=t?a(H(e),!0):H(e);return N(i,S,new e.constructor)}(e,i,a);case b:return r=e,We?Object(We.call(r)):{}}var r}(e,F,Pe,t)}}f||(f=new Re);var z=f.get(e);if(z)return z;if(f.set(e,I),!_)var O=a?function(e){return function(e,t,a){var i=t(e);return Le(e)?i:function(e,t){for(var a=-1,i=t.length,n=e.length;++a<i;)e[n+a]=t[a];return e}(i,a(e))}(e,Xe,De)}(e):Xe(e);return function(e,t){for(var a=-1,i=e?e.length:0;++a<i&&!1!==t(e[a],a,e););}(O||e,(function(n,r){O&&(n=e[r=n]),Ie(I,r,Pe(n,t,a,i,r,e,f))})),I}function Fe(e){return!(!$e(e)||(t=e,J&&J in t))&&(Be(e)||M(e)?ae:I).test(Me(e));var t}function Qe(e){var t=new e.constructor(e.byteLength);return new re(t).set(new re(e)),t}function ze(e,t,a,i){a||(a={});for(var n=-1,r=t.length;++n<r;){var s=t[n],l=i?i(a[s],e[s],s,a,e):void 0;Ie(a,s,void 0===l?e[s]:l)}return a}function Oe(e,t){var a,i,n=e.__data__;return("string"==(i=typeof(a=t))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==a:null===a)?n["string"==typeof t?"string":"hash"]:n.map}function Ge(e,t){var a=function(e,t){return null==e?void 0:e[t]}(e,t);return Fe(a)?a:void 0}xe.prototype.clear=function(){this.__data__=fe?fe(null):{}},xe.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},xe.prototype.get=function(e){var t=this.__data__;if(fe){var a=t[e];return a===i?void 0:a}return ee.call(t,e)?t[e]:void 0},xe.prototype.has=function(e){var t=this.__data__;return fe?void 0!==t[e]:ee.call(t,e)},xe.prototype.set=function(e,t){return this.__data__[e]=fe&&void 0===t?i:t,this},Ce.prototype.clear=function(){this.__data__=[]},Ce.prototype.delete=function(e){var t=this.__data__,a=_e(t,e);return!(a<0)&&(a==t.length-1?t.pop():de.call(t,a,1),!0)},Ce.prototype.get=function(e){var t=this.__data__,a=_e(t,e);return a<0?void 0:t[a][1]},Ce.prototype.has=function(e){return _e(this.__data__,e)>-1},Ce.prototype.set=function(e,t){var a=this.__data__,i=_e(a,e);return i<0?a.push([e,t]):a[i][1]=t,this},Ee.prototype.clear=function(){this.__data__={hash:new xe,map:new(pe||Ce),string:new xe}},Ee.prototype.delete=function(e){return Oe(this,e).delete(e)},Ee.prototype.get=function(e){return Oe(this,e).get(e)},Ee.prototype.has=function(e){return Oe(this,e).has(e)},Ee.prototype.set=function(e,t){return Oe(this,e).set(e,t),this},Re.prototype.clear=function(){this.__data__=new Ce},Re.prototype.delete=function(e){return this.__data__.delete(e)},Re.prototype.get=function(e){return this.__data__.get(e)},Re.prototype.has=function(e){return this.__data__.has(e)},Re.prototype.set=function(e,t){var a=this.__data__;if(a instanceof Ce){var i=a.__data__;if(!pe||i.length<199)return i.push([e,t]),this;a=this.__data__=new Ee(i)}return a.set(e,t),this};var De=ue?L(ue,Object):function(){return[]},Ve=function(e){return te.call(e)};function Se(e,t){return!!(t=null==t?n:t)&&("number"==typeof e||_.test(e))&&e>-1&&e%1==0&&e<t}function Ne(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||X)}function Me(e){if(null!=e){try{return Y.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function Ue(e,t){return e===t||e!=e&&t!=t}(he&&Ve(new he(new ArrayBuffer(1)))!=y||pe&&Ve(new pe)!=u||ge&&Ve(ge.resolve())!=h||ke&&Ve(new ke)!=g||be&&Ve(new be)!=f)&&(Ve=function(e){var t=te.call(e),a=t==m?e.constructor:void 0,i=a?Me(a):void 0;if(i)switch(i){case ve:return y;case ye:return u;case we:return h;case je:return g;case Ae:return f}return t});var Le=Array.isArray;function He(e){return null!=e&&function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=n}(e.length)&&!Be(e)}var Ke=ce||function(){return!1};function Be(e){var t=$e(e)?te.call(e):"";return t==o||t==d}function $e(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Xe(e){return He(e)?qe(e):function(e){if(!Ne(e))return me(e);var t=[];for(var a in Object(e))ee.call(e,a)&&"constructor"!=a&&t.push(a);return t}(e)}e.exports=function(e){return Pe(e,!0,!0)}},9313:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},9712:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},3471:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},1177:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},4015:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},5279:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EvaluationModuleDefinition=void 0;const i=a(9237);t.EvaluationModuleDefinition=class EvaluationModuleDefinition{type;moduleOptions;report;tester;translate;constructor(e,t,a,n,r){this.type=e,this.moduleOptions=t,this.report=n,this.tester=r,this.translate=i.LocaleFetcher.transform(a),this.configure(t)}configure(e){return this.tester.resetConfiguration(),this.tester.configureByPrinciplesAndLevels(e.principles,e.levels),this.tester.configureIncluded(e.include),this.tester.configureExcluded(e.exclude),this}test(e){return this.tester.execute(e),this}testSpecial(){throw new Error("Method not implemented.")}getReport(){return this.report.getCopy()}}},8541:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},4649:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ExecutableModuleContext=void 0;t.ExecutableModuleContext=class ExecutableModuleContext{options;constructor(e={}){this.options=e}async execute(e,t,a){const i=this.getModulePackage?.();return i&&await e.addEvaluationScript(i),this.runModule(e,this.options,t,a)}}},9135:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Guideline=void 0;t.Guideline=class Guideline{}},4253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},6063:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7372:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8824:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8631:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},4891:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ModuleReport=void 0;t.ModuleReport=class ModuleReport{report;constructor(e){this.report={type:e,metadata:{passed:0,warning:0,failed:0,inapplicable:0},assertions:{}}}getAssertions(e){return this.report.assertions[e]}addAssertionResult(e){const t=e.getCode();this.report.assertions[t]=e.getFinalResults(),this.report.metadata[this.report.assertions[t].metadata.outcome]++}getCopy(){return{...this.report}}}},7177:(e,t)=>{"use strict";var a;Object.defineProperty(t,"__esModule",{value:!0}),t.ModuleType=void 0,function(e){e.ACT_RULES="act-rules",e.WCAG_TECHNIQUES="wcag-techniques",e.BEST_PRACTICES="best-practices",e.COUNTER="counter",e.CUI_CHECKS="cui-checks"}(a||(t.ModuleType=a={}))},4164:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8353:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7224:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},683:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7408:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7997:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Test=void 0;const i=a(1368);t.Test=class Test{verdict;description;resultCode;elements;attributes;constructor(e,t,a){this.verdict=e??i.Verdict.INAPPLICABLE,this.description=t??"",this.resultCode=a??"I1",this.elements=[],this.attributes=[]}addElement(e,t=!0,a=!1,i){const n=e.getElementHtmlCode(t,a),r=e.getElementSelector();let s;return i&&(s=window.AccessibilityUtils.getAccessibleName(e)),this.elements.push({htmlCode:n,pointer:r,accessibleName:s}),this}addElements(e,t=!0,a=!1,i){return e.forEach((e=>this.addElement(e,t,a,i))),this}}},9992:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8678:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Tester=void 0;t.Tester=class Tester{assertions=new Map;toExecute={};report;constructor(e){this.report=e}configureByPrinciplesAndLevels(e,t){for(const[a,i]of this.assertions)e&&0!==e.length?t&&0!==t.length?i.hasPrincipleAndLevels(e,t)||(this.toExecute[a]=!1):i.hasPrincipleAndLevels(e,["A","AA","AAA"])||(this.toExecute[a]=!1):t&&0!==t.length&&!i.hasPrincipleAndLevels(["Perceivable","Operable","Understandable","Robust"],t)&&(this.toExecute[a]=!1)}configureIncluded(e){if(0!==this.assertions?.size&&e&&0!==e.length){const t=e?.map((e=>e.toLowerCase().startsWith("qw")?e.toUpperCase().trim():e.trim()));for(const[e,a]of this.assertions)this.toExecute[e]=!(!t?.includes(a.getCode())&&!t?.includes(a.getMapping()))}}configureExcluded(e){if(e&&0!==e.length){const t=e.map((e=>e.toLowerCase().startsWith("qw")?e.toUpperCase().trim():e.trim()));for(const[e,a]of this.assertions)this.toExecute[e]=!t.includes(a.getCode())&&!t.includes(a.getMapping())}}resetConfiguration(){for(const e in this.toExecute??{})this.toExecute[e]=!0}}},425:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},2920:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},1368:(e,t)=>{"use strict";var a;Object.defineProperty(t,"__esModule",{value:!0}),t.Verdict=void 0,function(e){e.PASSED="passed",e.WARNING="warning",e.FAILED="failed",e.INAPPLICABLE="inapplicable"}(a||(t.Verdict=a={}))},7105:function(e,t,a){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,n)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),n=this&&this.__exportStar||function(e,t){for(var a in e)"default"===a||Object.prototype.hasOwnProperty.call(t,a)||i(t,e,a)};Object.defineProperty(t,"__esModule",{value:!0}),n(a(9313),t),n(a(9712),t),n(a(3471),t),n(a(1177),t),n(a(4015),t),n(a(5279),t),n(a(8541),t),n(a(4649),t),n(a(9135),t),n(a(4253),t),n(a(6063),t),n(a(7372),t),n(a(8824),t),n(a(8631),t),n(a(4891),t),n(a(4164),t),n(a(7177),t),n(a(8353),t),n(a(7224),t),n(a(683),t),n(a(7408),t),n(a(7997),t),n(a(8678),t),n(a(425),t),n(a(9992),t),n(a(2920),t),n(a(1368),t)},2849:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AssertionTranslator=void 0;const i=a(9237);t.AssertionTranslator=class AssertionTranslator{module;translator;constructor(e,t){this.module=e,this.translator=new i.Translator(t)}translate(e){e.name=this.translator.get([this.module,e.code,"name"])??e.name,e.description=this.translator.get([this.module,e.code,"description"])??e.description,e.metadata.description=this.translator.get([this.module,e.code,"results","I1"])??e.metadata.description}}},8941:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ModuleTranslator=void 0;const i=a(2849),n=a(4873);t.ModuleTranslator=class ModuleTranslator{module;assertionTranslator;testTranslator;constructor(e,t){this.module=e,this.assertionTranslator=new i.AssertionTranslator(e,t),this.testTranslator=new n.TestTranslator(e,t)}translate(e){const t=e.modules[this.module];for(const e in t?.assertions??{}){const a=t?.assertions[e];a&&this.translateAssertion(a)}}translateAssertion(e){this.assertionTranslator.translate(e);for(const t of e.results??[])t.description=this.testTranslator.translate(e.code,t.resultCode);for(const t of e.results??[])if(t.verdict===e.metadata.outcome){e.metadata.description=t.description;break}}translateTest(e,t,a){return this.testTranslator.translate(e,t,a)}}},5007:function(e,t,a){"use strict";var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ReportTranslator=void 0;const n=i(a(8290)),r=a(9237),s=a(7105),l=a(8941);t.ReportTranslator=class ReportTranslator{locale;constructor(e){this.locale=r.LocaleFetcher.transform(e)}translate(e){const t=(0,n.default)(e);return this.translateModule(t,s.ModuleType.ACT_RULES),this.translateModule(t,s.ModuleType.WCAG_TECHNIQUES),this.translateModule(t,s.ModuleType.BEST_PRACTICES),t}translateModule(e,t){new l.ModuleTranslator(t,this.locale).translate(e)}}},4873:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TestTranslator=void 0;const i=a(9237);t.TestTranslator=class TestTranslator{module;translator;constructor(e,t){this.module=e,this.translator=t instanceof i.Translator?t:new i.Translator(t)}translate(e,t,a){let i=this.translator.get([this.module,e,"results",t]);if(i&&a)for(const e of Object.keys(a)||[])i=i.replace(new RegExp(`{${e}}`,"g"),a[e].toString());return i??""}}},9599:function(e,t,a){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,n)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),n=this&&this.__exportStar||function(e,t){for(var a in e)"default"===a||Object.prototype.hasOwnProperty.call(t,a)||i(t,e,a)};Object.defineProperty(t,"__esModule",{value:!0}),n(a(2849),t),n(a(8941),t),n(a(5007),t),n(a(4873),t)},9237:function(){(()=>{"use strict";var e={973:function(e,t,a){var i=this&&this.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,n)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),n=this&&this.__exportStar||function(e,t){for(var a in e)"default"===a||Object.prototype.hasOwnProperty.call(t,a)||i(t,e,a)};Object.defineProperty(t,"__esModule",{value:!0}),n(a(847),t),n(a(69),t),n(a(300),t)},69:function(e,t,a){var i=this&&this.__createBinding||(Object.create?function(e,t,a,i){void 0===i&&(i=a);var n=Object.getOwnPropertyDescriptor(t,a);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[a]}}),Object.defineProperty(e,i,n)}:function(e,t,a,i){void 0===i&&(i=a),e[i]=t[a]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)"default"!==a&&Object.prototype.hasOwnProperty.call(e,a)&&i(t,e,a);return n(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.LocaleFetcher=void 0;const s=r(a(409));t.LocaleFetcher=class{static get(e){return s[e]}static transform(e){if(e){if("string"==typeof e){if(e in s)return{translate:s[e],fallback:s.en};throw new Error(`Locale "${e}" not supported.`)}return"translate"in e?this.verifyTranslationObject(e):{translate:e,fallback:s.en}}return{translate:s.en,fallback:s.en}}static verifyTranslationObject(e){const t={translate:s.en,fallback:s.en};if("string"==typeof e.translate){if(!(e.translate in s))throw new Error(`Locale "${e.translate}" not supported.`);t.translate=s[e.translate]}else t.translate=e.translate;if("string"==typeof e.fallback){if(!(e.fallback in s))throw new Error(`Locale "${e.fallback}" not supported.`);t.fallback=s[e.fallback]}else t.fallback=e.fallback;return t}}},258:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.en=void 0,t.en={"act-rules":{"QW-ACT-R1":{name:"HTML Page has a title",description:"This rule checks that the HTML page has a title.",results:{I1:"No test targets found.",P1:"The `title` element exists and it's not empty ('').",F1:"The `title` element doesn't exist.",F2:"The `title` element is empty ('').",F3:"The `title` element is not in the same context."}},"QW-ACT-R2":{name:"HTML has lang attribute",description:"This rule checks that the html element has a non-empty lang or xml:lang attribute.",results:{I1:"No test targets found.",P1:"The `lang` attribute exists and has a value.",F1:"The `lang` attribute doesn't exist or is empty ('')."}},"QW-ACT-R3":{name:"HTML lang and xml:lang match",description:"The rule checks that for the html element, there is no mismatch between the primary language in non-empty lang and xml:lang attributes, if both are used.",results:{I1:"No test targets found.",P1:"The `lang` and `xml:lang` attributes have the same value.",F1:"The `lang` and `xml:lang` attributes don't have the same value."}},"QW-ACT-R4":{name:"Meta-refresh no delay",description:"This rule checks that the meta element is not used for delayed redirecting or refreshing.",results:{I1:"No test targets found.",P1:"The test target refreshes/redirects immediately.",P2:"The test target refreshes/redirects after more than 20 hours.",F1:"The test target refreshes after {seconds} seconds.",F2:"The test target redirects after {seconds} seconds."}},"QW-ACT-R5":{name:"Validity of HTML Lang attribute",description:"This rule checks the lang or xml:lang attribute has a valid language subtag.",results:{I1:"No test targets found.",P1:"The `lang` attribute has a valid value.",F1:"The `lang` attribute does not have a valid value."}},"QW-ACT-R6":{name:"Image button has accessible name",description:"This rule checks that each image button element has an accessible name.",results:{I1:"No test targets found.",P1:"The test target has an accessible name.",F1:"The test target doesn't have an accessible name."}},"QW-ACT-R7":{name:"Orientation of the page is not restricted using CSS transform property",description:"This rule checks that page content is not restricted to either landscape or portrait orientation using CSS transform property.",results:{I1:"No test targets found.",P1:"A page where CSS transform property has rotateZ transform function conditionally applied on the orientation media feature which does not restrict the element to either portrait or landscape orientation.",F1:"A page where CSS transform property has rotate transform function conditionally applied on the orientation media feature which restricts the element to landscape orientation."}},"QW-ACT-R9":{name:"Links with identical accessible names have equivalent purpose",description:"This rule checks that links with identical accessible names resolve to the same resource or equivalent resources.",results:{I1:"No test targets found.",P1:"The `links` with the same accessible name have equal content.",F1:"The `links` with the same accessible name have different content. Verify is the content is equivalent."}},"QW-ACT-R10":{name:"`iframe` elements with identical accessible names have equivalent purpose",description:"This rule checks that `iframe` elements with identical accessible names embed the same resource or equivalent resources.",results:{I1:"No test targets found.",P1:"The `iframes` with the same accessible name have equal content.",F1:"The `iframes` with the same accessible name have different content."}},"QW-ACT-R11":{name:"Button has accessible name",description:"This rule checks that each button element has an accessible name.",results:{I1:"No test targets found.",P1:"The test target has an accessible name.",F1:"The test target doesn't have an accessible name, or it's empty ('')."}},"QW-ACT-R12":{name:"Link has accessible name",description:"This rule checks that each link has an accessible name.",results:{I1:"No test targets found.",P1:"The test target has an accessible name.",F1:"The test target doesn't have an accessible name, or it's empty ('')."}},"QW-ACT-R13":{name:"Element with `aria-hidden` has no focusable content",description:"This rule checks that elements with an aria-hidden attribute do not contain focusable elements.",results:{I1:"No test targets found.",P1:"The test target children are not focusable.",P2:"The test target is not focusable.",F1:"The test target has focusable children.",F2:"This test target is focusable."}},"QW-ACT-R14":{name:"meta viewport does not prevent zoom",description:"This rule checks that the meta element retains the user agent ability to zoom.",results:{I1:"No test targets found.",P1:"The `meta` element with a `name='viewport'` attribute doesn't define the `maximum-scale` and `user-scalable` values.",P2:"The `meta` element with a `name='viewport'` attribute retains the user agent ability to zoom.",F1:"The `meta` element with a `name='viewport'` attribute abolishes the user agent ability to zoom with user-scalable=no or maximum-scale < 2."}},"QW-ACT-R15":{name:"audio or video has no audio that plays automatically",description:"This rule checks that auto-play audio does not last for more than 3 seconds, or the audio has a control mechanism to stop or mute it.",results:{I1:"No test targets found.",P1:"The rule passed because of the rule ",W1:"The rule can't tell because of the rule ",F1:"The rule failed because of the rule "}},"QW-ACT-R16":{name:"Form control has accessible name",description:"Form control has accessible name",results:{I1:"No test targets found.",P1:"The test target has an accessible name.",F1:"The test target accessible name doesn't exist or it's empty ('')."}},"QW-ACT-R17":{name:"Image has accessible name",description:"This rule checks that each image that is not marked as decorative, has an accessible name.",results:{I1:"No test targets found.",P1:"The test target is decorative.",P2:"The test target has an accessible name.",F1:"The test target doesn't have an accessible name."}},"QW-ACT-R18":{name:"`id` attribute value is unique",description:"This rule checks that all id attribute values on a single page are unique.",results:{I1:"No test targets found.",P1:"The test target has a unique `id` attribute.",F1:"Several elements have the same `id` attribute."}},"QW-ACT-R19":{name:"iframe element has accessible name",description:"This rule checks that each iframe element has an accessible name.",results:{I1:"No test targets found.",P1:"The test target has an accessible name.",F1:"The test target accessible name doesn't exist or it's empty ('')."}},"QW-ACT-R20":{name:"role attribute has valid value",description:"This rule checks that each role attribute has a valid value.",results:{I1:"No test targets found.",P1:"The test target has a valid `role` attribute.",F1:"The test target has an invalid `role` attribute."}},"QW-ACT-R21":{name:"svg element with explicit role has accessible name",description:"This rule checks that each SVG image element that is explicitly included in the accessibility tree has an accessible name.",results:{I1:"No test targets found.",P1:"The test target has an accessible name.",F1:"The test target accessible name doesn't exist or it's empty ('')."}},"QW-ACT-R22":{name:"Element within body has valid lang attribute",description:"This rule checks that the lang attribute of an element in the page body has a valid primary language subtag.",results:{I1:"No test targets found.",P1:"The test target has a valid `lang` attribute.",F1:"The test target has an invalid `lang` attribute."}},"QW-ACT-R23":{name:"video element visual content has accessible alternative",description:"This rule checks that video elements with audio have an alternative for the video content as audio or as text.",results:{I1:"No test targets found.",P1:"The rule passed because of the rule ",W1:"The rule can't tell because of the rule ",F1:"The rule failed because of the rule "}},"QW-ACT-R24":{name:"autocomplete attribute has valid value",description:"This rule checks that the HTML autocomplete attribute has a correct value.",results:{I1:"No test targets found.",P1:"The test target has a valid `autocomplete` attribute.",F1:"The test target `autocomplete` attribute is not valid."}},"QW-ACT-R25":{name:"ARIA state or property is permitted",description:"This rule checks that WAI-ARIA states or properties are allowed for the element they are specified on.",results:{I1:"No test targets found.",P1:"The `{attr}` property is supported or inherited by the `role` {role}.",F1:"The `{attr}` property is neither inherited nor supported by the `role` {role}."}},"QW-ACT-R26":{name:"video element auditory content has accessible alternative",description:"This rule checks that video elements have an alternative for information conveyed through audio.",results:{I1:"No test targets found.",P1:"The rule passed because of the rule ",W1:"The rule can't tell because of the rule ",F1:"The rule failed because of the rule "}},"QW-ACT-R27":{name:"aria-* attribute is defined in WAI-ARIA",description:"This rule checks that each aria-* attribute specified is defined in ARIA 1.1.",results:{I1:"No test targets found.",P1:"All aria-* attributes in this element are defined in ARIA 1.1.",F1:"One or more aria-* attributes are not defined in ARIA 1.1."}},"QW-ACT-R28":{name:"Element with role attribute has required states and properties",description:"This rule checks that elements that have an explicit role also specify all required states and properties.",results:{I1:"No test targets found.",P1:"The test target required attributes are listed.",P2:"The test target `role` doesn't have required state or property",F1:"The test target has unlisted required states or properties."}},"QW-ACT-R29":{name:"Audio element content has text alternative",description:"This rule checks if audio only elements have a text alternative available.",results:{I1:"No test targets found.",P1:"The rule passed because of the rule ",W1:"The rule can't tell because of the rule ",F1:"The rule failed because of the rule "}},"QW-ACT-R30":{name:"Visible label is part of accessible name",description:"This rule checks that interactive elements labeled through their content have their visible label as part of their accessible name.",results:{I1:"No test targets found.",P1:"The complete visible text content of the test target either matches or is contained within its accessible name.",F1:"The test target doesn't have an accessible name.",F2:"The complete visible text content of the test target neither matches or is contained within its accessible name."}},"QW-ACT-R31":{name:"Video element visual-only content has accessible alternative",description:"This rule checks that video elements without audio have an alternative available.",results:{I1:"No test targets found.",P1:"The rule passed because of the rule ",W1:"The rule can't tell because of the rule ",F1:"The rule failed because of the rule "}},"QW-ACT-R32":{name:"video element visual content has strict accessible alternative",description:"This rule checks that video elements with audio have audio description.",results:{I1:"No test targets found.",P1:"The rule passed because of the rule ",W1:"The rule can't tell because of the rule ",F1:"The rule failed because of the rule "}},"QW-ACT-R33":{name:"ARIA required context role",description:"This rule checks that an element with an explicit semantic role exists inside its required context.",results:{I1:"No test targets found.",P1:"The test target parent has the required context `role`.",F1:"The test target parent doesn't have the required context `role`."}},"QW-ACT-R34":{name:"ARIA state or property has valid value",description:"This rule checks that each ARIA state or property has a valid value.",results:{I1:"No test targets found.",P1:"The test target `{attr}` attribute has a valid value.",F1:"The test target `{attr}` attribute has an invalid value."}},"QW-ACT-R35":{name:"Heading has accessible name",description:"This rule applies to any HTML element with the semantic role of heading that is included in the accessibility tree.",results:{I1:"No test targets found.",P1:"The test target has a non-empty accessible name.",F1:"The test target accessible name doesn't exist or it's empty ('')."}},"QW-ACT-R36":{name:"Headers attribute specified on a cell refers to cells in the same table element",description:"This rule checks that the headers attribute on a cell refer to other cells in the same table element with a semantic role of columnheader or rowheader.",results:{I1:"No test targets found.",P1:"All headers attributes refer to a cell with a semantic role of columnheader of rowheader within the same table.",F1:"The headers attribute `{attr}` refers to an ID that does not exist within the same table.",F2:"The headers attribute `{attr}` refers to an element inside the same table which does not have a role of rowheader or columnheader."}},"QW-ACT-R37":{name:"Text has minimum contrast",description:"This rule checks that the highest possible contrast of every text character with its background meets the minimal contrast requirement.",results:{I1:"No test targets found.",P1:"Element has contrast ratio higher than minimum.",P2:"Element doesn't have human language text.",P3:"Element has gradient with contrast ratio higher than minimum.",W1:"Element has text-shadow that needs manual verification.",W2:"Element has an image on background.",W3:"Element has an gradient that we can't verify.",F1:"Element has contrast ratio lower than minimum.",F2:"Element has gradient with contrast ratio lower than minimum."}},"QW-ACT-R38":{name:"ARIA required owned elements",description:"This rule checks that an element with an explicit semantic role has at least one of its required owned elements.",results:{I1:"No test targets found.",P1:"The test target only owns elements with correct role.",F1:"The test target owns elements that doesn't have the correct role."}},"QW-ACT-R39":{name:"All table header cells have assigned data cells",description:"This rule checks that each table header has assigned data cells in a table element.",results:{I1:"No test targets found.",P1:"The column header element has at least one assigned cell.",F1:"The column header element does not have at least one assigned cell."}},"QW-ACT-R40":{name:"Zoomed text node is not clipped with CSS overflow",description:"This rule checks that text nodes are not unintentionally clipped by overflow, when a page is zoomed to 200% on 1280 by 1024 viewport.",results:{I1:"No test targets found.",W1:"Check if each ancestor or the text node is not clipped by overflow."}},"QW-ACT-R41":{name:"Error message describes invalid form field value",description:"This rule checks that text error messages provided when the user completes a form field with invalid values or using an invalid format, identify the cause of the error or how to fix the error.",results:{I1:"No test targets found.",W1:"Check that text error messages provided, identify the cause of the error or how to fix the error."}},"QW-ACT-R42":{name:"Object element has non-empty accessible name",description:"This rule checks that each `object` element has a non-empty accessible name.",results:{I1:"No test targets found.",P1:"The test target has a non-empty accessible name.",F1:"The test target accessible name doesn't exist or it's empty ('')."}},"QW-ACT-R43":{name:"Scrollable element is keyboard accessible",description:"This rule checks that scrollable elements can be scrolled by keyboard",results:{I1:"No test targets found.",P1:"This scrollable section element is included in sequential focus navigation.",F1:"This vertically/horizontally scrollable section element is not included in sequential focus navigation, nor does it have any descendants that are."}},"QW-ACT-R44":{name:"Links with identical accessible names and context serve equivalent purpose",description:"This rule checks that links with identical accessible names and context resolve to the same or equivalent resources.",results:{I1:"No test targets found.",P1:"The `links` with the same accessible name have equal content.",W1:"The `links` with the same accessible name have different content. Verify is the content is equivalent."}},"QW-ACT-R48":{name:"Element marked as decorative is not exposed",description:"This rule checks that elements marked as decorative either are not included in the accessibility tree, or have a presentational role.",results:{I1:"No test targets found.",P1:"The test target is not in the accessibility tree.",F1:"The test target is in the accessibility tree."}},"QW-ACT-R49":{name:"Audio or video that plays automatically has no audio that lasts more than 3 seconds",description:"audio or video that plays automatically does not output audio for more than 3 seconds.",results:{I1:"No test targets found.",P1:"The test target plays for 3 seconds or less.",W1:"Can't collect data from the test target element.",W2:"Check if test target has a visible control mechanism."}},"QW-ACT-R50":{name:"audio or video that plays automatically has a control mechanism",description:"audio or video that plays automatically must have a control mechanism.",results:{I1:"No test targets found.",P1:"The test target has a visible control mechanism.",W1:"Can't collect data from the test target element.",W2:"Check if test target has a visible control mechanism."}},"QW-ACT-R51":{name:"video element visual-only content is media alternative for text",description:"This rule checks non-streaming silent video is a media alternative for text on the page.",results:{I1:"No test targets found.",W1:"Can't collect data from the test target.",W2:"Check that the content in the video matches the information in the text."}},"QW-ACT-R52":{name:"video element visual-only content has description track",description:"This rule checks that description tracks that come with non-streaming video elements, without audio, are descriptive.",results:{I1:"No test targets found.",W1:"Can't collect data from the test target.",W2:"Check if visual content has an accessible alternative."}},"QW-ACT-R53":{name:"video element visual-only content has transcript",description:"Non-streaming video elements without audio must have all visual information available in a transcript.",results:{I1:"No test targets found.",W1:"Can't collect data from the test target.",W2:"Check if visual content has an accessible alternative."}},"QW-ACT-R54":{name:"video element visual-only content has audio track alternative",description:"Non-streaming video elements without audio must have an audio alternative.",results:{I1:"No test targets found.",W1:"Can't collect data from the test target.",W2:"Check if visual content has an accessible alternative."}},"QW-ACT-R55":{name:"video element visual content has audio description",description:"This rule checks that non-streaming video elements have all visual information also contained in the audio.",results:{I1:"No test targets found.",W1:"Can't collect data from the test target.",W2:"The test target has a sound track but we can't verify the volume. Check if the test target has audio and if it does check if visual content has an accessible alternative."}},"QW-ACT-R56":{name:"video element content is media alternative for text",description:"This rule checks non-streaming video is a media alternative for text on the page.",results:{I1:"No test targets found.",W1:"Can't collect data from the test target.",W2:"Check that the content in the video matches the information in the text."}},"QW-ACT-R57":{name:"video element visual content has description track",description:"This rule checks that description tracks that come with non-streaming video elements are descriptive.",results:{I1:"No test targets found.",W1:"Can't collect data from the test target.",W2:"The test target has a sound track but we can't verify the volume. Check if the test target has audio and if it does check if visual content has an accessible alternative."}},"QW-ACT-R58":{name:"audio element content has transcript",description:"Non-streaming audio elements must have a text alternative for all included auditory information.",results:{I1:"No test targets found.",W1:"Check if the test target audio has text-alternative."}},"QW-ACT-R59":{name:"audio element content is media alternative for text",description:"This rule checks audio is a media alternative for text on the page.",results:{I1:"No test targets found.",W1:"Check that the content in the audio matches the information in the text."}},"QW-ACT-R60":{name:"video element auditory content has captions",description:"This rule checks that captions are available for audio information in non-streaming video elements.",results:{I1:"No test targets found.",W1:"Can't collect data from the test target.",W2:"The test target has a sound track but we can't verify the volume. Check if the test target has audio and if it does check if audio content has matching captions."}},"QW-ACT-R61":{name:"Audio and visuals of video element have transcript",description:"This rule checks that non-streaming video elements have all audio and visual information available in a transcript.",results:{I1:"No test targets found.",W1:"Can't collect data from the test target.",W2:"The test target has a sound track but we can't verify the volume. Check if the test target has audio and a transcript. If it does check if the transcript contains all the visual and audio information of the video."}},"QW-ACT-R62":{name:"Element in sequential focus order has visible focus",description:"This rule checks that each element in sequential focus order has some visible focus indication.",results:{I1:"No test targets found.",W1:"Check if the element has some visible focus indication"}},"QW-ACT-R63":{name:"Document has a landmark with non-repeated content",description:"This rule checks that each page has an element with a landmark semantic role starting with non-repeated content",results:{I1:"No test targets found.",P1:"The page doesn't have repeated content.",W1:"Check either there is no non-repeated content after repeated content or there exists an element for which all the following are true: - the element has semantic role inheriting from landmark; and - the first perceivable content (in tree order in the flat tree) which is an inclusive descendant of the element is non-repeated content after repeated content; and - the element is included in the accessibility tree."}},"QW-ACT-R64":{name:"Document has heading for non-repeated content",description:"This rule checks that the non-repeated content contains a heading",results:{I1:"No test targets found.",P1:"The page doesn't have repeated content.",W1:"Check either there is no non-repeated content after repeated content or there exists an element for which all the following are true: - the element is non-repeated content after repeated content; and - the element has a semantic role of heading; and - the element is visible; and - the element is included in the accessibility tree."}},"QW-ACT-R65":{name:"Element with presentational children has no focusable content",description:"This rule checks that elements with a role that makes its children presentational do not contain focusable elements.",results:{I1:"No test targets found.",P1:"The element doesn't have descendants in the flat tree that are part of sequential focus navigation.",F1:"The element has descendants in the flat tree that are part of sequential focus navigation."}},"QW-ACT-R66":{name:"Menuitem has non-empty accessible name",description:"This rule checks that each element with a menuitem role has a non-empty accessible name.",results:{I1:"No test targets found.",P1:"The test target has a non-empty accessible name.",F1:"The test target accessible name doesn't exist or it's empty ('')."}},"QW-ACT-R67":{name:"Letter spacing in style attributes is not !important",description:"This rule checks that the style attribute is not used to prevent adjusting letter-spacing by using !important, except if it's at least 0.12 times the font size.",results:{I1:"No test targets found.",P1:"The letter-spacing property is not !important.",P2:"The letter-spacing is at least 0.12 times the font-size.",P3:"The cascaded letter-spacing is not the declared value.",F1:"CSS styles prevent the letter-spacing to be above the minimum value."}},"QW-ACT-R68":{name:"Line height in style attributes is not !important",description:"This rule checks that the style attribute is not used to prevent adjusting line-height by using !important, except if it's at least 1.5 times the font size.",results:{I1:"No test targets found.",P1:"The line-height property is not !important.",P2:"The line-height is at least 1.5 times the font-size.",P3:"The cascaded line-height is not the declared value.",F1:"CSS styles prevent the line-height to be above the minimum value."}},"QW-ACT-R69":{name:"Word spacing in style attributes is not !important",description:"This rule checks that the style attribute is not used to prevent adjusting word-spacing by using !important, except if it's at least 0.16 times the font size.",results:{I1:"No test targets found.",P1:"The word-spacing property is not !important.",P2:"The word-spacing is at least 0.16 times the font-size.",P3:"The cascaded word-spacing is not the declared value.",F1:"CSS styles prevent the word-spacing to be above the minimum value."}},"QW-ACT-R70":{name:"iframe with negative tabindex has no interactive elements",description:"This rule checks that `iframe` elements with a negative `tabindex` attribute value contain no interactive elements.",results:{I1:"No test targets found.",P1:"The nested browsing context does not include elements that are visible and part of the sequential focus navigation.",F1:"The nested browsing context includes elements that are visible and part of the sequential focus navigation."}},"QW-ACT-R71":{name:"`meta` element has no refresh delay (no exception)",description:"This rule checks that the `meta` element is not used for delayed redirecting or refreshing.",results:{I1:"No test targets found.",P1:"The test target refreshes/redirects immediately.",F1:"The test target refreshes after {seconds} seconds.",F2:"The test target redirects after {seconds} seconds."}},"QW-ACT-R72":{name:"First focusable element is link to non-repeated content",description:"This rule checks that the first focusable element is a link to non-repeated content in the page",results:{I1:"No test targets found.",W1:"Check that the first focusable element has an accessible name that communicates that it skips content",W2:"Check that the first focusable element skips to the main content and its accessible name communicates so.",F1:"The first focusable element is not keyboard actionable.",F2:"The first focusable element is not in the accessibility tree.",F3:"The first focusable element does not have the role of link.",F4:"The first focusable element does not skip to the main content.",F5:"The page does not have focusable elements."}},"QW-ACT-R73":{name:"Block of repeated content is collapsible",description:"This rule checks that repeated blocks of content are collapsible.",results:{I1:"No test targets found.",P1:"The page doesn't have repeated content.",W1:"For each block of repeated content in each test target, which is before (in the flat tree) at least one node of non-repeated content after repeated content, check that all the following are true: - there exists an instrument to make all nodes in this block not visible; and - there exists an instrument to remove all nodes in this block from the accessibility tree."}},"QW-ACT-R74":{name:"Document has an instrument to move focus to non-repeated content",description:"This rule checks that there is an instrument to move focus to non-repeated content in the page.",results:{I1:"No test targets found.",P1:"The page doesn't have repeated content.",W1:"The page has one or more instrument(s) to move focus. Check if any of these instrument(s) is being used before a block of repeated content, and the focus is moved to just before a block of non-repeated content.",W2:"Check if the page has any instrument(s) to move focus. Check if any of these instrument(s) is being used before a block of repeated content, and the focus is moved to just before a block of non-repeated content."}},"QW-ACT-R75":{name:"Bypass Blocks of Repeated Content",description:"This rule checks that each page has a mechanism to bypass repeated blocks of content.",results:{I1:"No test targets found.",P1:"The rule passed because of the rule ",W1:"The rule can't tell because of the rule ",F1:"The rule failed because of the rule "}},"QW-ACT-R76":{name:"Text has enhanced contrast",description:"This rule checks that the highest possible contrast of every text character with its background meets the enhanced contrast requirement.",results:{I1:"No test targets found.",P1:"Element has contrast ratio higher than minimum.",P2:"Element doesn't have human language text.",P3:"Element has gradient with contrast ratio higher than minimum.",W1:"Element has text-shadow that needs manual verification.",W2:"Element has an image on background.",W3:"Element has an gradient that we can't verify.",F1:"Element has contrast ratio lower than minimum.",F2:"Element has gradient with contrast ratio lower than minimum."}},"QW-ACT-R77":{name:"ARIA required ID references exist",description:"This rule checks that every ID reference required by WAI-ARIA exists.",results:{I1:"No test targets found.",P1:"Referenced element exists.",F1:"Referenced element does not exist."}}},"wcag-techniques":{"QW-WCAG-T1":{name:"Providing text alternatives for the area elements of image maps",description:"This technique checks the text alternative of area elements of images maps",results:{I1:"No test targets found.",W1:"Please verify that the `alt` attribute describes correctly the corresponding area of the image.",F1:"The `alt` attribute doesn't exist or is empty ('')."}},"QW-WCAG-T2":{name:"Using caption elements to associate data table captions with data tables",description:"This technique checks the caption element is correctly use on tables",results:{I1:"No test targets found.",W1:"Please verify that the `caption` element identifies the table correctly.",F1:"The `caption` element d