monaco-html-linter-plugin
Version:
Simple HTML Linter for the Monaco Editor.
1 lines • 105 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});function L(r){if(r.__esModule)return r;var a=r.default;if(typeof a=="function"){var e=function i(){return this instanceof i?Reflect.construct(a,arguments,this.constructor):a.apply(this,arguments)};e.prototype=a.prototype}else e={};return Object.defineProperty(e,"__esModule",{value:!0}),Object.keys(r).forEach(function(i){var t=Object.getOwnPropertyDescriptor(r,i);Object.defineProperty(e,i,t.get?t:{enumerable:!0,get:function(){return r[i]}})}),e}var he={},T={};Object.defineProperty(T,"__esModule",{value:!0});class Le{constructor(){this._listeners={},this._mapCdataTags=this.makeMap("script,style"),this._arrBlocks=[],this.lastEvent=null}makeMap(a){const e={},i=a.split(",");for(let t=0;t<i.length;t++)e[i[t]]=!0;return e}parse(a){const e=this._mapCdataTags,i=/<(?:\/([^\s>]+)\s*|!--([\s\S]*?)--|!([^>]*?)|([\w\-:]+)((?:\s+[^\s"'>\/=\x00-\x0F\x7F\x80-\x9F]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s"'>]*))?)*?)\s*(\/?))>/g,t=/\s*([^\s"'>\/=\x00-\x0F\x7F\x80-\x9F]+)(?:\s*=\s*(?:(")([^"]*)"|(')([^']*)'|([^\s"'>]*)))?/g,n=/\r?\n/g;let o,l,s=0,c,d,f=null,u,p=[],b=0,h,k=0,m=1;const _=this._arrBlocks;this.fire("start",{pos:0,line:1,col:1});const x=()=>{const v=d.find(g=>g.name==="type")||{value:""};return e[c]&&v.value.indexOf("text/ng-template")===-1},y=(v,g,q,w)=>{const j=q-k+1;for(w===void 0&&(w={}),w.raw=g,w.pos=q,w.line=m,w.col=j,_.push(w),this.fire(v,w);n.exec(g);)m++,k=q+n.lastIndex};for(;o=i.exec(a);){if(l=o.index,l>s&&(h=a.substring(s,l),f?p.push(h):y("text",h,s)),s=i.lastIndex,(c=o[1])&&(f&&c===f&&(h=p.join(""),y("cdata",h,b,{tagName:f,attrs:u}),f=null,u=void 0,p=[]),!f)){y("tagend",o[0],l,{tagName:c});continue}if(f)p.push(o[0]);else if(c=o[4]){d=[];const v=o[5];let g,q=0;for(;g=t.exec(v);){const w=g[1],j=g[2]?g[2]:g[4]?g[4]:"",R=g[3]?g[3]:g[5]?g[5]:g[6]?g[6]:"";d.push({name:w,value:R,quote:j,index:g.index,raw:g[0]}),q+=g[0].length}q===v.length?(y("tagstart",o[0],l,{tagName:c,attrs:d,close:o[6]}),x()&&(f=c,u=d.concat(),p=[],b=s)):y("text",o[0],l)}else(o[2]||o[3])&&y("comment",o[0],l,{content:o[2]||o[3],long:!!o[2]})}a.length>s&&(h=a.substring(s,a.length),y("text",h,s)),this.fire("end",{pos:s,line:m,col:a.length-k+1})}addListener(a,e){const i=this._listeners,t=a.split(/[,\s]/);let n;for(let o=0,l=t.length;o<l;o++)n=t[o],i[n]===void 0&&(i[n]=[]),i[n].push(e)}fire(a,e){e===void 0&&(e={}),e.type=a;let i=[];const t=this._listeners[a],n=this._listeners.all;t!==void 0&&(i=i.concat(t)),n!==void 0&&(i=i.concat(n));const o=this.lastEvent;o!==null&&(delete o.lastEvent,e.lastEvent=o),this.lastEvent=e;for(let l=0,s=i.length;l<s;l++)i[l].call(this,e)}removeListener(a,e){const i=this._listeners[a];if(i!==void 0){for(let t=0,n=i.length;t<n;t++)if(i[t]===e){i.splice(t,1);break}}}fixPos(a,e){const t=a.raw.substr(0,e).split(/\r?\n/),n=t.length-1;let o=a.line,l;return n>0?(o+=n,l=t[n].length+1):l=a.col+e,{line:o,col:l}}getMapAttrs(a){const e={};let i;for(let t=0,n=a.length;t<n;t++)i=a[t],e[i.name]=i.value;return e}}T.default=Le;var A={};Object.defineProperty(A,"__esModule",{value:!0});class Re{constructor(a,e){this.html=a,this.lines=a.split(/\r?\n/);const i=/\r?\n/.exec(a);this.brLen=i!==null?i[0].length:0,this.ruleset=e,this.messages=[]}info(a,e,i,t,n){this.report("info",a,e,i,t,n)}warn(a,e,i,t,n){this.report("warning",a,e,i,t,n)}error(a,e,i,t,n){this.report("error",a,e,i,t,n)}report(a,e,i,t,n,o){const l=this.lines,s=this.brLen;let c="",d=0;for(let f=i-1,u=l.length;f<u&&(c=l[f],d=c.length,t>d&&i<u);f++)i++,t-=d,t!==1&&(t-=s);this.messages.push({type:a,message:e,raw:o,evidence:c,line:i,col:t,rule:{id:n.id,description:n.description,link:`https://htmlhint.com/docs/user-guide/rules/${n.id}`}})}}A.default=Re;var me={},M={};Object.defineProperty(M,"__esModule",{value:!0});M.default={id:"alt-require",description:"The alt attribute of an <img> element must be present and alt attribute of area[href] and input[type=image] must have a value.",init(r,a){r.addListener("tagstart",e=>{const i=e.tagName.toLowerCase(),t=r.getMapAttrs(e.attrs),n=e.col+i.length+1;let o;i==="img"&&!("alt"in t)?a.warn("An alt attribute must be present on <img> elements.",e.line,n,this,e.raw):(i==="area"&&"href"in t||i==="input"&&t.type==="image")&&(!("alt"in t)||t.alt==="")&&(o=i==="area"?"area[href]":"input[type=image]",a.warn(`The alt attribute of ${o} must have a value.`,e.line,n,this,e.raw))})}};var C={};Object.defineProperty(C,"__esModule",{value:!0});const Te=["allowReorder","attributeName","attributeType","autoReverse","baseFrequency","baseProfile","calcMode","clipPath","clipPathUnits","contentScriptType","contentStyleType","diffuseConstant","edgeMode","externalResourcesRequired","filterRes","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","onBlur","onChange","onClick","onFocus","onKeyUp","onLoad","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"];function Ae(r,a){if(a instanceof RegExp)return a.test(r)?{match:r,pattern:a}:!1;const e=a[0],i=a[a.length-1],t=a[a.length-2],n=e==="/"&&(i==="/"||t==="/"&&i==="i"),o=n&&i==="i";return n?o?new RegExp(a.slice(1,-2),"i").test(r):new RegExp(a.slice(1,-1)).test(r):r===a}C.default={id:"attr-lowercase",description:"All attribute names must be in lowercase.",init(r,a,e){const i=(Array.isArray(e)?e:[]).concat(Te);r.addListener("tagstart",t=>{const n=t.attrs;let o;const l=t.col+t.tagName.length+1;for(let s=0,c=n.length;s<c;s++){o=n[s];const d=o.name;!i.find(f=>Ae(d,f))&&d!==d.toLowerCase()&&a.error(`The attribute name of [ ${d} ] must be in lowercase.`,t.line,l+o.index,this,o.raw)}})}};var O={};Object.defineProperty(O,"__esModule",{value:!0});O.default={id:"attr-sorted",description:"Attribute tags must be in proper order.",init(r,a){const e={},i=["class","id","name","src","for","type","href","value","title","alt","role"];for(let t=0;t<i.length;t++)e[i[t]]=t;r.addListener("tagstart",t=>{const n=t.attrs,o=[];for(let s=0;s<n.length;s++)o.push(n[s].name);const l=JSON.stringify(o);o.sort((s,c)=>e[s]==null&&e[c]==null?0:e[s]==null?1:e[c]==null?-1:e[s]-e[c]||s.localeCompare(c)),l!==JSON.stringify(o)&&a.error(`Inaccurate order ${l} should be in hierarchy ${JSON.stringify(o)} `,t.line,t.col,this,t.raw)})}};var F={};Object.defineProperty(F,"__esModule",{value:!0});F.default={id:"attr-no-duplication",description:"Elements cannot have duplicate attributes.",init(r,a){r.addListener("tagstart",e=>{const i=e.attrs;let t,n;const o=e.col+e.tagName.length+1,l={};for(let s=0,c=i.length;s<c;s++)t=i[s],n=t.name,l[n]===!0&&a.error(`Duplicate of attribute name [ ${t.name} ] was found.`,e.line,o+t.index,this,t.raw),l[n]=!0})}};var P={};Object.defineProperty(P,"__esModule",{value:!0});P.default={id:"attr-unsafe-chars",description:"Attribute values cannot contain unsafe chars.",init(r,a){r.addListener("tagstart",e=>{const i=e.attrs;let t;const n=e.col+e.tagName.length+1,o=/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/;let l;for(let s=0,c=i.length;s<c;s++)if(t=i[s],l=o.exec(t.value),l!==null){const d=escape(l[0]).replace(/%u/,"\\u").replace(/%/,"\\x");a.warn(`The value of attribute [ ${t.name} ] cannot contain an unsafe char [ ${d} ].`,e.line,n+t.index,this,t.raw)}})}};var E={};Object.defineProperty(E,"__esModule",{value:!0});E.default={id:"attr-value-double-quotes",description:"Attribute values must be in double quotes.",init(r,a){r.addListener("tagstart",e=>{const i=e.attrs;let t;const n=e.col+e.tagName.length+1;for(let o=0,l=i.length;o<l;o++)t=i[o],(t.value!==""&&t.quote!=='"'||t.value===""&&t.quote==="'")&&a.error(`The value of attribute [ ${t.name} ] must be in double quotes.`,e.line,n+t.index,this,t.raw)})}};var $={};Object.defineProperty($,"__esModule",{value:!0});$.default={id:"attr-value-not-empty",description:"All attributes must have values.",init(r,a){r.addListener("tagstart",e=>{const i=e.attrs;let t;const n=e.col+e.tagName.length+1;for(let o=0,l=i.length;o<l;o++)t=i[o],t.quote===""&&t.value===""&&a.warn(`The attribute [ ${t.name} ] must have a value.`,e.line,n+t.index,this,t.raw)})}};var N={};Object.defineProperty(N,"__esModule",{value:!0});N.default={id:"attr-value-single-quotes",description:"Attribute values must be in single quotes.",init(r,a){r.addListener("tagstart",e=>{const i=e.attrs;let t;const n=e.col+e.tagName.length+1;for(let o=0,l=i.length;o<l;o++)t=i[o],(t.value!==""&&t.quote!=="'"||t.value===""&&t.quote==='"')&&a.error(`The value of attribute [ ${t.name} ] must be in single quotes.`,e.line,n+t.index,this,t.raw)})}};var S={};Object.defineProperty(S,"__esModule",{value:!0});S.default={id:"attr-whitespace",description:"All attributes should be separated by only one space and not have leading/trailing whitespace.",init(r,a,e){const i=Array.isArray(e)?e:[];r.addListener("tagstart",t=>{const n=t.attrs;let o;const l=t.col+t.tagName.length+1;n.forEach(s=>{o=s;const c=s.name;i.indexOf(c)===-1&&(s.value.trim()!==s.value&&a.error(`The attributes of [ ${c} ] must not have leading or trailing whitespace.`,t.line,l+o.index,this,o.raw),s.value.replace(/ +(?= )/g,"")!==s.value&&a.error(`The attributes of [ ${c} ] must be separated by only one space.`,t.line,l+o.index,this,o.raw))})})}};var D={};Object.defineProperty(D,"__esModule",{value:!0});D.default={id:"doctype-first",description:"Doctype must be declared first.",init(r,a){const e=i=>{i.type==="start"||i.type==="text"&&/^\s*$/.test(i.raw)||((i.type!=="comment"&&i.long===!1||/^DOCTYPE\s+/i.test(i.content)===!1)&&a.error("Doctype must be declared first.",i.line,i.col,this,i.raw),r.removeListener("all",e))};r.addListener("all",e)}};var H={};Object.defineProperty(H,"__esModule",{value:!0});H.default={id:"doctype-html5",description:'Invalid doctype. Use: "<!DOCTYPE html>"',init(r,a){const e=t=>{t.long===!1&&t.content.toLowerCase()!=="doctype html"&&a.warn('Invalid doctype. Use: "<!DOCTYPE html>"',t.line,t.col,this,t.raw)},i=()=>{r.removeListener("comment",e),r.removeListener("tagstart",i)};r.addListener("all",e),r.addListener("tagstart",i)}};var I={};Object.defineProperty(I,"__esModule",{value:!0});I.default={id:"head-script-disabled",description:"The <script> tag cannot be used in a <head> tag.",init(r,a){const e=/^(text\/javascript|application\/javascript)$/i;let i=!1;const t=o=>{const s=r.getMapAttrs(o.attrs).type,c=o.tagName.toLowerCase();c==="head"&&(i=!0),i===!0&&c==="script"&&(!s||e.test(s)===!0)&&a.warn("The <script> tag cannot be used in a <head> tag.",o.line,o.col,this,o.raw)},n=o=>{o.tagName.toLowerCase()==="head"&&(r.removeListener("tagstart",t),r.removeListener("tagend",n))};r.addListener("tagstart",t),r.addListener("tagend",n)}};var U={};Object.defineProperty(U,"__esModule",{value:!0});U.default={id:"href-abs-or-rel",description:"An href attribute must be either absolute or relative.",init(r,a,e){const i=e==="abs"?"absolute":"relative";r.addListener("tagstart",t=>{const n=t.attrs;let o;const l=t.col+t.tagName.length+1;for(let s=0,c=n.length;s<c;s++)if(o=n[s],o.name==="href"){(i==="absolute"&&/^\w+?:/.test(o.value)===!1||i==="relative"&&/^https?:\/\//.test(o.value)===!0)&&a.warn(`The value of the href attribute [ ${o.value} ] must be ${i}.`,t.line,l+o.index,this,o.raw);break}})}};var B={};Object.defineProperty(B,"__esModule",{value:!0});const Me="(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)",Ce="(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)",Oe=`(?<grandfathered>${Ce}|${Me})`,Fe="(?<privateUse>x(-[A-Za-z0-9]{1,8})+)",Pe="(?<privateUse2>x(-[A-Za-z0-9]{1,8})+)",Ee="[0-9A-WY-Za-wy-z]",$e=`(?<extension>${Ee}(-[A-Za-z0-9]{2,8})+)`,Ne="(?<variant>[A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3})",Se="(?<region>[A-Za-z]{2}|[0-9]{3})",De="(?<script>[A-Za-z]{4})",He="(?<extlang>[A-Za-z]{3}(-[A-Za-z]{3}){0,2})",Ie=`(?<language>([A-Za-z]{2,3}(-${He})?)|[A-Za-z]{4}|[A-Za-z]{5,8})`,Ue=`(${Ie}(-${De})?(-${Se})?(-${Ne})*(-${$e})*(-${Fe})?)`,Be=`(${Oe}|${Ue}|${Pe})`;B.default={id:"html-lang-require",description:"The lang attribute of an <html> element must be present and should be valid.",init(r,a){r.addListener("tagstart",e=>{const i=e.tagName.toLowerCase(),t=r.getMapAttrs(e.attrs),n=e.col+i.length+1,o=new RegExp(Be,"g");i==="html"&&("lang"in t?t.lang?o.test(t.lang)||a.warn("The lang attribute value of <html> element must be a valid BCP47.",e.line,n,this,e.raw):a.warn("The lang attribute of <html> element must have a value.",e.line,n,this,e.raw):a.warn("An lang attribute must be present on <html> elements.",e.line,n,this,e.raw))})}};var V={};Object.defineProperty(V,"__esModule",{value:!0});V.default={id:"id-class-ad-disabled",description:"The id and class attributes cannot use the ad keyword, it will be blocked by adblock software.",init(r,a){r.addListener("tagstart",e=>{const i=e.attrs;let t,n;const o=e.col+e.tagName.length+1;for(let l=0,s=i.length;l<s;l++)t=i[l],n=t.name,/^(id|class)$/i.test(n)&&/(^|[-_])ad([-_]|$)/i.test(t.value)&&a.warn(`The value of attribute ${n} cannot use the ad keyword.`,e.line,o+t.index,this,t.raw)})}};var G={};Object.defineProperty(G,"__esModule",{value:!0});G.default={id:"id-class-value",description:"The id and class attribute values must meet the specified rules.",init(r,a,e){const i={underline:{regId:/^[a-z\d]+(_[a-z\d]+)*$/,message:"The id and class attribute values must be in lowercase and split by an underscore."},dash:{regId:/^[a-z\d]+(-[a-z\d]+)*$/,message:"The id and class attribute values must be in lowercase and split by a dash."},hump:{regId:/^[a-z][a-zA-Z\d]*([A-Z][a-zA-Z\d]*)*$/,message:"The id and class attribute values must meet the camelCase style."}};let t;if(typeof e=="string"?t=i[e]:t=e,typeof t=="object"&&t.regId){let n=t.regId;const o=t.message;n instanceof RegExp||(n=new RegExp(n)),r.addListener("tagstart",l=>{const s=l.attrs;let c;const d=l.col+l.tagName.length+1;for(let f=0,u=s.length;f<u;f++)if(c=s[f],c.name.toLowerCase()==="id"&&n.test(c.value)===!1&&a.warn(o,l.line,d+c.index,this,c.raw),c.name.toLowerCase()==="class"){const p=c.value.split(/\s+/g);let b;for(let h=0,k=p.length;h<k;h++)b=p[h],b&&n.test(b)===!1&&a.warn(o,l.line,d+c.index,this,b)}})}}};var Z={};Object.defineProperty(Z,"__esModule",{value:!0});Z.default={id:"id-unique",description:"The value of id attributes must be unique.",init(r,a){const e={};r.addListener("tagstart",i=>{const t=i.attrs;let n,o;const l=i.col+i.tagName.length+1;for(let s=0,c=t.length;s<c;s++)if(n=t[s],n.name.toLowerCase()==="id"){o=n.value,o&&(e[o]===void 0?e[o]=1:e[o]++,e[o]>1&&a.error(`The id value [ ${o} ] must be unique.`,i.line,l+n.index,this,n.raw));break}})}};var W={};Object.defineProperty(W,"__esModule",{value:!0});W.default={id:"inline-script-disabled",description:"Inline script cannot be used.",init(r,a){r.addListener("tagstart",e=>{const i=e.attrs;let t;const n=e.col+e.tagName.length+1;let o;const l=/^on(unload|message|submit|select|scroll|resize|mouseover|mouseout|mousemove|mouseleave|mouseenter|mousedown|load|keyup|keypress|keydown|focus|dblclick|click|change|blur|error)$/i;for(let s=0,c=i.length;s<c;s++)t=i[s],o=t.name.toLowerCase(),l.test(o)===!0?a.warn(`Inline script [ ${t.raw} ] cannot be used.`,e.line,n+t.index,this,t.raw):(o==="src"||o==="href")&&/^\s*javascript:/i.test(t.value)&&a.warn(`Inline script [ ${t.raw} ] cannot be used.`,e.line,n+t.index,this,t.raw)})}};var Y={};Object.defineProperty(Y,"__esModule",{value:!0});Y.default={id:"inline-style-disabled",description:"Inline style cannot be used.",init(r,a){r.addListener("tagstart",e=>{const i=e.attrs;let t;const n=e.col+e.tagName.length+1;for(let o=0,l=i.length;o<l;o++)t=i[o],t.name.toLowerCase()==="style"&&a.warn(`Inline style [ ${t.raw} ] cannot be used.`,e.line,n+t.index,this,t.raw)})}};var X={};Object.defineProperty(X,"__esModule",{value:!0});X.default={id:"input-requires-label",description:"All [ input ] tags must have a corresponding [ label ] tag. ",init(r,a){const e=[],i=[];r.addListener("tagstart",n=>{const o=n.tagName.toLowerCase(),l=r.getMapAttrs(n.attrs),s=n.col+o.length+1;o==="input"&&l.type!=="hidden"&&i.push({event:n,col:s,id:l.id}),o==="label"&&"for"in l&&l.for!==""&&e.push({event:n,col:s,forValue:l.for})}),r.addListener("end",()=>{i.forEach(n=>{t(n)||a.warn("No matching [ label ] tag found.",n.event.line,n.col,this,n.event.raw)})});function t(n){let o=!1;return e.forEach(l=>{n.id&&n.id===l.forValue&&(o=!0)}),o}}};var Q={};Object.defineProperty(Q,"__esModule",{value:!0});Q.default={id:"script-disabled",description:"The <script> tag cannot be used.",init(r,a){r.addListener("tagstart",e=>{e.tagName.toLowerCase()==="script"&&a.error("The <script> tag cannot be used.",e.line,e.col,this,e.raw)})}};var J={};Object.defineProperty(J,"__esModule",{value:!0});J.default={id:"space-tab-mixed-disabled",description:"Do not mix tabs and spaces for indentation.",init(r,a,e){let i="nomix",t=null;if(typeof e=="string"){const n=/^([a-z]+)(\d+)?/.exec(e);n&&(i=n[1],t=n[2]&&parseInt(n[2],10))}r.addListener("text",n=>{const o=n.raw,l=/(^|\r?\n)([ \t]+)/g;let s;for(;s=l.exec(o);){const c=r.fixPos(n,s.index+s[1].length);if(c.col!==1)continue;const d=s[2];i==="space"?t?(/^ +$/.test(d)===!1||d.length%t!==0)&&a.warn(`Please use space for indentation and keep ${t} length.`,c.line,1,this,n.raw):/^ +$/.test(d)===!1&&a.warn("Please use space for indentation.",c.line,1,this,n.raw):i==="tab"&&/^\t+$/.test(d)===!1?a.warn("Please use tab for indentation.",c.line,1,this,n.raw):/ +\t|\t+ /.test(d)===!0&&a.warn("Do not mix tabs and spaces for indentation.",c.line,1,this,n.raw)}})}};var K={};Object.defineProperty(K,"__esModule",{value:!0});K.default={id:"spec-char-escape",description:"Special characters must be escaped.",init(r,a){r.addListener("text",e=>{const i=e.raw,t=/([<>])|( \& )/g;let n;for(;n=t.exec(i);){const o=r.fixPos(e,n.index);a.error(`Special characters must be escaped : [ ${n[0]} ].`,o.line,o.col,this,e.raw)}})}};var ee={};Object.defineProperty(ee,"__esModule",{value:!0});ee.default={id:"src-not-empty",description:"The src attribute of an img(script,link) must have a value.",init(r,a){r.addListener("tagstart",e=>{const i=e.tagName,t=e.attrs;let n;const o=e.col+i.length+1;for(let l=0,s=t.length;l<s;l++)n=t[l],(/^(img|script|embed|bgsound|iframe)$/.test(i)===!0&&n.name==="src"||i==="link"&&n.name==="href"||i==="object"&&n.name==="data")&&n.value===""&&a.error(`The attribute [ ${n.name} ] of the tag [ ${i} ] must have a value.`,e.line,o+n.index,this,n.raw)})}};var te={};Object.defineProperty(te,"__esModule",{value:!0});te.default={id:"style-disabled",description:"<style> tags cannot be used.",init(r,a){r.addListener("tagstart",e=>{e.tagName.toLowerCase()==="style"&&a.warn("The <style> tag cannot be used.",e.line,e.col,this,e.raw)})}};var ie={};Object.defineProperty(ie,"__esModule",{value:!0});ie.default={id:"tag-pair",description:"Tag must be paired.",init(r,a){const e=[],i=r.makeMap("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,track,command,source,keygen,wbr");r.addListener("tagstart",t=>{const n=t.tagName.toLowerCase();i[n]===void 0&&!t.close&&e.push({tagName:n,line:t.line,raw:t.raw})}),r.addListener("tagend",t=>{const n=t.tagName.toLowerCase();let o;for(o=e.length-1;o>=0&&e[o].tagName!==n;o--);if(o>=0){const l=[];for(let s=e.length-1;s>o;s--)l.push(`</${e[s].tagName}>`);if(l.length>0){const s=e[e.length-1];a.error(`Tag must be paired, missing: [ ${l.join("")} ], start tag match failed [ ${s.raw} ] on line ${s.line}.`,t.line,t.col,this,t.raw)}e.length=o}else a.error(`Tag must be paired, no start tag: [ ${t.raw} ]`,t.line,t.col,this,t.raw)}),r.addListener("end",t=>{const n=[];for(let o=e.length-1;o>=0;o--)n.push(`</${e[o].tagName}>`);if(n.length>0){const o=e[e.length-1];a.error(`Tag must be paired, missing: [ ${n.join("")} ], open tag match failed [ ${o.raw} ] on line ${o.line}.`,t.line,t.col,this,"")}})}};var re={};Object.defineProperty(re,"__esModule",{value:!0});re.default={id:"tag-self-close",description:"Empty tags must be self closed.",init(r,a){const e=r.makeMap("area,base,basefont,bgsound,br,col,frame,hr,img,input,isindex,link,meta,param,embed,track,command,source,keygen,wbr");r.addListener("tagstart",i=>{const t=i.tagName.toLowerCase();e[t]!==void 0&&(i.close||a.warn(`The empty tag : [ ${t} ] must be self closed.`,i.line,i.col,this,i.raw))})}};var oe={};Object.defineProperty(oe,"__esModule",{value:!0});oe.default={id:"empty-tag-not-self-closed",description:"Empty tags must not use self closed syntax.",init(r,a){const e=r.makeMap("area,base,basefont,bgsound,br,col,frame,hr,img,input,isindex,link,meta,param,embed,track,command,source,keygen,wbr");r.addListener("tagstart",i=>{const t=i.tagName.toLowerCase();e[t]!==void 0&&i.close&&a.error(`The empty tag : [ ${t} ] must not use self closed syntax.`,i.line,i.col,this,i.raw)})}};var ne={};Object.defineProperty(ne,"__esModule",{value:!0});ne.default={id:"tagname-lowercase",description:"All html element names must be in lowercase.",init(r,a,e){const i=Array.isArray(e)?e:[];r.addListener("tagstart,tagend",t=>{const n=t.tagName;i.indexOf(n)===-1&&n!==n.toLowerCase()&&a.error(`The html element name of [ ${n} ] must be in lowercase.`,t.line,t.col,this,t.raw)})}};var ae={};Object.defineProperty(ae,"__esModule",{value:!0});ae.default={id:"tagname-specialchars",description:"All special characters must be escaped.",init(r,a){const e=/[^a-zA-Z0-9\-:_]/;r.addListener("tagstart,tagend",i=>{const t=i.tagName;e.test(t)&&a.error(`The html element name of [ ${t} ] contains special character.`,i.line,i.col,this,i.raw)})}};var le={};Object.defineProperty(le,"__esModule",{value:!0});le.default={id:"title-require",description:"<title> must be present in <head> tag.",init(r,a){let e=!1,i=!1;const t=o=>{const l=o.tagName.toLowerCase();l==="head"?e=!0:l==="title"&&e&&(i=!0)},n=o=>{const l=o.tagName.toLowerCase();if(i&&l==="title"){const s=o.lastEvent;(s.type!=="text"||s.type==="text"&&/^\s*$/.test(s.raw)===!0)&&a.error("<title></title> must not be empty.",o.line,o.col,this,o.raw)}else l==="head"&&(i===!1&&a.error("<title> must be present in <head> tag.",o.line,o.col,this,o.raw),r.removeListener("tagstart",t),r.removeListener("tagend",n))};r.addListener("tagstart",t),r.addListener("tagend",n)}};var se={};Object.defineProperty(se,"__esModule",{value:!0});let z={a:{selfclosing:!1,attrsRequired:["href","title"],redundantAttrs:["alt"]},div:{selfclosing:!1},main:{selfclosing:!1,redundantAttrs:["role"]},nav:{selfclosing:!1,redundantAttrs:["role"]},script:{attrsOptional:[["async","async"],["defer","defer"]]},img:{selfclosing:!0,attrsRequired:["src","alt","title"]}};se.default={id:"tags-check",description:"Checks html tags.",init(r,a,e){z=Object.assign(Object.assign({},z),e),r.addListener("tagstart",i=>{const t=i.attrs,n=i.col+i.tagName.length+1,o=i.tagName.toLowerCase();if(z[o]){const l=z[o];l.selfclosing===!0&&!i.close?a.warn(`The <${o}> tag must be selfclosing.`,i.line,i.col,this,i.raw):l.selfclosing===!1&&i.close&&a.warn(`The <${o}> tag must not be selfclosing.`,i.line,i.col,this,i.raw),Array.isArray(l.attrsRequired)&&l.attrsRequired.forEach(c=>{if(Array.isArray(c)){const d=c.map(p=>p),f=d.shift(),u=d;t.some(p=>p.name===f)?t.forEach(p=>{p.name===f&&u.indexOf(p.value)===-1&&a.error(`The <${o}> tag must have attr '${f}' with one value of '${u.join("' or '")}'.`,i.line,n,this,i.raw)}):a.error(`The <${o}> tag must have attr '${f}'.`,i.line,n,this,i.raw)}else t.some(d=>c.split("|").indexOf(d.name)!==-1)||a.error(`The <${o}> tag must have attr '${c}'.`,i.line,n,this,i.raw)}),Array.isArray(l.attrsOptional)&&l.attrsOptional.forEach(c=>{if(Array.isArray(c)){const d=c.map(p=>p),f=d.shift(),u=d;t.some(p=>p.name===f)&&t.forEach(p=>{p.name===f&&u.indexOf(p.value)===-1&&a.error(`The <${o}> tag must have optional attr '${f}' with one value of '${u.join("' or '")}'.`,i.line,n,this,i.raw)})}}),Array.isArray(l.redundantAttrs)&&l.redundantAttrs.forEach(c=>{t.some(d=>d.name===c)&&a.error(`The attr '${c}' is redundant for <${o}> and should be omitted.`,i.line,n,this,i.raw)})}})}};var ce={};Object.defineProperty(ce,"__esModule",{value:!0});ce.default={id:"attr-no-unnecessary-whitespace",description:"No spaces between attribute names and values.",init(r,a,e){const i=Array.isArray(e)?e:[];r.addListener("tagstart",t=>{const n=t.attrs,o=t.col+t.tagName.length+1;for(let l=0;l<n.length;l++)if(i.indexOf(n[l].name)===-1){const s=/(\s*)=(\s*)/.exec(n[l].raw.trim());s&&(s[1].length!==0||s[2].length!==0)&&a.error(`The attribute '${n[l].name}' must not have spaces between the name and value.`,t.line,o+n[l].index,this,n[l].raw)}})}};var de={};const Ve={"*":["accesskey","autocapitalize","autofocus","class","contenteditable","dir","draggable","enterkeyhint","hidden","id","inert","inputmode","is","itemid","itemprop","itemref","itemscope","itemtype","lang","nonce","popover","slot","spellcheck","style","tabindex","title","translate"],a:["charset","coords","download","href","hreflang","name","ping","referrerpolicy","rel","rev","shape","target","type"],applet:["align","alt","archive","code","codebase","height","hspace","name","object","vspace","width"],area:["alt","coords","download","href","hreflang","nohref","ping","referrerpolicy","rel","shape","target","type"],audio:["autoplay","controls","crossorigin","loop","muted","preload","src"],base:["href","target"],basefont:["color","face","size"],blockquote:["cite"],body:["alink","background","bgcolor","link","text","vlink"],br:["clear"],button:["disabled","form","formaction","formenctype","formmethod","formnovalidate","formtarget","name","popovertarget","popovertargetaction","type","value"],canvas:["height","width"],caption:["align"],col:["align","char","charoff","span","valign","width"],colgroup:["align","char","charoff","span","valign","width"],data:["value"],del:["cite","datetime"],details:["open"],dialog:["open"],dir:["compact"],div:["align"],dl:["compact"],embed:["height","src","type","width"],fieldset:["disabled","form","name"],font:["color","face","size"],form:["accept","accept-charset","action","autocomplete","enctype","method","name","novalidate","target"],frame:["frameborder","longdesc","marginheight","marginwidth","name","noresize","scrolling","src"],frameset:["cols","rows"],h1:["align"],h2:["align"],h3:["align"],h4:["align"],h5:["align"],h6:["align"],head:["profile"],hr:["align","noshade","size","width"],html:["manifest","version"],iframe:["align","allow","allowfullscreen","allowpaymentrequest","allowusermedia","frameborder","height","loading","longdesc","marginheight","marginwidth","name","referrerpolicy","sandbox","scrolling","src","srcdoc","width"],img:["align","alt","border","crossorigin","decoding","fetchpriority","height","hspace","ismap","loading","longdesc","name","referrerpolicy","sizes","src","srcset","usemap","vspace","width"],input:["accept","align","alt","autocomplete","checked","dirname","disabled","form","formaction","formenctype","formmethod","formnovalidate","formtarget","height","ismap","list","max","maxlength","min","minlength","multiple","name","pattern","placeholder","popovertarget","popovertargetaction","readonly","required","size","src","step","type","usemap","value","width"],ins:["cite","datetime"],isindex:["prompt"],label:["for","form"],legend:["align"],li:["type","value"],link:["as","blocking","charset","color","crossorigin","disabled","fetchpriority","href","hreflang","imagesizes","imagesrcset","integrity","media","referrerpolicy","rel","rev","sizes","target","type"],map:["name"],menu:["compact"],meta:["charset","content","http-equiv","media","name","scheme"],meter:["high","low","max","min","optimum","value"],object:["align","archive","border","classid","codebase","codetype","data","declare","form","height","hspace","name","standby","type","typemustmatch","usemap","vspace","width"],ol:["compact","reversed","start","type"],optgroup:["disabled","label"],option:["disabled","label","selected","value"],output:["for","form","name"],p:["align"],param:["name","type","value","valuetype"],pre:["width"],progress:["max","value"],q:["cite"],script:["async","blocking","charset","crossorigin","defer","fetchpriority","integrity","language","nomodule","referrerpolicy","src","type"],select:["autocomplete","disabled","form","multiple","name","required","size"],slot:["name"],source:["height","media","sizes","src","srcset","type","width"],style:["blocking","media","type"],table:["align","bgcolor","border","cellpadding","cellspacing","frame","rules","summary","width"],tbody:["align","char","charoff","valign"],td:["abbr","align","axis","bgcolor","char","charoff","colspan","headers","height","nowrap","rowspan","scope","valign","width"],textarea:["autocomplete","cols","dirname","disabled","form","maxlength","minlength","name","placeholder","readonly","required","rows","wrap"],tfoot:["align","char","charoff","valign"],th:["abbr","align","axis","bgcolor","char","charoff","colspan","headers","height","nowrap","rowspan","scope","valign","width"],thead:["align","char","charoff","valign"],time:["datetime"],tr:["align","bgcolor","char","charoff","valign"],track:["default","kind","label","src","srclang"],ul:["compact","type"],video:["autoplay","controls","crossorigin","height","loop","muted","playsinline","poster","preload","src","width"]},Ge=Object.freeze(Object.defineProperty({__proto__:null,htmlElementAttributes:Ve},Symbol.toStringTag,{value:"Module"})),Ze=L(Ge),We=["onabort","onafterprint","onauxclick","onbeforematch","onbeforeprint","onbeforeunload","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextlost","oncontextmenu","oncontextrestored","oncopy","oncuechange","oncut","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","onformdata","onhashchange","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onlanguagechange","onload","onloadeddata","onloadedmetadata","onloadstart","onmessage","onmessageerror","onmousedown","onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onoffline","ononline","onpagehide","onpageshow","onpaste","onpause","onplay","onplaying","onpopstate","onprogress","onratechange","onrejectionhandled","onreset","onresize","onscroll","onscrollend","onsecuritypolicyviolation","onseeked","onseeking","onselect","onslotchange","onstalled","onstorage","onsubmit","onsuspend","ontimeupdate","ontoggle","onunhandledrejection","onunload","onvolumechange","onwaiting","onwheel"],Ye=Object.freeze(Object.defineProperty({__proto__:null,htmlEventAttributes:We},Symbol.toStringTag,{value:"Module"})),Xe=L(Ye),Qe={"*":["about","class","content","datatype","id","lang","property","rel","resource","rev","style","tabindex","typeof"],a:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","download","enable-background","externalResourcesRequired","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","focusHighlight","focusable","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","href","hreflang","image-rendering","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","nav-down","nav-down-left","nav-down-right","nav-left","nav-next","nav-prev","nav-right","nav-up","nav-up-left","nav-up-right","opacity","overflow","ping","pointer-events","referrerpolicy","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","systemLanguage","target","text-anchor","text-decoration","text-rendering","transform","type","unicode-bidi","visibility","word-spacing","writing-mode"],altGlyph:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","dx","dy","enable-background","externalResourcesRequired","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","format","glyph-orientation-horizontal","glyph-orientation-vertical","glyphRef","image-rendering","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","overflow","pointer-events","requiredExtensions","requiredFeatures","rotate","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","systemLanguage","text-anchor","text-decoration","text-rendering","unicode-bidi","visibility","word-spacing","writing-mode","x","y"],altGlyphDef:[],altGlyphItem:[],animate:["accumulate","additive","alignment-baseline","attributeName","attributeType","baseline-shift","begin","by","calcMode","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","dur","enable-background","end","externalResourcesRequired","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","from","glyph-orientation-horizontal","glyph-orientation-vertical","href","image-rendering","kerning","keySplines","keyTimes","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","max","min","opacity","overflow","pointer-events","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","restart","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","systemLanguage","text-anchor","text-decoration","text-rendering","to","unicode-bidi","values","visibility","word-spacing","writing-mode"],animateColor:["accumulate","additive","alignment-baseline","attributeName","attributeType","baseline-shift","begin","by","calcMode","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","dur","enable-background","end","externalResourcesRequired","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","from","glyph-orientation-horizontal","glyph-orientation-vertical","image-rendering","kerning","keySplines","keyTimes","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","max","min","opacity","overflow","pointer-events","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","restart","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","systemLanguage","text-anchor","text-decoration","text-rendering","to","unicode-bidi","values","visibility","word-spacing","writing-mode"],animateMotion:["accumulate","additive","begin","by","calcMode","dur","end","externalResourcesRequired","fill","from","href","keyPoints","keySplines","keyTimes","max","min","origin","path","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","restart","rotate","systemLanguage","to","values"],animateTransform:["accumulate","additive","attributeName","attributeType","begin","by","calcMode","dur","end","externalResourcesRequired","fill","from","href","keySplines","keyTimes","max","min","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","restart","systemLanguage","to","type","values"],animation:["begin","dur","end","externalResourcesRequired","fill","focusHighlight","focusable","height","initialVisibility","max","min","nav-down","nav-down-left","nav-down-right","nav-left","nav-next","nav-prev","nav-right","nav-up","nav-up-left","nav-up-right","preserveAspectRatio","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","restart","syncBehavior","syncMaster","syncTolerance","systemLanguage","transform","width","x","y"],audio:["begin","dur","end","externalResourcesRequired","fill","max","min","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","restart","syncBehavior","syncMaster","syncTolerance","systemLanguage","type"],canvas:["preserveAspectRatio","requiredExtensions","systemLanguage"],circle:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","cx","cy","direction","display","dominant-baseline","enable-background","externalResourcesRequired","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","focusHighlight","focusable","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","image-rendering","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","nav-down","nav-down-left","nav-down-right","nav-left","nav-next","nav-prev","nav-right","nav-up","nav-up-left","nav-up-right","opacity","overflow","pathLength","pointer-events","r","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","systemLanguage","text-anchor","text-decoration","text-rendering","transform","unicode-bidi","visibility","word-spacing","writing-mode"],clipPath:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","clipPathUnits","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","enable-background","externalResourcesRequired","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","image-rendering","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","overflow","pointer-events","requiredExtensions","requiredFeatures","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","systemLanguage","text-anchor","text-decoration","text-rendering","transform","unicode-bidi","visibility","word-spacing","writing-mode"],"color-profile":["local","name","rendering-intent"],cursor:["externalResourcesRequired","requiredExtensions","requiredFeatures","systemLanguage","x","y"],defs:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","enable-background","externalResourcesRequired","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","image-rendering","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","overflow","pointer-events","requiredExtensions","requiredFeatures","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","systemLanguage","text-anchor","text-decoration","text-rendering","transform","unicode-bidi","visibility","word-spacing","writing-mode"],desc:["requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","systemLanguage"],discard:["begin","href","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","systemLanguage"],ellipse:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","cx","cy","direction","display","dominant-baseline","enable-background","externalResourcesRequired","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","focusHighlight","focusable","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","image-rendering","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","nav-down","nav-down-left","nav-down-right","nav-left","nav-next","nav-prev","nav-right","nav-up","nav-up-left","nav-up-right","opacity","overflow","pathLength","pointer-events","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","rx","ry","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","systemLanguage","text-anchor","text-decoration","text-rendering","transform","unicode-bidi","visibility","word-spacing","writing-mode"],feBlend:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","enable-background","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","height","image-rendering","in","in2","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","mode","opacity","overflow","pointer-events","result","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","unicode-bidi","visibility","width","word-spacing","writing-mode","x","y"],feColorMatrix:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","enable-background","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","height","image-rendering","in","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","overflow","pointer-events","result","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","type","unicode-bidi","values","visibility","width","word-spacing","writing-mode","x","y"],feComponentTransfer:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","enable-background","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","height","image-rendering","in","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","overflow","pointer-events","result","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","unicode-bidi","visibility","width","word-spacing","writing-mode","x","y"],feComposite:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","enable-background","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","height","image-rendering","in","in2","k1","k2","k3","k4","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","operator","overflow","pointer-events","result","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","unicode-bidi","visibility","width","word-spacing","writing-mode","x","y"],feConvolveMatrix:["alignment-baseline","baseline-shift","bias","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","divisor","dominant-baseline","edgeMode","enable-background","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","height","image-rendering","in","kernelMatrix","kernelUnitLength","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","order","overflow","pointer-events","preserveAlpha","result","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","targetX","targetY","text-anchor","text-decoration","text-rendering","unicode-bidi","visibility","width","word-spacing","writing-mode","x","y"],feDiffuseLighting:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","diffuseConstant","direction","display","dominant-baseline","enable-background","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","height","image-rendering","in","kernelUnitLength","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","overflow","pointer-events","result","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","surfaceScale","text-anchor","text-decoration","text-rendering","unicode-bidi","visibility","width","word-spacing","writing-mode","x","y"],feDisplacementMap:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","enable-background","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-orientation-horizontal","glyph-orientation-vertical","height","image-rendering","in","in2","kerning","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","mask","opacity","overflow","pointer-events","result","scale","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","unicode-bidi","visibility","width","word-spacing","writing-mode","x","xChannelSelector","y","yChannelSelector"],feDistantLight:["azimuth","elevation"],feDropShadow:["dx","dy","height","in","result","stdDeviation","width","x","y"],feFlood:["alignment-baseline","baseline-shift","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cursor","direction","display","dominant-baseline","enable-background","fill","fill-opacity","fill-rule","filter","flood-color","flood-opacity","font-family","fo