import{parser as e,configureNesting as t}from"@lezer/html";import{cssLanguage as l,css as a}from"@codemirror/lang-css";import{javascriptLanguage as n,typescriptLanguage as r,jsxLanguage as o,tsxLanguage as s,javascript as i}from"@codemirror/lang-javascript";import{EditorView as u}from"@codemirror/view";import{EditorSelection as c}from"@codemirror/state";import{syntaxTree as m,indentNodeProp as d,foldNodeProp as p,bracketMatchingHandle as f,LRLanguage as g,LanguageSupport as h}from"@codemirror/language";const b=["_blank","_self","_top","_parent"];const y=["ascii","utf-8","utf-16","latin1","latin1"];const v=["get","post","put","delete"];const x=["application/x-www-form-urlencoded","multipart/form-data","text/plain"];const w=["true","false"];const C={};const T={a:{attrs:{href:null,ping:null,type:null,media:null,target:b,hreflang:null}},abbr:C,address:C,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:["default","rect","circle","poly"]}},article:C,aside:C,audio:{attrs:{src:null,mediagroup:null,crossorigin:["anonymous","use-credentials"],preload:["none","metadata","auto"],autoplay:["autoplay"],loop:["loop"],controls:["controls"]}},b:C,base:{attrs:{href:null,target:b}},bdi:C,bdo:C,blockquote:{attrs:{cite:null}},body:C,br:C,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:["autofocus"],disabled:["autofocus"],formenctype:x,formmethod:v,formnovalidate:["novalidate"],formtarget:b,type:["submit","reset","button"]}},canvas:{attrs:{width:null,height:null}},caption:C,center:C,cite:C,code:C,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:["command","checkbox","radio"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:["disabled"],checked:["checked"]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:["disabled"],multiple:["multiple"]}},datalist:{attrs:{data:null}},dd:C,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:["open"]}},dfn:C,div:C,dl:C,dt:C,em:C,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:["disabled"],form:null,name:null}},figcaption:C,figure:C,footer:C,form:{attrs:{action:null,name:null,"accept-charset":y,autocomplete:["on","off"],enctype:x,method:v,novalidate:["novalidate"],target:b}},h1:C,h2:C,h3:C,h4:C,h5:C,h6:C,head:{children:["title","base","link","style","meta","script","noscript","command"]},header:C,hgroup:C,hr:C,html:{attrs:{manifest:null}},i:C,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:["allow-top-navigation","allow-same-origin","allow-forms","allow-scripts"],seamless:["seamless"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:["anonymous","use-credentials"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:["audio/*","video/*","image/*"],autocomplete:["on","off"],autofocus:["autofocus"],checked:["checked"],disabled:["disabled"],formenctype:x,formmethod:v,formnovalidate:["novalidate"],formtarget:b,multiple:["multiple"],readonly:["readonly"],required:["required"],type:["hidden","text","search","tel","url","email","password","datetime","date","month","week","time","datetime-local","number","range","color","checkbox","radio","file","submit","image","reset","button"]}},ins:{attrs:{cite:null,datetime:null}},kbd:C,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:["autofocus"],disabled:["disabled"],keytype:["RSA"]}},label:{attrs:{for:null,form:null}},legend:C,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:null,media:null,sizes:["all","16x16","16x16 32x32","16x16 32x32 64x64"]}},map:{attrs:{name:null}},mark:C,menu:{attrs:{label:null,type:["list","context","toolbar"]}},meta:{attrs:{content:null,charset:y,name:["viewport","application-name","author","description","generator","keywords"],"http-equiv":["content-language","content-type","default-style","refresh"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:C,noscript:C,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:["typemustmatch"]}},ol:{attrs:{reversed:["reversed"],start:null,type:["1","a","A","i","I"]},children:["li","script","template","ul","ol"]},optgroup:{attrs:{disabled:["disabled"],label:null}},option:{attrs:{disabled:["disabled"],label:null,selected:["selected"],value:null}},output:{attrs:{for:null,form:null,name:null}},p:C,param:{attrs:{name:null,value:null}},pre:C,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:C,rt:C,ruby:C,samp:C,script:{attrs:{type:["text/javascript"],src:null,async:["async"],defer:["defer"],charset:y}},section:C,select:{attrs:{form:null,name:null,size:null,autofocus:["autofocus"],disabled:["disabled"],multiple:["multiple"]}},slot:{attrs:{name:null}},small:C,source:{attrs:{src:null,type:null,media:null}},span:C,strong:C,style:{attrs:{type:["text/css"],media:null,scoped:null}},sub:C,summary:C,sup:C,table:C,tbody:C,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:C,textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:["autofocus"],disabled:["disabled"],readonly:["readonly"],required:["required"],wrap:["soft","hard"]}},tfoot:C,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:["row","col","rowgroup","colgroup"]}},thead:C,time:{attrs:{datetime:null}},title:C,tr:C,track:{attrs:{src:null,label:null,default:null,kind:["subtitles","captions","descriptions","chapters","metadata"],srclang:null}},ul:{children:["li","script","template","ul","ol"]},var:C,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:["anonymous","use-credentials"],preload:["auto","metadata","none"],autoplay:["autoplay"],mediagroup:["movie"],muted:["muted"],controls:["controls"]}},wbr:C};const k={accesskey:null,class:null,contenteditable:w,contextmenu:null,dir:["ltr","rtl","auto"],draggable:["true","false","auto"],dropzone:["copy","move","link","string:","file:"],hidden:["hidden"],id:null,inert:["inert"],itemid:null,itemprop:null,itemref:null,itemscope:["itemscope"],itemtype:null,lang:["ar","bn","de","en-GB","en-US","es","fr","hi","id","ja","pa","pt","ru","tr","zh"],spellcheck:w,autocorrect:w,autocapitalize:w,style:null,tabindex:null,title:null,translate:["yes","no"],rel:["stylesheet","alternate","author","bookmark","help","license","next","nofollow","noreferrer","prefetch","prev","search","tag"],role:"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer".split(" "),"aria-activedescendant":null,"aria-atomic":w,"aria-autocomplete":["inline","list","both","none"],"aria-busy":w,"aria-checked":["true","false","mixed","undefined"],"aria-controls":null,"aria-describedby":null,"aria-disabled":w,"aria-dropeffect":null,"aria-expanded":["true","false","undefined"],"aria-flowto":null,"aria-grabbed":["true","false","undefined"],"aria-haspopup":w,"aria-hidden":w,"aria-invalid":["true","false","grammar","spelling"],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":["off","polite","assertive"],"aria-multiline":w,"aria-multiselectable":w,"aria-owns":null,"aria-posinset":null,"aria-pressed":["true","false","mixed","undefined"],"aria-readonly":w,"aria-relevant":null,"aria-required":w,"aria-selected":["true","false","undefined"],"aria-setsize":null,"aria-sort":["ascending","descending","none","other"],"aria-valuemax":null,"aria-valuemin":null,"aria-valuenow":null,"aria-valuetext":null};const S="beforeunload copy cut dragstart dragover dragleave dragenter dragend drag paste focus blur change click load mousedown mouseenter mouseleave mouseup keydown keyup resize scroll unload".split(" ").map((e=>"on"+e));for(let e of S)k[e]=null;class Schema{constructor(e,t){this.tags=Object.assign(Object.assign({},T),e);this.globalAttrs=Object.assign(Object.assign({},k),t);this.allTags=Object.keys(this.tags);this.globalAttrNames=Object.keys(this.globalAttrs)}}Schema.default=new Schema;function elementName(e,t,l=e.length){if(!t)return"";let a=t.firstChild;let n=a&&a.getChild("TagName");return n?e.sliceString(n.from,Math.min(n.to,l)):""}function findParentElement(e,t=false){for(;e;e=e.parent)if(e.name=="Element"){if(!t)return e;t=false}return null}function allowedChildren(e,t,l){let a=l.tags[elementName(e,findParentElement(t))];return(a===null||a===void 0?void 0:a.children)||l.allTags}function openTags(e,t){let l=[];for(let a=findParentElement(t);a&&!a.type.isTop;a=findParentElement(a.parent)){let n=elementName(e,a);if(n&&a.lastChild.name=="CloseTag")break;n&&l.indexOf(n)<0&&(t.name=="EndTag"||t.from>=a.firstChild.to)&&l.push(n)}return l}const A=/^[:\-\.\w\u00b7-\uffff]*$/;function completeTag(e,t,l,a,n){let r=/\s*>/.test(e.sliceDoc(n,n+5))?"":">";let o=findParentElement(l,true);return{from:a,to:n,options:allowedChildren(e.doc,o,t).map((e=>({label:e,type:"type"}))).concat(openTags(e.doc,l).map(((e,t)=>({label:"/"+e,apply:"/"+e+r,type:"type",boost:99-t})))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function completeCloseTag(e,t,l,a){let n=/\s*>/.test(e.sliceDoc(a,a+5))?"":">";return{from:l,to:a,options:openTags(e.doc,t).map(((e,t)=>({label:e,apply:e+n,type:"type",boost:99-t}))),validFor:A}}function completeStartTag(e,t,l,a){let n=[],r=0;for(let a of allowedChildren(e.doc,l,t))n.push({label:"<"+a,type:"type"});for(let t of openTags(e.doc,l))n.push({label:"",type:"type",boost:99-r++});return{from:a,to:a,options:n,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function completeAttrName(e,t,l,a,n){let r=findParentElement(l),o=r?t.tags[elementName(e.doc,r)]:null;let s=o&&o.attrs?Object.keys(o.attrs):[];let i=o&&o.globalAttrs===false?s:s.length?s.concat(t.globalAttrNames):t.globalAttrNames;return{from:a,to:n,options:i.map((e=>({label:e,type:"property"}))),validFor:A}}function completeAttrValue(e,t,l,a,n){var r;let o=(r=l.parent)===null||r===void 0?void 0:r.getChild("AttributeName");let s,i=[];if(o){let r=e.sliceDoc(o.from,o.to);let u=t.globalAttrs[r];if(!u){let a=findParentElement(l),n=a?t.tags[elementName(e.doc,a)]:null;u=(n===null||n===void 0?void 0:n.attrs)&&n.attrs[r]}if(u){let t=e.sliceDoc(a,n).toLowerCase(),l='"',r='"';if(/^['"]/.test(t)){s=t[0]=='"'?/^[^"]*$/:/^[^']*$/;l="";r=e.sliceDoc(n,n+1)==t[0]?"":t[0];t=t.slice(1);a++}else s=/^[^\s<>='"]*$/;for(let e of u)i.push({label:e,apply:l+e+r,type:"constant"})}}return{from:a,to:n,options:i,validFor:s}}function htmlCompletionFor(e,t){let{state:l,pos:a}=t,n=m(l).resolveInner(a,-1),r=n.resolve(a);for(let e,t=a;r==n&&(e=n.childBefore(t));){let l=e.lastChild;if(!l||!l.type.isError||l.fromhtmlCompletionFor(a,e)}const N=n.parser.configure({top:"SingleExpression"});const E=[{tag:"script",attrs:e=>e.type=="text/typescript"||e.lang=="ts",parser:r.parser},{tag:"script",attrs:e=>e.type=="text/babel"||e.type=="text/jsx",parser:o.parser},{tag:"script",attrs:e=>e.type=="text/typescript-jsx",parser:s.parser},{tag:"script",attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:N},{tag:"script",attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:n.parser},{tag:"style",attrs(e){return(!e.lang||e.lang=="css")&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:l.parser}];const j=[{name:"style",parser:l.parser.configure({top:"Styles"})}].concat(S.map((e=>({name:e,parser:n.parser}))));const O=g.define({name:"html",parser:e.configure({props:[d.add({Element(e){let t=/^(\s*)(<\/)?/.exec(e.textAfter);return e.node.to<=e.pos+t[0].length?e.continue():e.lineIndent(e.node.from)+(t[2]?0:e.unit)},"OpenTag CloseTag SelfClosingTag"(e){return e.column(e.node.from)+e.unit},Document(e){if(e.pos+/\s*/.exec(e.textAfter)[0].lengthe.getChild("TagName")})]}),languageData:{commentTokens:{block:{open:"\x3c!--",close:"--\x3e"}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:"-._"}});const $=O.configure({wrap:t(E,j)});function html(e={}){let l,n="";e.matchClosingTags===false&&(n="noMatch");e.selfClosingTags===true&&(n=(n?n+" ":"")+"selfClosing");(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(l=t((e.nestedLanguages||[]).concat(E),(e.nestedAttributes||[]).concat(j)));let r=l?O.configure({wrap:l,dialect:n}):n?$.configure({dialect:n}):$;return new h(r,[$.data.of({autocomplete:htmlCompletionSourceWith(e)}),e.autoCloseTags!==false?q:[],i().support,a().support])}const I=new Set("area base br col command embed frame hr img input keygen link meta param source track wbr menuitem".split(" "));const q=u.inputHandler.of(((e,t,l,a,n)=>{if(e.composing||e.state.readOnly||t!=l||a!=">"&&a!="/"||!$.isActiveAt(e.state,t,-1))return false;let r=n(),{state:o}=r;let s=o.changeByRange((e=>{var t,l,n;let r=o.doc.sliceString(e.from-1,e.to)==a;let s,{head:i}=e,u=m(o).resolveInner(i-1,-1);u.name!="TagName"&&u.name!="StartTag"||(u=u.parent);if(r&&a==">"&&u.name=="OpenTag"){if(((l=(t=u.parent)===null||t===void 0?void 0:t.lastChild)===null||l===void 0?void 0:l.name)!="CloseTag"&&(s=elementName(o.doc,u.parent,i))&&!I.has(s)){let t=i+(o.doc.sliceString(i,i+1)===">"?1:0);let l=``;return{range:e,changes:{from:i,to:t,insert:l}}}}else if(r&&a=="/"&&u.name=="IncompleteCloseTag"){let e=u.parent;if(u.from==i-2&&((n=e.lastChild)===null||n===void 0?void 0:n.name)!="CloseTag"&&(s=elementName(o.doc,e,i))&&!I.has(s)){let e=i+(o.doc.sliceString(i,i+1)===">"?1:0);let t=`${s}>`;return{range:c.cursor(i+t.length,-1),changes:{from:i,to:e,insert:t}}}}return{range:e}}));if(s.changes.empty)return false;e.dispatch([r,o.update(s,{userEvent:"input.complete",scrollIntoView:true})]);return true}));export{q as autoCloseTags,html,htmlCompletionSource,htmlCompletionSourceWith,$ as htmlLanguage,O as htmlPlain};