import{parser as W,configureNesting as L}from"@lezer/html";import{cssLanguage as I,css as J}from"@codemirror/lang-css";import{typescriptLanguage as K,jsxLanguage as Q,tsxLanguage as X,javascriptLanguage as S,javascript as Y}from"@codemirror/lang-javascript";import{EditorView as Z}from"@codemirror/view";import{EditorSelection as ee}from"@codemirror/state";import{LRLanguage as te,indentNodeProp as le,foldNodeProp as ae,bracketMatchingHandle as ne,LanguageSupport as re,syntaxTree as q}from"@codemirror/language";const T=["_blank","_self","_top","_parent"],N=["ascii","utf-8","utf-16","latin1","latin1"],j=["get","post","put","delete"],E=["application/x-www-form-urlencoded","multipart/form-data","text/plain"],p=["true","false"],l={},se={a:{attrs:{href:null,ping:null,type:null,media:null,target:T,hreflang:null}},abbr:l,address:l,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:null,hreflang:null,type:null,shape:["default","rect","circle","poly"]}},article:l,aside:l,audio:{attrs:{src:null,mediagroup:null,crossorigin:["anonymous","use-credentials"],preload:["none","metadata","auto"],autoplay:["autoplay"],loop:["loop"],controls:["controls"]}},b:l,base:{attrs:{href:null,target:T}},bdi:l,bdo:l,blockquote:{attrs:{cite:null}},body:l,br:l,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:["autofocus"],disabled:["autofocus"],formenctype:E,formmethod:j,formnovalidate:["novalidate"],formtarget:T,type:["submit","reset","button"]}},canvas:{attrs:{width:null,height:null}},caption:l,center:l,cite:l,code:l,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:l,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:["open"]}},dfn:l,div:l,dl:l,dt:l,em:l,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:["disabled"],form:null,name:null}},figcaption:l,figure:l,footer:l,form:{attrs:{action:null,name:null,"accept-charset":N,autocomplete:["on","off"],enctype:E,method:j,novalidate:["novalidate"],target:T}},h1:l,h2:l,h3:l,h4:l,h5:l,h6:l,head:{children:["title","base","link","style","meta","script","noscript","command"]},header:l,hgroup:l,hr:l,html:{attrs:{manifest:null}},i:l,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:E,formmethod:j,formnovalidate:["novalidate"],formtarget:T,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:l,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:["autofocus"],disabled:["disabled"],keytype:["RSA"]}},label:{attrs:{for:null,form:null}},legend:l,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:l,menu:{attrs:{label:null,type:["list","context","toolbar"]}},meta:{attrs:{content:null,charset:N,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:l,noscript:l,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:l,param:{attrs:{name:null,value:null}},pre:l,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:l,rt:l,ruby:l,samp:l,script:{attrs:{type:["text/javascript"],src:null,async:["async"],defer:["defer"],charset:N}},section:l,select:{attrs:{form:null,name:null,size:null,autofocus:["autofocus"],disabled:["disabled"],multiple:["multiple"]}},slot:{attrs:{name:null}},small:l,source:{attrs:{src:null,type:null,media:null}},span:l,strong:l,style:{attrs:{type:["text/css"],media:null,scoped:null}},sub:l,summary:l,sup:l,table:l,tbody:l,td:{attrs:{colspan:null,rowspan:null,headers:null}},template:l,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:l,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:["row","col","rowgroup","colgroup"]}},thead:l,time:{attrs:{datetime:null}},title:l,tr:l,track:{attrs:{src:null,label:null,default:null,kind:["subtitles","captions","descriptions","chapters","metadata"],srclang:null}},ul:{children:["li","script","template","ul","ol"]},var:l,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:l},_={accesskey:null,class:null,contenteditable:p,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:p,autocorrect:p,autocapitalize:p,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":p,"aria-autocomplete":["inline","list","both","none"],"aria-busy":p,"aria-checked":["true","false","mixed","undefined"],"aria-controls":null,"aria-describedby":null,"aria-disabled":p,"aria-dropeffect":null,"aria-expanded":["true","false","undefined"],"aria-flowto":null,"aria-grabbed":["true","false","undefined"],"aria-haspopup":p,"aria-hidden":p,"aria-invalid":["true","false","grammar","spelling"],"aria-label":null,"aria-labelledby":null,"aria-level":null,"aria-live":["off","polite","assertive"],"aria-multiline":p,"aria-multiselectable":p,"aria-owns":null,"aria-posinset":null,"aria-pressed":["true","false","mixed","undefined"],"aria-readonly":p,"aria-relevant":null,"aria-required":p,"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},z="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 z)_[e]=null;class C{constructor(n,r){this.tags=Object.assign(Object.assign({},se),n),this.globalAttrs=Object.assign(Object.assign({},_),r),this.allTags=Object.keys(this.tags),this.globalAttrNames=Object.keys(this.globalAttrs)}}C.default=new C;function y(e,n,r=e.length){if(!n)return"";let a=n.firstChild,t=a&&a.getChild("TagName");return t?e.sliceString(t.from,Math.min(t.to,r)):""}function v(e,n=!1){for(;e;e=e.parent)if(e.name=="Element")if(n)n=!1;else return e;return null}function D(e,n,r){let a=r.tags[y(e,v(n))];return a?.children||r.allTags}function $(e,n){let r=[];for(let a=v(n);a&&!a.type.isTop;a=v(a.parent)){let t=y(e,a);if(t&&a.lastChild.name=="CloseTag")break;t&&r.indexOf(t)<0&&(n.name=="EndTag"||n.from>=a.firstChild.to)&&r.push(t)}return r}const F=/^[:\-\.\w\u00b7-\uffff]*$/;function P(e,n,r,a,t){let o=/\s*>/.test(e.sliceDoc(t,t+5))?"":">",s=v(r,!0);return{from:a,to:t,options:D(e.doc,s,n).map(u=>({label:u,type:"type"})).concat($(e.doc,r).map((u,i)=>({label:"/"+u,apply:"/"+u+o,type:"type",boost:99-i}))),validFor:/^\/?[:\-\.\w\u00b7-\uffff]*$/}}function V(e,n,r,a){let t=/\s*>/.test(e.sliceDoc(a,a+5))?"":">";return{from:r,to:a,options:$(e.doc,n).map((o,s)=>({label:o,apply:o+t,type:"type",boost:99-s})),validFor:F}}function oe(e,n,r,a){let t=[],o=0;for(let s of D(e.doc,r,n))t.push({label:"<"+s,type:"type"});for(let s of $(e.doc,r))t.push({label:"",type:"type",boost:99-o++});return{from:a,to:a,options:t,validFor:/^<\/?[:\-\.\w\u00b7-\uffff]*$/}}function ie(e,n,r,a,t){let o=v(r),s=o?n.tags[y(e.doc,o)]:null,u=s&&s.attrs?Object.keys(s.attrs):[],i=s&&s.globalAttrs===!1?u:u.length?u.concat(n.globalAttrNames):n.globalAttrNames;return{from:a,to:t,options:i.map(f=>({label:f,type:"property"})),validFor:F}}function ue(e,n,r,a,t){var o;let s=(o=r.parent)===null||o===void 0?void 0:o.getChild("AttributeName"),u=[],i;if(s){let f=e.sliceDoc(s.from,s.to),g=n.globalAttrs[f];if(!g){let c=v(r),m=c?n.tags[y(e.doc,c)]:null;g=m?.attrs&&m.attrs[f]}if(g){let c=e.sliceDoc(a,t).toLowerCase(),m='"',d='"';/^['"]/.test(c)?(i=c[0]=='"'?/^[^"]*$/:/^[^']*$/,m="",d=e.sliceDoc(t,t+1)==c[0]?"":c[0],c=c.slice(1),a++):i=/^[^\s<>='"]*$/;for(let h of g)u.push({label:h,apply:m+h+d,type:"constant"})}}return{from:a,to:t,options:u,validFor:i}}function B(e,n){let{state:r,pos:a}=n,t=q(r).resolveInner(a,-1),o=t.resolve(a);for(let s=a,u;o==t&&(u=t.childBefore(s));){let i=u.lastChild;if(!i||!i.type.isError||i.fromB(a,t)}const ce=S.parser.configure({top:"SingleExpression"}),G=[{tag:"script",attrs:e=>e.type=="text/typescript"||e.lang=="ts",parser:K.parser},{tag:"script",attrs:e=>e.type=="text/babel"||e.type=="text/jsx",parser:Q.parser},{tag:"script",attrs:e=>e.type=="text/typescript-jsx",parser:X.parser},{tag:"script",attrs(e){return/^(importmap|speculationrules|application\/(.+\+)?json)$/i.test(e.type)},parser:ce},{tag:"script",attrs(e){return!e.type||/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type)},parser:S.parser},{tag:"style",attrs(e){return(!e.lang||e.lang=="css")&&(!e.type||/^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type))},parser:I.parser}],R=[{name:"style",parser:I.parser.configure({top:"Styles"})}].concat(z.map(e=>({name:e,parser:S.parser}))),O=te.define({name:"html",parser:W.configure({props:[le.add({Element(e){let n=/^(\s*)(<\/)?/.exec(e.textAfter);return e.node.to<=e.pos+n[0].length?e.continue():e.lineIndent(e.node.from)+(n[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:""}},indentOnInput:/^\s*<\/\w+\W$/,wordChars:"-._"}}),k=O.configure({wrap:L(G,R)});function pe(e={}){let n="",r;e.matchClosingTags===!1&&(n="noMatch"),e.selfClosingTags===!0&&(n=(n?n+" ":"")+"selfClosing"),(e.nestedLanguages&&e.nestedLanguages.length||e.nestedAttributes&&e.nestedAttributes.length)&&(r=L((e.nestedLanguages||[]).concat(G),(e.nestedAttributes||[]).concat(R)));let a=r?O.configure({wrap:r,dialect:n}):n?k.configure({dialect:n}):k;return new re(a,[k.data.of({autocomplete:M(e)}),e.autoCloseTags!==!1?U:[],Y().support,J().support])}const H=new Set("area base br col command embed frame hr img input keygen link meta param source track wbr menuitem".split(" ")),U=Z.inputHandler.of((e,n,r,a,t)=>{if(e.composing||e.state.readOnly||n!=r||a!=">"&&a!="/"||!k.isActiveAt(e.state,n,-1))return!1;let o=t(),{state:s}=o,u=s.changeByRange(i=>{var f,g,c;let m=s.doc.sliceString(i.from-1,i.to)==a,{head:d}=i,h=q(s).resolveInner(d,-1),b;if(m&&a==">"&&h.name=="EndTag"){let w=h.parent;if(((g=(f=w.parent)===null||f===void 0?void 0:f.lastChild)===null||g===void 0?void 0:g.name)!="CloseTag"&&(b=y(s.doc,w.parent,d))&&!H.has(b)){let A=d+(s.doc.sliceString(d,d+1)===">"?1:0),x=``;return{range:i,changes:{from:d,to:A,insert:x}}}}else if(m&&a=="/"&&h.name=="IncompleteCloseTag"){let w=h.parent;if(h.from==d-2&&((c=w.lastChild)===null||c===void 0?void 0:c.name)!="CloseTag"&&(b=y(s.doc,w,d))&&!H.has(b)){let A=d+(s.doc.sliceString(d,d+1)===">"?1:0),x=`${b}>`;return{range:ee.cursor(d+x.length,-1),changes:{from:d,to:A,insert:x}}}}return{range:i}});return u.changes.empty?!1:(e.dispatch([o,s.update(u,{userEvent:"input.complete",scrollIntoView:!0})]),!0)});export{U as autoCloseTags,pe as html,de as htmlCompletionSource,M as htmlCompletionSourceWith,k as htmlLanguage,O as htmlPlain};