@vuu-ui/vuu-table 0.6.18 → 0.6.19-debug

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/esm/index.js CHANGED
@@ -1,11 +1,2793 @@
1
- var da=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var k=(n,e,t)=>(da(n,e,"read from private field"),t?t.call(n):e.get(n)),W=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t)},P=(n,e,t,i)=>(da(n,e,"write to private field"),i?i.call(n,t):e.set(n,t),t),pa=(n,e,t,i)=>({set _(r){P(n,e,r,t)},get _(){return k(n,e,i)}});import{Scrim as wC,Toolbar as vC,ToolbarButton as CC}from"@heswell/salt-lab";import{Text as xC}from"@salt-ds/core";import MC from"classnames";import{useCallback as DC,useRef as AC,useState as PC}from"react";import{useLayoutEffect as ba,useMemo as Jd}from"react";import*as ya from"react-dom";import*as ma from"react-dom";import{SaltProvider as $d}from"@salt-ds/core";import{jsx as jd}from"react/jsx-runtime";var Kd=1,qd=(n=0,e=0,t=window)=>{let i=t.document.createElement("div");return i.className="vuuPopup "+Kd++,i.style.cssText=`left:${n}px; top:${e}px;`,t.document.body.appendChild(i),i},Gd=(n,e)=>qd(n,e),rr=(n,e,t,i,r)=>{e.style.cssText=`left:${t}px; top:${i}px;position: absolute;`,ma.render(jd($d,{applyClassesTo:"child",children:n}),e,r)},ga=Gd;var ks=function({children:e,x:t=0,y:i=0,onRender:r}){let s=Jd(()=>ga(),[]);return ba(()=>{rr(e,s,t,i,r)},[e,r,s,t,i]),ba(()=>()=>{var o;s&&(ya.unmountComponentAtNode(s),s.classList.contains("vuuPopup")&&((o=s.parentElement)==null||o.removeChild(s)))},[s]),null};import{jsx as VC,jsxs as LC}from"react/jsx-runtime";import{useIdMemo as kp}from"@salt-ds/core";import{useCallback as As,useRef as Na}from"react";import ap,{useLayoutEffect as up,useMemo as hp,useRef as cp}from"react";import Aa from"classnames";import{useIdMemo as fp}from"@salt-ds/core";import{useCallback as sr,useMemo as np,useRef as Ms,useState as rp}from"react";var wa=n=>n.closest("[data-root='true']")!==null,va=(n,e)=>{var t;return n.ariaHasPopup==="true"&&((t=n.dataset)==null?void 0:t.idx)===`${e}`||n.querySelector(`:scope > [data-idx='${e}'][aria-haspopup='true']`)!==null};function Qd(n,...e){let t=new Set(n);for(let i of e)for(let r of i)t.add(r);return t}var Xd="Enter";var Yd="Delete",Zd=new Set([Xd,Yd]),ep=new Set(["Tab"]),tp=new Set(["ArrowRight","ArrowLeft"]),Ca=new Set(["Home","End","ArrowDown","ArrowUp"]),Sa=new Set(["Home","End","ArrowRight","ArrowLeft"]),ip=new Set(["F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"]),WC=Qd(Zd,Sa,Ca,tp,ip,ep);var xa=({key:n},e="vertical")=>(e==="vertical"?Ca:Sa).has(n);var ka=({autoHighlightFirstItem:n=!1,count:e,highlightedIndex:t,onActivate:i,onHighlight:r,onCloseMenu:s,onOpenMenu:o})=>{let l=Ms((t!=null?t:n)?0:-1),[,a]=rp(null),u=t!==void 0,h=sr(y=>{l.current=y,r==null||r(y),a({})},[r]),c=sr(y=>{y!==l.current&&(u||h(y))},[u,h]),f=Ms(!0),d=Ms(!1),p=y=>d.current=y,m=u?t:l.current,g=sr(y=>{let x=sp(e,y.key,l.current);x!==l.current&&c(x)},[e,c]),b=sr(y=>{xa(y)?(y.preventDefault(),y.stopPropagation(),f.current=!0,g(y)):(y.key==="ArrowRight"||y.key==="Enter")&&va(y.target,m)?o(m):y.key==="ArrowLeft"&&!wa(y.target)?s(m):y.key==="Enter"&&i&&i(m)},[m,g,i,s,o]),C=np(()=>({onFocus:()=>{m===-1&&h(0)},onKeyDown:b,onMouseDownCapture:()=>{f.current=!1,p(!0)},onMouseMove:()=>{f.current&&(f.current=!1)},onMouseLeave:()=>{f.current=!0,p(!1),c(-1)}}),[m,c,g,i,s,o,h]);return{focusVisible:f.current?m:-1,controlledHighlighting:u,highlightedIndex:m,setHighlightedIndex:c,listProps:C,setIgnoreFocus:p}};function sp(n,e,t){return e==="ArrowUp"?t>0?t-1:t:t===null?0:t===n-1?t:t+1}import Ma,{useCallback as op,useMemo as lp}from"react";var Ts=n=>n.type===or||!!n.props["data-group"],Ta=n=>{let e=op(()=>{let r=(o,l="root",a={},u={})=>{let h=a[l]=[],c=0,f=!1;return Ma.Children.forEach(o,d=>{if(d.type===Ra)f=!0;else{let p=Ts(d),m=l==="root"?`${c}`:`${l}.${c}`,{props:{action:g,options:b}}=d,{childWithId:C,grandChildren:y}=s(d,m,p,f);h.push(C),y?r(y,m,a,u):u[m]={action:g,options:b},c+=1,f=!1}}),[a,u]},s=(o,l,a,u=!1)=>{let{props:{children:h}}=o;return{childWithId:Ma.cloneElement(o,{hasSeparator:u,id:`${l}`,key:l,children:a?void 0:h}),grandChildren:a?h:void 0}};return r(n)},[n]),[t,i]=lp(()=>e(),[e]);return[t,i]};import{jsx as fn}from"react/jsx-runtime";var Da="vuuMenuList",Ra=()=>fn("li",{className:"vuuMenuItem-divider"}),or=()=>null,Rs=({children:n,idx:e,...t})=>fn("div",{...t,children:n}),dp=n=>n.props["data-icon"],Pa=({activatedByKeyboard:n,childMenuShowing:e=-1,children:t,className:i,highlightedIdx:r,id:s,isRoot:o,listItemProps:l,menuId:a,onHighlightMenuItem:u,onActivate:h,onCloseMenu:c,onOpenMenu:f,...d})=>{let p=fp(s),m=cp(null),g=hp(()=>new Map,[]),b=E=>{var R;let S=(R=m.current)==null?void 0:R.querySelector(`:scope > [data-idx='${E}']`);S!=null&&S.id&&(f==null||f(S.id))},C=E=>{var R;let S=(R=m.current)==null?void 0:R.querySelector(`:scope > [data-idx='${E}']`);S!=null&&S.id&&(h==null||h(S.id))},{focusVisible:y,highlightedIndex:x,listProps:v}=ka({count:ap.Children.count(t),highlightedIndex:r,onActivate:C,onHighlight:u,onOpenMenu:b,onCloseMenu:c}),w=e==-1?y:-1;return up(()=>{var E;e===-1&&n&&((E=m.current)==null||E.focus())},[n,e]),fn("div",{...d,...v,"aria-activedescendant":(()=>x===void 0||x===-1?void 0:g.get(x))(),className:Aa(Da,i,{[`${Da}-childMenuShowing`]:e!==-1}),"data-root":o||void 0,id:`${p}-${a}`,ref:m,role:"menu",tabIndex:0,children:L()});function L(){let E={...l,role:"menuitem"},S=(I,z,B)=>z?[fn("span",{className:"vuuIconContainer","data-icon":B},"icon")].concat(I):I;function R(I,z,B,X){var nr;let{children:be,className:se,"data-icon":K,id:G,hasSeparator:ze,label:Qe,...Dt}=z.props,ht=Ts(z),ir=ht&&e===B,xs=ir?`${p}-${G}`:void 0;I.push(fn(Rs,{...Dt,...E,...pp(`${p}-${a}`,G,B,(nr=z.key)!=null?nr:G,x,w,se,ze),"aria-controls":xs,"aria-haspopup":ht||void 0,"aria-expanded":ir||void 0,children:S(ht?Qe:be,X,K)}))}let O=[];if(t.length>0){let I=t.some(dp);t.forEach((z,B)=>{R(O,z,B,I)})}return O}},pp=(n,e,t,i,r,s,o,l)=>({id:`${n}-${e}`,key:i!=null?i:t,"data-idx":t,"data-highlighted":t===r||void 0,className:Aa("vuuMenuItem",o,{"vuuMenuItem-separator":l,focusVisible:s===t})});Pa.displayName="MenuList";var Ea=Pa;import{useCallback as ri,useMemo as mp,useRef as dn,useState as gp}from"react";function Oa(n){if(n){let e=n.dataset.idx;if(e)return parseInt(e,10);if(n.ariaPosInSet)return parseInt(n.ariaPosInSet,10)-1}}var Ds=n=>n==null?void 0:n.closest("[data-idx],[aria-posinset]");var Ia=(n,e,t)=>n.map((i,r)=>r===n.length-1?{...i,[t]:i[t]-e}:i),bp=(n,e)=>Ia(n,e,"left"),yp=(n,e)=>Ia(n,e,"top"),wp=(n,e)=>{let[t,i]=e.slice(-2),r=document.getElementById(`${n}-${i.id}`);if(r===null)throw Error(`useCascade.flipSides element with id ${i.id} not found`);let{width:s}=r.getBoundingClientRect();return e.map(o=>o===i?{...o,left:t.left-(s-2)}:o)},vp=(n,e)=>{let[{left:t,top:i}]=e.slice(-1),{offsetWidth:r,offsetTop:s}=n;return{left:t+r,top:s+i}},pn=n=>{let e=n.lastIndexOf("-");return e===-1?n:n.slice(e+1)},lr=n=>{let e=pn(n),t=e.lastIndexOf(".");return t>-1?e.slice(0,t):"root"},Cp=n=>{let e=0,t=n.indexOf(".",0);for(;t!==-1;)e+=1,t=n.indexOf(".",t+1);return e},Sp=n=>({menuId:lr(n.id),itemId:pn(n.id),isGroup:n.ariaHasPopup==="true",isOpen:n.ariaExpanded==="true",level:Cp(n.id)}),Va=({id:n,onActivate:e,onMouseEnterItem:t,position:{x:i,y:r}})=>{let[,s]=gp({}),o=dn([{id:"root",left:i,top:r}]),l=ri(y=>{o.current=y,s({})},[]),a=dn(),u=dn(),h=dn({root:"no-popup"}),c=dn(0),f=ri((y="root",x=null,v=null)=>{if(y==="root"&&x===null)l([{id:"root",left:i,top:r}]);else{h.current[y]="popup-open";let M=(v?v.ownerDocument:document).getElementById(`${n}-${y}-${x}`),{left:L,top:E}=vp(M,o.current);l(o.current.concat({id:x,left:L,top:E}))}},[n,i,r,l]),d=ri(y=>{l(y==="root"?[]:o.current.slice(0,-1))},[l]),p=ri((y,x)=>{let v=o.current.slice(),{id:w}=v[v.length-1];for(;v.length>1&&!x.startsWith(w);){let M=lr(w);v.pop(),h.current[w]="no-popup",h.current[M]="no-popup",{id:w}=v[v.length-1]}v.length<o.current.length&&l(v)},[l]),m=ri((y,x,v)=>{a.current&&clearTimeout(a.current),a.current=window.setTimeout(()=>{console.log(`scheduleOpen timed out opening ${x}`),p(y,x),h.current[y]="popup-open",h.current[x]="no-popup",f(y,x,v)},400)},[p,f]),g=ri((y,x,v)=>{console.log(`scheduleClose openMenuId ${y} menuId ${x} itemId ${v}`),h.current[y]="pending-close",u.current=window.setTimeout(()=>{p(x,v)},400)},[p]),b=ri(()=>{let{current:y}=o,[x]=y.slice(-1),v=document.getElementById(`${n}-${x.id}`);if(v){let{right:w,bottom:M}=v.getBoundingClientRect(),{clientHeight:L,clientWidth:E}=document.body;if(w>E){let S=y.length>1?wp(n,y):bp(y,w-E);l(S)}else if(M>L){let S=yp(y,M-L);l(S)}}},[n,l]),C=mp(()=>({onMouseEnter:y=>{let x=Ds(y.target),{menuId:v,itemId:w,isGroup:M,isOpen:L,level:E}=Sp(x),S=c.current===E,{current:{[v]:R}}=h;if(c.current=E,R==="no-popup"&&M)h.current[v]="popup-pending",m(v,w,x);else if(R==="popup-pending"&&!M)h.current[v]="no-popup",clearTimeout(a.current),a.current=void 0;else if(R==="popup-pending"&&M)clearTimeout(a.current),m(v,w,x);else if(R==="popup-open"){let[{id:O},{id:I}]=o.current.slice(-2);O===v&&h.current[I]!=="pending-close"&&S?(g(I,v,w),M&&!L&&m(v,w,x)):O===v&&M&&w!==I&&h.current[I]==="pending-close"?m(v,w,x):M?(p(v,w),m(v,w,x)):h.current[I]==="pending-close"&&S||p(v,w)}R==="pending-close"&&(a.current&&(clearTimeout(a.current),a.current=void 0),clearTimeout(u.current),u.current=void 0,h.current[v]="popup-open"),t(y,w)},onClick:y=>{let x=y.target,v=Ds(x),w=Oa(v);console.log(`list item click [${w}] hasPopup ${v.ariaHasPopup}`),v.ariaHasPopup==="true"?v.ariaExpanded!=="true"&&f(w):e(pn(v.id))}}),[p,e,t,f,g,m]);return{closeMenu:d,handleRender:b,listItemProps:C,openMenu:f,openMenus:o.current}};import{useEffect as xp}from"react";var La=({containerClassName:n,isOpen:e,onClose:t})=>{xp(()=>{let i;return e&&(i=r=>{r.target.closest(`.${n}`)===null&&(t==null||t("root"))},document.body.addEventListener("click",i,!0)),()=>{i&&document.body.removeEventListener("click",i,!0)}},[n,e,t])};import{Fragment as Rp,jsx as Ba}from"react/jsx-runtime";import{createElement as Tp}from"react";var Mp=()=>{},Ps=({activatedByKeyboard:n,children:e,className:t,id:i,onClose:r=()=>{},position:s={x:0,y:0},style:o,...l})=>{let a=kp(i),u=Na(Mp),[h,c]=Ta(e),f=Na(n),d=As(()=>{f.current=!1},[]),p=As(S=>{let{action:R,options:O}=c[S];u.current("root"),r(R,O)},[c,r]),{closeMenu:m,listItemProps:g,openMenu:b,openMenus:C,handleRender:y}=Va({id:a,onActivate:p,onMouseEnterItem:d,position:s});u.current=m,console.log({openMenus:C});let x=As(()=>{m(),r()},[m,r]);La({containerClassName:"vuuMenuList",onClose:x,isOpen:C.length>0});let v=S=>{let R=pn(S),O=lr(R);f.current=!0,b(O,R)},w=()=>{f.current=!0,m()},M=()=>{},L=C.length-1,E=S=>{if(S>=L)return-1;{let{id:R}=C[S+1],O=R.lastIndexOf(".");return parseInt(O===-1?R:R.slice(-O),10)}};return Ba(Rp,{children:C.map(({id:S,left:R,top:O},I)=>{let z=E(I);return Ba(ks,{x:R,y:O,onRender:y,children:Tp(Ea,{...l,activatedByKeyboard:f.current,childMenuShowing:z,className:t,id:a,menuId:S,isRoot:I===0,key:I,listItemProps:g,onActivate:p,onHighlightMenuItem:M,onCloseMenu:w,onOpenMenu:v,style:o},h[S])},I)})})};Ps.displayName="ContextMenu";import{createContext as Dp,useCallback as Ap,useMemo as Pp}from"react";import{jsx as Es}from"react/jsx-runtime";var ar=Dp(null),Os=n=>n!==void 0&&"children"in n,Ep=({children:n,context:e,menuActionHandler:t,menuBuilder:i})=>{let r=Pp(()=>e!=null&&e.menuBuilders&&i?e.menuBuilders.concat(i):i?[i]:(e==null?void 0:e.menuBuilders)||[],[e,i]),s=Ap((o,l)=>{var a;if(t!=null&&t(o,l)||(a=e==null?void 0:e.menuActionHandler)!=null&&a.call(e,o,l))return!0},[e,t]);return Es(ar.Provider,{value:{menuActionHandler:s,menuBuilders:r},children:n})},Fa=({children:n,label:e,menuActionHandler:t,menuBuilder:i})=>Es(ar.Consumer,{children:r=>Es(Ep,{context:r,label:e,menuActionHandler:t,menuBuilder:i,children:n})});import{useCallback as $a,useContext as Np}from"react";import Op from"classnames";import FS,{createElement as Ha,useEffect as zS,useRef as US}from"react";import Is from"react-dom";var Vs=!1,Ue=[];function Wa(n){if(n.key==="Esc"){if(Ue.length)za();else if(Vs){let e=document.body.querySelector(".vuuDialog");e&&Is.unmountComponentAtNode(e)}}}function _a(n){if(Ue.length){let e=document.body.querySelectorAll(".vuuPopup");for(let t=0;t<e.length;t++)if(e[t].contains(n.target))return;za()}}function za(){if(Ue.length){let n=document.body.querySelectorAll(".vuuPopup");for(let e=0;e<n.length;e++)Is.unmountComponentAtNode(n[e]);Ua("*")}}function Ip(n){Ue.indexOf(n)===-1&&(Ue.push(n),Vs===!1&&(window.addEventListener("keydown",Wa,!0),window.addEventListener("click",_a,!0)))}function Ua(n){if(Ue.length){if(n==="*")Ue.length=0;else{let e=Ue.indexOf(n);e!==-1&&Ue.splice(e,1)}Ue.length===0&&Vs===!1&&(window.removeEventListener("keydown",Wa,!0),window.removeEventListener("click",_a,!0))}}var Vp=({children:n,position:e,style:t})=>{let i=Op("hwPopup","hwPopupContainer",e);return Ha("div",{className:i,style:t},n)},Lp=1,si=class{static showPopup({name:e="anon",group:t="all",position:i="",left:r=0,right:s="auto",top:o=0,width:l="auto",component:a}){if(!a)throw Error("PopupService showPopup, no component supplied");Ip(e);let u=document.body.querySelector(".vuuPopup."+t);u===null&&(u=document.createElement("div"),u.className="vuuPopup "+t,document.body.appendChild(u));let h={width:l};rr(Ha(Vp,{key:Lp++,position:i,style:h},a),u,r,o,()=>{si.keepWithinThePage(u,s)})}static hidePopup(e="anon",t="all"){if(Ue.indexOf(e)!==-1){Ua(e);let i=document.body.querySelector(`.vuuPopup.${t}`);i&&Is.unmountComponentAtNode(i)}}static keepWithinThePage(e,t="auto"){let i=e.querySelector(".vuuPopupContainer > *");if(i){let{top:r,left:s,width:o,height:l,right:a}=i.getBoundingClientRect(),u=window.innerWidth,c=window.innerHeight-(r+l);c<0&&(i.style.top=Math.round(r)+c+"px");let f=u-(s+o);if(f<0&&(i.style.left=Math.round(s)+f+"px"),typeof t=="number"&&t!==a){let d=t-a;i.style.left=s+d+"px"}}}};import{jsx as Ls}from"react/jsx-runtime";var ki=()=>{let n=Np(ar),e=$a((i,r,s)=>{let o=[];for(let l of i)o=o.concat(l(r,s));return o},[]);return $a((i,r,s)=>{var a;i.stopPropagation(),i.preventDefault();let o=(a=n==null?void 0:n.menuBuilders)!=null?a:[],l=e(o,r,s);console.log({menuItemDescriptors:l}),l.length&&(n!=null&&n.menuActionHandler)&&(console.log(`showContextMenu ${r}`,{options:s}),Bp(i,l,n.menuActionHandler))},[e,n])},Bp=(n,e,t)=>{let{clientX:i,clientY:r}=n,l=Ls(Ps,{onClose:(a,u)=>{a&&(t(a,u),si.hidePopup())},position:{x:i,y:r},children:(a=>{let u=(h,c)=>Os(h)?Ls(or,{label:h.label,children:h.children.map(u)},c):Ls(Rs,{action:h.action,"data-icon":h.icon,options:h.options,children:h.label},c);return a.map(u)})(e)});si.showPopup({left:0,top:0,component:l})};import{Button as $v,useIdMemo as Kv}from"@salt-ds/core";import{metadataKeys as gm}from"@vuu-ui/vuu-utils";import{useCallback as bm}from"react";import ym from"classnames";import{isGroupColumn as Ja,isJsonColumn as Xp,isJsonGroup as Yp,metadataKeys as Zp,notHidden as em}from"@vuu-ui/vuu-utils";import tm from"classnames";import{memo as im,useCallback as Qa}from"react";import{getColumnPinStyle as Fp,metadataKeys as Hp}from"@vuu-ui/vuu-utils";import{EditableLabel as Wp}from"@heswell/salt-lab";import _p from"classnames";import{memo as zp,useCallback as Up,useRef as $p,useState as Ka}from"react";import{jsx as ur}from"react/jsx-runtime";var{KEY:qa}=Hp,Ns=zp(({className:n,column:e,onClick:t,row:i})=>{let r=$p(null),{align:s,CellRenderer:o,key:l,pin:a,editable:u,resizing:h,valueFormatter:c}=e,[f,d]=Ka(!1),p=c(i[l]),[m,g]=Ka(p),b=()=>{var L;(L=r.current)==null||L.focus()},C=L=>{L.key==="Enter"&&d(!0)},y=Up(()=>{t==null||t(e)},[e,t]),x=()=>{d(!0)},v=(L="",E="",S=!0,R=!1)=>{var O;d(!1),R?g(L):E!==L&&g(E),S===!1&&((O=r.current)==null||O.focus())},w=_p(n,{vuuAlignRight:s==="right",vuuPinFloating:a==="floating",vuuPinLeft:a==="left",vuuPinRight:a==="right","vuuTableCell-resizing":h})||void 0,M=Fp(e);return u?ur("td",{className:w,"data-editable":!0,style:M,onKeyDown:C,children:ur(Wp,{editing:f,value:m,onChange:g,onMouseDownCapture:b,onEnterEditMode:x,onExitEditMode:v,onKeyDown:C,ref:r,tabIndex:0},"title")}):ur("td",{className:w,style:M,onClick:y,children:o?ur(o,{column:e,row:i}):p})},Kp);Ns.displayName="TableCell";function Kp(n,e){return n.column===e.column&&n.onClick===e.onClick&&n.row[qa]===e.row[qa]&&n.row[n.column.key]===e.row[e.column.key]}import{metadataKeys as qp}from"@vuu-ui/vuu-utils";import{useCallback as Gp}from"react";import{jsx as Bs,jsxs as Qp}from"react/jsx-runtime";var{DEPTH:jp,IS_LEAF:Ga}=qp,Jp=(n,e)=>{let{[jp]:t,[Ga]:i}=e;if(i||t>n.length)return[null,t===null?0:t-1];if(t===0)return["$root",0];{let r=n[t-1];return[e[r.key],t-1]}},ja=({column:n,onClick:e,row:t})=>{let{columns:i}=n,[r,s]=Jp(i,t),o=Gp(()=>{e==null||e(n)},[n,e]),l={left:n.pin=="left"?n.pinnedOffset:void 0},a=t[Ga],u=Array(s).fill(0).map((h,c)=>Bs("span",{className:"vuuTableGroupCell-spacer"},c));return Qp("td",{className:"vuuTableGroupCell vuuPinLeft",onClick:a?void 0:o,style:l,children:[u,a?null:Bs("span",{className:"vuuTableGroupCell-toggle","data-icon":"triangle-right"}),Bs("span",{children:r})]})};import{jsx as Xa,jsxs as om}from"react/jsx-runtime";var{IDX:nm,IS_EXPANDED:rm,SELECTED:sm}=Zp,hr="vuuTableRow",cr=im(function({columns:e,height:t,index:i,onClick:r,onToggleGroup:s,virtualColSpan:o=0,row:l}){let{[nm]:a,[rm]:u,[sm]:h}=l,c=tm(hr,{[`${hr}-even`]:a%2===0,[`${hr}-expanded`]:u,[`${hr}-preSelected`]:h===2}),f=a-i,d=Qa(m=>{let g=m.shiftKey,b=m.ctrlKey||m.metaKey;r==null||r(l,g,b)},[r,l]),p=Qa(m=>{(Ja(m)||Yp(m,l))&&(s==null||s(l,m))},[s,l]);return om("tr",{"aria-selected":h===1?!0:void 0,"aria-rowindex":a,className:c,onClick:d,style:{transform:`translate(0px, ${f*t}px)`},children:[o>0?Xa("td",{colSpan:o}):null,e.filter(em).map(m=>{let g=Ja(m),b=Xp(m);return Xa(g?ja:Ns,{column:m,onClick:g||b?p:void 0,row:l},m.name)})]})});import pm from"classnames";import{useCallback as Ws,useRef as ru}from"react";import{useCallback as Fs,useRef as lm}from"react";import{jsx as um}from"react/jsx-runtime";var Ya=()=>{},am="vuuColumnResizer",fr=({onDrag:n,onDragEnd:e=Ya,onDragStart:t=Ya})=>{let i=lm(0),r=Fs(l=>{l.stopPropagation&&l.stopPropagation(),l.preventDefault&&l.preventDefault();let a=Math.round(l.clientX),u=a-i.current;i.current=a,u!==0&&n(l,u)},[n]),s=Fs(l=>{window.removeEventListener("mouseup",s),window.removeEventListener("mousemove",r),e(l)},[e,r]),o=Fs(l=>{t(l),i.current=Math.round(l.clientX),window.addEventListener("mouseup",s),window.addEventListener("mousemove",r),l.stopPropagation&&l.stopPropagation(),l.preventDefault&&l.preventDefault()},[t,r,s]);return um("div",{className:am,onMouseDown:o})};import Za from"classnames";import{jsx as dr,jsxs as hm}from"react/jsx-runtime";var eu="vuuSortIndicator",tu=({sorted:n})=>{if(!n)return null;let e=typeof n=="number"?n<0?"dsc":"asc":n==="A"?"asc":"dsc";return typeof n=="number"?hm("div",{className:Za(eu,"multi-col",e),children:[dr("span",{"data-icon":`sorted-${e}`}),dr("span",{className:"vuuSortPosition",children:Math.abs(n)})]}):dr("div",{className:Za(eu,"single-col"),children:dr("span",{"data-icon":`sorted-${e}`})})};import{useCallback as Hs,useRef as iu}from"react";var pr=({column:n,onResize:e,rootRef:t})=>{let i=iu(0),r=iu(!1),{name:s}=n,o=Hs(()=>{if(e&&t.current){let{width:u}=t.current.getBoundingClientRect();i.current=Math.round(u),r.current=!0,e==null||e("begin",s)}},[s,e,t]),l=Hs((u,h)=>{if(t.current&&e){let{width:c}=t.current.getBoundingClientRect(),f=Math.round(c)+h;f!==i.current&&f>0&&(e("resize",s,f),i.current=f)}},[s,e,t]),a=Hs(()=>{e&&(e("end",s,i.current),setTimeout(()=>{r.current=!1},100))},[s,e]);return{isResizing:r.current,onDrag:l,onDragStart:o,onDragEnd:a}};import cm from"classnames";import{useCallback as fm}from"react";import{jsx as dm}from"react/jsx-runtime";var nu=({column:n,filter:e})=>{let t=ki(),i=fm(r=>{r.stopPropagation(),t(r,"filter",{column:n,filter:e})},[n,e,t]);return n.filter?dm("div",{className:cm("vuuFilterIndicator"),"data-icon":"filter",onClick:i}):null};import{jsx as gn,jsxs as mm}from"react/jsx-runtime";var mn="vuuTable-headerCell",mr=({column:n,className:e,onClick:t,onDragStart:i,onResize:r,...s})=>{let o=ru(null),{isResizing:l,...a}=pr({column:n,onResize:r,rootRef:o}),u=ki(),h=ru(null),c=g=>{u(g,"header",{column:n})},f=Ws(g=>!l&&(t==null?void 0:t(g)),[l,t]),d=Ws(g=>{h.current=window.setTimeout(()=>{i==null||i(g),h.current=null},250)},[i]),p=Ws(()=>{h.current!==null&&(window.clearTimeout(h.current),h.current=null)},[]),m=pm(mn,e,{vuuPinFloating:n.pin==="floating",vuuPinLeft:n.pin==="left",vuuPinRight:n.pin==="right",vuuEndPin:n.endPin,[`${mn}-resizing`]:n.resizing,[`${mn}-right`]:n.align==="right"});return gn("th",{className:m,...s,onClick:f,onContextMenu:c,onMouseDown:d,onMouseUp:p,ref:o,children:mm("div",{className:`${mn}-inner`,children:[gn(nu,{column:n}),gn("div",{className:`${mn}-label`,children:n.label}),gn(tu,{sorted:n.sorted}),n.resizeable!==!1?gn(fr,{...a}):null]})})};import{Fragment as Cm,jsx as Mi,jsxs as vm}from"react/jsx-runtime";var su="vuuTable",{RENDER_IDX:wm}=gm,ou=({columns:n,data:e,headerHeight:t,onHeaderCellDragEnd:i,rowHeight:r})=>{let s=bm(()=>{i==null||i()},[i]);return console.log("ColumnBasedTable render"),Mi(Cm,{children:n.map((o,l)=>Mi("table",{className:ym(`${su}-table`,`${su}-columnBased`,{vuuPinLeft:o.pin==="left"}),"data-idx":l,id:`col-${l}`,style:{width:o.width,left:o.pinnedOffset,"--vuuTableHeaderHeight":`${t}px`,"--row-height":`${r}px`},children:vm("tbody",{children:[Mi("tr",{children:Mi(mr,{column:o,"data-idx":l,onDragEnd:s},l)},"header"),e.map((a,u)=>Mi(cr,{columns:[o],height:r,index:u,row:a},a[wm])),Mi("tr",{className:"vuuTable-filler"})]})},o.name))})};import{isNumericColumn as Sm}from"@vuu-ui/vuu-utils";var lu=n=>(e,t)=>{let i=[];if(n===void 0)return i;if(e==="header")i.push(...xm(t,n)),i.push(...Tm(t,n)),i.push(...km(t,n)),i.push(...Mm(t));else if(e==="filter"){let{column:r,filter:s}=t,o=(s==null?void 0:s.column)===(r==null?void 0:r.name);i.push({label:"Edit filter",action:"filter-edit",options:t}),i.push({label:"Remove filter",action:"filter-remove-column",options:t}),r&&!o&&i.push({label:"Remove all filters",action:"remove-filters",options:t})}return i};function xm(n,{sort:{sortDefs:e}}){let{column:t}=n,i=[];if(t===void 0)return i;let r=e.length>0;return t.sorted==="A"?i.push({label:"Reverse Sort (DSC)",action:"sort-dsc",options:n}):t.sorted==="D"?i.push({label:"Reverse Sort (ASC)",action:"sort-asc",options:n}):typeof t.sorted=="number"?(t.sorted>0?i.push({label:"Reverse Sort (DSC)",action:"sort-add-dsc",options:n}):i.push({label:"Reverse Sort (ASC)",action:"sort-add-asc",options:n}),r&&Math.abs(t.sorted)<e.length&&i.push({label:"Remove from sort",action:"sort-remove",options:n}),i.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:n},{label:"Descending",action:"sort-dsc",options:n}]})):r?(i.push({label:"Add to sort",children:[{label:"Ascending",action:"sort-add-asc",options:n},{label:"Descending",action:"sort-add-dsc",options:n}]}),i.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:n},{label:"Descending",action:"sort-dsc",options:n}]})):i.push({label:"Sort",children:[{label:"Ascending",action:"sort-asc",options:n},{label:"Descending",action:"sort-dsc",options:n}]}),i}function km(n,e){let{column:t}=n;if(t===void 0||e.groupBy.length===0)return[];let{name:i,label:r=i}=t;return[{label:`Aggregate ${r}`,children:[{label:"Count",action:"agg-count",options:n}].concat(Sm(t)?[{label:"Sum",action:"agg-sum",options:n},{label:"Avg",action:"agg-avg",options:n},{label:"High",action:"agg-high",options:n},{label:"Low",action:"agg-low",options:n}]:[])}]}var $s=(n,e)=>({label:`Pin ${e}`,action:`column-pin-${e}`,options:n}),_s=n=>$s(n,"left"),zs=n=>$s(n,"floating"),Us=n=>$s(n,"right");function Mm(n){let{column:e}=n;if(e===void 0)return[];let{pin:t}=e,i=[{label:"Hide column",action:"column-hide",options:n},{label:"Remove column",action:"column-remove",options:n}];return t===void 0?i.push({label:"Pin column",children:[_s(n),zs(n),Us(n)]}):t==="left"?i.push({label:"Unpin column",action:"column-unpin",options:n},{label:"Pin column",children:[zs(n),Us(n)]}):t==="right"?i.push({label:"Unpin column",action:"column-unpin",options:n},{label:"Pin column",children:[_s(n),zs(n)]}):t==="floating"&&i.push({label:"Unpin column",action:"column-unpin",options:n},{label:"Pin column",children:[_s(n),Us(n)]}),i}function Tm(n,{groupBy:e}){let{column:t}=n,i=[];if(t===void 0)return i;let{name:r,label:s=r}=t;return e.length===0?i.push({label:`Group by ${s}`,action:"group",options:n}):i.push({label:`Add ${s} to group by`,action:"group-add",options:n}),i}import{Button as B1}from"@salt-ds/core";var _=class{constructor(){}lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){let r=[];return this.decompose(0,e,r,2),i.length&&i.decompose(0,i.length,r,3),this.decompose(t,this.length,r,1),Oe.from(r,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){let i=[];return this.decompose(e,t,i,0),Oe.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),r=new ai(this),s=new ai(e);for(let o=t,l=t;;){if(r.next(o),s.next(o),o=0,r.lineBreak!=s.lineBreak||r.done!=s.done||r.value!=s.value)return!1;if(l+=r.value.length,r.done||l>=i)return!0}}iter(e=1){return new ai(this,e)}iterRange(e,t=this.length){return new wr(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let r=this.line(e).from;i=this.iterRange(r,Math.max(r,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new vr(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?_.empty:e.length<=32?new te(e):Oe.from(te.split(e,[]))}},te=class extends _{constructor(e,t=Rm(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,r){for(let s=0;;s++){let o=this.text[s],l=r+o.length;if((t?i:l)>=e)return new qs(r,l,i,o);r=l+1,i++}}decompose(e,t,i,r){let s=e<=0&&t>=this.length?this:new te(au(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(r&1){let o=i.pop(),l=yr(s.text,o.text.slice(),0,s.length);if(l.length<=32)i.push(new te(l,o.length+s.length));else{let a=l.length>>1;i.push(new te(l.slice(0,a)),new te(l.slice(a)))}}else i.push(s)}replace(e,t,i){if(!(i instanceof te))return super.replace(e,t,i);let r=yr(this.text,yr(i.text,au(this.text,0,e)),t),s=this.length+i.length-(t-e);return r.length<=32?new te(r,s):Oe.from(te.split(r,[]),s)}sliceString(e,t=this.length,i=`
2
- `){let r="";for(let s=0,o=0;s<=t&&o<this.text.length;o++){let l=this.text[o],a=s+l.length;s>e&&o&&(r+=i),e<a&&t>s&&(r+=l.slice(Math.max(0,e-s),t-s)),s=a+1}return r}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],r=-1;for(let s of e)i.push(s),r+=s.length+1,i.length==32&&(t.push(new te(i,r)),i=[],r=-1);return r>-1&&t.push(new te(i,r)),t}},Oe=class extends _{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,r){for(let s=0;;s++){let o=this.children[s],l=r+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,r);r=l+1,i=a+1}}decompose(e,t,i,r){for(let s=0,o=0;o<=t&&s<this.children.length;s++){let l=this.children[s],a=o+l.length;if(e<=a&&t>=o){let u=r&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!u?i.push(l):l.decompose(e-o,t-o,i,u)}o=a+1}}replace(e,t,i){if(i.lines<this.lines)for(let r=0,s=0;r<this.children.length;r++){let o=this.children[r],l=s+o.length;if(e>=s&&t<=l){let a=o.replace(e-s,t-s,i),u=this.lines-o.lines+a.lines;if(a.lines<u>>5-1&&a.lines>u>>5+1){let h=this.children.slice();return h[r]=a,new Oe(h,this.length-(t-e)+i.length)}return super.replace(s,l,a)}s=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=`
3
- `){let r="";for(let s=0,o=0;s<this.children.length&&o<=t;s++){let l=this.children[s],a=o+l.length;o>e&&s&&(r+=i),e<a&&t>o&&(r+=l.sliceString(e-o,t-o,i)),o=a+1}return r}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof Oe))return 0;let i=0,[r,s,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;r+=t,s+=t){if(r==o||s==l)return i;let a=this.children[r],u=e.children[s];if(a!=u)return i+a.scanIdentical(u,t);i+=a.length+1}}static from(e,t=e.reduce((i,r)=>i+r.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new te(d,t)}let r=Math.max(32,i>>5),s=r<<1,o=r>>1,l=[],a=0,u=-1,h=[];function c(d){let p;if(d.lines>s&&d instanceof Oe)for(let m of d.children)c(m);else d.lines>o&&(a>o||!a)?(f(),l.push(d)):d instanceof te&&a&&(p=h[h.length-1])instanceof te&&d.lines+p.lines<=32?(a+=d.lines,u+=d.length+1,h[h.length-1]=new te(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>r&&f(),a+=d.lines,u+=d.length+1,h.push(d))}function f(){a!=0&&(l.push(h.length==1?h[0]:Oe.from(h,u)),u=-1,a=h.length=0)}for(let d of e)c(d);return f(),l.length==1?l[0]:new Oe(l,t)}};_.empty=new te([""],0);function Rm(n){let e=-1;for(let t of n)e+=t.length+1;return e}function yr(n,e,t=0,i=1e9){for(let r=0,s=0,o=!0;s<n.length&&r<=i;s++){let l=n[s],a=r+l.length;a>=t&&(a>i&&(l=l.slice(0,i-r)),r<t&&(l=l.slice(t-r)),o?(e[e.length-1]+=l,o=!1):e.push(l)),r=a+1}return e}function au(n,e,t){return yr(n,[""],e,t)}var ai=class{constructor(e,t=1){this.dir=t,this.done=!1,this.lineBreak=!1,this.value="",this.nodes=[e],this.offsets=[t>0?1:(e instanceof te?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,r=this.nodes[i],s=this.offsets[i],o=s>>1,l=r instanceof te?r.text.length:r.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((s&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=`
4
- `,this;e--}else if(r instanceof te){let a=r.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=r.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof te?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}},wr=class{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new ai(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:r}=this.cursor.next(e);return this.pos+=(r.length+e)*t,this.value=r.length<=i?r:t<0?r.slice(r.length-i):r.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}},vr=class{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:r}=this.inner.next(e);return t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=r,this.afterBreak=!1),this}get lineBreak(){return!1}};typeof Symbol<"u"&&(_.prototype[Symbol.iterator]=function(){return this.iter()},ai.prototype[Symbol.iterator]=wr.prototype[Symbol.iterator]=vr.prototype[Symbol.iterator]=function(){return this});var qs=class{constructor(e,t,i,r){this.from=e,this.to=t,this.number=i,this.text=r}get length(){return this.to-this.from}},Ti="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(n=>n?parseInt(n,36):1);for(let n=1;n<Ti.length;n++)Ti[n]+=Ti[n-1];function Dm(n){for(let e=1;e<Ti.length;e+=2)if(Ti[e]>n)return Ti[e-1]<=n;return!1}function uu(n){return n>=127462&&n<=127487}var hu=8205;function Ce(n,e,t=!0,i=!0){return(t?gu:Am)(n,e,i)}function gu(n,e,t){if(e==n.length)return e;e&&bu(n.charCodeAt(e))&&yu(n.charCodeAt(e-1))&&e--;let i=Ri(n,e);for(e+=Cr(i);e<n.length;){let r=Ri(n,e);if(i==hu||r==hu||t&&Dm(r))e+=Cr(r),i=r;else if(uu(r)){let s=0,o=e-2;for(;o>=0&&uu(Ri(n,o));)s++,o-=2;if(s%2==0)break;e+=2}else break}return e}function Am(n,e,t){for(;e>0;){let i=gu(n,e-2,t);if(i<e)return i;e--}return 0}function bu(n){return n>=56320&&n<57344}function yu(n){return n>=55296&&n<56320}function Ri(n,e){let t=n.charCodeAt(e);if(!yu(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return bu(i)?(t-55296<<10)+(i-56320)+65536:t}function Cr(n){return n<65536?1:2}var Gs=/\r\n?|\n/,xe=function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n}(xe||(xe={})),Re=class{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;t<this.sections.length;t+=2)e+=this.sections[t];return e}get newLength(){let e=0;for(let t=0;t<this.sections.length;t+=2){let i=this.sections[t+1];e+=i<0?this.sections[t]:i}return e}get empty(){return this.sections.length==0||this.sections.length==2&&this.sections[1]<0}iterGaps(e){for(let t=0,i=0,r=0;t<this.sections.length;){let s=this.sections[t++],o=this.sections[t++];o<0?(e(i,r,s),r+=s):r+=o,i+=s}}iterChangedRanges(e,t=!1){js(this,e,t)}get invertedDesc(){let e=[];for(let t=0;t<this.sections.length;){let i=this.sections[t++],r=this.sections[t++];r<0?e.push(i,r):e.push(r,i)}return new Re(e)}composeDesc(e){return this.empty?e:e.empty?this:wu(this,e)}mapDesc(e,t=!1){return e.empty?this:Js(this,e,t)}mapPos(e,t=-1,i=xe.Simple){let r=0,s=0;for(let o=0;o<this.sections.length;){let l=this.sections[o++],a=this.sections[o++],u=r+l;if(a<0){if(u>e)return s+(e-r);s+=l}else{if(i!=xe.Simple&&u>=e&&(i==xe.TrackDel&&r<e&&u>e||i==xe.TrackBefore&&r<e||i==xe.TrackAfter&&u>e))return null;if(u>e||u==e&&t<0&&!l)return e==r||t<0?s:s+a;s+=a}r=u}if(e>r)throw new RangeError(`Position ${e} is out of range for changeset of length ${r}`);return s}touchesRange(e,t=e){for(let i=0,r=0;i<this.sections.length&&r<=t;){let s=this.sections[i++],o=this.sections[i++],l=r+s;if(o>=0&&r<=t&&l>=e)return r<e&&l>t?"cover":!0;r=l}return!1}toString(){let e="";for(let t=0;t<this.sections.length;){let i=this.sections[t++],r=this.sections[t++];e+=(e?" ":"")+i+(r>=0?":"+r:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new Re(e)}static create(e){return new Re(e)}},ie=class extends Re{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return js(this,(t,i,r,s,o)=>e=e.replace(r,r+(i-t),o),!1),e}mapDesc(e,t=!1){return Js(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let r=0,s=0;r<t.length;r+=2){let o=t[r],l=t[r+1];if(l>=0){t[r]=l,t[r+1]=o;let a=r>>1;for(;i.length<a;)i.push(_.empty);i.push(o?e.slice(s,s+o):_.empty)}s+=o}return new ie(t,i)}compose(e){return this.empty?e:e.empty?this:wu(this,e,!0)}map(e,t=!1){return e.empty?this:Js(this,e,t,!0)}iterChanges(e,t=!1){js(this,e,t)}get desc(){return Re.create(this.sections)}filter(e){let t=[],i=[],r=[],s=new ui(this);e:for(let o=0,l=0;;){let a=o==e.length?1e9:e[o++];for(;l<a||l==a&&s.len==0;){if(s.done)break e;let h=Math.min(s.len,a-l);ye(r,h,-1);let c=s.ins==-1?-1:s.off==0?s.ins:0;ye(t,h,c),c>0&&At(i,t,s.text),s.forward(h),l+=h}let u=e[o++];for(;l<u;){if(s.done)break e;let h=Math.min(s.len,u-l);ye(t,h,-1),ye(r,h,s.ins==-1?-1:s.off==0?s.ins:0),s.forward(h),l+=h}}return{changes:new ie(t,i),filtered:Re.create(r)}}toJSON(){let e=[];for(let t=0;t<this.sections.length;t+=2){let i=this.sections[t],r=this.sections[t+1];r<0?e.push(i):r==0?e.push([i]):e.push([i].concat(this.inserted[t>>1].toJSON()))}return e}static of(e,t,i){let r=[],s=[],o=0,l=null;function a(h=!1){if(!h&&!r.length)return;o<t&&ye(r,t-o,-1);let c=new ie(r,s);l=l?l.compose(c.map(l)):c,r=[],s=[],o=0}function u(h){if(Array.isArray(h))for(let c of h)u(c);else if(h instanceof ie){if(h.length!=t)throw new RangeError(`Mismatched change set length (got ${h.length}, expected ${t})`);a(),l=l?l.compose(h.map(l)):h}else{let{from:c,to:f=c,insert:d}=h;if(c>f||c<0||f>t)throw new RangeError(`Invalid change range ${c} to ${f} (in doc of length ${t})`);let p=d?typeof d=="string"?_.of(d.split(i||Gs)):d:_.empty,m=p.length;if(c==f&&m==0)return;c<o&&a(),c>o&&ye(r,c-o,-1),ye(r,f-c,m),At(s,r,p),o=f}}return u(e),a(!l),l}static empty(e){return new ie(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let r=0;r<e.length;r++){let s=e[r];if(typeof s=="number")t.push(s,-1);else{if(!Array.isArray(s)||typeof s[0]!="number"||s.some((o,l)=>l&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(s.length==1)t.push(s[0],0);else{for(;i.length<r;)i.push(_.empty);i[r]=_.of(s.slice(1)),t.push(s[0],i[r].length)}}}return new ie(t,i)}static createSet(e,t){return new ie(e,t)}};function ye(n,e,t,i=!1){if(e==0&&t<=0)return;let r=n.length-2;r>=0&&t<=0&&t==n[r+1]?n[r]+=e:e==0&&n[r]==0?n[r+1]+=t:i?(n[r]+=e,n[r+1]+=t):n.push(e,t)}function At(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i<n.length)n[n.length-1]=n[n.length-1].append(t);else{for(;n.length<i;)n.push(_.empty);n.push(t)}}function js(n,e,t){let i=n.inserted;for(let r=0,s=0,o=0;o<n.sections.length;){let l=n.sections[o++],a=n.sections[o++];if(a<0)r+=l,s+=l;else{let u=r,h=s,c=_.empty;for(;u+=l,h+=a,a&&i&&(c=c.append(i[o-2>>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(r,u,s,h,c),r=u,s=h}}}function Js(n,e,t,i=!1){let r=[],s=i?[]:null,o=new ui(n),l=new ui(e);for(let a=-1;;)if(o.ins==-1&&l.ins==-1){let u=Math.min(o.len,l.len);ye(r,u,-1),o.forward(u),l.forward(u)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len<o.len||l.len==o.len&&!t))){let u=l.len;for(ye(r,l.ins,-1);u;){let h=Math.min(o.len,u);o.ins>=0&&a<o.i&&o.len<=h&&(ye(r,0,o.ins),s&&At(s,r,o.text),a=o.i),o.forward(h),u-=h}l.next()}else if(o.ins>=0){let u=0,h=o.len;for(;h;)if(l.ins==-1){let c=Math.min(h,l.len);u+=c,h-=c,l.forward(c)}else if(l.ins==0&&l.len<h)h-=l.len,l.next();else break;ye(r,u,a<o.i?o.ins:0),s&&a<o.i&&At(s,r,o.text),a=o.i,o.forward(o.len-h)}else{if(o.done&&l.done)return s?ie.createSet(r,s):Re.create(r);throw new Error("Mismatched change set lengths")}}function wu(n,e,t=!1){let i=[],r=t?[]:null,s=new ui(n),o=new ui(e);for(let l=!1;;){if(s.done&&o.done)return r?ie.createSet(i,r):Re.create(i);if(s.ins==0)ye(i,s.len,0,l),s.next();else if(o.len==0&&!o.done)ye(i,0,o.ins,l),r&&At(r,i,o.text),o.next();else{if(s.done||o.done)throw new Error("Mismatched change set lengths");{let a=Math.min(s.len2,o.len),u=i.length;if(s.ins==-1){let h=o.ins==-1?-1:o.off?0:o.ins;ye(i,a,h,l),r&&h&&At(r,i,o.text)}else o.ins==-1?(ye(i,s.off?0:s.len,a,l),r&&At(r,i,s.textBit(a))):(ye(i,s.off?0:s.len,o.off?0:o.ins,l),r&&!o.off&&At(r,i,o.text));l=(s.ins>a||o.ins>=0&&o.len>a)&&(l||i.length>u),s.forward2(a),o.forward(a)}}}}var ui=class{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i<e.length?(this.len=e[this.i++],this.ins=e[this.i++]):(this.len=0,this.ins=-2),this.off=0}get done(){return this.ins==-2}get len2(){return this.ins<0?this.len:this.ins}get text(){let{inserted:e}=this.set,t=this.i-2>>1;return t>=e.length?_.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?_.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},dt=class{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&16?this.to:this.from}get head(){return this.flags&16?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&4?-1:this.flags&8?1:0}get bidiLevel(){let e=this.flags&3;return e==3?null:e}get goalColumn(){let e=this.flags>>5;return e==33554431?void 0:e}map(e,t=-1){let i,r;return this.empty?i=r=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),r=e.mapPos(this.to,-1)),i==this.from&&r==this.to?this:new dt(i,r,this.flags)}extend(e,t=e){if(e<=this.anchor&&t>=this.anchor)return T.range(e,t);let i=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return T.range(this.anchor,i)}eq(e){return this.anchor==e.anchor&&this.head==e.head}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return T.range(e.anchor,e.head)}static create(e,t,i){return new dt(e,t,i)}},T=class{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:T.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let t=0;t<this.ranges.length;t++)if(!this.ranges[t].eq(e.ranges[t]))return!1;return!0}get main(){return this.ranges[this.mainIndex]}asSingle(){return this.ranges.length==1?this:new T([this.main],0)}addRange(e,t=!0){return T.create([e].concat(this.ranges),t?0:this.mainIndex+1)}replaceRange(e,t=this.mainIndex){let i=this.ranges.slice();return i[t]=e,T.create(i,this.mainIndex)}toJSON(){return{ranges:this.ranges.map(e=>e.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new T(e.ranges.map(t=>dt.fromJSON(t)),e.main)}static single(e,t=e){return new T([T.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,r=0;r<e.length;r++){let s=e[r];if(s.empty?s.from<=i:s.from<i)return T.normalized(e.slice(),t);i=s.to}return new T(e,t)}static cursor(e,t=0,i,r){return dt.create(e,e,(t==0?0:t<0?4:8)|(i==null?3:Math.min(2,i))|(r!=null?r:33554431)<<5)}static range(e,t,i,r){let s=(i!=null?i:33554431)<<5|(r==null?3:Math.min(2,r));return t<e?dt.create(t,e,24|s):dt.create(e,t,(t>e?4:0)|s)}static normalized(e,t=0){let i=e[t];e.sort((r,s)=>r.from-s.from),t=e.indexOf(i);for(let r=1;r<e.length;r++){let s=e[r],o=e[r-1];if(s.empty?s.from<=o.to:s.from<o.to){let l=o.from,a=Math.max(s.to,o.to);r<=t&&t--,e.splice(--r,2,s.anchor>s.head?T.range(a,l):T.range(l,a))}}return new T(e,t)}};function vu(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}var no=0,N=class{constructor(e,t,i,r,s){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=r,this.id=no++,this.default=e([]),this.extensions=typeof s=="function"?s(this):s}static define(e={}){return new N(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:ro),!!e.static,e.enables)}of(e){return new Di([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Di(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Di(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}};function ro(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}var Di=class{constructor(e,t,i,r){this.dependencies=e,this.facet=t,this.type=i,this.value=r,this.id=no++}dynamicSlot(e){var t;let i=this.value,r=this.facet.compareInput,s=this.id,o=e[s]>>1,l=this.type==2,a=!1,u=!1,h=[];for(let c of this.dependencies)c=="doc"?a=!0:c=="selection"?u=!0:((t=e[c.id])!==null&&t!==void 0?t:1)&1||h.push(e[c.id]);return{create(c){return c.values[o]=i(c),1},update(c,f){if(a&&f.docChanged||u&&(f.docChanged||f.selection)||Qs(c,h)){let d=i(c);if(l?!cu(d,c.values[o],r):!r(d,c.values[o]))return c.values[o]=d,1}return 0},reconfigure:(c,f)=>{let d,p=f.config.address[s];if(p!=null){let m=xr(f,p);if(this.dependencies.every(g=>g instanceof N?f.facet(g)===c.facet(g):g instanceof De?f.field(g,!1)==c.field(g,!1):!0)||(l?cu(d=i(c),m,r):r(d=i(c),m)))return c.values[o]=m,0}else d=i(c);return c.values[o]=d,1}}}};function cu(n,e,t){if(n.length!=e.length)return!1;for(let i=0;i<n.length;i++)if(!t(n[i],e[i]))return!1;return!0}function Qs(n,e){let t=!1;for(let i of e)yn(n,i)&1&&(t=!0);return t}function Pm(n,e,t){let i=t.map(a=>n[a.id]),r=t.map(a=>a.type),s=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let u=[];for(let h=0;h<i.length;h++){let c=xr(a,i[h]);if(r[h]==2)for(let f of c)u.push(f);else u.push(c)}return e.combine(u)}return{create(a){for(let u of i)yn(a,u);return a.values[o]=l(a),1},update(a,u){if(!Qs(a,s))return 0;let h=l(a);return e.compare(h,a.values[o])?0:(a.values[o]=h,1)},reconfigure(a,u){let h=Qs(a,i),c=u.config.facets[e.id],f=u.facet(e);if(c&&!h&&ro(t,c))return a.values[o]=f,0;let d=l(a);return e.compare(d,f)?(a.values[o]=f,0):(a.values[o]=d,1)}}}var fu=N.define({static:!0}),De=class{constructor(e,t,i,r,s){this.id=e,this.createF=t,this.updateF=i,this.compareF=r,this.spec=s,this.provides=void 0}static define(e){let t=new De(no++,e.create,e.update,e.compare||((i,r)=>i===r),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(fu).find(i=>i.field==this);return((t==null?void 0:t.create)||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,r)=>{let s=i.values[t],o=this.updateF(s,r);return this.compareF(s,o)?0:(i.values[t]=o,1)},reconfigure:(i,r)=>r.config.address[this.id]!=null?(i.values[t]=r.field(this),0):(i.values[t]=this.create(i),1)}}init(e){return[this,fu.of({field:this,create:e})]}get extension(){return this}},oi={lowest:4,low:3,default:2,high:1,highest:0};function bn(n){return e=>new Sr(e,n)}var Oi={highest:bn(oi.highest),high:bn(oi.high),default:bn(oi.default),low:bn(oi.low),lowest:bn(oi.lowest)},Sr=class{constructor(e,t){this.inner=e,this.prec=t}},Pi=class{of(e){return new wn(this,e)}reconfigure(e){return Pi.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}},wn=class{constructor(e,t){this.compartment=e,this.inner=t}},Ei=class{constructor(e,t,i,r,s,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=r,this.staticValues=s,this.facets=o,this.statusTemplate=[];this.statusTemplate.length<i.length;)this.statusTemplate.push(0)}staticFacet(e){let t=this.address[e.id];return t==null?e.default:this.staticValues[t>>1]}static resolve(e,t,i){let r=[],s=Object.create(null),o=new Map;for(let f of Em(e,t,o))f instanceof De?r.push(f):(s[f.facet.id]||(s[f.facet.id]=[])).push(f);let l=Object.create(null),a=[],u=[];for(let f of r)l[f.id]=u.length<<1,u.push(d=>f.slot(d));let h=i==null?void 0:i.config.facets;for(let f in s){let d=s[f],p=d[0].facet,m=h&&h[f]||[];if(d.every(g=>g.type==0))if(l[p.id]=a.length<<1|1,ro(m,d))a.push(i.facet(p));else{let g=p.combine(d.map(b=>b.value));a.push(i&&p.compare(g,i.facet(p))?i.facet(p):g)}else{for(let g of d)g.type==0?(l[g.id]=a.length<<1|1,a.push(g.value)):(l[g.id]=u.length<<1,u.push(b=>g.dynamicSlot(b)));l[p.id]=u.length<<1,u.push(g=>Pm(g,p,d))}}let c=u.map(f=>f(l));return new Ei(e,o,c,l,a,s)}};function Em(n,e,t){let i=[[],[],[],[],[]],r=new Map;function s(o,l){let a=r.get(o);if(a!=null){if(a<=l)return;let u=i[a].indexOf(o);u>-1&&i[a].splice(u,1),o instanceof wn&&t.delete(o.compartment)}if(r.set(o,l),Array.isArray(o))for(let u of o)s(u,l);else if(o instanceof wn){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let u=e.get(o.compartment)||o.inner;t.set(o.compartment,u),s(u,l)}else if(o instanceof Sr)s(o.inner,o.prec);else if(o instanceof De)i[l].push(o),o.provides&&s(o.provides,l);else if(o instanceof Di)i[l].push(o),o.facet.extensions&&s(o.facet.extensions,oi.default);else{let u=o.extension;if(!u)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(u,l)}}return s(n,oi.default),i.reduce((o,l)=>o.concat(l))}function yn(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let r=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|r}function xr(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}var Cu=N.define(),Su=N.define({combine:n=>n.some(e=>e),static:!0}),xu=N.define({combine:n=>n.length?n[0]:void 0,static:!0}),ku=N.define(),Mu=N.define(),Tu=N.define(),Ru=N.define({combine:n=>n.length?n[0]:!1}),Ie=class{constructor(e,t){this.type=e,this.value=t}static define(){return new Xs}},Xs=class{of(e){return new Ie(this,e)}},Ys=class{constructor(e){this.map=e}of(e){return new Z(this,e)}},Z=class{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new Z(this.type,t)}is(e){return this.type==e}static define(e={}){return new Ys(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let r of e){let s=r.map(t);s&&i.push(s)}return i}};Z.reconfigure=Z.define();Z.appendConfig=Z.define();var ne=class{constructor(e,t,i,r,s,o){this.startState=e,this.changes=t,this.selection=i,this.effects=r,this.annotations=s,this.scrollIntoView=o,this._doc=null,this._state=null,i&&vu(i,t.newLength),s.some(l=>l.type==ne.time)||(this.annotations=s.concat(ne.time.of(Date.now())))}static create(e,t,i,r,s,o){return new ne(e,t,i,r,s,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(ne.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}};ne.time=Ie.define();ne.userEvent=Ie.define();ne.addToHistory=Ie.define();ne.remote=Ie.define();function Om(n,e){let t=[];for(let i=0,r=0;;){let s,o;if(i<n.length&&(r==e.length||e[r]>=n[i]))s=n[i++],o=n[i++];else if(r<e.length)s=e[r++],o=e[r++];else return t;!t.length||t[t.length-1]<s?t.push(s,o):t[t.length-1]<o&&(t[t.length-1]=o)}}function Du(n,e,t){var i;let r,s,o;return t?(r=e.changes,s=ie.empty(e.changes.length),o=n.changes.compose(e.changes)):(r=e.changes.map(n.changes),s=n.changes.mapDesc(e.changes,!0),o=n.changes.compose(r)),{changes:o,selection:e.selection?e.selection.map(s):(i=n.selection)===null||i===void 0?void 0:i.map(r),effects:Z.mapEffects(n.effects,r).concat(Z.mapEffects(e.effects,s)),annotations:n.annotations.length?n.annotations.concat(e.annotations):e.annotations,scrollIntoView:n.scrollIntoView||e.scrollIntoView}}function Zs(n,e,t){let i=e.selection,r=Ai(e.annotations);return e.userEvent&&(r=r.concat(ne.userEvent.of(e.userEvent))),{changes:e.changes instanceof ie?e.changes:ie.of(e.changes||[],t,n.facet(xu)),selection:i&&(i instanceof T?i:T.single(i.anchor,i.head)),effects:Ai(e.effects),annotations:r,scrollIntoView:!!e.scrollIntoView}}function Au(n,e,t){let i=Zs(n,e.length?e[0]:{},n.doc.length);e.length&&e[0].filter===!1&&(t=!1);for(let s=1;s<e.length;s++){e[s].filter===!1&&(t=!1);let o=!!e[s].sequential;i=Du(i,Zs(n,e[s],o?i.changes.newLength:n.doc.length),o)}let r=ne.create(n,i.changes,i.selection,i.effects,i.annotations,i.scrollIntoView);return Vm(t?Im(r):r)}function Im(n){let e=n.startState,t=!0;for(let r of e.facet(ku)){let s=r(n);if(s===!1){t=!1;break}Array.isArray(s)&&(t=t===!0?s:Om(t,s))}if(t!==!0){let r,s;if(t===!1)s=n.changes.invertedDesc,r=ie.empty(e.doc.length);else{let o=n.changes.filter(t);r=o.changes,s=o.filtered.mapDesc(o.changes).invertedDesc}n=ne.create(e,r,n.selection&&n.selection.map(s),Z.mapEffects(n.effects,s),n.annotations,n.scrollIntoView)}let i=e.facet(Mu);for(let r=i.length-1;r>=0;r--){let s=i[r](n);s instanceof ne?n=s:Array.isArray(s)&&s.length==1&&s[0]instanceof ne?n=s[0]:n=Au(e,Ai(s),!1)}return n}function Vm(n){let e=n.startState,t=e.facet(Tu),i=n;for(let r=t.length-1;r>=0;r--){let s=t[r](n);s&&Object.keys(s).length&&(i=Du(i,Zs(e,s,n.changes.newLength),!0))}return i==n?n:ne.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}var Lm=[];function Ai(n){return n==null?Lm:Array.isArray(n)?n:[n]}var $e=function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n}($e||($e={})),Nm=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,eo;try{eo=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function Bm(n){if(eo)return eo.test(n);for(let e=0;e<n.length;e++){let t=n[e];if(/\w/.test(t)||t>"\x80"&&(t.toUpperCase()!=t.toLowerCase()||Nm.test(t)))return!0}return!1}function Fm(n){return e=>{if(!/\S/.test(e))return $e.Space;if(Bm(e))return $e.Word;for(let t=0;t<n.length;t++)if(e.indexOf(n[t])>-1)return $e.Word;return $e.Other}}var U=class{constructor(e,t,i,r,s,o){this.config=e,this.doc=t,this.selection=i,this.values=r,this.status=e.statusTemplate.slice(),this.computeSlot=s,o&&(o._state=this);for(let l=0;l<this.config.dynamicSlots.length;l++)yn(this,l<<1);this.computeSlot=null}field(e,t=!0){let i=this.config.address[e.id];if(i==null){if(t)throw new RangeError("Field is not present in this state");return}return yn(this,i),xr(this,i)}update(...e){return Au(this,e,!0)}applyTransaction(e){let t=this.config,{base:i,compartments:r}=t;for(let o of e.effects)o.is(Pi.reconfigure)?(t&&(r=new Map,t.compartments.forEach((l,a)=>r.set(a,l)),t=null),r.set(o.value.compartment,o.value.extension)):o.is(Z.reconfigure)?(t=null,i=o.value):o.is(Z.appendConfig)&&(t=null,i=Ai(i).concat(o.value));let s;t?s=e.startState.values.slice():(t=Ei.resolve(i,r,this),s=new U(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(l,a)=>a.reconfigure(l,this),null).values),new U(t,e.newDoc,e.newSelection,s,(o,l)=>l.update(o,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:T.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),r=this.changes(i.changes),s=[i.range],o=Ai(i.effects);for(let l=1;l<t.ranges.length;l++){let a=e(t.ranges[l]),u=this.changes(a.changes),h=u.map(r);for(let f=0;f<l;f++)s[f]=s[f].map(h);let c=r.mapDesc(u,!0);s.push(a.range.map(c)),r=r.compose(h),o=Z.mapEffects(o,h).concat(Z.mapEffects(Ai(a.effects),c))}return{changes:r,selection:T.create(s,t.mainIndex),effects:o}}changes(e=[]){return e instanceof ie?e:ie.of(e,this.doc.length,this.facet(U.lineSeparator))}toText(e){return _.of(e.split(this.facet(U.lineSeparator)||Gs))}sliceDoc(e=0,t=this.doc.length){return this.doc.sliceString(e,t,this.lineBreak)}facet(e){let t=this.config.address[e.id];return t==null?e.default:(yn(this,t),xr(this,t))}toJSON(e){let t={doc:this.sliceDoc(),selection:this.selection.toJSON()};if(e)for(let i in e){let r=e[i];r instanceof De&&this.config.address[r.id]!=null&&(t[i]=r.spec.toJSON(this.field(e[i]),this))}return t}static fromJSON(e,t={},i){if(!e||typeof e.doc!="string")throw new RangeError("Invalid JSON representation for EditorState");let r=[];if(i){for(let s in i)if(Object.prototype.hasOwnProperty.call(e,s)){let o=i[s],l=e[s];r.push(o.init(a=>o.spec.fromJSON(l,a)))}}return U.create({doc:e.doc,selection:T.fromJSON(e.selection),extensions:t.extensions?r.concat([t.extensions]):r})}static create(e={}){let t=Ei.resolve(e.extensions||[],new Map),i=e.doc instanceof _?e.doc:_.of((e.doc||"").split(t.staticFacet(U.lineSeparator)||Gs)),r=e.selection?e.selection instanceof T?e.selection:T.single(e.selection.anchor,e.selection.head):T.single(0);return vu(r,i.length),t.staticFacet(Su)||(r=r.asSingle()),new U(t,i,r,t.dynamicSlots.map(()=>null),(s,o)=>o.create(s),null)}get tabSize(){return this.facet(U.tabSize)}get lineBreak(){return this.facet(U.lineSeparator)||`
5
- `}get readOnly(){return this.facet(Ru)}phrase(e,...t){for(let i of this.facet(U.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,r)=>{if(r=="$")return"$";let s=+(r||1);return!s||s>t.length?i:t[s-1]})),e}languageDataAt(e,t,i=-1){let r=[];for(let s of this.facet(Cu))for(let o of s(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&r.push(o[e]);return r}charCategorizer(e){return Fm(this.languageDataAt("wordChars",e).join(""))}wordAt(e){let{text:t,from:i,length:r}=this.doc.lineAt(e),s=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=Ce(t,o,!1);if(s(t.slice(a,o))!=$e.Word)break;o=a}for(;l<r;){let a=Ce(t,l);if(s(t.slice(l,a))!=$e.Word)break;l=a}return o==l?null:T.range(o+i,l+i)}};U.allowMultipleSelections=Su;U.tabSize=N.define({combine:n=>n.length?n[0]:4});U.lineSeparator=xu;U.readOnly=Ru;U.phrases=N.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(r=>n[r]==e[r])}});U.languageData=Cu;U.changeFilter=ku;U.transactionFilter=Mu;U.transactionExtender=Tu;Pi.reconfigure=Z.define();function Ii(n,e,t={}){let i={};for(let r of n)for(let s of Object.keys(r)){let o=r[s],l=i[s];if(l===void 0)i[s]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,s))i[s]=t[s](l,o);else throw new Error("Config merge conflict for field "+s)}for(let r in e)i[r]===void 0&&(i[r]=e[r]);return i}var pt=class{eq(e){return this==e}range(e,t=e){return hi.create(e,t,this)}};pt.prototype.startSide=pt.prototype.endSide=0;pt.prototype.point=!1;pt.prototype.mapMode=xe.TrackDel;var hi=class{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new hi(e,t,i)}};function to(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}var vn=class{constructor(e,t,i,r){this.from=e,this.to=t,this.value=i,this.maxPoint=r}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,r=0){let s=i?this.to:this.from;for(let o=r,l=s.length;;){if(o==l)return o;let a=o+l>>1,u=s[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return u>=0?o:l;u>=0?l=a:o=a+1}}between(e,t,i,r){for(let s=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,s);s<o;s++)if(r(this.from[s]+e,this.to[s]+e,this.value[s])===!1)return!1}map(e,t){let i=[],r=[],s=[],o=-1,l=-1;for(let a=0;a<this.value.length;a++){let u=this.value[a],h=this.from[a]+e,c=this.to[a]+e,f,d;if(h==c){let p=t.mapPos(h,u.startSide,u.mapMode);if(p==null||(f=d=p,u.startSide!=u.endSide&&(d=t.mapPos(h,u.endSide),d<f)))continue}else if(f=t.mapPos(h,u.startSide),d=t.mapPos(c,u.endSide),f>d||f==d&&u.startSide>0&&u.endSide<=0)continue;(d-f||u.endSide-u.startSide)<0||(o<0&&(o=f),u.point&&(l=Math.max(l,d-f)),i.push(u),r.push(f-o),s.push(d-o))}return{mapped:i.length?new vn(r,s,i,l):null,pos:o}}},Y=class{constructor(e,t,i,r){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=r}static create(e,t,i,r){return new Y(e,t,i,r)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:r=0,filterTo:s=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(to)),this.isEmpty)return t.length?Y.of(t):this;let l=new kr(this,null,-1).goto(0),a=0,u=[],h=new Xe;for(;l.value||a<t.length;)if(a<t.length&&(l.from-t[a].from||l.startSide-t[a].value.startSide)>=0){let c=t[a++];h.addInner(c.from,c.to,c.value)||u.push(c)}else l.rangeIndex==1&&l.chunkIndex<this.chunk.length&&(a==t.length||this.chunkEnd(l.chunkIndex)<t[a].from)&&(!o||r>this.chunkEnd(l.chunkIndex)||s<this.chunkPos[l.chunkIndex])&&h.addChunk(this.chunkPos[l.chunkIndex],this.chunk[l.chunkIndex])?l.nextChunk():((!o||r>l.to||s<l.from||o(l.from,l.to,l.value))&&(h.addInner(l.from,l.to,l.value)||u.push(hi.create(l.from,l.to,l.value))),l.next());return h.finishInner(this.nextLayer.isEmpty&&!u.length?Y.empty:this.nextLayer.update({add:u,filter:o,filterFrom:r,filterTo:s}))}map(e){if(e.empty||this.isEmpty)return this;let t=[],i=[],r=-1;for(let o=0;o<this.chunk.length;o++){let l=this.chunkPos[o],a=this.chunk[o],u=e.touchesRange(l,l+a.length);if(u===!1)r=Math.max(r,a.maxPoint),t.push(a),i.push(e.mapPos(l));else if(u===!0){let{mapped:h,pos:c}=a.map(l,e);h&&(r=Math.max(r,h.maxPoint),t.push(h),i.push(c))}}let s=this.nextLayer.map(e);return t.length==0?s:new Y(i,t,s||Y.empty,r)}between(e,t,i){if(!this.isEmpty){for(let r=0;r<this.chunk.length;r++){let s=this.chunkPos[r],o=this.chunk[r];if(t>=s&&e<=s+o.length&&o.between(s,e-s,t-s,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return ci.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return ci.from(e).goto(t)}static compare(e,t,i,r,s=-1){let o=e.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),l=t.filter(c=>c.maxPoint>0||!c.isEmpty&&c.maxPoint>=s),a=du(o,l,i),u=new li(o,a,s),h=new li(l,a,s);i.iterGaps((c,f,d)=>pu(u,c,h,f,d,r)),i.empty&&i.length==0&&pu(u,0,h,0,0,r)}static eq(e,t,i=0,r){r==null&&(r=1e9-1);let s=e.filter(h=>!h.isEmpty&&t.indexOf(h)<0),o=t.filter(h=>!h.isEmpty&&e.indexOf(h)<0);if(s.length!=o.length)return!1;if(!s.length)return!0;let l=du(s,o),a=new li(s,l,0).goto(i),u=new li(o,l,0).goto(i);for(;;){if(a.to!=u.to||!io(a.active,u.active)||a.point&&(!u.point||!a.point.eq(u.point)))return!1;if(a.to>r)return!0;a.next(),u.next()}}static spans(e,t,i,r,s=-1){let o=new li(e,null,s).goto(t),l=t,a=o.openStart;for(;;){let u=Math.min(o.to,i);if(o.point){let h=o.activeForPoint(o.to),c=o.pointFrom<t?h.length+1:Math.min(h.length,a);r.point(l,u,o.point,h,c,o.pointRank),a=Math.min(o.openEnd(u),h.length)}else u>l&&(r.span(l,u,o.active,a),a=o.openEnd(u));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new Xe;for(let r of e instanceof hi?[e]:t?Hm(e):e)i.add(r.from,r.to,r.value);return i.finish()}};Y.empty=new Y([],[],null,-1);function Hm(n){if(n.length>1)for(let e=n[0],t=1;t<n.length;t++){let i=n[t];if(to(e,i)>0)return n.slice().sort(to);e=i}return n}Y.empty.nextLayer=Y.empty;var Xe=class{constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}finishChunk(e){this.chunks.push(new vn(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new Xe)).add(e,t,i)}addInner(e,t,i){let r=e-this.lastTo||i.startSide-this.last.endSide;if(r<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return r<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(Y.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=Y.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}};function du(n,e,t){let i=new Map;for(let s of n)for(let o=0;o<s.chunk.length;o++)s.chunk[o].maxPoint<=0&&i.set(s.chunk[o],s.chunkPos[o]);let r=new Set;for(let s of e)for(let o=0;o<s.chunk.length;o++){let l=i.get(s.chunk[o]);l!=null&&(t?t.mapPos(l):l)==s.chunkPos[o]&&!(t!=null&&t.touchesRange(l,l+s.chunk[o].length))&&r.add(s.chunk[o])}return r}var kr=class{constructor(e,t,i,r=0){this.layer=e,this.skip=t,this.minPoint=i,this.rank=r}get startSide(){return this.value?this.value.startSide:0}get endSide(){return this.value?this.value.endSide:0}goto(e,t=-1e9){return this.chunkIndex=this.rangeIndex=0,this.gotoInner(e,t,!1),this}gotoInner(e,t,i){for(;this.chunkIndex<this.layer.chunk.length;){let r=this.layer.chunk[this.chunkIndex];if(!(this.skip&&this.skip.has(r)||this.layer.chunkEnd(this.chunkIndex)<e||r.maxPoint<this.minPoint))break;this.chunkIndex++,i=!1}if(this.chunkIndex<this.layer.chunk.length){let r=this.layer.chunk[this.chunkIndex].findIndex(e-this.layer.chunkPos[this.chunkIndex],t,!0);(!i||this.rangeIndex<r)&&this.setRangeIndex(r)}this.next()}forward(e,t){(this.to-e||this.endSide-t)<0&&this.gotoInner(e,t,!0)}next(){for(;;)if(this.chunkIndex==this.layer.chunk.length){this.from=this.to=1e9,this.value=null;break}else{let e=this.layer.chunkPos[this.chunkIndex],t=this.layer.chunk[this.chunkIndex],i=e+t.from[this.rangeIndex];if(this.from=i,this.to=e+t.to[this.rangeIndex],this.value=t.value[this.rangeIndex],this.setRangeIndex(this.rangeIndex+1),this.minPoint<0||this.value.point&&this.to-this.from>=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex<this.layer.chunk.length&&this.skip.has(this.layer.chunk[this.chunkIndex]);)this.chunkIndex++;this.rangeIndex=0}else this.rangeIndex=e}nextChunk(){this.chunkIndex++,this.rangeIndex=0,this.next()}compare(e){return this.from-e.from||this.startSide-e.startSide||this.rank-e.rank||this.to-e.to||this.endSide-e.endSide}},ci=class{constructor(e){this.heap=e}static from(e,t=null,i=-1){let r=[];for(let s=0;s<e.length;s++)for(let o=e[s];!o.isEmpty;o=o.nextLayer)o.maxPoint>=i&&r.push(new kr(o,t,i,s));return r.length==1?r[0]:new ci(r)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)Ks(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)Ks(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Ks(this.heap,0)}}};function Ks(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let r=n[i];if(i+1<n.length&&r.compare(n[i+1])>=0&&(r=n[i+1],i++),t.compare(r)<0)break;n[i]=t,n[e]=r,e=i}}var li=class{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=ci.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){gr(this.active,e),gr(this.activeTo,e),gr(this.activeRank,e),this.minActive=mu(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:r,rank:s}=this.cursor;for(;t<this.activeRank.length&&this.activeRank[t]<=s;)t++;br(this.active,t,i),br(this.activeTo,t,r),br(this.activeRank,t,s),e&&br(e,t,this.cursor.from),this.minActive=mu(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let r=this.minActive;if(r>-1&&(this.activeTo[r]-this.cursor.from||this.active[r].endSide-this.cursor.startSide)<0){if(this.activeTo[r]>e){this.to=this.activeTo[r],this.endSide=this.active[r].endSide;break}this.removeActive(r),i&&gr(i,r)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let s=this.cursor.value;if(!s.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from<this.cursor.to)this.cursor.next();else{this.point=s,this.pointFrom=this.cursor.from,this.pointRank=this.cursor.rank,this.to=this.cursor.to,this.endSide=s.endSide,this.cursor.next(),this.forward(this.to,this.endSide);break}}else{this.to=this.endSide=1e9;break}}if(i){this.openStart=0;for(let r=i.length-1;r>=0&&i[r]<e;r--)this.openStart++}}activeForPoint(e){if(!this.active.length)return this.active;let t=[];for(let i=this.active.length-1;i>=0&&!(this.activeRank[i]<this.pointRank);i--)(this.activeTo[i]>e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}};function pu(n,e,t,i,r,s){n.goto(e),t.goto(i);let o=i+r,l=i,a=i-e;for(;;){let u=n.to+a-t.to||n.endSide-t.endSide,h=u<0?n.to+a:t.to,c=Math.min(h,o);if(n.point||t.point?n.point&&t.point&&(n.point==t.point||n.point.eq(t.point))&&io(n.activeForPoint(n.to+a),t.activeForPoint(t.to))||s.comparePoint(l,c,n.point,t.point):c>l&&!io(n.active,t.active)&&s.compareRange(l,c,n.active,t.active),h>o)break;l=h,u<=0&&n.next(),u>=0&&t.next()}}function io(n,e){if(n.length!=e.length)return!1;for(let t=0;t<n.length;t++)if(n[t]!=e[t]&&!n[t].eq(e[t]))return!1;return!0}function gr(n,e){for(let t=e,i=n.length-1;t<i;t++)n[t]=n[t+1];n.pop()}function br(n,e,t){for(let i=n.length-1;i>=e;i--)n[i+1]=n[i];n[e]=t}function mu(n,e){let t=-1,i=1e9;for(let r=0;r<e.length;r++)(e[r]-i||n[r].endSide-n[t].endSide)<0&&(t=r,i=e[r]);return t}function fi(n,e,t=n.length){let i=0;for(let r=0;r<t;)n.charCodeAt(r)==9?(i+=e-i%e,r++):(i++,r=Ce(n,r));return i}function Pu(n,e,t,i){for(let r=0,s=0;;){if(s>=e)return r;if(r==n.length)break;s+=n.charCodeAt(r)==9?t-s%t:1,r=Ce(n,r)}return i===!0?-1:n.length}var so="\u037C",Eu=typeof Symbol>"u"?"__"+so:Symbol.for(so),oo=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Ou=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{},Ve=class{constructor(e,t){this.rules=[];let{finish:i}=t||{};function r(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function s(o,l,a,u){let h=[],c=/^@(\w+)\b/.exec(o[0]),f=c&&c[1]=="keyframes";if(c&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))s(d.split(/,\s*/).map(m=>o.map(g=>m.replace(/&/,g))).reduce((m,g)=>m.concat(g)),p,a);else if(p&&typeof p=="object"){if(!c)throw new RangeError("The value of a property ("+d+") should be a primitive value.");s(r(d),p,h,f)}else p!=null&&h.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(h.length||f)&&a.push((i&&!c&&!u?o.map(i):o).join(", ")+" {"+h.join(" ")+"}")}for(let o in e)s(r(o),e[o],this.rules)}getRules(){return this.rules.join(`
6
- `)}static newName(){let e=Ou[Eu]||1;return Ou[Eu]=e+1,so+e.toString(36)}static mount(e,t){(e[oo]||new lo(e)).mount(Array.isArray(t)?t:[t])}},Mr=null,lo=class{constructor(e){if(!e.head&&e.adoptedStyleSheets&&typeof CSSStyleSheet<"u"){if(Mr)return e.adoptedStyleSheets=[Mr.sheet,...e.adoptedStyleSheets],e[oo]=Mr;this.sheet=new CSSStyleSheet,e.adoptedStyleSheets=[this.sheet,...e.adoptedStyleSheets],Mr=this}else{this.styleTag=(e.ownerDocument||e).createElement("style");let t=e.head||e;t.insertBefore(this.styleTag,t.firstChild)}this.modules=[],e[oo]=this}mount(e){let t=this.sheet,i=0,r=0;for(let s=0;s<e.length;s++){let o=e[s],l=this.modules.indexOf(o);if(l<r&&l>-1&&(this.modules.splice(l,1),r--,l=-1),l==-1){if(this.modules.splice(r++,0,o),t)for(let a=0;a<o.rules.length;a++)t.insertRule(o.rules[a],i++)}else{for(;r<l;)i+=this.modules[r++].rules.length;i+=o.rules.length,r++}}if(!t){let s="";for(let o=0;o<this.modules.length;o++)s+=this.modules[o].getRules()+`
7
- `;this.styleTag.textContent=s}}};var mt={8:"Backspace",9:"Tab",10:"Enter",12:"NumLock",13:"Enter",16:"Shift",17:"Control",18:"Alt",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",44:"PrintScreen",45:"Insert",46:"Delete",59:";",61:"=",91:"Meta",92:"Meta",106:"*",107:"+",108:",",109:"-",110:".",111:"/",144:"NumLock",145:"ScrollLock",160:"Shift",161:"Shift",162:"Control",163:"Control",164:"Alt",165:"Alt",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},Vi={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",61:"+",173:"_",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},Iu=typeof navigator<"u"&&/Chrome\/(\d+)/.exec(navigator.userAgent),zk=typeof navigator<"u"&&/Gecko\/\d+/.test(navigator.userAgent),Wm=typeof navigator<"u"&&/Mac/.test(navigator.platform),_m=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),zm=Wm||Iu&&+Iu[1]<57;for(oe=0;oe<10;oe++)mt[48+oe]=mt[96+oe]=String(oe);var oe;for(oe=1;oe<=24;oe++)mt[oe+111]="F"+oe;var oe;for(oe=65;oe<=90;oe++)mt[oe]=String.fromCharCode(oe+32),Vi[oe]=String.fromCharCode(oe);var oe;for(Tr in mt)Vi.hasOwnProperty(Tr)||(Vi[Tr]=mt[Tr]);var Tr;function Vu(n){var e=zm&&(n.ctrlKey||n.altKey||n.metaKey)||_m&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?Vi:mt)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function Br(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Fi(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function Um(n){let e=n.activeElement;for(;e&&e.shadowRoot;)e=e.shadowRoot.activeElement;return e}function Ir(n,e){if(!e.anchorNode)return!1;try{return Fi(n,e.anchorNode)}catch{return!1}}function Tn(n){return n.nodeType==3?Hi(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function Fr(n,e,t,i){return t?Lu(n,e,t,i,-1)||Lu(n,e,t,i,1):!1}function Hr(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function Lu(n,e,t,i,r){for(;;){if(n==t&&e==i)return!0;if(e==(r<0?0:Rn(n))){if(n.nodeName=="DIV")return!1;let s=n.parentNode;if(!s||s.nodeType!=1)return!1;e=Hr(n)+(r<0?0:1),n=s}else if(n.nodeType==1){if(n=n.childNodes[e+(r<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=r<0?Rn(n):0}else return!1}}function Rn(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}var ph={left:0,right:0,top:0,bottom:0};function Jo(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function $m(n){return{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function Km(n,e,t,i,r,s,o,l){let a=n.ownerDocument,u=a.defaultView||window;for(let h=n;h;)if(h.nodeType==1){let c,f=h==a.body;if(f)c=$m(u);else{if(h.scrollHeight<=h.clientHeight&&h.scrollWidth<=h.clientWidth){h=h.assignedSlot||h.parentNode;continue}let m=h.getBoundingClientRect();c={left:m.left,right:m.left+h.clientWidth,top:m.top,bottom:m.top+h.clientHeight}}let d=0,p=0;if(r=="nearest")e.top<c.top?(p=-(c.top-e.top+o),t>0&&e.bottom>c.bottom+p&&(p=e.bottom-c.bottom+p+o)):e.bottom>c.bottom&&(p=e.bottom-c.bottom+o,t<0&&e.top-p<c.top&&(p=-(c.top+p-e.top+o)));else{let m=e.bottom-e.top,g=c.bottom-c.top;p=(r=="center"&&m<=g?e.top+m/2-g/2:r=="start"||r=="center"&&t<0?e.top-o:e.bottom-g+o)-c.top}if(i=="nearest"?e.left<c.left?(d=-(c.left-e.left+s),t>0&&e.right>c.right+d&&(d=e.right-c.right+d+s)):e.right>c.right&&(d=e.right-c.right+s,t<0&&e.left<c.left+d&&(d=-(c.left+d-e.left+s))):d=(i=="center"?e.left+(e.right-e.left)/2-(c.right-c.left)/2:i=="start"==l?e.left-s:e.right-(c.right-c.left)+s)-c.left,d||p)if(f)u.scrollBy(d,p);else{let m=0,g=0;if(p){let b=h.scrollTop;h.scrollTop+=p,g=h.scrollTop-b}if(d){let b=h.scrollLeft;h.scrollLeft+=d,m=h.scrollLeft-b}e={left:e.left-m,top:e.top-g,right:e.right-m,bottom:e.bottom-g},m&&Math.abs(m-d)<1&&(i="nearest"),g&&Math.abs(g-p)<1&&(r="nearest")}if(f)break;h=h.assignedSlot||h.parentNode}else if(h.nodeType==11)h=h.host;else break}function qm(n){let e=n.ownerDocument;for(let t=n.parentNode;t&&t!=e.body;)if(t.nodeType==1){if(t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth)return t;t=t.assignedSlot||t.parentNode}else if(t.nodeType==11)t=t.host;else break;return null}var po=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){this.set(e.anchorNode,e.anchorOffset,e.focusNode,e.focusOffset)}set(e,t,i,r){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=r}},Li=null;function mh(n){if(n.setActive)return n.setActive();if(Li)return n.focus(Li);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(Li==null?{get preventScroll(){return Li={preventScroll:!0},!0}}:void 0),!Li){Li=!1;for(let t=0;t<e.length;){let i=e[t++],r=e[t++],s=e[t++];i.scrollTop!=r&&(i.scrollTop=r),i.scrollLeft!=s&&(i.scrollLeft=s)}}}var Nu;function Hi(n,e,t=e){let i=Nu||(Nu=document.createRange());return i.setEnd(n,t),i.setStart(n,e),i}function Bi(n,e,t){let i={key:e,code:e,keyCode:t,which:t,cancelable:!0},r=new KeyboardEvent("keydown",i);r.synthetic=!0,n.dispatchEvent(r);let s=new KeyboardEvent("keyup",i);return s.synthetic=!0,n.dispatchEvent(s),r.defaultPrevented||s.defaultPrevented}function Gm(n){for(;n;){if(n&&(n.nodeType==9||n.nodeType==11&&n.host))return n;n=n.assignedSlot||n.parentNode}return null}function gh(n){for(;n.attributes.length;)n.removeAttributeNode(n.attributes[0])}function jm(n,e){let t=e.focusNode,i=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=i)return!1;for(;;)if(i){if(t.nodeType!=1)return!1;let r=t.childNodes[i-1];r.contentEditable=="false"?i--:(t=r,i=Rn(t))}else{if(t==n)return!0;i=Hr(t),t=t.parentNode}}var he=class{constructor(e,t,i=!0){this.node=e,this.offset=t,this.precise=i}static before(e,t){return new he(e.parentNode,Hr(e),t)}static after(e,t){return new he(e.parentNode,Hr(e)+1,t)}},Qo=[],q=class{constructor(){this.parent=null,this.dom=null,this.dirty=2}get overrideDOMText(){return null}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e){let t=this.posAtStart;for(let i of this.children){if(i==e)return t;t+=i.length+i.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}coordsAt(e,t){return null}sync(e,t){if(this.dirty&2){let i=this.dom,r=null,s;for(let o of this.children){if(o.dirty){if(!o.dom&&(s=r?r.nextSibling:i.firstChild)){let l=q.get(s);(!l||!l.parent&&l.canReuseDOM(o))&&o.reuseDOM(s)}o.sync(e,t),o.dirty=0}if(s=r?r.nextSibling:i.firstChild,t&&!t.written&&t.node==i&&s!=o.dom&&(t.written=!0),o.dom.parentNode==i)for(;s&&s!=o.dom;)s=Bu(s);else i.insertBefore(o.dom,s);r=o.dom}for(s=r?r.nextSibling:i.firstChild,s&&t&&t.node==i&&(t.written=!0);s;)s=Bu(s)}else if(this.dirty&1)for(let i of this.children)i.dirty&&(i.sync(e,t),i.dirty=0)}reuseDOM(e){}localPosFromDOM(e,t){let i;if(e==this.dom)i=this.dom.childNodes[t];else{let r=Rn(e)==0?0:t==0?-1:1;for(;;){let s=e.parentNode;if(s==this.dom)break;r==0&&s.firstChild!=s.lastChild&&(e==s.firstChild?r=-1:r=1),e=s}r<0?i=e:i=e.nextSibling}if(i==this.dom.firstChild)return 0;for(;i&&!q.get(i);)i=i.nextSibling;if(!i)return this.length;for(let r=0,s=0;;r++){let o=this.children[r];if(o.dom==i)return s;s+=o.length+o.breakAfter}}domBoundsAround(e,t,i=0){let r=-1,s=-1,o=-1,l=-1;for(let a=0,u=i,h=i;a<this.children.length;a++){let c=this.children[a],f=u+c.length;if(u<e&&f>t)return c.domBoundsAround(e,t,u);if(f>=e&&r==-1&&(r=a,s=u),u>t&&c.dom.parentNode==this.dom){o=a,l=h;break}h=f,u=f+c.breakAfter}return{from:s,to:l<0?i+this.length:l,startDOM:(r?this.children[r-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:o<this.children.length&&o>=0?this.children[o].dom:null}}markDirty(e=!1){this.dirty|=2,this.markParentsDirty(e)}markParentsDirty(e){for(let t=this.parent;t;t=t.parent){if(e&&(t.dirty|=2),t.dirty&1)return;t.dirty|=1,e=!1}}setParent(e){this.parent!=e&&(this.parent=e,this.dirty&&this.markParentsDirty(!0))}setDOM(e){this.dom&&(this.dom.cmView=null),this.dom=e,e.cmView=this}get rootView(){for(let e=this;;){let t=e.parent;if(!t)return e;e=t}}replaceChildren(e,t,i=Qo){this.markDirty();for(let r=e;r<t;r++){let s=this.children[r];s.parent==this&&s.destroy()}this.children.splice(e,t-e,...i);for(let r=0;r<i.length;r++)i[r].setParent(this)}ignoreMutation(e){return!1}ignoreEvent(e){return!1}childCursor(e=this.length){return new Wr(this.children,e,this.children.length)}childPos(e,t=1){return this.childCursor().findPos(e,t)}toString(){let e=this.constructor.name.replace("View","");return e+(this.children.length?"("+this.children.join()+")":this.length?"["+(e=="Text"?this.text:this.length)+"]":"")+(this.breakAfter?"#":"")}static get(e){return e.cmView}get isEditable(){return!0}get isWidget(){return!1}merge(e,t,i,r,s,o){return!1}become(e){return!1}canReuseDOM(e){return e.constructor==this.constructor}getSide(){return 0}destroy(){this.parent=null}};q.prototype.breakAfter=0;function Bu(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}var Wr=class{constructor(e,t,i){this.children=e,this.pos=t,this.i=i,this.off=0}findPos(e,t=1){for(;;){if(e>this.pos||e==this.pos&&(t>0||this.i==0||this.children[this.i-1].breakAfter))return this.off=e-this.pos,this;let i=this.children[--this.i];this.pos-=i.length+i.breakAfter}}};function bh(n,e,t,i,r,s,o,l,a){let{children:u}=n,h=u.length?u[e]:null,c=s.length?s[s.length-1]:null,f=c?c.breakAfter:o;if(!(e==i&&h&&!o&&!f&&s.length<2&&h.merge(t,r,s.length?c:null,t==0,l,a))){if(i<u.length){let d=u[i];d&&r<d.length?(e==i&&(d=d.split(r),r=0),!f&&c&&d.merge(0,r,c,!0,0,a)?s[s.length-1]=d:(r&&d.merge(0,r,null,!1,0,a),s.push(d))):d!=null&&d.breakAfter&&(c?c.breakAfter=1:o=1),i++}for(h&&(h.breakAfter=o,t>0&&(!o&&s.length&&h.merge(t,h.length,s[0],!1,l,0)?h.breakAfter=s.shift().breakAfter:(t<h.length||h.children.length&&h.children[h.children.length-1].length==0)&&h.merge(t,h.length,null,!1,l,0),e++));e<i&&s.length;)if(u[i-1].become(s[s.length-1]))i--,s.pop(),a=s.length?0:l;else if(u[e].become(s[0]))e++,s.shift(),l=s.length?0:a;else break;!s.length&&e&&i<u.length&&!u[e-1].breakAfter&&u[i].merge(0,0,u[e-1],!1,l,a)&&e--,(e<i||s.length)&&n.replaceChildren(e,i,s)}}function yh(n,e,t,i,r,s){let o=n.childCursor(),{i:l,off:a}=o.findPos(t,1),{i:u,off:h}=o.findPos(e,-1),c=e-t;for(let f of i)c+=f.length;n.length+=c,bh(n,u,h,l,a,i,0,r,s)}var Ae=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},mo=typeof document<"u"?document:{documentElement:{style:{}}},go=/Edge\/(\d+)/.exec(Ae.userAgent),wh=/MSIE \d/.test(Ae.userAgent),bo=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(Ae.userAgent),Jr=!!(wh||bo||go),Fu=!Jr&&/gecko\/(\d+)/i.test(Ae.userAgent),ao=!Jr&&/Chrome\/(\d+)/.exec(Ae.userAgent),Hu="webkitFontSmoothing"in mo.documentElement.style,vh=!Jr&&/Apple Computer/.test(Ae.vendor),Wu=vh&&(/Mobile\/\w+/.test(Ae.userAgent)||Ae.maxTouchPoints>2),V={mac:Wu||/Mac/.test(Ae.platform),windows:/Win/.test(Ae.platform),linux:/Linux|X11/.test(Ae.platform),ie:Jr,ie_version:wh?mo.documentMode||6:bo?+bo[1]:go?+go[1]:0,gecko:Fu,gecko_version:Fu?+(/Firefox\/(\d+)/.exec(Ae.userAgent)||[0,0])[1]:0,chrome:!!ao,chrome_version:ao?+ao[1]:0,ios:Wu,android:/Android\b/.test(Ae.userAgent),webkit:Hu,safari:vh,webkit_version:Hu?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0,tabSize:mo.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"},Jm=256,et=class extends q{constructor(e){super(),this.text=e}get length(){return this.text.length}createDOM(e){this.setDOM(e||document.createTextNode(this.text))}sync(e,t){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(t&&t.node==this.dom&&(t.written=!0),this.dom.nodeValue=this.text)}reuseDOM(e){e.nodeType==3&&this.createDOM(e)}merge(e,t,i){return i&&(!(i instanceof et)||this.length-(t-e)+i.length>Jm)?!1:(this.text=this.text.slice(0,e)+(i?i.text:"")+this.text.slice(t),this.markDirty(),!0)}split(e){let t=new et(this.text.slice(e));return this.text=this.text.slice(0,e),this.markDirty(),t}localPosFromDOM(e,t){return e==this.dom?t:t?this.text.length:0}domAtPos(e){return new he(this.dom,e)}domBoundsAround(e,t,i){return{from:i,to:i+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}}coordsAt(e,t){return yo(this.dom,e,t)}},Ne=class extends q{constructor(e,t=[],i=0){super(),this.mark=e,this.children=t,this.length=i;for(let r of t)r.setParent(this)}setAttrs(e){if(gh(e),this.mark.class&&(e.className=this.mark.class),this.mark.attrs)for(let t in this.mark.attrs)e.setAttribute(t,this.mark.attrs[t]);return e}reuseDOM(e){e.nodeName==this.mark.tagName.toUpperCase()&&(this.setDOM(e),this.dirty|=6)}sync(e,t){this.dom?this.dirty&4&&this.setAttrs(this.dom):this.setDOM(this.setAttrs(document.createElement(this.mark.tagName))),super.sync(e,t)}merge(e,t,i,r,s,o){return i&&(!(i instanceof Ne&&i.mark.eq(this.mark))||e&&s<=0||t<this.length&&o<=0)?!1:(yh(this,e,t,i?i.children:[],s-1,o-1),this.markDirty(),!0)}split(e){let t=[],i=0,r=-1,s=0;for(let l of this.children){let a=i+l.length;a>e&&t.push(i<e?l.split(e-i):l),r<0&&i>=e&&(r=s),i=a,s++}let o=this.length-e;return this.length=e,r>-1&&(this.children.length=r,this.markDirty()),new Ne(this.mark,t,o)}domAtPos(e){return Sh(this,e)}coordsAt(e,t){return kh(this,e,t)}};function yo(n,e,t){let i=n.nodeValue.length;e>i&&(e=i);let r=e,s=e,o=0;e==0&&t<0||e==i&&t>=0?V.chrome||V.gecko||(e?(r--,o=1):s<i&&(s++,o=-1)):t<0?r--:s<i&&s++;let l=Hi(n,r,s).getClientRects();if(!l.length)return ph;let a=l[(o?o<0:t>=0)?0:l.length-1];return V.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,u=>u.width)||a),o?Jo(a,o<0):a||null}var Ze=class extends q{constructor(e,t,i){super(),this.widget=e,this.length=t,this.side=i,this.prevWidget=null}static create(e,t,i){return new(e.customView||Ze)(e,t,i)}split(e){let t=Ze.create(this.widget,this.length-e,this.side);return this.length-=e,t}sync(e){(!this.dom||!this.widget.updateDOM(this.dom,e))&&(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(e)),this.dom.contentEditable="false")}getSide(){return this.side}merge(e,t,i,r,s,o){return i&&(!(i instanceof Ze)||!this.widget.compare(i.widget)||e>0&&s<=0||t<this.length&&o<=0)?!1:(this.length=e+(i?i.length:0)+(this.length-t),!0)}become(e){return e.length==this.length&&e instanceof Ze&&e.side==this.side&&this.widget.constructor==e.widget.constructor?(this.widget.eq(e.widget)||this.markDirty(!0),this.dom&&!this.prevWidget&&(this.prevWidget=this.widget),this.widget=e.widget,!0):!1}ignoreMutation(){return!0}ignoreEvent(e){return this.widget.ignoreEvent(e)}get overrideDOMText(){if(this.length==0)return _.empty;let e=this;for(;e.parent;)e=e.parent;let{view:t}=e,i=t&&t.state.doc,r=this.posAtStart;return i?i.slice(r,r+this.length):_.empty}domAtPos(e){return e==0?he.before(this.dom):he.after(this.dom,e==this.length)}domBoundsAround(){return null}coordsAt(e,t){let i=this.dom.getClientRects(),r=null;if(!i.length)return ph;for(let s=e>0?i.length-1:0;r=i[s],!(e>0?s==0:s==i.length-1||r.top<r.bottom);s+=e>0?-1:1);return this.length?r:Jo(r,this.side>0)}get isEditable(){return!1}get isWidget(){return!0}destroy(){super.destroy(),this.dom&&this.widget.destroy(this.dom)}},_r=class extends Ze{domAtPos(e){let{topView:t,text:i}=this.widget;return t?wo(e,0,t,i,(r,s)=>r.domAtPos(s),r=>new he(i,Math.min(r,i.nodeValue.length))):new he(i,Math.min(e,i.nodeValue.length))}sync(){this.setDOM(this.widget.toDOM())}localPosFromDOM(e,t){let{topView:i,text:r}=this.widget;return i?Ch(e,t,i,r):Math.min(t,this.length)}ignoreMutation(){return!1}get overrideDOMText(){return null}coordsAt(e,t){let{topView:i,text:r}=this.widget;return i?wo(e,t,i,r,(s,o,l)=>s.coordsAt(o,l),(s,o)=>yo(r,s,o)):yo(r,e,t)}destroy(){var e;super.destroy(),(e=this.widget.topView)===null||e===void 0||e.destroy()}get isEditable(){return!0}canReuseDOM(){return!0}};function wo(n,e,t,i,r,s){if(t instanceof Ne){for(let o=t.dom.firstChild;o;o=o.nextSibling){let l=q.get(o);if(!l)return s(n,e);let a=Fi(o,i),u=l.length+(a?i.nodeValue.length:0);if(n<u||n==u&&l.getSide()<=0)return a?wo(n,e,l,i,r,s):r(l,n,e);n-=u}return r(t,t.length,-1)}else return t.dom==i?s(n,e):r(t,n,e)}function Ch(n,e,t,i){if(t instanceof Ne){let r=0;for(let s of t.children){let o=Fi(s.dom,i);if(Fi(s.dom,n))return r+(o?Ch(n,e,s,i):s.localPosFromDOM(n,e));r+=o?i.nodeValue.length:s.length}}else if(t.dom==i)return Math.min(e,i.nodeValue.length);return t.localPosFromDOM(n,e)}var It=class extends q{constructor(e){super(),this.side=e}get length(){return 0}merge(){return!1}become(e){return e instanceof It&&e.side==this.side}split(){return new It(this.side)}sync(){if(!this.dom){let e=document.createElement("img");e.className="cm-widgetBuffer",e.setAttribute("aria-hidden","true"),this.setDOM(e)}}getSide(){return this.side}domAtPos(e){return this.side>0?he.before(this.dom):he.after(this.dom)}localPosFromDOM(){return 0}domBoundsAround(){return null}coordsAt(e){let t=this.dom.getBoundingClientRect(),i=Qm(this,this.side>0?-1:1);return i&&i.top<t.bottom&&i.bottom>t.top?{left:t.left,right:t.right,top:i.top,bottom:i.bottom}:t}get overrideDOMText(){return _.empty}};et.prototype.children=Ze.prototype.children=It.prototype.children=Qo;function Qm(n,e){let t=n.parent,i=t?t.children.indexOf(n):-1;for(;t&&i>=0;)if(e<0?i>0:i<t.children.length){let r=t.children[i+e];if(r instanceof et){let s=r.coordsAt(e<0?r.length:0,e);if(s)return s}i+=e}else if(t instanceof Ne&&t.parent)i=t.parent.children.indexOf(t)+(e<0?0:1),t=t.parent;else{let r=t.dom.lastChild;if(r&&r.nodeName=="BR")return r.getClientRects()[0];break}}function Sh(n,e){let t=n.dom,{children:i}=n,r=0;for(let s=0;r<i.length;r++){let o=i[r],l=s+o.length;if(!(l==s&&o.getSide()<=0)){if(e>s&&e<l&&o.dom.parentNode==t)return o.domAtPos(e-s);if(e<=s)break;s=l}}for(let s=r;s>0;s--){let o=i[s-1];if(o.dom.parentNode==t)return o.domAtPos(o.length)}for(let s=r;s<i.length;s++){let o=i[s];if(o.dom.parentNode==t)return o.domAtPos(0)}return new he(t,0)}function xh(n,e,t){let i,{children:r}=n;t>0&&e instanceof Ne&&r.length&&(i=r[r.length-1])instanceof Ne&&i.mark.eq(e.mark)?xh(i,e.children[0],t-1):(r.push(e),e.setParent(n)),n.length+=e.length}function kh(n,e,t){let i=null,r=-1,s=null,o=-1;function l(u,h){for(let c=0,f=0;c<u.children.length&&f<=h;c++){let d=u.children[c],p=f+d.length;p>=h&&(d.children.length?l(d,h-f):!s&&(p>h||f==p&&d.getSide()>0)?(s=d,o=h-f):(f<h||f==p&&d.getSide()<0)&&(i=d,r=h-f)),f=p}}l(n,e);let a=(t<0?i:s)||i||s;return a?a.coordsAt(Math.max(0,a==i?r:o),t):Xm(n)}function Xm(n){let e=n.dom.lastChild;if(!e)return n.dom.getBoundingClientRect();let t=Tn(e);return t[t.length-1]||null}function vo(n,e){for(let t in n)t=="class"&&e.class?e.class+=" "+n.class:t=="style"&&e.style?e.style+=";"+n.style:e[t]=n[t];return e}function Xo(n,e){if(n==e)return!0;if(!n||!e)return!1;let t=Object.keys(n),i=Object.keys(e);if(t.length!=i.length)return!1;for(let r of t)if(i.indexOf(r)==-1||n[r]!==e[r])return!1;return!0}function Co(n,e,t){let i=null;if(e)for(let r in e)t&&r in t||n.removeAttribute(i=r);if(t)for(let r in t)e&&e[r]==t[r]||n.setAttribute(i=r,t[r]);return!!i}var yt=class{eq(e){return!1}updateDOM(e,t){return!1}compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}get estimatedHeight(){return-1}ignoreEvent(e){return!0}get customView(){return null}destroy(e){}},J=function(n){return n[n.Text=0]="Text",n[n.WidgetBefore=1]="WidgetBefore",n[n.WidgetAfter=2]="WidgetAfter",n[n.WidgetRange=3]="WidgetRange",n}(J||(J={})),Q=class extends pt{constructor(e,t,i,r){super(),this.startSide=e,this.endSide=t,this.widget=i,this.spec=r}get heightRelevant(){return!1}static mark(e){return new Wi(e)}static widget(e){let t=e.side||0,i=!!e.block;return t+=i?t>0?3e8:-4e8:t>0?1e8:-1e8,new wt(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,r;if(e.isBlockGap)i=-5e8,r=4e8;else{let{start:s,end:o}=Mh(e,t);i=(s?t?-3e8:-1:5e8)-1,r=(o?t?2e8:1:-6e8)+1}return new wt(e,i,r,t,e.widget||null,!0)}static line(e){return new di(e)}static set(e,t=!1){return Y.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}};Q.none=Y.empty;var Wi=class extends Q{constructor(e){let{start:t,end:i}=Mh(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.class=e.class||"",this.attrs=e.attributes||null}eq(e){return this==e||e instanceof Wi&&this.tagName==e.tagName&&this.class==e.class&&Xo(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}};Wi.prototype.point=!1;var di=class extends Q{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof di&&this.spec.class==e.spec.class&&Xo(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}};di.prototype.mapMode=xe.TrackBefore;di.prototype.point=!0;var wt=class extends Q{constructor(e,t,i,r,s,o){super(t,i,s,e),this.block=r,this.isReplace=o,this.mapMode=r?t<=0?xe.TrackBefore:xe.TrackAfter:xe.TrackDel}get type(){return this.startSide<this.endSide?J.WidgetRange:this.startSide<=0?J.WidgetBefore:J.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&this.widget.estimatedHeight>=5}eq(e){return e instanceof wt&&Ym(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}};wt.prototype.point=!0;function Mh(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t!=null?t:e,end:i!=null?i:e}}function Ym(n,e){return n==e||!!(n&&e&&n.compare(e))}function So(n,e,t,i=0){let r=t.length-1;r>=0&&t[r]+i>=n?t[r]=Math.max(t[r],e):t.push(n,e)}var me=class extends q{constructor(){super(...arguments),this.children=[],this.length=0,this.prevAttrs=void 0,this.attrs=null,this.breakAfter=0}merge(e,t,i,r,s,o){if(i){if(!(i instanceof me))return!1;this.dom||i.transferDOM(this)}return r&&this.setDeco(i?i.attrs:null),yh(this,e,t,i?i.children:[],s,o),!0}split(e){let t=new me;if(t.breakAfter=this.breakAfter,this.length==0)return t;let{i,off:r}=this.childPos(e);r&&(t.append(this.children[i].split(r),0),this.children[i].merge(r,this.children[i].length,null,!1,0,0),i++);for(let s=i;s<this.children.length;s++)t.append(this.children[s],0);for(;i>0&&this.children[i-1].length==0;)this.children[--i].destroy();return this.children.length=i,this.markDirty(),this.length=e,t}transferDOM(e){this.dom&&(this.markDirty(),e.setDOM(this.dom),e.prevAttrs=this.prevAttrs===void 0?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)}setDeco(e){Xo(this.attrs,e)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=e)}append(e,t){xh(this,e,t)}addLineDeco(e){let t=e.spec.attributes,i=e.spec.class;t&&(this.attrs=vo(t,this.attrs||{})),i&&(this.attrs=vo({class:i},this.attrs||{}))}domAtPos(e){return Sh(this,e)}reuseDOM(e){e.nodeName=="DIV"&&(this.setDOM(e),this.dirty|=6)}sync(e,t){var i;this.dom?this.dirty&4&&(gh(this.dom),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0):(this.setDOM(document.createElement("div")),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0),this.prevAttrs!==void 0&&(Co(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add("cm-line"),this.prevAttrs=void 0),super.sync(e,t);let r=this.dom.lastChild;for(;r&&q.get(r)instanceof Ne;)r=r.lastChild;if(!r||!this.length||r.nodeName!="BR"&&((i=q.get(r))===null||i===void 0?void 0:i.isEditable)==!1&&(!V.ios||!this.children.some(s=>s instanceof et))){let s=document.createElement("BR");s.cmIgnore=!0,this.dom.appendChild(s)}}measureTextSize(){if(this.children.length==0||this.length>20)return null;let e=0,t;for(let i of this.children){if(!(i instanceof et)||/[^ -~]/.test(i.text))return null;let r=Tn(i.dom);if(r.length!=1)return null;e+=r[0].width,t=r[0].height}return e?{lineHeight:this.dom.getBoundingClientRect().height,charWidth:e/this.length,textHeight:t}:null}coordsAt(e,t){let i=kh(this,e,t);if(!this.children.length&&i&&this.parent){let{heightOracle:r}=this.parent.view.viewState,s=i.bottom-i.top;if(Math.abs(s-r.lineHeight)<2&&r.textHeight<s){let o=(s-r.textHeight)/2;return{top:i.top+o,bottom:i.bottom-o,left:i.left,right:i.left}}}return i}become(e){return!1}get type(){return J.Text}static find(e,t){for(let i=0,r=0;i<e.children.length;i++){let s=e.children[i],o=r+s.length;if(o>=t){if(s instanceof me)return s;if(o>t)break}r=o+s.breakAfter}return null}},gt=class extends q{constructor(e,t,i){super(),this.widget=e,this.length=t,this.type=i,this.breakAfter=0,this.prevWidget=null}merge(e,t,i,r,s,o){return i&&(!(i instanceof gt)||!this.widget.compare(i.widget)||e>0&&s<=0||t<this.length&&o<=0)?!1:(this.length=e+(i?i.length:0)+(this.length-t),!0)}domAtPos(e){return e==0?he.before(this.dom):he.after(this.dom,e==this.length)}split(e){let t=this.length-e;this.length=e;let i=new gt(this.widget,t,this.type);return i.breakAfter=this.breakAfter,i}get children(){return Qo}sync(e){(!this.dom||!this.widget.updateDOM(this.dom,e))&&(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(e)),this.dom.contentEditable="false")}get overrideDOMText(){return this.parent?this.parent.view.state.doc.slice(this.posAtStart,this.posAtEnd):_.empty}domBoundsAround(){return null}become(e){return e instanceof gt&&e.type==this.type&&e.widget.constructor==this.widget.constructor?(e.widget.eq(this.widget)||this.markDirty(!0),this.dom&&!this.prevWidget&&(this.prevWidget=this.widget),this.widget=e.widget,this.length=e.length,this.breakAfter=e.breakAfter,!0):!1}ignoreMutation(){return!0}ignoreEvent(e){return this.widget.ignoreEvent(e)}get isEditable(){return!1}get isWidget(){return!0}destroy(){super.destroy(),this.dom&&this.widget.destroy(this.dom)}},Dn=class{constructor(e,t,i,r){this.doc=e,this.pos=t,this.end=i,this.disallowBlockEffectsFor=r,this.content=[],this.curLine=null,this.breakAtStart=0,this.pendingBuffer=0,this.bufferMarks=[],this.atCursorPos=!0,this.openStart=-1,this.openEnd=-1,this.text="",this.textOff=0,this.cursor=e.iter(),this.skip=t}posCovered(){if(this.content.length==0)return!this.breakAtStart&&this.doc.lineAt(this.pos).from!=this.pos;let e=this.content[this.content.length-1];return!e.breakAfter&&!(e instanceof gt&&e.type==J.WidgetBefore)}getLine(){return this.curLine||(this.content.push(this.curLine=new me),this.atCursorPos=!0),this.curLine}flushBuffer(e=this.bufferMarks){this.pendingBuffer&&(this.curLine.append(Rr(new It(-1),e),e.length),this.pendingBuffer=0)}addBlockWidget(e){this.flushBuffer(),this.curLine=null,this.content.push(e)}finish(e){this.pendingBuffer&&e<=this.bufferMarks.length?this.flushBuffer():this.pendingBuffer=0,this.posCovered()||this.getLine()}buildText(e,t,i){for(;e>0;){if(this.textOff==this.text.length){let{value:s,lineBreak:o,done:l}=this.cursor.next(this.skip);if(this.skip=0,l)throw new Error("Ran out of text content when drawing inline views");if(o){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.flushBuffer(),this.curLine=null,this.atCursorPos=!0,e--;continue}else this.text=s,this.textOff=0}let r=Math.min(this.text.length-this.textOff,e,512);this.flushBuffer(t.slice(t.length-i)),this.getLine().append(Rr(new et(this.text.slice(this.textOff,this.textOff+r)),t),i),this.atCursorPos=!0,this.textOff+=r,e-=r,i=0}}span(e,t,i,r){this.buildText(t-e,i,r),this.pos=t,this.openStart<0&&(this.openStart=r)}point(e,t,i,r,s,o){if(this.disallowBlockEffectsFor[o]&&i instanceof wt){if(i.block)throw new RangeError("Block decorations may not be specified via plugins");if(t>this.doc.lineAt(this.pos).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}let l=t-e;if(i instanceof wt)if(i.block){let{type:a}=i;a==J.WidgetAfter&&!this.posCovered()&&this.getLine(),this.addBlockWidget(new gt(i.widget||new zr("div"),l,a))}else{let a=Ze.create(i.widget||new zr("span"),l,l?0:i.startSide),u=this.atCursorPos&&!a.isEditable&&s<=r.length&&(e<t||i.startSide>0),h=!a.isEditable&&(e<t||s>r.length||i.startSide<=0),c=this.getLine();this.pendingBuffer==2&&!u&&(this.pendingBuffer=0),this.flushBuffer(r),u&&(c.append(Rr(new It(1),r),s),s=r.length+Math.max(0,s-r.length)),c.append(Rr(a,r),s),this.atCursorPos=h,this.pendingBuffer=h?e<t||s>r.length?1:2:0,this.pendingBuffer&&(this.bufferMarks=r.slice())}else this.doc.lineAt(this.pos).from==this.pos&&this.getLine().addLineDeco(i);l&&(this.textOff+l<=this.text.length?this.textOff+=l:(this.skip+=l-(this.text.length-this.textOff),this.text="",this.textOff=0),this.pos=t),this.openStart<0&&(this.openStart=s)}static build(e,t,i,r,s){let o=new Dn(e,t,i,s);return o.openEnd=Y.spans(r,t,i,o),o.openStart<0&&(o.openStart=o.openEnd),o.finish(o.openEnd),o}};function Rr(n,e){for(let t of e)n=new Ne(t,[n],n.length);return n}var zr=class extends yt{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}},Th=N.define(),Rh=N.define(),Dh=N.define(),Ah=N.define(),xo=N.define(),Ph=N.define(),Eh=N.define(),Oh=N.define({combine:n=>n.some(e=>e)}),Ih=N.define({combine:n=>n.some(e=>e)}),_i=class{constructor(e,t="nearest",i="nearest",r=5,s=5){this.range=e,this.y=t,this.x=i,this.yMargin=r,this.xMargin=s}map(e){return e.empty?this:new _i(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin)}},_u=Z.define({map:(n,e)=>n.map(e)});function bt(n,e,t){let i=n.facet(Ah);i.length?i[0](e):window.onerror?window.onerror(String(e),t,void 0,void 0,e):t?console.error(t+":",e):console.error(e)}var Qr=N.define({combine:n=>n.length?n[0]:!0}),Zm=0,Cn=N.define(),qe=class{constructor(e,t,i,r){this.id=e,this.create=t,this.domEventHandlers=i,this.extension=r(this)}static define(e,t){let{eventHandlers:i,provide:r,decorations:s}=t||{};return new qe(Zm++,e,i,o=>{let l=[Cn.of(o)];return s&&l.push(An.of(a=>{let u=a.plugin(o);return u?s(u):Q.none})),r&&l.push(r(o)),l})}static fromClass(e,t){return qe.define(i=>new e(i),t)}},kn=class{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(bt(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.create(e)}catch(t){bt(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){bt(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}},Vh=N.define(),Yo=N.define(),An=N.define(),Lh=N.define(),Nh=N.define(),Sn=N.define(),Le=class{constructor(e,t,i,r){this.fromA=e,this.toA=t,this.fromB=i,this.toB=r}join(e){return new Le(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let r=e[t-1];if(!(r.fromA>i.toA)){if(r.toA<i.fromA)break;i=i.join(r),e.splice(t-1,1)}}return e.splice(t,0,i),e}static extendWithRanges(e,t){if(t.length==0)return e;let i=[];for(let r=0,s=0,o=0,l=0;;r++){let a=r==e.length?null:e[r],u=o-l,h=a?a.fromB:1e9;for(;s<t.length&&t[s]<h;){let c=t[s],f=t[s+1],d=Math.max(l,c),p=Math.min(h,f);if(d<=p&&new Le(d+u,p+u,d,p).addToSet(i),f>h)break;s+=2}if(!a)return i;new Le(a.fromA,a.toA,a.fromB,a.toB).addToSet(i),o=a.toA,l=a.toB}}},zi=class{constructor(e,t,i){this.view=e,this.state=t,this.transactions=i,this.flags=0,this.startState=e.state,this.changes=ie.empty(this.startState.doc.length);for(let s of i)this.changes=this.changes.compose(s.changes);let r=[];this.changes.iterChangedRanges((s,o,l,a)=>r.push(new Le(s,o,l,a))),this.changedRanges=r}static create(e,t,i){return new zi(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&10)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}},le=function(n){return n[n.LTR=0]="LTR",n[n.RTL=1]="RTL",n}(le||(le={})),ko=le.LTR,eg=le.RTL;function Bh(n){let e=[];for(let t=0;t<n.length;t++)e.push(1<<+n[t]);return e}var tg=Bh("88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008"),ig=Bh("4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333"),Mo=Object.create(null),Ye=[];for(let n of["()","[]","{}"]){let e=n.charCodeAt(0),t=n.charCodeAt(1);Mo[e]=t,Mo[t]=-e}function ng(n){return n<=247?tg[n]:1424<=n&&n<=1524?2:1536<=n&&n<=1785?ig[n-1536]:1774<=n&&n<=2220?4:8192<=n&&n<=8203?256:64336<=n&&n<=65023?4:n==8204?256:1}var rg=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac\ufb50-\ufdff]/,Ot=class{constructor(e,t,i){this.from=e,this.to=t,this.level=i}get dir(){return this.level%2?eg:ko}side(e,t){return this.dir==t==e?this.to:this.from}static find(e,t,i,r){let s=-1;for(let o=0;o<e.length;o++){let l=e[o];if(l.from<=t&&l.to>=t){if(l.level==i)return o;(s<0||(r!=0?r<0?l.from<t:l.to>t:e[s].level>l.level))&&(s=o)}}if(s<0)throw new RangeError("Index out of range");return s}},re=[];function sg(n,e){let t=n.length,i=e==ko?1:2,r=e==ko?2:1;if(!n||i==1&&!rg.test(n))return Fh(t);for(let o=0,l=i,a=i;o<t;o++){let u=ng(n.charCodeAt(o));u==512?u=l:u==8&&a==4&&(u=16),re[o]=u==4?2:u,u&7&&(a=u),l=u}for(let o=0,l=i,a=i;o<t;o++){let u=re[o];if(u==128)o<t-1&&l==re[o+1]&&l&24?u=re[o]=l:re[o]=256;else if(u==64){let h=o+1;for(;h<t&&re[h]==64;)h++;let c=o&&l==8||h<t&&re[h]==8?a==1?1:8:256;for(let f=o;f<h;f++)re[f]=c;o=h-1}else u==8&&a==1&&(re[o]=1);l=u,u&7&&(a=u)}for(let o=0,l=0,a=0,u,h,c;o<t;o++)if(h=Mo[u=n.charCodeAt(o)])if(h<0){for(let f=l-3;f>=0;f-=3)if(Ye[f+1]==-h){let d=Ye[f+2],p=d&2?i:d&4?d&1?r:i:0;p&&(re[o]=re[Ye[f]]=p),l=f;break}}else{if(Ye.length==189)break;Ye[l++]=o,Ye[l++]=u,Ye[l++]=a}else if((c=re[o])==2||c==1){let f=c==i;a=f?0:1;for(let d=l-3;d>=0;d-=3){let p=Ye[d+2];if(p&2)break;if(f)Ye[d+2]|=2;else{if(p&4)break;Ye[d+2]|=4}}}for(let o=0;o<t;o++)if(re[o]==256){let l=o+1;for(;l<t&&re[l]==256;)l++;let a=(o?re[o-1]:i)==1,u=(l<t?re[l]:i)==1,h=a==u?a?1:2:i;for(let c=o;c<l;c++)re[c]=h;o=l-1}let s=[];if(i==1)for(let o=0;o<t;){let l=o,a=re[o++]!=1;for(;o<t&&a==(re[o]!=1);)o++;if(a)for(let u=o;u>l;){let h=u,c=re[--u]!=2;for(;u>l&&c==(re[u-1]!=2);)u--;s.push(new Ot(u,h,c?2:1))}else s.push(new Ot(l,o,0))}else for(let o=0;o<t;){let l=o,a=re[o++]==2;for(;o<t&&a==(re[o]==2);)o++;s.push(new Ot(l,o,a?1:2))}return s}function Fh(n){return[new Ot(0,n,0)]}var Hh="";function og(n,e,t,i,r){var s;let o=i.head-n.from,l=-1;if(o==0){if(!r||!n.length)return null;e[0].level!=t&&(o=e[0].side(!1,t),l=0)}else if(o==n.length){if(r)return null;let f=e[e.length-1];f.level!=t&&(o=f.side(!0,t),l=e.length-1)}l<0&&(l=Ot.find(e,o,(s=i.bidiLevel)!==null&&s!==void 0?s:-1,i.assoc));let a=e[l];o==a.side(r,t)&&(a=e[l+=r?1:-1],o=a.side(!r,t));let u=r==(a.dir==t),h=Ce(n.text,o,u);if(Hh=n.text.slice(Math.min(o,h),Math.max(o,h)),h!=a.side(r,t))return T.cursor(h+n.from,u?-1:1,a.level);let c=l==(r?e.length-1:0)?null:e[l+(r?1:-1)];return!c&&a.level!=t?T.cursor(r?n.to:n.from,r?-1:1,t):c&&c.level<a.level?T.cursor(c.side(!r,t)+n.from,r?1:-1,c.level):T.cursor(h+n.from,r?-1:1,a.level)}var Et="\uFFFF",Ur=class{constructor(e,t){this.points=e,this.text="",this.lineSeparator=t.facet(U.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=Et}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let r=e;;){this.findPointBefore(i,r),this.readNode(r);let s=r.nextSibling;if(s==t)break;let o=q.get(r),l=q.get(s);(o&&l?o.breakAfter:(o?o.breakAfter:zu(r))||zu(s)&&(r.nodeName!="BR"||r.cmIgnore))&&this.lineBreak(),r=s}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,r=this.lineSeparator?null:/\r\n?|\n/g;;){let s=-1,o=1,l;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=r.exec(t))&&(s=l.index,o=l[0].length),this.append(t.slice(i,s<0?t.length:s)),s<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=s+o}}readNode(e){if(e.cmIgnore)return;let t=q.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let r=i.iter();!r.next().done;)r.lineBreak?this.lineBreak():this.append(r.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+Math.min(t,i.offset))}};function zu(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}var $r=class{constructor(e,t){this.node=e,this.offset=t,this.pos=-1}},Kr=class extends q{constructor(e){super(),this.view=e,this.compositionDeco=Q.none,this.decorations=[],this.dynamicDecorationMap=[],this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.setDOM(e.contentDOM),this.children=[new me],this.children[0].setParent(this),this.updateDeco(),this.updateInner([new Le(0,0,0,e.state.doc.length)],0)}get length(){return this.view.state.doc.length}update(e){let t=e.changedRanges;this.minWidth>0&&t.length&&(t.every(({fromA:o,toA:l})=>l<this.minWidthFrom||o>this.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.view.inputState.composing<0?this.compositionDeco=Q.none:(e.transactions.length||this.dirty)&&(this.compositionDeco=ag(this.view,e.changes)),(V.ie||V.chrome)&&!this.compositionDeco.size&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let i=this.decorations,r=this.updateDeco(),s=hg(i,r,e.changes);return t=Le.extendWithRanges(t,s),this.dirty==0&&t.length==0?!1:(this.updateInner(t,e.startState.doc.length),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0,this.updateChildren(e,t);let{observer:i}=this.view;i.ignore(()=>{this.dom.style.height=this.view.viewState.contentHeight+"px",this.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let s=V.chrome||V.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.sync(this.view,s),this.dirty=0,s&&(s.written||i.selectionRange.focusNode!=s.node)&&(this.forceSelection=!0),this.dom.style.height=""});let r=[];if(this.view.viewport.from||this.view.viewport.to<this.view.state.doc.length)for(let s of this.children)s instanceof gt&&s.widget instanceof qr&&r.push(s.dom);i.updateGaps(r)}updateChildren(e,t){let i=this.childCursor(t);for(let r=e.length-1;;r--){let s=r>=0?e[r]:null;if(!s)break;let{fromA:o,toA:l,fromB:a,toB:u}=s,{content:h,breakAtStart:c,openStart:f,openEnd:d}=Dn.build(this.view.state.doc,a,u,this.decorations,this.dynamicDecorationMap),{i:p,off:m}=i.findPos(l,1),{i:g,off:b}=i.findPos(o,-1);bh(this,g,b,p,m,h,c,f,d)}}updateSelection(e=!1,t=!1){if((e||!this.view.observer.selectionRange.focusNode)&&this.view.observer.readSelectionRange(),!(t||this.mayControlSelection()))return;let i=this.forceSelection;this.forceSelection=!1;let r=this.view.state.selection.main,s=this.domAtPos(r.anchor),o=r.empty?s:this.domAtPos(r.head);if(V.gecko&&r.empty&&lg(s)){let a=document.createTextNode("");this.view.observer.ignore(()=>s.node.insertBefore(a,s.node.childNodes[s.offset]||null)),s=o=new he(a,0),i=!0}let l=this.view.observer.selectionRange;(i||!l.focusNode||!Fr(s.node,s.offset,l.anchorNode,l.anchorOffset)||!Fr(o.node,o.offset,l.focusNode,l.focusOffset))&&(this.view.observer.ignore(()=>{V.android&&V.chrome&&this.dom.contains(l.focusNode)&&cg(l.focusNode,this.dom)&&(this.dom.blur(),this.dom.focus({preventScroll:!0}));let a=Br(this.view.root);if(a)if(r.empty){if(V.gecko){let u=ug(s.node,s.offset);if(u&&u!=3){let h=_h(s.node,s.offset,u==1?1:-1);h&&(s=new he(h,u==1?0:h.nodeValue.length))}}a.collapse(s.node,s.offset),r.bidiLevel!=null&&l.cursorBidiLevel!=null&&(l.cursorBidiLevel=r.bidiLevel)}else if(a.extend){a.collapse(s.node,s.offset);try{a.extend(o.node,o.offset)}catch{}}else{let u=document.createRange();r.anchor>r.head&&([s,o]=[o,s]),u.setEnd(o.node,o.offset),u.setStart(s.node,s.offset),a.removeAllRanges(),a.addRange(u)}}),this.view.observer.setSelectionRange(s,o)),this.impreciseAnchor=s.precise?null:new he(l.anchorNode,l.anchorOffset),this.impreciseHead=o.precise?null:new he(l.focusNode,l.focusOffset)}enforceCursorAssoc(){if(this.compositionDeco.size)return;let{view:e}=this,t=e.state.selection.main,i=Br(e.root),{anchorNode:r,anchorOffset:s}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=me.find(this,t.head);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),u=this.coordsAt(t.head,1);if(!a||!u||a.bottom>u.top)return;let h=this.domAtPos(t.head+t.assoc);i.collapse(h.node,h.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let c=e.observer.selectionRange;e.docView.posFromDOM(c.anchorNode,c.anchorOffset)!=t.from&&i.collapse(r,s)}mayControlSelection(){let e=this.view.root.activeElement;return e==this.dom||Ir(this.dom,this.view.observer.selectionRange)&&!(e&&this.dom.contains(e))}nearest(e){for(let t=e;t;){let i=q.get(t);if(i&&i.rootView==this)return i;t=t.parentNode}return null}posFromDOM(e,t){let i=this.nearest(e);if(!i)throw new RangeError("Trying to find position for a DOM position outside of the document");return i.localPosFromDOM(e,t)+i.posAtStart}domAtPos(e){let{i:t,off:i}=this.childCursor().findPos(e,-1);for(;t<this.children.length-1;){let r=this.children[t];if(i<r.length||r instanceof me)break;t++,i=0}return this.children[t].domAtPos(i)}coordsAt(e,t){for(let i=this.length,r=this.children.length-1;;r--){let s=this.children[r],o=i-s.breakAfter-s.length;if(e>o||e==o&&s.type!=J.WidgetBefore&&s.type!=J.WidgetAfter&&(!r||t==2||this.children[r-1].breakAfter||this.children[r-1].type==J.WidgetBefore&&t>-2))return s.coordsAt(e-o,t);i=o}}measureVisibleLineHeights(e){let t=[],{from:i,to:r}=e,s=this.view.contentDOM.clientWidth,o=s>Math.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==le.LTR;for(let u=0,h=0;h<this.children.length;h++){let c=this.children[h],f=u+c.length;if(f>r)break;if(u>=i){let d=c.dom.getBoundingClientRect();if(t.push(d.height),o){let p=c.dom.lastChild,m=p?Tn(p):[];if(m.length){let g=m[m.length-1],b=a?g.right-d.left:d.right-g.left;b>l&&(l=b,this.minWidth=s,this.minWidthFrom=u,this.minWidthTo=f)}}}u=f+c.breakAfter}return t}textDirectionAt(e){let{i:t}=this.childPos(e,1);return getComputedStyle(this.children[t].dom).direction=="rtl"?le.RTL:le.LTR}measureTextSize(){for(let s of this.children)if(s instanceof me){let o=s.measureTextSize();if(o)return o}let e=document.createElement("div"),t,i,r;return e.className="cm-line",e.style.width="99999px",e.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.dom.appendChild(e);let s=Tn(e.firstChild)[0];t=e.getBoundingClientRect().height,i=s?s.width/27:7,r=s?s.height:t,e.remove()}),{lineHeight:t,charWidth:i,textHeight:r}}childCursor(e=this.length){let t=this.children.length;return t&&(e-=this.children[--t].length),new Wr(this.children,e,t)}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,r=0;;r++){let s=r==t.viewports.length?null:t.viewports[r],o=s?s.from-1:this.length;if(o>i){let l=t.lineBlockAt(o).bottom-t.lineBlockAt(i).top;e.push(Q.replace({widget:new qr(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!s)break;i=s.to+1}return Q.set(e)}updateDeco(){let e=this.view.state.facet(An).map((t,i)=>(this.dynamicDecorationMap[i]=typeof t=="function")?t(this.view):t);for(let t=e.length;t<e.length+3;t++)this.dynamicDecorationMap[t]=!1;return this.decorations=[...e,this.compositionDeco,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco]}scrollIntoView(e){let{range:t}=e,i=this.coordsAt(t.head,t.empty?t.assoc:t.head>t.anchor?-1:1),r;if(!i)return;!t.empty&&(r=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(i={left:Math.min(i.left,r.left),top:Math.min(i.top,r.top),right:Math.max(i.right,r.right),bottom:Math.max(i.bottom,r.bottom)});let s=0,o=0,l=0,a=0;for(let h of this.view.state.facet(Nh).map(c=>c(this.view)))if(h){let{left:c,right:f,top:d,bottom:p}=h;c!=null&&(s=Math.max(s,c)),f!=null&&(o=Math.max(o,f)),d!=null&&(l=Math.max(l,d)),p!=null&&(a=Math.max(a,p))}let u={left:i.left-s,top:i.top-l,right:i.right+o,bottom:i.bottom+a};Km(this.view.scrollDOM,u,t.head<t.anchor?-1:1,e.x,e.y,e.xMargin,e.yMargin,this.view.textDirection==le.LTR)}};function lg(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}var qr=class extends yt{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get estimatedHeight(){return this.height}};function Wh(n){let e=n.observer.selectionRange,t=e.focusNode&&_h(e.focusNode,e.focusOffset,0);if(!t)return null;let i=n.docView.nearest(t);if(!i)return null;if(i instanceof me){let r=t;for(;r.parentNode!=i.dom;)r=r.parentNode;let s=r.previousSibling;for(;s&&!q.get(s);)s=s.previousSibling;let o=s?q.get(s).posAtEnd:i.posAtStart;return{from:o,to:o,node:r,text:t}}else{for(;;){let{parent:s}=i;if(!s)return null;if(s instanceof me)break;i=s}let r=i.posAtStart;return{from:r,to:r+i.length,node:i.dom,text:t}}}function ag(n,e){let t=Wh(n);if(!t)return Q.none;let{from:i,to:r,node:s,text:o}=t,l=e.mapPos(i,1),a=Math.max(l,e.mapPos(r,-1)),{state:u}=n,h=s.nodeType==3?s.nodeValue:new Ur([],u).readRange(s.firstChild,null).text;if(a-l<h.length)if(u.doc.sliceString(l,Math.min(u.doc.length,l+h.length),Et)==h)a=l+h.length;else if(u.doc.sliceString(Math.max(0,a-h.length),a,Et)==h)l=a-h.length;else return Q.none;else if(u.doc.sliceString(l,a,Et)!=h)return Q.none;let c=q.get(s);return c instanceof _r?c=c.widget.topView:c&&(c.parent=null),Q.set(Q.replace({widget:new To(s,o,c),inclusive:!0}).range(l,a))}var To=class extends yt{constructor(e,t,i){super(),this.top=e,this.text=t,this.topView=i}eq(e){return this.top==e.top&&this.text==e.text}toDOM(){return this.top}ignoreEvent(){return!1}get customView(){return _r}};function _h(n,e,t){if(t<=0)for(let i=n,r=e;;){if(i.nodeType==3)return i;if(i.nodeType==1&&r>0)i=i.childNodes[r-1],r=Rn(i);else break}if(t>=0)for(let i=n,r=e;;){if(i.nodeType==3)return i;if(i.nodeType==1&&r<i.childNodes.length&&t>=0)i=i.childNodes[r],r=0;else break}return null}function ug(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable=="false"?1:0)|(e<n.childNodes.length&&n.childNodes[e].contentEditable=="false"?2:0)}var Ro=class{constructor(){this.changes=[]}compareRange(e,t){So(e,t,this.changes)}comparePoint(e,t){So(e,t,this.changes)}};function hg(n,e,t){let i=new Ro;return Y.compare(n,e,t,i),i.changes}function cg(n,e){for(let t=n;t&&t!=e;t=t.assignedSlot||t.parentNode)if(t.nodeType==1&&t.contentEditable=="false")return!0;return!1}function fg(n,e,t=1){let i=n.charCategorizer(e),r=n.doc.lineAt(e),s=e-r.from;if(r.length==0)return T.cursor(e);s==0?t=1:s==r.length&&(t=-1);let o=s,l=s;t<0?o=Ce(r.text,s,!1):l=Ce(r.text,s);let a=i(r.text.slice(o,l));for(;o>0;){let u=Ce(r.text,o,!1);if(i(r.text.slice(u,o))!=a)break;o=u}for(;l<r.length;){let u=Ce(r.text,l);if(i(r.text.slice(l,u))!=a)break;l=u}return T.range(o+r.from,l+r.from)}function dg(n,e){return e.left>n?e.left-n:Math.max(0,n-e.right)}function pg(n,e){return e.top>n?e.top-n:Math.max(0,n-e.bottom)}function uo(n,e){return n.top<e.bottom-1&&n.bottom>e.top+1}function Uu(n,e){return e<n.top?{top:e,left:n.left,right:n.right,bottom:n.bottom}:n}function $u(n,e){return e>n.bottom?{top:n.top,left:n.left,right:n.right,bottom:e}:n}function Do(n,e,t){let i,r,s,o,l=!1,a,u,h,c;for(let p=n.firstChild;p;p=p.nextSibling){let m=Tn(p);for(let g=0;g<m.length;g++){let b=m[g];r&&uo(r,b)&&(b=Uu($u(b,r.bottom),r.top));let C=dg(e,b),y=pg(t,b);if(C==0&&y==0)return p.nodeType==3?Ku(p,e,t):Do(p,e,t);if(!i||o>y||o==y&&s>C){i=p,r=b,s=C,o=y;let x=y?t<b.top?-1:1:C?e<b.left?-1:1:0;l=!x||(x>0?g<m.length-1:g>0)}C==0?t>b.bottom&&(!h||h.bottom<b.bottom)?(a=p,h=b):t<b.top&&(!c||c.top>b.top)&&(u=p,c=b):h&&uo(h,b)?h=$u(h,b.bottom):c&&uo(c,b)&&(c=Uu(c,b.top))}}if(h&&h.bottom>=t?(i=a,r=h):c&&c.top<=t&&(i=u,r=c),!i)return{node:n,offset:0};let f=Math.max(r.left,Math.min(r.right,e));if(i.nodeType==3)return Ku(i,f,t);if(l&&i.contentEditable!="false")return Do(i,f,t);let d=Array.prototype.indexOf.call(n.childNodes,i)+(e>=(r.left+r.right)/2?1:0);return{node:n,offset:d}}function Ku(n,e,t){let i=n.nodeValue.length,r=-1,s=1e9,o=0;for(let l=0;l<i;l++){let a=Hi(n,l,l+1).getClientRects();for(let u=0;u<a.length;u++){let h=a[u];if(h.top==h.bottom)continue;o||(o=e-h.left);let c=(h.top>t?h.top-t:t-h.bottom)-1;if(h.left-1<=e&&h.right+1>=e&&c<s){let f=e>=(h.left+h.right)/2,d=f;if((V.chrome||V.gecko)&&Hi(n,l).getBoundingClientRect().left==h.right&&(d=!f),c<=0)return{node:n,offset:l+(d?1:0)};r=l+(d?1:0),s=c}}}return{node:n,offset:r>-1?r:o>0?n.nodeValue.length:0}}function zh(n,e,t,i=-1){var r,s;let o=n.contentDOM.getBoundingClientRect(),l=o.top+n.viewState.paddingTop,a,{docHeight:u}=n.viewState,{x:h,y:c}=e,f=c-l;if(f<0)return 0;if(f>u)return n.state.doc.length;for(let x=n.defaultLineHeight/2,v=!1;a=n.elementAtHeight(f),a.type!=J.Text;)for(;f=i>0?a.bottom+x:a.top-x,!(f>=0&&f<=u);){if(v)return t?null:0;v=!0,i=-i}c=l+f;let d=a.from;if(d<n.viewport.from)return n.viewport.from==0?0:t?null:qu(n,o,a,h,c);if(d>n.viewport.to)return n.viewport.to==n.state.doc.length?n.state.doc.length:t?null:qu(n,o,a,h,c);let p=n.dom.ownerDocument,m=n.root.elementFromPoint?n.root:p,g=m.elementFromPoint(h,c);g&&!n.contentDOM.contains(g)&&(g=null),g||(h=Math.max(o.left+1,Math.min(o.right-1,h)),g=m.elementFromPoint(h,c),g&&!n.contentDOM.contains(g)&&(g=null));let b,C=-1;if(g&&((r=n.docView.nearest(g))===null||r===void 0?void 0:r.isEditable)!=!1){if(p.caretPositionFromPoint){let x=p.caretPositionFromPoint(h,c);x&&({offsetNode:b,offset:C}=x)}else if(p.caretRangeFromPoint){let x=p.caretRangeFromPoint(h,c);x&&({startContainer:b,startOffset:C}=x,(!n.contentDOM.contains(b)||V.safari&&mg(b,C,h)||V.chrome&&gg(b,C,h))&&(b=void 0))}}if(!b||!n.docView.dom.contains(b)){let x=me.find(n.docView,d);if(!x)return f>a.top+a.height/2?a.to:a.from;({node:b,offset:C}=Do(x.dom,h,c))}let y=n.docView.nearest(b);if(!y)return null;if(y.isWidget&&((s=y.dom)===null||s===void 0?void 0:s.nodeType)==1){let x=y.dom.getBoundingClientRect();return e.y<x.top||e.y<=x.bottom&&e.x<=(x.left+x.right)/2?y.posAtStart:y.posAtEnd}else return y.localPosFromDOM(b,C)+y.posAtStart}function qu(n,e,t,i,r){let s=Math.round((i-e.left)*n.defaultCharacterWidth);if(n.lineWrapping&&t.height>n.defaultLineHeight*1.5){let l=Math.floor((r-t.top)/n.defaultLineHeight);s+=l*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+Pu(o,s,n.state.tabSize)}function mg(n,e,t){let i;if(n.nodeType!=3||e!=(i=n.nodeValue.length))return!1;for(let r=n.nextSibling;r;r=r.nextSibling)if(r.nodeType!=1||r.nodeName!="BR")return!1;return Hi(n,i-1,i).getBoundingClientRect().left>t}function gg(n,e,t){if(e!=0)return!1;for(let r=n;;){let s=r.parentNode;if(!s||s.nodeType!=1||s.firstChild!=r)return!1;if(s.classList.contains("cm-line"))break;r=s}let i=n.nodeType==1?n.getBoundingClientRect():Hi(n,0,Math.max(n.nodeValue.length,1)).getBoundingClientRect();return t-i.left>5}function bg(n,e,t,i){let r=n.state.doc.lineAt(e.head),s=!i||!n.lineWrapping?null:n.coordsAtPos(e.assoc<0&&e.head>r.from?e.head-1:e.head);if(s){let a=n.dom.getBoundingClientRect(),u=n.textDirectionAt(r.from),h=n.posAtCoords({x:t==(u==le.LTR)?a.right-1:a.left+1,y:(s.top+s.bottom)/2});if(h!=null)return T.cursor(h,t?-1:1)}let o=me.find(n.docView,e.head),l=o?t?o.posAtEnd:o.posAtStart:t?r.to:r.from;return T.cursor(l,t?-1:1)}function Gu(n,e,t,i){let r=n.state.doc.lineAt(e.head),s=n.bidiSpans(r),o=n.textDirectionAt(r.from);for(let l=e,a=null;;){let u=og(r,s,o,l,t),h=Hh;if(!u){if(r.number==(t?n.state.doc.lines:1))return l;h=`
8
- `,r=n.state.doc.line(r.number+(t?1:-1)),s=n.bidiSpans(r),u=T.cursor(t?r.from:r.to)}if(a){if(!a(h))return l}else{if(!i)return u;a=i(h)}l=u}}function yg(n,e,t){let i=n.state.charCategorizer(e),r=i(t);return s=>{let o=i(s);return r==$e.Space&&(r=o),r==o}}function wg(n,e,t,i){let r=e.head,s=t?1:-1;if(r==(t?n.state.doc.length:0))return T.cursor(r,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),u=n.coordsAtPos(r),h=n.documentTop;if(u)o==null&&(o=u.left-a.left),l=s<0?u.top:u.bottom;else{let d=n.viewState.lineBlockAt(r);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(r-d.from))),l=(s<0?d.top:d.bottom)+h}let c=a.left+o,f=i!=null?i:n.defaultLineHeight>>1;for(let d=0;;d+=10){let p=l+(f+d)*s,m=zh(n,{x:c,y:p},!1,s);if(p<a.top||p>a.bottom||(s<0?m<r:m>r))return T.cursor(m,e.assoc,void 0,o)}}function ho(n,e,t){let i=n.state.facet(Lh).map(r=>r(n));for(;;){let r=!1;for(let s of i)s.between(t.from-1,t.from+1,(o,l,a)=>{t.from>o&&t.from<l&&(t=e.head>t.from?T.cursor(o,1):T.cursor(l,-1),r=!0)});if(!r)return t}}var Ao=class{constructor(e){this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.chromeScrollHack=-1,this.pendingIOSKey=void 0,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastEscPress=0,this.lastContextMenu=0,this.scrollHandlers=[],this.registeredEvents=[],this.customHandlers=[],this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.mouseSelection=null;let t=(i,r)=>{this.ignoreDuringComposition(r)||r.type=="keydown"&&this.keydown(e,r)||(this.mustFlushObserver(r)&&e.observer.forceFlush(),this.runCustomHandlers(r.type,e,r)?r.preventDefault():i(e,r))};for(let i in ce){let r=ce[i];e.contentDOM.addEventListener(i,s=>{ju(e,s)&&t(r,s)},Eo[i]),this.registeredEvents.push(i)}e.scrollDOM.addEventListener("mousedown",i=>{if(i.target==e.scrollDOM&&i.clientY>e.contentDOM.getBoundingClientRect().bottom&&(t(ce.mousedown,i),!i.defaultPrevented&&i.button==2)){let r=e.contentDOM.style.minHeight;e.contentDOM.style.minHeight="100%",setTimeout(()=>e.contentDOM.style.minHeight=r,200)}}),V.chrome&&V.chrome_version==102&&e.scrollDOM.addEventListener("wheel",()=>{this.chromeScrollHack<0?e.contentDOM.style.pointerEvents="none":window.clearTimeout(this.chromeScrollHack),this.chromeScrollHack=setTimeout(()=>{this.chromeScrollHack=-1,e.contentDOM.style.pointerEvents=""},100)},{passive:!0}),this.notifiedFocused=e.hasFocus,V.safari&&e.contentDOM.addEventListener("input",()=>null)}setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}ensureHandlers(e,t){var i;let r;this.customHandlers=[];for(let s of t)if(r=(i=s.update(e).spec)===null||i===void 0?void 0:i.domEventHandlers){this.customHandlers.push({plugin:s.value,handlers:r});for(let o in r)this.registeredEvents.indexOf(o)<0&&o!="scroll"&&(this.registeredEvents.push(o),e.contentDOM.addEventListener(o,l=>{ju(e,l)&&this.runCustomHandlers(o,e,l)&&l.preventDefault()}))}}runCustomHandlers(e,t,i){for(let r of this.customHandlers){let s=r.handlers[e];if(s)try{if(s.call(r.plugin,i,t)||i.defaultPrevented)return!0}catch(o){bt(t.state,o)}}return!1}runScrollHandlers(e,t){this.lastScrollTop=e.scrollDOM.scrollTop,this.lastScrollLeft=e.scrollDOM.scrollLeft;for(let i of this.customHandlers){let r=i.handlers.scroll;if(r)try{r.call(i.plugin,t,e)}catch(s){bt(e.state,s)}}}keydown(e,t){if(this.lastKeyCode=t.keyCode,this.lastKeyTime=Date.now(),t.keyCode==9&&Date.now()<this.lastEscPress+2e3)return!0;if(V.android&&V.chrome&&!t.synthetic&&(t.keyCode==13||t.keyCode==8))return e.observer.delayAndroidKey(t.key,t.keyCode),!0;let i;return V.ios&&!t.synthetic&&!t.altKey&&!t.metaKey&&((i=Uh.find(r=>r.keyCode==t.keyCode))&&!t.ctrlKey||vg.indexOf(t.key)>-1&&t.ctrlKey&&!t.shiftKey)?(this.pendingIOSKey=i||t,setTimeout(()=>this.flushIOSKey(e),250),!0):!1}flushIOSKey(e){let t=this.pendingIOSKey;return t?(this.pendingIOSKey=void 0,Bi(e.contentDOM,t.key,t.keyCode)):!1}ignoreDuringComposition(e){return/^key/.test(e.type)?this.composing>0?!0:V.safari&&!V.ios&&Date.now()-this.compositionEndedAt<100?(this.compositionEndedAt=0,!0):!1:!1}mustFlushObserver(e){return e.type=="keydown"&&e.keyCode!=229}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.mouseSelection&&this.mouseSelection.update(e),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}},Uh=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],vg="dthko",$h=[16,17,18,20,91,92,224,225];function Dr(n){return n*.7+8}var Po=class{constructor(e,t,i,r){this.view=e,this.style=i,this.mustSelect=r,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParent=qm(e.contentDOM);let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(U.allowMultipleSelections)&&Cg(e,t),this.dragMove=Sg(e,t),this.dragging=xg(e,t)&&jh(t)==1?null:!1}start(e){this.dragging===!1&&(e.preventDefault(),this.select(e))}move(e){var t;if(e.buttons==0)return this.destroy();if(this.dragging!==!1)return;this.select(this.lastEvent=e);let i=0,r=0,s=((t=this.scrollParent)===null||t===void 0?void 0:t.getBoundingClientRect())||{left:0,top:0,right:this.view.win.innerWidth,bottom:this.view.win.innerHeight};e.clientX<=s.left?i=-Dr(s.left-e.clientX):e.clientX>=s.right&&(i=Dr(e.clientX-s.right)),e.clientY<=s.top?r=-Dr(s.top-e.clientY):e.clientY>=s.bottom&&(r=Dr(e.clientY-s.bottom)),this.setScrollSpeed(i,r)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){this.scrollParent?(this.scrollParent.scrollLeft+=this.scrollSpeed.x,this.scrollParent.scrollTop+=this.scrollSpeed.y):this.view.win.scrollBy(this.scrollSpeed.x,this.scrollSpeed.y),this.dragging===!1&&this.select(this.lastEvent)}select(e){let t=this.style.get(e,this.extend,this.multiple);(this.mustSelect||!t.eq(this.view.state.selection)||t.main.assoc!=this.view.state.selection.main.assoc)&&this.view.dispatch({selection:t,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.docChanged&&this.dragging&&(this.dragging=this.dragging.map(e.changes)),this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}};function Cg(n,e){let t=n.state.facet(Th);return t.length?t[0](e):V.mac?e.metaKey:e.ctrlKey}function Sg(n,e){let t=n.state.facet(Rh);return t.length?t[0](e):V.mac?!e.altKey:!e.ctrlKey}function xg(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=Br(n.root);if(!i||i.rangeCount==0)return!0;let r=i.getRangeAt(0).getClientRects();for(let s=0;s<r.length;s++){let o=r[s];if(o.left<=e.clientX&&o.right>=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function ju(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=q.get(t))&&i.ignoreEvent(e))return!1;return!0}var ce=Object.create(null),Eo=Object.create(null),Kh=V.ie&&V.ie_version<15||V.ios&&V.webkit_version<604;function kg(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),qh(n,t.value)},50)}function qh(n,e){let{state:t}=n,i,r=1,s=t.toText(e),o=s.lines==t.selection.ranges.length;if(Oo!=null&&t.selection.ranges.every(a=>a.empty)&&Oo==s.toString()){let a=-1;i=t.changeByRange(u=>{let h=t.doc.lineAt(u.from);if(h.from==a)return{range:u};a=h.from;let c=t.toText((o?s.line(r++).text:e)+t.lineBreak);return{changes:{from:h.from,insert:c},range:T.cursor(u.from+c.length)}})}else o?i=t.changeByRange(a=>{let u=s.line(r++);return{changes:{from:a.from,to:a.to,insert:u.text},range:T.cursor(a.from+u.length)}}):i=t.replaceSelection(s);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}ce.keydown=(n,e)=>{n.inputState.setSelectionOrigin("select"),e.keyCode==27?n.inputState.lastEscPress=Date.now():$h.indexOf(e.keyCode)<0&&(n.inputState.lastEscPress=0)};ce.touchstart=(n,e)=>{n.inputState.lastTouchTime=Date.now(),n.inputState.setSelectionOrigin("select.pointer")};ce.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};Eo.touchstart=Eo.touchmove={passive:!0};ce.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return;let t=null;for(let i of n.state.facet(Dh))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=Rg(n,e)),t){let i=n.root.activeElement!=n.contentDOM;n.inputState.startMouseSelection(new Po(n,e,t,i)),i&&n.observer.ignore(()=>mh(n.contentDOM)),n.inputState.mouseSelection&&n.inputState.mouseSelection.start(e)}};function Ju(n,e,t,i){if(i==1)return T.cursor(e,t);if(i==2)return fg(n.state,e,t);{let r=me.find(n.docView,e),s=n.state.doc.lineAt(r?r.posAtEnd:e),o=r?r.posAtStart:s.from,l=r?r.posAtEnd:s.to;return l<n.state.doc.length&&l==s.to&&l++,T.range(o,l)}}var Gh=(n,e)=>n>=e.top&&n<=e.bottom,Qu=(n,e,t)=>Gh(e,t)&&n>=t.left&&n<=t.right;function Mg(n,e,t,i){let r=me.find(n.docView,e);if(!r)return 1;let s=e-r.posAtStart;if(s==0)return 1;if(s==r.length)return-1;let o=r.coordsAt(s,-1);if(o&&Qu(t,i,o))return-1;let l=r.coordsAt(s,1);return l&&Qu(t,i,l)?1:o&&Gh(i,o)?-1:1}function Xu(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1);return{pos:t,bias:Mg(n,t,e.clientX,e.clientY)}}var Tg=V.ie&&V.ie_version<=11,Yu=null,Zu=0,eh=0;function jh(n){if(!Tg)return n.detail;let e=Yu,t=eh;return Yu=n,eh=Date.now(),Zu=!e||t>Date.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(Zu+1)%3:1}function Rg(n,e){let t=Xu(n,e),i=jh(e),r=n.state.selection;return{update(s){s.docChanged&&(t.pos=s.changes.mapPos(t.pos),r=r.map(s.changes))},get(s,o,l){let a=Xu(n,s),u=Ju(n,a.pos,a.bias,i);if(t.pos!=a.pos&&!o){let h=Ju(n,t.pos,t.bias,i),c=Math.min(h.from,u.from),f=Math.max(h.to,u.to);u=c<u.from?T.range(c,f):T.range(f,c)}return o?r.replaceRange(r.main.extend(u.from,u.to)):l&&r.ranges.length>1&&r.ranges.some(h=>h.eq(u))?Dg(r,u):l?r.addRange(u):T.create([u])}}}function Dg(n,e){for(let t=0;;t++)if(n.ranges[t].eq(e))return T.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}ce.dragstart=(n,e)=>{let{selection:{main:t}}=n.state,{mouseSelection:i}=n.inputState;i&&(i.dragging=t),e.dataTransfer&&(e.dataTransfer.setData("Text",n.state.sliceDoc(t.from,t.to)),e.dataTransfer.effectAllowed="copyMove")};function th(n,e,t,i){if(!t)return;let r=n.posAtCoords({x:e.clientX,y:e.clientY},!1);e.preventDefault();let{mouseSelection:s}=n.inputState,o=i&&s&&s.dragging&&s.dragMove?{from:s.dragging.from,to:s.dragging.to}:null,l={from:r,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(r,-1),head:a.mapPos(r,1)},userEvent:o?"move.drop":"input.drop"})}ce.drop=(n,e)=>{if(!e.dataTransfer)return;if(n.state.readOnly)return e.preventDefault();let t=e.dataTransfer.files;if(t&&t.length){e.preventDefault();let i=Array(t.length),r=0,s=()=>{++r==t.length&&th(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o<t.length;o++){let l=new FileReader;l.onerror=s,l.onload=()=>{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),s()},l.readAsText(t[o])}}else th(n,e,e.dataTransfer.getData("Text"),!0)};ce.paste=(n,e)=>{if(n.state.readOnly)return e.preventDefault();n.observer.flush();let t=Kh?null:e.clipboardData;t?(qh(n,t.getData("text/plain")||t.getData("text/uri-text")),e.preventDefault()):kg(n)};function Ag(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function Pg(n){let e=[],t=[],i=!1;for(let r of n.selection.ranges)r.empty||(e.push(n.sliceDoc(r.from,r.to)),t.push(r));if(!e.length){let r=-1;for(let{from:s}of n.selection.ranges){let o=n.doc.lineAt(s);o.number>r&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),r=o.number}i=!0}return{text:e.join(n.lineBreak),ranges:t,linewise:i}}var Oo=null;ce.copy=ce.cut=(n,e)=>{let{text:t,ranges:i,linewise:r}=Pg(n.state);if(!t&&!r)return;Oo=r?t:null;let s=Kh?null:e.clipboardData;s?(e.preventDefault(),s.clearData(),s.setData("text/plain",t)):Ag(n,t),e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"})};var Jh=Ie.define();function Qh(n,e){let t=[];for(let i of n.facet(Eh)){let r=i(n,e);r&&t.push(r)}return t?n.update({effects:t,annotations:Jh.of(!0)}):null}function Xh(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=Qh(n.state,e);t?n.dispatch(t):n.update([])}},10)}ce.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),Xh(n)};ce.blur=n=>{n.observer.clearSelectionRange(),Xh(n)};ce.compositionstart=ce.compositionupdate=n=>{n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0)};ce.compositionend=n=>{n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionFirstChange=null,V.chrome&&V.android&&n.observer.flushSoon(),setTimeout(()=>{n.inputState.composing<0&&n.docView.compositionDeco.size&&n.update([])},50)};ce.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};ce.beforeinput=(n,e)=>{var t;let i;if(V.chrome&&V.android&&(i=Uh.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(i.key,i.keyCode),i.key=="Backspace"||i.key=="Delete")){let r=((t=window.visualViewport)===null||t===void 0?void 0:t.height)||0;setTimeout(()=>{var s;(((s=window.visualViewport)===null||s===void 0?void 0:s.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}};var ih=["pre-wrap","normal","pre-line","break-spaces"],Io=class{constructor(e){this.lineWrapping=e,this.doc=_.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30,this.heightChanged=!1}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/(this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return ih.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i<e.length;i++){let r=e[i];r<0?i++:this.heightSamples[Math.floor(r*10)]||(t=!0,this.heightSamples[Math.floor(r*10)]=!0)}return t}refresh(e,t,i,r,s,o){let l=ih.indexOf(e)>-1,a=Math.round(t)!=Math.round(this.lineHeight)||this.lineWrapping!=l;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=r,this.lineLength=s,a){this.heightSamples={};for(let u=0;u<o.length;u++){let h=o[u];h<0?u++:this.heightSamples[Math.floor(h*10)]=!0}}return a}},Vo=class{constructor(e,t){this.from=e,this.heights=t,this.index=0}get more(){return this.index<this.heights.length}},Ke=class{constructor(e,t,i,r,s){this.from=e,this.length=t,this.top=i,this.height=r,this.type=s}get to(){return this.from+this.length}get bottom(){return this.top+this.height}join(e){let t=(Array.isArray(this.type)?this.type:[this]).concat(Array.isArray(e.type)?e.type:[e]);return new Ke(this.from,this.length+e.length,this.top,this.height+e.height,t)}},j=function(n){return n[n.ByPos=0]="ByPos",n[n.ByHeight=1]="ByHeight",n[n.ByPosNoHeight=2]="ByPosNoHeight",n}(j||(j={})),Vr=.001,ge=class{constructor(e,t,i=2){this.length=e,this.height=t,this.flags=i}get outdated(){return(this.flags&2)>0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e,t){this.height!=t&&(Math.abs(this.height-t)>Vr&&(e.heightChanged=!0),this.height=t)}replace(e,t,i){return ge.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,r){let s=this,o=i.doc;for(let l=r.length-1;l>=0;l--){let{fromA:a,toA:u,fromB:h,toB:c}=r[l],f=s.lineAt(a,j.ByPosNoHeight,i.setDoc(t),0,0),d=f.to>=u?f:s.lineAt(u,j.ByPosNoHeight,i,0,0);for(c+=d.to-u,u=d.to;l>0&&f.from<=r[l-1].toA;)a=r[l-1].fromA,h=r[l-1].fromB,l--,a<f.from&&(f=s.lineAt(a,j.ByPosNoHeight,i,0,0));h+=f.from-a,a=f.from;let p=Pn.build(i.setDoc(o),e,h,c);s=s.replace(a,u,p)}return s.updateHeight(i,0)}static empty(){return new Se(0,0)}static of(e){if(e.length==1)return e[0];let t=0,i=e.length,r=0,s=0;for(;;)if(t==i)if(r>s*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,r-=l.size}else if(s>r*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,s-=l.size}else break;else if(r<s){let l=e[t++];l&&(r+=l.size)}else{let l=e[--i];l&&(s+=l.size)}let o=0;return e[t-1]==null?(o=1,t--):e[t]==null&&(o=1,i++),new Lo(ge.of(e.slice(0,t)),o,ge.of(e.slice(i)))}};ge.prototype.size=1;var Gr=class extends ge{constructor(e,t,i){super(e,t),this.type=i}blockAt(e,t,i,r){return new Ke(r,this.length,i,this.height,this.type)}lineAt(e,t,i,r,s){return this.blockAt(0,i,r,s)}forEachLine(e,t,i,r,s,o){e<=s+this.length&&t>=s&&o(this.blockAt(0,i,r,s))}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more&&this.setHeight(e,r.heights[r.index++]),this.outdated=!1,this}toString(){return`block(${this.length})`}},Se=class extends Gr{constructor(e,t){super(e,t,J.Text),this.collapsed=0,this.widgetHeight=0}replace(e,t,i){let r=i[0];return i.length==1&&(r instanceof Se||r instanceof ue&&r.flags&4)&&Math.abs(this.length-r.length)<10?(r instanceof ue?r=new Se(r.length,this.height):r.height=this.height,this.outdated||(r.outdated=!1),r):ge.of(i)}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more?this.setHeight(e,r.heights[r.index++]):(i||this.outdated)&&this.setHeight(e,Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}},ue=class extends ge{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,r=e.doc.lineAt(t+this.length).number,s=r-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*s);o=a/s,l=(this.height-a)/(this.length-s-1)}else o=this.height/s;return{firstLine:i,lastLine:r,perLine:o,perChar:l}}blockAt(e,t,i,r){let{firstLine:s,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,r);if(t.lineWrapping){let u=r+Math.round(Math.max(0,Math.min(1,(e-i)/this.height))*this.length),h=t.doc.lineAt(u),c=l+h.length*a,f=Math.max(i,e-c/2);return new Ke(h.from,h.length,f,c,J.Text)}else{let u=Math.max(0,Math.min(o-s,Math.floor((e-i)/l))),{from:h,length:c}=t.doc.line(s+u);return new Ke(h,c,i+l*u,l,J.Text)}}lineAt(e,t,i,r,s){if(t==j.ByHeight)return this.blockAt(e,i,r,s);if(t==j.ByPosNoHeight){let{from:d,to:p}=i.doc.lineAt(e);return new Ke(d,p-d,0,0,J.Text)}let{firstLine:o,perLine:l,perChar:a}=this.heightMetrics(i,s),u=i.doc.lineAt(e),h=l+u.length*a,c=u.number-o,f=r+l*c+a*(u.from-s-c);return new Ke(u.from,u.length,Math.max(r,Math.min(f,r+this.height-h)),h,J.Text)}forEachLine(e,t,i,r,s,o){e=Math.max(e,s),t=Math.min(t,s+this.length);let{firstLine:l,perLine:a,perChar:u}=this.heightMetrics(i,s);for(let h=e,c=r;h<=t;){let f=i.doc.lineAt(h);if(h==e){let p=f.number-l;c+=a*p+u*(e-s-p)}let d=a+u*f.length;o(new Ke(f.from,f.length,c,d,J.Text)),c+=d,h=f.to+1}}replace(e,t,i){let r=this.length-t;if(r>0){let s=i[i.length-1];s instanceof ue?i[i.length-1]=new ue(s.length+r):i.push(null,new ue(r-1))}if(e>0){let s=i[0];s instanceof ue?i[0]=new ue(e+s.length):i.unshift(new ue(e-1),null)}return ge.of(i)}decomposeLeft(e,t){t.push(new ue(e-1),null)}decomposeRight(e,t){t.push(null,new ue(this.length-e-1))}updateHeight(e,t=0,i=!1,r){let s=t+this.length;if(r&&r.from<=t+this.length&&r.more){let o=[],l=Math.max(t,r.from),a=-1;for(r.from>t&&o.push(new ue(r.from-t-1).updateHeight(e,t));l<=s&&r.more;){let h=e.doc.lineAt(l).length;o.length&&o.push(null);let c=r.heights[r.index++];a==-1?a=c:Math.abs(c-a)>=Vr&&(a=-2);let f=new Se(h,c);f.outdated=!1,o.push(f),l+=h+1}l<=s&&o.push(null,new ue(s-l).updateHeight(e,l));let u=ge.of(o);return(a<0||Math.abs(u.height-this.height)>=Vr||Math.abs(a-this.heightMetrics(e,t).perLine)>=Vr)&&(e.heightChanged=!0),u}else(i||this.outdated)&&(this.setHeight(e,e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}},Lo=class extends ge{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,r){let s=i+this.left.height;return e<s?this.left.blockAt(e,t,i,r):this.right.blockAt(e,t,s,r+this.left.length+this.break)}lineAt(e,t,i,r,s){let o=r+this.left.height,l=s+this.left.length+this.break,a=t==j.ByHeight?e<o:e<l,u=a?this.left.lineAt(e,t,i,r,s):this.right.lineAt(e,t,i,o,l);if(this.break||(a?u.to<l:u.from>l))return u;let h=t==j.ByPosNoHeight?j.ByPosNoHeight:j.ByPos;return a?u.join(this.right.lineAt(l,h,i,o,l)):this.left.lineAt(l,h,i,r,s).join(u)}forEachLine(e,t,i,r,s,o){let l=r+this.left.height,a=s+this.left.length+this.break;if(this.break)e<a&&this.left.forEachLine(e,t,i,r,s,o),t>=a&&this.right.forEachLine(e,t,i,l,a,o);else{let u=this.lineAt(a,j.ByPos,i,r,s);e<u.from&&this.left.forEachLine(e,u.from-1,i,r,s,o),u.to>=e&&u.from<=t&&o(u),t>u.to&&this.right.forEachLine(u.to+1,t,i,l,a,o)}}replace(e,t,i){let r=this.left.length+this.break;if(t<r)return this.balanced(this.left.replace(e,t,i),this.right);if(e>this.left.length)return this.balanced(this.left,this.right.replace(e-r,t-r,i));let s=[];e>0&&this.decomposeLeft(e,s);let o=s.length;for(let l of i)s.push(l);if(e>0&&nh(s,o-1),t<this.length){let l=s.length;this.decomposeRight(t,s),nh(s,l)}return ge.of(s)}decomposeLeft(e,t){let i=this.left.length;if(e<=i)return this.left.decomposeLeft(e,t);t.push(this.left),this.break&&(i++,e>=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,r=i+this.break;if(e>=r)return this.right.decomposeRight(e-r,t);e<i&&this.left.decomposeRight(e,t),this.break&&e<r&&t.push(null),t.push(this.right)}balanced(e,t){return e.size>2*t.size||t.size>2*e.size?ge.of(this.break?[e,null,t]:[e,t]):(this.left=e,this.right=t,this.height=e.height+t.height,this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,r){let{left:s,right:o}=this,l=t+s.length+this.break,a=null;return r&&r.from<=t+s.length&&r.more?a=s=s.updateHeight(e,t,i,r):s.updateHeight(e,t,i),r&&r.from<=l+o.length&&r.more?a=o=o.updateHeight(e,l,i,r):o.updateHeight(e,l,i),a?this.balanced(s,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}};function nh(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof ue&&(i=n[e+1])instanceof ue&&n.splice(e-1,3,new ue(t.length+1+i.length))}var Eg=5,Pn=class{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),r=this.nodes[this.nodes.length-1];r instanceof Se?r.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new Se(i-this.pos,-1)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e<t||i.heightRelevant){let r=i.widget?i.widget.estimatedHeight:0;r<0&&(r=this.oracle.lineHeight);let s=t-e;i.block?this.addBlock(new Gr(s,r,i.type)):(s||r>=Eg)&&this.addLineDeco(r,s)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd<this.pos&&(this.lineEnd=this.oracle.doc.lineAt(this.pos).to)}enterLine(){if(this.lineStart>-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenTo<e&&((this.writtenTo<e-1||this.nodes[this.nodes.length-1]==null)&&this.nodes.push(this.blankContent(this.writtenTo,e-1)),this.nodes.push(null)),this.pos>e&&this.nodes.push(new Se(this.pos-e,-1)),this.writtenTo=this.pos}blankContent(e,t){let i=new ue(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof Se)return e;let t=new Se(0,-1);return this.nodes.push(t),t}addBlock(e){this.enterLine(),e.type==J.WidgetAfter&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,e.type!=J.WidgetBefore&&(this.covering=e)}addLineDeco(e,t){let i=this.ensureLine();i.length+=t,i.collapsed+=t,i.widgetHeight=Math.max(i.widgetHeight,e),this.writtenTo=this.pos=this.pos+t}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof Se)&&!this.isCovered?this.nodes.push(new Se(0,-1)):(this.writtenTo<this.pos||t==null)&&this.nodes.push(this.blankContent(this.writtenTo,this.pos));let i=e;for(let r of this.nodes)r instanceof Se&&r.updateHeight(this.oracle,i),i+=r?r.length:1;return this.nodes}static build(e,t,i,r){let s=new Pn(i,e);return Y.spans(t,i,r,s,0),s.finish(i)}};function Og(n,e,t){let i=new No;return Y.compare(n,e,t,i,0),i.changes}var No=class{constructor(){this.changes=[]}compareRange(){}comparePoint(e,t,i,r){(e<t||i&&i.heightRelevant||r&&r.heightRelevant)&&So(e,t,this.changes,5)}};function Ig(n,e){let t=n.getBoundingClientRect(),i=n.ownerDocument,r=i.defaultView||window,s=Math.max(0,t.left),o=Math.min(r.innerWidth,t.right),l=Math.max(0,t.top),a=Math.min(r.innerHeight,t.bottom);for(let u=n.parentNode;u&&u!=i.body;)if(u.nodeType==1){let h=u,c=window.getComputedStyle(h);if((h.scrollHeight>h.clientHeight||h.scrollWidth>h.clientWidth)&&c.overflow!="visible"){let f=h.getBoundingClientRect();s=Math.max(s,f.left),o=Math.min(o,f.right),l=Math.max(l,f.top),a=u==n.parentNode?f.bottom:Math.min(a,f.bottom)}u=c.position=="absolute"||c.position=="fixed"?h.offsetParent:h.parentNode}else if(u.nodeType==11)u=u.host;else break;return{left:s-t.left,right:Math.max(s,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function Vg(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}var Mn=class{constructor(e,t,i){this.from=e,this.to=t,this.size=i}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;i<e.length;i++){let r=e[i],s=t[i];if(r.from!=s.from||r.to!=s.to||r.size!=s.size)return!1}return!0}draw(e){return Q.replace({widget:new Bo(this.size,e)}).range(this.from,this.to)}},Bo=class extends yt{constructor(e,t){super(),this.size=e,this.vertical=t}eq(e){return e.size==this.size&&e.vertical==this.vertical}toDOM(){let e=document.createElement("div");return this.vertical?e.style.height=this.size+"px":(e.style.width=this.size+"px",e.style.height="2px",e.style.display="inline-block"),e}get estimatedHeight(){return this.vertical?this.size:-1}},jr=class{constructor(e){this.state=e,this.pixelViewport={left:0,right:window.innerWidth,top:0,bottom:0},this.inView=!0,this.paddingTop=0,this.paddingBottom=0,this.contentDOMWidth=0,this.contentDOMHeight=0,this.editorHeight=0,this.editorWidth=0,this.scaler=rh,this.scrollTarget=null,this.printing=!1,this.mustMeasureContent=!0,this.defaultTextDirection=le.LTR,this.visibleRanges=[],this.mustEnforceCursorAssoc=!1;let t=e.facet(Yo).some(i=>typeof i!="function"&&i.class=="cm-lineWrapping");this.heightOracle=new Io(t),this.stateDeco=e.facet(An).filter(i=>typeof i!="function"),this.heightMap=ge.empty().applyChanges(this.stateDeco,_.empty,this.heightOracle.setDoc(e.doc),[new Le(0,0,0,e.doc.length)]),this.viewport=this.getViewport(0,null),this.updateViewportLines(),this.updateForViewport(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=Q.set(this.lineGaps.map(i=>i.draw(!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let r=i?t.head:t.anchor;if(!e.some(({from:s,to:o})=>r>=s&&r<=o)){let{from:s,to:o}=this.lineBlockAt(r);e.push(new Ni(s,o))}}this.viewports=e.sort((i,r)=>i.from-r.from),this.scaler=this.heightMap.height<=7e6?rh:new Fo(this.heightOracle,this.heightMap,this.viewports)}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(this.scaler.scale==1?e:xn(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=this.state.facet(An).filter(u=>typeof u!="function");let r=e.changedRanges,s=Le.extendWithRanges(r,Og(i,this.stateDeco,e?e.changes:ie.empty(this.state.doc.length))),o=this.heightMap.height;this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),this.heightMap.height!=o&&(e.flags|=2);let l=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.head<l.from||t.range.head>l.to)||!this.viewportIsAppropriate(l))&&(l=this.getViewport(0,t));let a=!e.changes.empty||e.flags&2||l.from!=this.viewport.from||l.to!=this.viewport.to;this.viewport=l,this.updateForViewport(),a&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>2e3<<1)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&e.selectionSet&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(Ih)&&(this.mustEnforceCursorAssoc=!0)}measure(e){let t=e.contentDOM,i=window.getComputedStyle(t),r=this.heightOracle,s=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?le.RTL:le.LTR;let o=this.heightOracle.mustRefreshForWrapping(s),l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let u=0,h=0,c=parseInt(i.paddingTop)||0,f=parseInt(i.paddingBottom)||0;(this.paddingTop!=c||this.paddingBottom!=f)&&(this.paddingTop=c,this.paddingBottom=f,u|=10),this.editorWidth!=e.scrollDOM.clientWidth&&(r.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,u|=8);let d=(this.printing?Vg:Ig)(t,this.paddingTop),p=d.top-this.pixelViewport.top,m=d.bottom-this.pixelViewport.bottom;this.pixelViewport=d;let g=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(g!=this.inView&&(this.inView=g,g&&(a=!0)),!this.inView&&!this.scrollTarget)return 0;let b=l.width;if((this.contentDOMWidth!=b||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,u|=8),a){let y=e.docView.measureVisibleLineHeights(this.viewport);if(r.mustRefreshForHeights(y)&&(o=!0),o||r.lineWrapping&&Math.abs(b-this.contentDOMWidth)>r.charWidth){let{lineHeight:x,charWidth:v,textHeight:w}=e.docView.measureTextSize();o=x>0&&r.refresh(s,x,v,w,b/v,y),o&&(e.docView.minWidth=0,u|=8)}p>0&&m>0?h=Math.max(p,m):p<0&&m<0&&(h=Math.min(p,m)),r.heightChanged=!1;for(let x of this.viewports){let v=x.from==this.viewport.from?y:e.docView.measureVisibleLineHeights(x);this.heightMap=(o?ge.empty().applyChanges(this.stateDeco,_.empty,this.heightOracle,[new Le(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(r,0,o,new Vo(x.from,v))}r.heightChanged&&(u|=2)}let C=!this.viewportIsAppropriate(this.viewport,h)||this.scrollTarget&&(this.scrollTarget.range.head<this.viewport.from||this.scrollTarget.range.head>this.viewport.to);return C&&(this.viewport=this.getViewport(h,this.scrollTarget)),this.updateForViewport(),(u&2||C)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>2e3<<1)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),u|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),u}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),r=this.heightMap,s=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new Ni(r.lineAt(o-i*1e3,j.ByHeight,s,0,0).from,r.lineAt(l+(1-i)*1e3,j.ByHeight,s,0,0).to);if(t){let{head:u}=t.range;if(u<a.from||u>a.to){let h=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),c=r.lineAt(u,j.ByPos,s,0,0),f;t.y=="center"?f=(c.top+c.bottom)/2-h/2:t.y=="start"||t.y=="nearest"&&u<a.from?f=c.top:f=c.bottom-h,a=new Ni(r.lineAt(f-1e3/2,j.ByHeight,s,0,0).from,r.lineAt(f+h+1e3/2,j.ByHeight,s,0,0).to)}}return a}mapViewport(e,t){let i=t.mapPos(e.from,-1),r=t.mapPos(e.to,1);return new Ni(this.heightMap.lineAt(i,j.ByPos,this.heightOracle,0,0).from,this.heightMap.lineAt(r,j.ByPos,this.heightOracle,0,0).to)}viewportIsAppropriate({from:e,to:t},i=0){if(!this.inView)return!0;let{top:r}=this.heightMap.lineAt(e,j.ByPos,this.heightOracle,0,0),{bottom:s}=this.heightMap.lineAt(t,j.ByPos,this.heightOracle,0,0),{visibleTop:o,visibleBottom:l}=this;return(e==0||r<=o-Math.max(10,Math.min(-i,250)))&&(t==this.state.doc.length||s>=l+Math.max(10,Math.min(i,250)))&&r>o-2*1e3&&s<l+2*1e3}mapLineGaps(e,t){if(!e.length||t.empty)return e;let i=[];for(let r of e)t.touchesRange(r.from,r.to)||i.push(new Mn(t.mapPos(r.from),t.mapPos(r.to),r.size));return i}ensureLineGaps(e,t){let i=this.heightOracle.lineWrapping,r=i?1e4:2e3,s=r>>1,o=r<<1;if(this.defaultTextDirection!=le.LTR&&!i)return[];let l=[],a=(u,h,c,f)=>{if(h-u<s)return;let d=this.state.selection.main,p=[d.from];d.empty||p.push(d.to);for(let g of p)if(g>u&&g<h){a(u,g-10,c,f),a(g+10,h,c,f);return}let m=Ng(e,g=>g.from>=c.from&&g.to<=c.to&&Math.abs(g.from-u)<s&&Math.abs(g.to-h)<s&&!p.some(b=>g.from<b&&g.to>b));if(!m){if(h<c.to&&t&&i&&t.visibleRanges.some(g=>g.from<=h&&g.to>=h)){let g=t.moveToLineBoundary(T.cursor(h),!1,!0).head;g>u&&(h=g)}m=new Mn(u,h,this.gapSize(c,u,h,f))}l.push(m)};for(let u of this.viewportLines){if(u.length<o)continue;let h=Lg(u.from,u.to,this.stateDeco);if(h.total<o)continue;let c=this.scrollTarget?this.scrollTarget.range.head:null,f,d;if(i){let p=r/this.heightOracle.lineLength*this.heightOracle.lineHeight,m,g;if(c!=null){let b=Pr(h,c),C=((this.visibleBottom-this.visibleTop)/2+p)/u.height;m=b-C,g=b+C}else m=(this.visibleTop-u.top-p)/u.height,g=(this.visibleBottom-u.top+p)/u.height;f=Ar(h,m),d=Ar(h,g)}else{let p=h.total*this.heightOracle.charWidth,m=r*this.heightOracle.charWidth,g,b;if(c!=null){let C=Pr(h,c),y=((this.pixelViewport.right-this.pixelViewport.left)/2+m)/p;g=C-y,b=C+y}else g=(this.pixelViewport.left-m)/p,b=(this.pixelViewport.right+m)/p;f=Ar(h,g),d=Ar(h,b)}f>u.from&&a(u.from,f,u,h),d<u.to&&a(d,u.to,u,h)}return l}gapSize(e,t,i,r){let s=Pr(r,i)-Pr(r,t);return this.heightOracle.lineWrapping?e.height*s:r.total*this.heightOracle.charWidth*s}updateLineGaps(e){Mn.same(e,this.lineGaps)||(this.lineGaps=e,this.lineGapDeco=Q.set(e.map(t=>t.draw(this.heightOracle.lineWrapping))))}computeVisibleRanges(){let e=this.stateDeco;this.lineGaps.length&&(e=e.concat(this.lineGapDeco));let t=[];Y.spans(e,this.viewport.from,this.viewport.to,{span(r,s){t.push({from:r,to:s})},point(){}},20);let i=t.length!=this.visibleRanges.length||this.visibleRanges.some((r,s)=>r.from!=t[s].from||r.to!=t[s].to);return this.visibleRanges=t,i?4:0}lineBlockAt(e){return e>=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||xn(this.heightMap.lineAt(e,j.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return xn(this.heightMap.lineAt(this.scaler.fromDOM(e),j.ByHeight,this.heightOracle,0,0),this.scaler)}elementAtHeight(e){return xn(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}},Ni=class{constructor(e,t){this.from=e,this.to=t}};function Lg(n,e,t){let i=[],r=n,s=0;return Y.spans(t,n,e,{span(){},point(o,l){o>r&&(i.push({from:r,to:o}),s+=o-r),r=l}},20),r<e&&(i.push({from:r,to:e}),s+=e-r),{total:s,ranges:i}}function Ar({total:n,ranges:e},t){if(t<=0)return e[0].from;if(t>=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let r=0;;r++){let{from:s,to:o}=e[r],l=o-s;if(i<=l)return s+i;i-=l}}function Pr(n,e){let t=0;for(let{from:i,to:r}of n.ranges){if(e<=r){t+=e-i;break}t+=r-i}return t/n.total}function Ng(n,e){for(let t of n)if(e(t))return t}var rh={toDOM(n){return n},fromDOM(n){return n},scale:1},Fo=class{constructor(e,t,i){let r=0,s=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let u=t.lineAt(l,j.ByPos,e,0,0).top,h=t.lineAt(a,j.ByPos,e,0,0).bottom;return r+=h-u,{from:l,to:a,top:u,bottom:h,domTop:0,domBottom:0}}),this.scale=(7e6-r)/(t.height-r);for(let l of this.viewports)l.domTop=o+(l.top-s)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),s=l.bottom}toDOM(e){for(let t=0,i=0,r=0;;t++){let s=t<this.viewports.length?this.viewports[t]:null;if(!s||e<s.top)return r+(e-i)*this.scale;if(e<=s.bottom)return s.domTop+(e-s.top);i=s.bottom,r=s.domBottom}}fromDOM(e){for(let t=0,i=0,r=0;;t++){let s=t<this.viewports.length?this.viewports[t]:null;if(!s||e<s.domTop)return i+(e-r)/this.scale;if(e<=s.domBottom)return s.top+(e-s.domTop);i=s.bottom,r=s.domBottom}}};function xn(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new Ke(n.from,n.length,t,i-t,Array.isArray(n.type)?n.type.map(r=>xn(r,e)):n.type)}var Er=N.define({combine:n=>n.join(" ")}),Ho=N.define({combine:n=>n.indexOf(!0)>-1}),Wo=Ve.newName(),Yh=Ve.newName(),Zh=Ve.newName(),ec={"&light":"."+Yh,"&dark":"."+Zh};function _o(n,e,t){return new Ve(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,r=>{if(r=="&")return n;if(!t||!t[r])throw new RangeError(`Unsupported selector: ${r}`);return t[r]}):n+" "+i}})}var Bg=_o("."+Wo,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#444"},".cm-dropCursor":{position:"absolute"},"&.cm-focused .cm-cursor":{display:"block"},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",left:0,zIndex:200},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",borderRight:"1px solid #ddd"},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top"},".cm-highlightSpace:before":{content:"attr(data-display)",position:"absolute",pointerEvents:"none",color:"#888"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="20"><path stroke="%23888" stroke-width="1" fill="none" d="M1 10H196L190 5M190 15L196 10M197 4L197 16"/></svg>')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},ec),zo=class{constructor(e,t,i,r){this.typeOver=r,this.bounds=null,this.text="";let{impreciseHead:s,impreciseAnchor:o}=e.docView;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=e.docView.domBoundsAround(t,i,0))){let l=s||o?[]:Hg(e),a=new Ur(l,e.state);a.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=a.text,this.newSel=Wg(l,this.bounds.from)}else{let l=e.observer.selectionRange,a=s&&s.node==l.focusNode&&s.offset==l.focusOffset||!Fi(e.contentDOM,l.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),u=o&&o.node==l.anchorNode&&o.offset==l.anchorOffset||!Fi(e.contentDOM,l.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset);this.newSel=T.single(u,a)}}};function tc(n,e){let t,{newSel:i}=e,r=n.state.selection.main;if(e.bounds){let{from:s,to:o}=e.bounds,l=r.from,a=null;(n.inputState.lastKeyCode===8&&n.inputState.lastKeyTime>Date.now()-100||V.android&&e.text.length<o-s)&&(l=r.to,a="end");let u=Fg(n.state.doc.sliceString(s,o,Et),e.text,l-s,a);u&&(V.chrome&&n.inputState.lastKeyCode==13&&u.toB==u.from+2&&e.text.slice(u.from,u.toB)==Et+Et&&u.toB--,t={from:s+u.from,to:s+u.toA,insert:_.of(e.text.slice(u.from,u.toB).split(Et))})}else i&&(!n.hasFocus&&n.state.facet(Qr)||i.main.eq(r))&&(i=null);if(!t&&!i)return!1;if(!t&&e.typeOver&&!r.empty&&i&&i.main.empty?t={from:r.from,to:r.to,insert:n.state.doc.slice(r.from,r.to)}:t&&t.from>=r.from&&t.to<=r.to&&(t.from!=r.from||t.to!=r.to)&&r.to-r.from-(t.to-t.from)<=4?t={from:r.from,to:r.to,insert:n.state.doc.slice(r.from,t.from).append(t.insert).append(n.state.doc.slice(t.to,r.to))}:(V.mac||V.android)&&t&&t.from==t.to&&t.from==r.head-1&&/^\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&t.insert.length==2&&(i=T.single(i.main.anchor-1,i.main.head-1)),t={from:r.from,to:r.to,insert:_.of([" "])}):V.chrome&&t&&t.from==t.to&&t.from==r.head&&t.insert.toString()==`
9
- `&&n.lineWrapping&&(i&&(i=T.single(i.main.anchor-1,i.main.head-1)),t={from:r.from,to:r.to,insert:_.of([" "])}),t){let s=n.state;if(V.ios&&n.inputState.flushIOSKey(n)||V.android&&(t.from==r.from&&t.to==r.to&&t.insert.length==1&&t.insert.lines==2&&Bi(n.contentDOM,"Enter",13)||t.from==r.from-1&&t.to==r.to&&t.insert.length==0&&Bi(n.contentDOM,"Backspace",8)||t.from==r.from&&t.to==r.to+1&&t.insert.length==0&&Bi(n.contentDOM,"Delete",46)))return!0;let o=t.insert.toString();if(n.state.facet(Ph).some(u=>u(n,t.from,t.to,o)))return!0;n.inputState.composing>=0&&n.inputState.composing++;let l;if(t.from>=r.from&&t.to<=r.to&&t.to-t.from>=(r.to-r.from)/3&&(!i||i.main.empty&&i.main.from==t.from+t.insert.length)&&n.inputState.composing<0){let u=r.from<t.from?s.sliceDoc(r.from,t.from):"",h=r.to>t.to?s.sliceDoc(t.to,r.to):"";l=s.replaceSelection(n.state.toText(u+t.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let u=s.changes(t),h=i&&!s.selection.main.eq(i.main)&&i.main.to<=u.newLength?i.main:void 0;if(s.selection.ranges.length>1&&n.inputState.composing>=0&&t.to<=r.to&&t.to>=r.to-10){let c=n.state.sliceDoc(t.from,t.to),f=Wh(n)||n.state.doc.lineAt(r.head),d=r.to-t.to,p=r.to-r.from;l=s.changeByRange(m=>{if(m.from==r.from&&m.to==r.to)return{changes:u,range:h||m.map(u)};let g=m.to-d,b=g-c.length;if(m.to-m.from!=p||n.state.sliceDoc(b,g)!=c||f&&m.to>=f.from&&m.from<=f.to)return{range:m};let C=s.changes({from:b,to:g,insert:t.insert}),y=m.to-r.to;return{changes:C,range:h?T.range(Math.max(0,h.anchor+y),Math.max(0,h.head+y)):m.map(C)}})}else l={changes:u,selection:h&&s.selection.replaceRange(h)}}let a="input.type";return n.composing&&(a+=".compose",n.inputState.compositionFirstChange&&(a+=".start",n.inputState.compositionFirstChange=!1)),n.dispatch(l,{scrollIntoView:!0,userEvent:a}),!0}else if(i&&!i.main.eq(r)){let s=!1,o="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(s=!0),o=n.inputState.lastSelectionOrigin),n.dispatch({selection:i,scrollIntoView:s,userEvent:o}),!0}else return!1}function Fg(n,e,t,i){let r=Math.min(n.length,e.length),s=0;for(;s<r&&n.charCodeAt(s)==e.charCodeAt(s);)s++;if(s==r&&n.length==e.length)return null;let o=n.length,l=e.length;for(;o>0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,s-Math.min(o,l));t-=o+a-s}if(o<s&&n.length<e.length){let a=t<=s&&t>=o?s-t:0;s-=a,l=s+(l-o),o=s}else if(l<s){let a=t<=s&&t>=l?s-t:0;s-=a,o=s+(o-l),l=s}return{from:s,toA:o,toB:l}}function Hg(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:r,focusOffset:s}=n.observer.selectionRange;return t&&(e.push(new $r(t,i)),(r!=t||s!=i)&&e.push(new $r(r,s))),e}function Wg(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?T.single(t+e,i+e):null}var _g={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},co=V.ie&&V.ie_version<=11,Uo=class{constructor(e){this.view=e,this.active=!1,this.selectionRange=new po,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.resizeContent=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(V.ie&&V.ie_version<=11||V.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),co&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate)<Date.now()-75&&this.onResize()}),this.resizeScroll.observe(e.scrollDOM),this.resizeContent=new ResizeObserver(()=>this.view.requestMeasure()),this.resizeContent.observe(e.contentDOM)),this.addWindowListeners(this.win=e.win),this.start(),typeof IntersectionObserver=="function"&&(this.intersection=new IntersectionObserver(t=>{this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runScrollHandlers(this.view,e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(){this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500)}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,r=this.selectionRange;if(i.state.facet(Qr)?i.root.activeElement!=this.dom:!Ir(i.dom,r))return;let s=r.anchorNode&&i.docView.nearest(r.anchorNode);if(s&&s.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(V.ie&&V.ie_version<=11||V.android&&V.chrome)&&!i.state.selection.main.empty&&r.focusNode&&Fr(r.focusNode,r.focusOffset,r.anchorNode,r.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=V.safari&&e.root.nodeType==11&&Um(this.dom.ownerDocument)==this.dom&&zg(this.view)||Br(e.root);if(!t||this.selectionRange.eq(t))return!1;let i=Ir(this.dom,t);return i&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime<Date.now()-300&&jm(this.dom,t)?(this.view.inputState.lastFocusTime=0,e.docView.updateSelection(),!1):(this.selectionRange.setRange(t),i&&(this.selectionChanged=!0),!0)}setSelectionRange(e,t){this.selectionRange.set(e.node,e.offset,t.node,t.offset),this.selectionChanged=!1}clearSelectionRange(){this.selectionRange.set(null,0,null,0)}listenForScroll(){this.parentCheck=-1;let e=0,t=null;for(let i=this.dom;i;)if(i.nodeType==1)!t&&e<this.scrollTargets.length&&this.scrollTargets[e]==i?e++:t||(t=this.scrollTargets.slice(0,e)),t&&t.push(i),i=i.assignedSlot||i.parentNode;else if(i.nodeType==11)i=i.host;else break;if(e<this.scrollTargets.length&&!t&&(t=this.scrollTargets.slice(0,e)),t){for(let i of this.scrollTargets)i.removeEventListener("scroll",this.onScroll);for(let i of this.scrollTargets=t)i.addEventListener("scroll",this.onScroll)}}ignore(e){if(!this.active)return e();try{return this.stop(),e()}finally{this.start(),this.clear()}}start(){this.active||(this.observer.observe(this.dom,_g),co&&this.dom.addEventListener("DOMCharacterDataModified",this.onCharData),this.active=!0)}stop(){this.active&&(this.active=!1,this.observer.disconnect(),co&&this.dom.removeEventListener("DOMCharacterDataModified",this.onCharData))}clear(){this.processRecords(),this.queue.length=0,this.selectionChanged=!1}delayAndroidKey(e,t){var i;if(!this.delayedAndroidKey){let r=()=>{let s=this.delayedAndroidKey;s&&(this.clearDelayedAndroidKey(),!this.flush()&&s.force&&Bi(this.dom,s.key,s.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(r)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange<Date.now()-50||!!(!((i=this.delayedAndroidKey)===null||i===void 0)&&i.force)})}clearDelayedAndroidKey(){this.win.cancelAnimationFrame(this.flushingAndroidKey),this.delayedAndroidKey=null,this.flushingAndroidKey=-1}flushSoon(){this.delayedFlush<0&&(this.delayedFlush=this.view.win.requestAnimationFrame(()=>{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}processRecords(){let e=this.queue;for(let s of this.observer.takeRecords())e.push(s);e.length&&(this.queue=[]);let t=-1,i=-1,r=!1;for(let s of e){let o=this.readMutation(s);o&&(o.typeOver&&(r=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:r}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),r=this.selectionChanged&&Ir(this.dom,this.selectionRange);return e<0&&!r?null:(e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1,new zo(this.view,e,t,i))}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return!1;let i=this.view.state,r=tc(this.view,t);return this.view.state==i&&this.view.update([]),r}readMutation(e){let t=this.view.docView.nearest(e.target);if(!t||t.ignoreMutation(e))return null;if(t.markDirty(e.type=="attributes"),e.type=="attributes"&&(t.dirty|=4),e.type=="childList"){let i=sh(t,e.previousSibling||e.target.previousSibling,-1),r=sh(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:r?t.posBefore(r):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}destroy(){var e,t,i,r;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect(),(r=this.resizeContent)===null||r===void 0||r.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey)}};function sh(n,e,t){for(;e;){let i=q.get(e);if(i&&i.parent==n)return i;let r=e.parentNode;e=r!=n.dom?r:t>0?e.nextSibling:e.previousSibling}return null}function zg(n){let e=null;function t(a){a.preventDefault(),a.stopImmediatePropagation(),e=a.getTargetRanges()[0]}if(n.contentDOM.addEventListener("beforeinput",t,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",t,!0),!e)return null;let i=e.startContainer,r=e.startOffset,s=e.endContainer,o=e.endOffset,l=n.docView.domAtPos(n.state.selection.main.anchor);return Fr(l.node,l.offset,s,o)&&([i,r,s,o]=[s,o,i,r]),{anchorNode:i,anchorOffset:r,focusNode:s,focusOffset:o}}var H=class{constructor(e={}){this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.style.cssText="position: fixed; top: -10000px",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),this._dispatch=e.dispatch||(t=>this.update([t])),this.dispatch=this.dispatch.bind(this),this._root=e.root||Gm(e.parent)||document,this.viewState=new jr(e.state||U.create(e)),this.plugins=this.state.facet(Cn).map(t=>new kn(t));for(let t of this.plugins)t.update(this);this.observer=new Uo(this),this.inputState=new Ao(this),this.inputState.ensureHandlers(this,this.plugins),this.docView=new Kr(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),e.parent&&e.parent.appendChild(this.dom)}get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return this.inputState.composing>0}get compositionStarted(){return this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}dispatch(...e){this._dispatch(e.length==1&&e[0]instanceof ne?e[0]:this.state.update(...e))}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,r,s=this.state;for(let f of e){if(f.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=f.state}if(this.destroyed){this.viewState.state=s;return}let o=this.hasFocus,l=0,a=null;e.some(f=>f.annotation(Jh))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=Qh(s,o),a||(l=1));let u=this.observer.delayedAndroidKey,h=null;if(u?(this.observer.clearDelayedAndroidKey(),h=this.observer.readChange(),(h&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(h=null)):this.observer.clear(),s.facet(U.phrases)!=this.state.facet(U.phrases))return this.setState(s);r=zi.create(this,s,e),r.flags|=l;let c=this.viewState.scrollTarget;try{this.updateState=2;for(let f of e){if(c&&(c=c.map(f.changes)),f.scrollIntoView){let{main:d}=f.state.selection;c=new _i(d.empty?d:T.cursor(d.head,d.head>d.anchor?-1:1))}for(let d of f.effects)d.is(_u)&&(c=d.value)}this.viewState.update(r,c),this.bidiCache=Ui.update(this.bidiCache,r.changes),r.empty||(this.updatePlugins(r),this.inputState.update(r)),t=this.docView.update(r),this.state.facet(Sn)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(f=>f.isUserEvent("select.pointer")))}finally{this.updateState=0}if(r.startState.facet(Er)!=r.state.facet(Er)&&(this.viewState.mustMeasureContent=!0),(t||i||c||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),!r.empty)for(let f of this.state.facet(xo))f(r);(a||h)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),h&&!tc(this,h)&&u.force&&Bi(this.contentDOM,u.key,u.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new jr(e),this.plugins=e.facet(Cn).map(i=>new kn(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView=new Kr(this),this.inputState.ensureHandlers(this,this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Cn),i=e.state.facet(Cn);if(t!=i){let r=[];for(let s of i){let o=t.indexOf(s);if(o<0)r.push(new kn(s));else{let l=this.plugins[o];l.mustUpdate=e,r.push(l)}}for(let s of this.plugins)s.mustUpdate!=e&&s.destroy(this);this.plugins=r,this.pluginMap.clear(),this.inputState.ensureHandlers(this,this.plugins)}else for(let r of this.plugins)r.mustUpdate=e;for(let r=0;r<this.plugins.length;r++)this.plugins[r].update(this)}measure(e=!0){if(this.destroyed)return;this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,{scrollHeight:i,scrollTop:r,clientHeight:s}=this.scrollDOM,o=r>i-s-4?i:r;try{for(let l=0;;l++){this.updateState=1;let a=this.viewport,u=this.viewState.lineBlockAtHeight(o),h=this.viewState.measure(this);if(!h&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let c=[];h&4||([this.measureRequests,c]=[c,this.measureRequests]);let f=c.map(g=>{try{return g.read(this)}catch(b){return bt(this.state,b),oh}}),d=zi.create(this,this.state,[]),p=!1,m=!1;d.flags|=h,t?t.flags|=h:t=d,this.updateState=2,d.empty||(this.updatePlugins(d),this.inputState.update(d),this.updateAttrs(),p=this.docView.update(d));for(let g=0;g<c.length;g++)if(f[g]!=oh)try{let b=c[g];b.write&&b.write(f[g],this)}catch(b){bt(this.state,b)}if(this.viewState.editorHeight)if(this.viewState.scrollTarget)this.docView.scrollIntoView(this.viewState.scrollTarget),this.viewState.scrollTarget=null,m=!0;else{let g=this.viewState.lineBlockAt(u.from).top-u.top;(g>1||g<-1)&&(this.scrollDOM.scrollTop+=g,m=!0)}if(p&&this.docView.updateSelection(!0),this.viewport.from==a.from&&this.viewport.to==a.to&&!m&&this.measureRequests.length==0)break}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(xo))l(t)}get themeClasses(){return Wo+" "+(this.state.facet(Ho)?Zh:Yh)+" "+this.state.facet(Er)}updateAttrs(){let e=lh(this,Vh,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",translate:"no",contenteditable:this.state.facet(Qr)?"true":"false",class:"cm-content",style:`${V.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),lh(this,Yo,t);let i=this.observer.ignore(()=>{let r=Co(this.contentDOM,this.contentAttrs,t),s=Co(this.dom,this.editorAttrs,e);return r||s});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let r of i.effects)if(r.is(H.announce)){t&&(this.announceDOM.textContent=""),t=!1;let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=r.value}}mountStyles(){this.styleModules=this.state.facet(Sn),Ve.mount(this.root,this.styleModules.concat(Bg).reverse())}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;t<this.measureRequests.length;t++)if(this.measureRequests[t].key===e.key){this.measureRequests[t]=e;return}}this.measureRequests.push(e)}}plugin(e){let t=this.pluginMap.get(e);return(t===void 0||t&&t.spec!=e)&&this.pluginMap.set(e,t=this.plugins.find(i=>i.spec==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return ho(this,e,Gu(this,e,t,i))}moveByGroup(e,t){return ho(this,e,Gu(this,e,t,i=>yg(this,e.head,i)))}moveToLineBoundary(e,t,i=!0){return bg(this,e,t,i)}moveVertically(e,t,i){return ho(this,e,wg(this,e,t,i))}domAtPos(e){return this.docView.domAtPos(e)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){return this.readMeasured(),zh(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let r=this.state.doc.lineAt(e),s=this.bidiSpans(r),o=s[Ot.find(s,e-r.from,-1,t)];return Jo(i,o.dir==le.LTR==t>0)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Oh)||e<this.viewport.from||e>this.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>Ug)return Fh(e.length);let t=this.textDirectionAt(e.from);for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t)return r.order;let i=sg(e.text,t);return this.bidiCache.push(new Ui(e.from,e.to,t,i)),i}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||V.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{mh(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){return _u.of(new _i(typeof e=="number"?T.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))}static domEventHandlers(e){return qe.define(()=>({}),{eventHandlers:e})}static theme(e,t){let i=Ve.newName(),r=[Er.of(i),Sn.of(_o(`.${i}`,e))];return t&&t.dark&&r.push(Ho.of(!0)),r}static baseTheme(e){return Oi.lowest(Sn.of(_o("."+Wo,e,ec)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),r=i&&q.get(i)||q.get(e);return((t=r==null?void 0:r.rootView)===null||t===void 0?void 0:t.view)||null}};H.styleModule=Sn;H.inputHandler=Ph;H.focusChangeEffect=Eh;H.perLineTextDirection=Oh;H.exceptionSink=Ah;H.updateListener=xo;H.editable=Qr;H.mouseSelectionStyle=Dh;H.dragMovesSelection=Rh;H.clickAddsSelectionRange=Th;H.decorations=An;H.atomicRanges=Lh;H.scrollMargins=Nh;H.darkTheme=Ho;H.contentAttributes=Yo;H.editorAttributes=Vh;H.lineWrapping=H.contentAttributes.of({class:"cm-lineWrapping"});H.announce=Z.define();var Ug=4096,oh={},Ui=class{constructor(e,t,i,r){this.from=e,this.to=t,this.dir=i,this.order=r}static update(e,t){if(t.empty)return e;let i=[],r=e.length?e[e.length-1].dir:le.LTR;for(let s=Math.max(0,e.length-10);s<e.length;s++){let o=e[s];o.dir==r&&!t.touchesRange(o.from,o.to)&&i.push(new Ui(t.mapPos(o.from,1),t.mapPos(o.to,-1),o.dir,o.order))}return i}};function lh(n,e,t){for(let i=n.state.facet(e),r=i.length-1;r>=0;r--){let s=i[r],o=typeof s=="function"?s(n):s;o&&vo(o,t)}return t}var $g=V.mac?"mac":V.windows?"win":V.linux?"linux":"key";function Kg(n,e){let t=n.split(/-(?!$)/),i=t[t.length-1];i=="Space"&&(i=" ");let r,s,o,l;for(let a=0;a<t.length-1;++a){let u=t[a];if(/^(cmd|meta|m)$/i.test(u))l=!0;else if(/^a(lt)?$/i.test(u))r=!0;else if(/^(c|ctrl|control)$/i.test(u))s=!0;else if(/^s(hift)?$/i.test(u))o=!0;else if(/^mod$/i.test(u))e=="mac"?l=!0:s=!0;else throw new Error("Unrecognized modifier name: "+u)}return r&&(i="Alt-"+i),s&&(i="Ctrl-"+i),l&&(i="Meta-"+i),o&&(i="Shift-"+i),i}function Or(n,e,t){return e.altKey&&(n="Alt-"+n),e.ctrlKey&&(n="Ctrl-"+n),e.metaKey&&(n="Meta-"+n),t!==!1&&e.shiftKey&&(n="Shift-"+n),n}var qg=Oi.default(H.domEventHandlers({keydown(n,e){return Qg(Gg(e.state),n,e,"editor")}})),On=N.define({enables:qg}),ah=new WeakMap;function Gg(n){let e=n.facet(On),t=ah.get(e);return t||ah.set(e,t=Jg(e.reduce((i,r)=>i.concat(r),[]))),t}var Pt=null,jg=4e3;function Jg(n,e=$g){let t=Object.create(null),i=Object.create(null),r=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},s=(o,l,a,u)=>{var h,c;let f=t[o]||(t[o]=Object.create(null)),d=l.split(/ (?!$)/).map(g=>Kg(g,e));for(let g=1;g<d.length;g++){let b=d.slice(0,g).join(" ");r(b,!0),f[b]||(f[b]={preventDefault:!0,run:[C=>{let y=Pt={view:C,prefix:b,scope:o};return setTimeout(()=>{Pt==y&&(Pt=null)},jg),!0}]})}let p=d.join(" ");r(p,!1);let m=f[p]||(f[p]={preventDefault:!1,run:((c=(h=f._any)===null||h===void 0?void 0:h.run)===null||c===void 0?void 0:c.slice())||[]});a&&m.run.push(a),u&&(m.preventDefault=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let u of l){let h=t[u]||(t[u]=Object.create(null));h._any||(h._any={preventDefault:!1,run:[]});for(let c in h)h[c].run.push(o.any)}let a=o[e]||o.key;if(a)for(let u of l)s(u,a,o.run,o.preventDefault),o.shift&&s(u,"Shift-"+a,o.shift,o.preventDefault)}return t}function Qg(n,e,t,i){let r=Vu(e),s=Ri(r,0),o=Cr(s)==r.length&&r!=" ",l="",a=!1;Pt&&Pt.view==t&&Pt.scope==i&&(l=Pt.prefix+" ",(a=$h.indexOf(e.keyCode)<0)&&(Pt=null));let u=new Set,h=p=>{if(p){for(let m of p.run)if(!u.has(m)&&(u.add(m),m(t,e)))return!0;p.preventDefault&&(a=!0)}return!1},c=n[i],f,d;if(c){if(h(c[l+Or(r,e,!o)]))return!0;if(o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(V.windows&&e.ctrlKey&&e.altKey)&&(f=mt[e.keyCode])&&f!=r){if(h(c[l+Or(f,e,!0)]))return!0;if(e.shiftKey&&(d=Vi[e.keyCode])!=r&&d!=f&&h(c[l+Or(d,e,!1)]))return!0}else if(o&&e.shiftKey&&h(c[l+Or(r,e,!0)]))return!0;if(h(c._any))return!0}return a}var pi=class{constructor(e,t,i,r,s){this.className=e,this.left=t,this.top=i,this.width=r,this.height=s}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let r=e.coordsAtPos(i.head,i.assoc||1);if(!r)return[];let s=ic(e);return[new pi(t,r.left-s.left,r.top-s.top,null,r.bottom-r.top)]}else return Xg(e,t,i)}};function ic(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==le.LTR?e.left:e.right-n.scrollDOM.clientWidth)-n.scrollDOM.scrollLeft,top:e.top-n.scrollDOM.scrollTop}}function uh(n,e,t){let i=T.cursor(e);return{from:Math.max(t.from,n.moveToLineBoundary(i,!1,!0).from),to:Math.min(t.to,n.moveToLineBoundary(i,!0,!0).from),type:J.Text}}function hh(n,e){let t=n.lineBlockAt(e);if(Array.isArray(t.type)){for(let i of t.type)if(i.to>e||i.to==e&&(i.to==t.to||i.type==J.Text))return i}return t}function Xg(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),r=Math.min(t.to,n.viewport.to),s=n.textDirection==le.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=ic(n),u=o.querySelector(".cm-line"),h=u&&window.getComputedStyle(u),c=l.left+(h?parseInt(h.paddingLeft)+Math.min(0,parseInt(h.textIndent)):0),f=l.right-(h?parseInt(h.paddingRight):0),d=hh(n,i),p=hh(n,r),m=d.type==J.Text?d:null,g=p.type==J.Text?p:null;if(n.lineWrapping&&(m&&(m=uh(n,i,m)),g&&(g=uh(n,r,g))),m&&g&&m.from==g.from)return C(y(t.from,t.to,m));{let v=m?y(t.from,null,m):x(d,!1),w=g?y(null,t.to,g):x(p,!0),M=[];return(m||d).to<(g||p).from-1?M.push(b(c,v.bottom,f,w.top)):v.bottom<w.top&&n.elementAtHeight((v.bottom+w.top)/2).type==J.Text&&(v.bottom=w.top=(v.bottom+w.top)/2),C(v).concat(M).concat(C(w))}function b(v,w,M,L){return new pi(e,v-a.left,w-a.top-.01,M-v,L-w+.01)}function C({top:v,bottom:w,horizontal:M}){let L=[];for(let E=0;E<M.length;E+=2)L.push(b(M[E],v,M[E+1],w));return L}function y(v,w,M){let L=1e9,E=-1e9,S=[];function R(z,B,X,be,se){let K=n.coordsAtPos(z,z==M.to?-2:2),G=n.coordsAtPos(X,X==M.from?2:-2);L=Math.min(K.top,G.top,L),E=Math.max(K.bottom,G.bottom,E),se==le.LTR?S.push(s&&B?c:K.left,s&&be?f:G.right):S.push(!s&&be?c:G.left,!s&&B?f:K.right)}let O=v!=null?v:M.from,I=w!=null?w:M.to;for(let z of n.visibleRanges)if(z.to>O&&z.from<I)for(let B=Math.max(z.from,O),X=Math.min(z.to,I);;){let be=n.state.doc.lineAt(B);for(let se of n.bidiSpans(be)){let K=se.from+be.from,G=se.to+be.from;if(K>=X)break;G>B&&R(Math.max(K,B),v==null&&K<=O,Math.min(G,X),w==null&&G>=I,se.dir)}if(B=be.to+1,B>=X)break}return S.length==0&&R(O,v==null,I,w==null,n.textDirection),{top:L,bottom:E,horizontal:S}}function x(v,w){let M=l.top+(w?v.top:v.bottom);return{top:M,bottom:M,horizontal:[]}}}function Yg(n,e){return n.constructor==e.constructor&&n.eq(e)}var $o=class{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(Lr)!=e.state.facet(Lr)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&e.view.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(Lr);for(;t<i.length&&i[t]!=this.layer;)t++;this.dom.style.zIndex=String((this.layer.above?150:-1)-t)}measure(){return this.layer.markers(this.view)}draw(e){if(e.length!=this.drawn.length||e.some((t,i)=>!Yg(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let r of e)r.update&&t&&r.constructor&&this.drawn[i].constructor&&r.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(r.draw(),t);for(;t;){let r=t.nextSibling;t.remove(),t=r}this.drawn=e}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}},Lr=N.define();function nc(n){return[qe.define(e=>new $o(e,n)),Lr.of(n)]}var rc=!V.ios,En=N.define({combine(n){return Ii(n,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function Zo(n={}){return[En.of(n),Zg,eb,tb,Ih.of(!0)]}function sc(n){return n.startState.facet(En)!=n.state.facet(En)}var Zg=nc({above:!0,markers(n){let{state:e}=n,t=e.facet(En),i=[];for(let r of e.selection.ranges){let s=r==e.selection.main;if(r.empty?!s||rc:t.drawRangeCursor){let o=s?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=r.empty?r:T.cursor(r.head,r.head>r.anchor?-1:1);for(let a of pi.forRange(n,o,l))i.push(a)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=sc(n);return t&&ch(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){ch(e.state,n)},class:"cm-cursorLayer"});function ch(n,e){e.style.animationDuration=n.facet(En).cursorBlinkRate+"ms"}var eb=nc({above:!1,markers(n){return n.state.selection.ranges.map(e=>e.empty?[]:pi.forRange(n,"cm-selectionBackground",e)).reduce((e,t)=>e.concat(t))},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||sc(n)},class:"cm-selectionLayer"}),oc={".cm-line":{"& ::selection":{backgroundColor:"transparent !important"},"&::selection":{backgroundColor:"transparent !important"}}};rc&&(oc[".cm-line"].caretColor="transparent !important");var tb=Oi.highest(H.theme(oc));function fh(n,e,t,i,r){e.lastIndex=0;for(let s=n.iterRange(t,i),o=t,l;!s.next().done;o+=s.value.length)if(!s.lineBreak)for(;l=e.exec(s.value);)r(o+l.index,l)}function ib(n,e){let t=n.visibleRanges;if(t.length==1&&t[0].from==n.viewport.from&&t[0].to==n.viewport.to)return t;let i=[];for(let{from:r,to:s}of t)r=Math.max(n.state.doc.lineAt(r).from,r-e),s=Math.min(n.state.doc.lineAt(s).to,s+e),i.length&&i[i.length-1].to>=r?i[i.length-1].to=s:i.push({from:r,to:s});return i}var Ko=class{constructor(e){let{regexp:t,decoration:i,decorate:r,boundary:s,maxLength:o=1e3}=e;if(!t.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=t,r)this.addMatch=(l,a,u,h)=>r(h,u,u+l[0].length,l,a);else if(typeof i=="function")this.addMatch=(l,a,u,h)=>{let c=i(l,a,u);c&&h(u,u+l[0].length,c)};else if(i)this.addMatch=(l,a,u,h)=>h(u,u+l[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=s,this.maxLength=o}createDeco(e){let t=new Xe,i=t.add.bind(t);for(let{from:r,to:s}of ib(e,this.maxLength))fh(e.state.doc,this.regexp,r,s,(o,l)=>this.addMatch(l,e,o,i));return t.finish()}updateDeco(e,t){let i=1e9,r=-1;return e.docChanged&&e.changes.iterChanges((s,o,l,a)=>{a>e.view.viewport.from&&l<e.view.viewport.to&&(i=Math.min(l,i),r=Math.max(a,r))}),e.viewportChanged||r-i>1e3?this.createDeco(e.view):r>-1?this.updateRange(e.view,t.map(e.changes),i,r):t}updateRange(e,t,i,r){for(let s of e.visibleRanges){let o=Math.max(s.from,i),l=Math.min(s.to,r);if(l>o){let a=e.state.doc.lineAt(o),u=a.to<l?e.state.doc.lineAt(l):a,h=Math.max(s.from,a.from),c=Math.min(s.to,u.to);if(this.boundary){for(;o>a.from;o--)if(this.boundary.test(a.text[o-1-a.from])){h=o;break}for(;l<u.to;l++)if(this.boundary.test(u.text[l-u.from])){c=l;break}}let f=[],d,p=(m,g,b)=>f.push(b.range(m,g));if(a==u)for(this.regexp.lastIndex=h-a.from;(d=this.regexp.exec(a.text))&&d.index<c-a.from;)this.addMatch(d,e,d.index+a.from,p);else fh(e.state.doc,this.regexp,h,c,(m,g)=>this.addMatch(g,e,m,p));t=t.update({filterFrom:h,filterTo:c,filter:(m,g)=>m<h||g>c,add:f})}}return t}},qo=/x/.unicode!=null?"gu":"g",nb=new RegExp(`[\0-\b
10
- -\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\u2066\u2067\u2069\uFEFF\uFFF9-\uFFFC]`,qo),rb={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"},fo=null;function sb(){var n;if(fo==null&&typeof document<"u"&&document.body){let e=document.body.style;fo=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return fo||!1}var Nr=N.define({combine(n){let e=Ii(n,{render:null,specialChars:nb,addSpecialChars:null});return(e.replaceTabs=!sb())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,qo)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,qo)),e}});function el(n={}){return[Nr.of(n),ob()]}var dh=null;function ob(){return dh||(dh=qe.fromClass(class{constructor(n){this.view=n,this.decorations=Q.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(Nr)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new Ko({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:r}=t.state,s=Ri(e[0],0);if(s==9){let o=r.lineAt(i),l=t.state.tabSize,a=fi(o.text,l,i-o.from);return Q.replace({widget:new jo((l-a%l)*this.view.defaultCharacterWidth)})}return this.decorationCache[s]||(this.decorationCache[s]=Q.replace({widget:new Go(n,s)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(Nr);n.startState.facet(Nr)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}var lb="\u2022";function ab(n){return n>=32?lb:n==10?"\u2424":String.fromCharCode(9216+n)}var Go=class extends yt{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=ab(this.code),i=e.state.phrase("Control character")+" "+(rb[this.code]||"0x"+this.code.toString(16)),r=this.options.render&&this.options.render(this.code,i,t);if(r)return r;let s=document.createElement("span");return s.textContent=t,s.title=i,s.setAttribute("aria-label",i),s.className="cm-specialChar",s}ignoreEvent(){return!1}},jo=class extends yt{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}};var Gk=H.baseTheme({".cm-tooltip":{zIndex:100,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:`${7*2}px`,position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}});var vt=class extends pt{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}};vt.prototype.elementClass="";vt.prototype.toDOM=void 0;vt.prototype.mapMode=xe.TrackBefore;vt.prototype.startSide=vt.prototype.endSide=-1;vt.prototype.point=!0;var ub=0,In=class{constructor(e,t){this.from=e,this.to=t}},F=class{constructor(e={}){this.id=ub++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")})}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=de.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}};F.closedBy=new F({deserialize:n=>n.split(" ")});F.openedBy=new F({deserialize:n=>n.split(" ")});F.group=new F({deserialize:n=>n.split(" ")});F.contextHash=new F({perNode:!0});F.lookAhead=new F({perNode:!0});F.mounted=new F({perNode:!0});var hb=Object.create(null),de=class{constructor(e,t,i,r=0){this.name=e,this.props=t,this.id=i,this.flags=r}static define(e){let t=e.props&&e.props.length?Object.create(null):hb,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),r=new de(e.name||"",t,e.id,i);if(e.props){for(let s of e.props)if(Array.isArray(s)||(s=s(r)),s){if(s[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[s[0].id]=s[1]}}return r}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(F.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let r of i.split(" "))t[r]=e[i];return i=>{for(let r=i.prop(F.group),s=-1;s<(r?r.length:0);s++){let o=t[s<0?i.name:r[s]];if(o)return o}}}};de.none=new de("",Object.create(null),0,8);var mi=class{constructor(e){this.types=e;for(let t=0;t<e.length;t++)if(e[t].id!=t)throw new RangeError("Node type ids should correspond to array positions when creating a node set")}extend(...e){let t=[];for(let i of this.types){let r=null;for(let s of e){let o=s(i);o&&(r||(r=Object.assign({},i.props)),r[o[0].id]=o[1])}t.push(r?new de(i.name,r,i.id,i.flags):i)}return new mi(t)}},Xr=new WeakMap,lc=new WeakMap,fe;(function(n){n[n.ExcludeBuffers=1]="ExcludeBuffers",n[n.IncludeAnonymous=2]="IncludeAnonymous",n[n.IgnoreMounts=4]="IgnoreMounts",n[n.IgnoreOverlays=8]="IgnoreOverlays"})(fe||(fe={}));var ee=class{constructor(e,t,i,r,s){if(this.type=e,this.children=t,this.positions=i,this.length=r,this.props=null,s&&s.length){this.props=Object.create(null);for(let[o,l]of s)this.props[typeof o=="number"?o:o.id]=l}}toString(){let e=this.prop(F.mounted);if(e&&!e.overlay)return e.tree.toString();let t="";for(let i of this.children){let r=i.toString();r&&(t&&(t+=","),t+=r)}return this.type.name?(/\W/.test(this.type.name)&&!this.type.isError?JSON.stringify(this.type.name):this.type.name)+(t.length?"("+t+")":""):t}cursor(e=0){return new Ki(this.topNode,e)}cursorAt(e,t=0,i=0){let r=Xr.get(this)||this.topNode,s=new Ki(r);return s.moveTo(e,t),Xr.set(this,s._tree),s}get topNode(){return new Ge(this,0,0,null)}resolve(e,t=0){let i=$i(Xr.get(this)||this.topNode,e,t,!1);return Xr.set(this,i),i}resolveInner(e,t=0){let i=$i(lc.get(this)||this.topNode,e,t,!0);return lc.set(this,i),i}iterate(e){let{enter:t,leave:i,from:r=0,to:s=this.length}=e;for(let o=this.cursor((e.mode||0)|fe.IncludeAnonymous);;){let l=!1;if(o.from<=s&&o.to>=r&&(o.type.isAnonymous||t(o)!==!1)){if(o.firstChild())continue;l=!0}for(;l&&i&&!o.type.isAnonymous&&i(o),!o.nextSibling();){if(!o.parent())return;l=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:rl(de.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,r)=>new ee(this.type,t,i,r,this.propValues),e.makeTree||((t,i,r)=>new ee(de.none,t,i,r)))}static build(e){return cb(e)}};ee.empty=new ee(de.none,[],[],0);var Vn=class{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new Vn(this.buffer,this.index)}},Ct=class{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return de.none}toString(){let e=[];for(let t=0;t<this.buffer.length;)e.push(this.childString(t)),t=this.buffer[t+3];return e.join(",")}childString(e){let t=this.buffer[e],i=this.buffer[e+3],r=this.set.types[t],s=r.name;if(/\W/.test(s)&&!r.isError&&(s=JSON.stringify(s)),e+=4,i==e)return s;let o=[];for(;e<i;)o.push(this.childString(e)),e=this.buffer[e+3];return s+"("+o.join(",")+")"}findChild(e,t,i,r,s){let{buffer:o}=this,l=-1;for(let a=e;a!=t&&!(uc(s,r,o[a+1],o[a+2])&&(l=a,i>0));a=o[a+3]);return l}slice(e,t,i){let r=this.buffer,s=new Uint16Array(t-e),o=0;for(let l=e,a=0;l<t;){s[a++]=r[l++],s[a++]=r[l++]-i;let u=s[a++]=r[l++]-i;s[a++]=r[l++]-e,o=Math.max(o,u)}return new Ct(s,o,this.set)}};function uc(n,e,t,i){switch(n){case-2:return t<e;case-1:return i>=e&&t<e;case 0:return t<e&&i>e;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function hc(n,e){let t=n.childBefore(e);for(;t;){let i=t.lastChild;if(!i||i.to!=t.to)break;i.type.isError&&i.from==i.to?(n=t,t=i.prevSibling):t=i}return n}function $i(n,e,t,i){for(var r;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to<e);){let o=!i&&n instanceof Ge&&n.index<0?null:n.parent;if(!o)return n;n=o}let s=i?0:fe.IgnoreOverlays;if(i)for(let o=n,l=o.parent;l;o=l,l=o.parent)o instanceof Ge&&o.index<0&&((r=l.enter(e,t,s))===null||r===void 0?void 0:r.from)!=o.from&&(n=l);for(;;){let o=n.enter(e,t,s);if(!o)return n;n=o}}var Ge=class{constructor(e,t,i,r){this._tree=e,this.from=t,this.index=i,this._parent=r}get type(){return this._tree.type}get name(){return this._tree.type.name}get to(){return this.from+this._tree.length}nextChild(e,t,i,r,s=0){for(let o=this;;){for(let{children:l,positions:a}=o._tree,u=t>0?l.length:-1;e!=u;e+=t){let h=l[e],c=a[e]+o.from;if(uc(r,i,c,c+h.length)){if(h instanceof Ct){if(s&fe.ExcludeBuffers)continue;let f=h.findChild(0,h.buffer.length,t,i-c,r);if(f>-1)return new tt(new tl(o,h,e,c),null,f)}else if(s&fe.IncludeAnonymous||!h.type.isAnonymous||nl(h)){let f;if(!(s&fe.IgnoreMounts)&&h.props&&(f=h.prop(F.mounted))&&!f.overlay)return new Ge(f.tree,c,e,o);let d=new Ge(h,c,e,o);return s&fe.IncludeAnonymous||!d.type.isAnonymous?d:d.nextChild(t<0?h.children.length-1:0,t,i,r)}}}if(s&fe.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}enter(e,t,i=0){let r;if(!(i&fe.IgnoreOverlays)&&(r=this._tree.prop(F.mounted))&&r.overlay){let s=e-this.from;for(let{from:o,to:l}of r.overlay)if((t>0?o<=s:o<s)&&(t<0?l>=s:l>s))return new Ge(r.tree,r.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}cursor(e=0){return new Ki(this,e)}get tree(){return this._tree}toTree(){return this._tree}resolve(e,t=0){return $i(this,e,t,!1)}resolveInner(e,t=0){return $i(this,e,t,!0)}enterUnfinishedNodesBefore(e){return hc(this,e)}getChild(e,t=null,i=null){let r=Zr(this,e,t,i);return r.length?r[0]:null}getChildren(e,t=null,i=null){return Zr(this,e,t,i)}toString(){return this._tree.toString()}get node(){return this}matchContext(e){return es(this,e)}};function Zr(n,e,t,i){let r=n.cursor(),s=[];if(!r.firstChild())return s;if(t!=null){for(;!r.type.is(t);)if(!r.nextSibling())return s}for(;;){if(i!=null&&r.type.is(i))return s;if(r.type.is(e)&&s.push(r.node),!r.nextSibling())return i==null?s:[]}}function es(n,e,t=e.length-1){for(let i=n.parent;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}var tl=class{constructor(e,t,i,r){this.parent=e,this.buffer=t,this.index=i,this.start=r}},tt=class{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.context.start,i);return s<0?null:new tt(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}enter(e,t,i=0){if(i&fe.ExcludeBuffers)return null;let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new tt(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new tt(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new tt(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}cursor(e=0){return new Ki(this,e)}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,r=this.index+4,s=i.buffer[this.index+3];if(s>r){let o=i.buffer[this.index+1];e.push(i.slice(r,s,o)),t.push(0)}return new ee(this.type,e,t,this.to-this.from)}resolve(e,t=0){return $i(this,e,t,!1)}resolveInner(e,t=0){return $i(this,e,t,!0)}enterUnfinishedNodesBefore(e){return hc(this,e)}toString(){return this.context.buffer.childString(this.index)}getChild(e,t=null,i=null){let r=Zr(this,e,t,i);return r.length?r[0]:null}getChildren(e,t=null,i=null){return Zr(this,e,t,i)}get node(){return this}matchContext(e){return es(this,e)}},Ki=class{get name(){return this.type.name}constructor(e,t=0){if(this.mode=t,this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,e instanceof Ge)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:r}=this.buffer;return this.type=t||r.set.types[r.buffer[e]],this.from=i+r.buffer[e+1],this.to=i+r.buffer[e+2],!0}yield(e){return e?e instanceof Ge?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:r}=this.buffer,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.buffer.start,i);return s<0?!1:(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&fe.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&fe.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&fe.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let r=i<0?0:this.stack[i]+4;if(this.index!=r)return this.yieldBuf(t.findChild(r,this.index,-1,0,4))}else{let r=t.buffer[this.index+3];if(r<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(r)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:r}=this;if(r){if(e>0){if(this.index<r.buffer.buffer.length)return!1}else for(let s=0;s<this.index;s++)if(r.buffer.buffer[s+3]<this.index)return!1;({index:t,parent:i}=r)}else({index:t,_parent:i}=this._tree);for(;i;{index:t,_parent:i}=i)if(t>-1)for(let s=t+e,o=e<0?-1:i._tree.children.length;s!=o;s+=e){let l=i._tree.children[s];if(this.mode&fe.IncludeAnonymous||l instanceof Ct||!l.type.isAnonymous||nl(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to<e))&&this.parent(););for(;this.enterChild(1,e,t););return this}get node(){if(!this.buffer)return this._tree;let e=this.bufferNode,t=null,i=0;if(e&&e.context==this.buffer)e:for(let r=this.index,s=this.stack.length;s>=0;){for(let o=e;o;o=o._parent)if(o.index==r){if(r==this.index)return o;t=o,i=s+1;break e}r=this.stack[--s]}for(let r=i;r<this.stack.length;r++)t=new tt(this.buffer,t,this.stack[r]);return this.bufferNode=new tt(this.buffer,t,this.index)}get tree(){return this.buffer?null:this._tree._tree}iterate(e,t){for(let i=0;;){let r=!1;if(this.type.isAnonymous||e(this)!==!1){if(this.firstChild()){i++;continue}this.type.isAnonymous||(r=!0)}for(;r&&t&&t(this),r=this.type.isAnonymous,!this.nextSibling();){if(!i)return;this.parent(),i--,r=!0}}}matchContext(e){if(!this.buffer)return es(this.node,e);let{buffer:t}=this.buffer,{types:i}=t.set;for(let r=e.length-1,s=this.stack.length-1;r>=0;s--){if(s<0)return es(this.node,e,r);let o=i[t.buffer[this.stack[s]]];if(!o.isAnonymous){if(e[r]&&e[r]!=o.name)return!1;r--}}return!0}};function nl(n){return n.children.some(e=>e instanceof Ct||!e.type.isAnonymous||nl(e))}function cb(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:r=1024,reused:s=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new Vn(t,t.length):t,a=i.types,u=0,h=0;function c(x,v,w,M,L){let{id:E,start:S,end:R,size:O}=l,I=h;for(;O<0;)if(l.next(),O==-1){let se=s[E];w.push(se),M.push(S-x);return}else if(O==-3){u=E;return}else if(O==-4){h=E;return}else throw new RangeError(`Unrecognized record size: ${O}`);let z=a[E],B,X,be=S-x;if(R-S<=r&&(X=m(l.pos-v,L))){let se=new Uint16Array(X.size-X.skip),K=l.pos-X.size,G=se.length;for(;l.pos>K;)G=g(X.start,se,G);B=new Ct(se,R-X.start,i),be=X.start-x}else{let se=l.pos-O;l.next();let K=[],G=[],ze=E>=o?E:-1,Qe=0,Dt=R;for(;l.pos>se;)ze>=0&&l.id==ze&&l.size>=0?(l.end<=Dt-r&&(d(K,G,S,Qe,l.end,Dt,ze,I),Qe=K.length,Dt=l.end),l.next()):c(S,se,K,G,ze);if(ze>=0&&Qe>0&&Qe<K.length&&d(K,G,S,Qe,S,Dt,ze,I),K.reverse(),G.reverse(),ze>-1&&Qe>0){let ht=f(z);B=rl(z,K,G,0,K.length,0,R-S,ht,ht)}else B=p(z,K,G,R-S,I-R)}w.push(B),M.push(be)}function f(x){return(v,w,M)=>{let L=0,E=v.length-1,S,R;if(E>=0&&(S=v[E])instanceof ee){if(!E&&S.type==x&&S.length==M)return S;(R=S.prop(F.lookAhead))&&(L=w[E]+S.length+R)}return p(x,v,w,M,L)}}function d(x,v,w,M,L,E,S,R){let O=[],I=[];for(;x.length>M;)O.push(x.pop()),I.push(v.pop()+w-L);x.push(p(i.types[S],O,I,E-L,R-E)),v.push(L-w)}function p(x,v,w,M,L=0,E){if(u){let S=[F.contextHash,u];E=E?[S].concat(E):[S]}if(L>25){let S=[F.lookAhead,L];E=E?[S].concat(E):[S]}return new ee(x,v,w,M,E)}function m(x,v){let w=l.fork(),M=0,L=0,E=0,S=w.end-r,R={size:0,start:0,skip:0};e:for(let O=w.pos-x;w.pos>O;){let I=w.size;if(w.id==v&&I>=0){R.size=M,R.start=L,R.skip=E,E+=4,M+=4,w.next();continue}let z=w.pos-I;if(I<0||z<O||w.start<S)break;let B=w.id>=o?4:0,X=w.start;for(w.next();w.pos>z;){if(w.size<0)if(w.size==-3)B+=4;else break e;else w.id>=o&&(B+=4);w.next()}L=X,M+=I,E+=B}return(v<0||M==x)&&(R.size=M,R.start=L,R.skip=E),R.size>4?R:void 0}function g(x,v,w){let{id:M,start:L,end:E,size:S}=l;if(l.next(),S>=0&&M<o){let R=w;if(S>4){let O=l.pos-(S-4);for(;l.pos>O;)w=g(x,v,w)}v[--w]=R,v[--w]=E-x,v[--w]=L-x,v[--w]=M}else S==-3?u=M:S==-4&&(h=M);return w}let b=[],C=[];for(;l.pos>0;)c(n.start||0,n.bufferStart||0,b,C,-1);let y=(e=n.length)!==null&&e!==void 0?e:b.length?C[0]+b[0].length:0;return new ee(a[n.topID],b.reverse(),C.reverse(),y)}var ac=new WeakMap;function Yr(n,e){if(!n.isAnonymous||e instanceof Ct||e.type!=n)return 1;let t=ac.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof ee)){t=1;break}t+=Yr(n,i)}ac.set(e,t)}return t}function rl(n,e,t,i,r,s,o,l,a){let u=0;for(let p=i;p<r;p++)u+=Yr(n,e[p]);let h=Math.ceil(u*1.5/8),c=[],f=[];function d(p,m,g,b,C){for(let y=g;y<b;){let x=y,v=m[y],w=Yr(n,p[y]);for(y++;y<b;y++){let M=Yr(n,p[y]);if(w+M>=h)break;w+=M}if(y==x+1){if(w>h){let M=p[x];d(M.children,M.positions,0,M.children.length,m[x]+C);continue}c.push(p[x])}else{let M=m[y-1]+p[y-1].length-v;c.push(rl(n,p,m,x,y,v,M,null,a))}f.push(v+C-s)}}return d(e,t,i,r,0),(l||a)(c,f,o)}var it=class{constructor(e,t,i,r,s=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=r,this.open=(s?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let r=[new it(0,e.length,e,0,!1,i)];for(let s of t)s.to>e.length&&r.push(s);return r}static applyChanges(e,t,i=128){if(!t.length)return e;let r=[],s=1,o=e.length?e[0]:null;for(let l=0,a=0,u=0;;l++){let h=l<t.length?t[l]:null,c=h?h.fromA:1e9;if(c-a>=i)for(;o&&o.from<c;){let f=o;if(a>=f.from||c<=f.to||u){let d=Math.max(f.from,a)-u,p=Math.min(f.to,c)-u;f=d>=p?null:new it(d,p,f.tree,f.offset+u,l>0,!!h)}if(f&&r.push(f),o.to>c)break;o=s<e.length?e[s++]:null}if(!h)break;a=h.toA,u=h.toA-h.toB}return r}},qi=class{startParse(e,t,i){return typeof e=="string"&&(e=new il(e)),i=i?i.length?i.map(r=>new In(r.from,r.to)):[new In(0,0)]:[new In(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let r=this.startParse(e,t,i);for(;;){let s=r.advance();if(s)return s}}},il=class{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}};var Qk=new F({perNode:!0});var fb=0,Be=class{constructor(e,t,i){this.set=e,this.base=t,this.modified=i,this.id=fb++}static define(e){if(e!=null&&e.base)throw new Error("Can not derive from a modified tag");let t=new Be([],null,[]);if(t.set.push(t),e)for(let i of e.set)t.set.push(i);return t}static defineModifier(){let e=new Gi;return t=>t.modified.indexOf(e)>-1?t:Gi.get(t.base||t,t.modified.concat(e).sort((i,r)=>i.id-r.id))}},db=0,Gi=class{constructor(){this.instances=[],this.id=db++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&pb(t,l.modified));if(i)return i;let r=[],s=new Be(r,e,t);for(let l of t)l.instances.push(s);let o=mb(t);for(let l of e.set)if(!l.modified.length)for(let a of o)r.push(Gi.get(l,a));return s}};function pb(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function mb(n){let e=[[]];for(let t=0;t<n.length;t++)for(let i=0,r=e.length;i<r;i++)e.push(e[i].concat(n[t]));return e.sort((t,i)=>i.length-t.length)}function Nn(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let r of t.split(" "))if(r){let s=[],o=2,l=r;for(let c=0;;){if(l=="..."&&c>0&&c+3==r.length){o=1;break}let f=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!f)throw new RangeError("Invalid path: "+r);if(s.push(f[0]=="*"?"":f[0][0]=='"'?JSON.parse(f[0]):f[0]),c+=f[0].length,c==r.length)break;let d=r[c++];if(c==r.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+r);l=r.slice(c)}let a=s.length-1,u=s[a];if(!u)throw new RangeError("Invalid path: "+r);let h=new ji(i,o,a>0?s.slice(0,a):null);e[u]=h.sort(e[u])}}return dc.add(e)}var dc=new F,ji=class{constructor(e,t,i,r){this.tags=e,this.mode=t,this.context=i,this.next=r}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth<this.depth?(this.next=e,this):(e.next=this.sort(e.next),e)}get depth(){return this.context?this.context.length:0}};ji.empty=new ji([],2,null);function al(n,e){let t=Object.create(null);for(let s of n)if(!Array.isArray(s.tag))t[s.tag.id]=s.class;else for(let o of s.tag)t[o.id]=s.class;let{scope:i,all:r=null}=e||{};return{style:s=>{let o=r;for(let l of s)for(let a of l.set){let u=t[a.id];if(u){o=o?o+" "+u:u;break}}return o},scope:i}}function gb(n,e){let t=null;for(let i of n){let r=i.style(e);r&&(t=t?t+" "+r:r)}return t}function pc(n,e,t,i=0,r=n.length){let s=new ol(i,Array.isArray(e)?e:[e],t);s.highlightRange(n.cursor(),i,r,"",s.highlighters),s.flush(r)}var ol=class{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,r,s){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(s=this.highlighters.filter(d=>!d.scope||d.scope(o)));let u=r,h=bb(e)||ji.empty,c=gb(s,h.tags);if(c&&(u&&(u+=" "),u+=c,h.mode==1&&(r+=(r?" ":"")+c)),this.startSpan(e.from,u),h.opaque)return;let f=e.tree&&e.tree.prop(F.mounted);if(f&&f.overlay){let d=e.node.enter(f.overlay[0].from+l,1),p=this.highlighters.filter(g=>!g.scope||g.scope(f.tree.type)),m=e.firstChild();for(let g=0,b=l;;g++){let C=g<f.overlay.length?f.overlay[g]:null,y=C?C.from+l:a,x=Math.max(t,b),v=Math.min(i,y);if(x<v&&m)for(;e.from<v&&(this.highlightRange(e,x,v,r,s),this.startSpan(Math.min(v,e.to),u),!(e.to>=y||!e.nextSibling())););if(!C||y>i)break;b=C.to+l,b>t&&(this.highlightRange(d.cursor(),Math.max(t,C.from+l),Math.min(i,b),r,p),this.startSpan(b,u))}m&&e.parent()}else if(e.firstChild()){do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,r,s),this.startSpan(Math.min(i,e.to),u)}while(e.nextSibling());e.parent()}}};function bb(n){let e=n.type.prop(dc);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}var A=Be.define,ts=A(),Vt=A(),cc=A(Vt),fc=A(Vt),Lt=A(),is=A(Lt),sl=A(Lt),st=A(),gi=A(st),nt=A(),rt=A(),ll=A(),Ln=A(ll),ns=A(),D={comment:ts,lineComment:A(ts),blockComment:A(ts),docComment:A(ts),name:Vt,variableName:A(Vt),typeName:cc,tagName:A(cc),propertyName:fc,attributeName:A(fc),className:A(Vt),labelName:A(Vt),namespace:A(Vt),macroName:A(Vt),literal:Lt,string:is,docString:A(is),character:A(is),attributeValue:A(is),number:sl,integer:A(sl),float:A(sl),bool:A(Lt),regexp:A(Lt),escape:A(Lt),color:A(Lt),url:A(Lt),keyword:nt,self:A(nt),null:A(nt),atom:A(nt),unit:A(nt),modifier:A(nt),operatorKeyword:A(nt),controlKeyword:A(nt),definitionKeyword:A(nt),moduleKeyword:A(nt),operator:rt,derefOperator:A(rt),arithmeticOperator:A(rt),logicOperator:A(rt),bitwiseOperator:A(rt),compareOperator:A(rt),updateOperator:A(rt),definitionOperator:A(rt),typeOperator:A(rt),controlOperator:A(rt),punctuation:ll,separator:A(ll),bracket:Ln,angleBracket:A(Ln),squareBracket:A(Ln),paren:A(Ln),brace:A(Ln),content:st,heading:gi,heading1:A(gi),heading2:A(gi),heading3:A(gi),heading4:A(gi),heading5:A(gi),heading6:A(gi),contentSeparator:A(st),list:A(st),quote:A(st),emphasis:A(st),strong:A(st),link:A(st),monospace:A(st),strikethrough:A(st),inserted:A(),deleted:A(),changed:A(),invalid:A(),meta:ns,documentMeta:A(ns),annotation:A(ns),processingInstruction:A(ns),definition:Be.defineModifier(),constant:Be.defineModifier(),function:Be.defineModifier(),standard:Be.defineModifier(),local:Be.defineModifier(),special:Be.defineModifier()},Zk=al([{tag:D.link,class:"tok-link"},{tag:D.heading,class:"tok-heading"},{tag:D.emphasis,class:"tok-emphasis"},{tag:D.strong,class:"tok-strong"},{tag:D.keyword,class:"tok-keyword"},{tag:D.atom,class:"tok-atom"},{tag:D.bool,class:"tok-bool"},{tag:D.url,class:"tok-url"},{tag:D.labelName,class:"tok-labelName"},{tag:D.inserted,class:"tok-inserted"},{tag:D.deleted,class:"tok-deleted"},{tag:D.literal,class:"tok-literal"},{tag:D.string,class:"tok-string"},{tag:D.number,class:"tok-number"},{tag:[D.regexp,D.escape,D.special(D.string)],class:"tok-string2"},{tag:D.variableName,class:"tok-variableName"},{tag:D.local(D.variableName),class:"tok-variableName tok-local"},{tag:D.definition(D.variableName),class:"tok-variableName tok-definition"},{tag:D.special(D.variableName),class:"tok-variableName2"},{tag:D.definition(D.propertyName),class:"tok-propertyName tok-definition"},{tag:D.typeName,class:"tok-typeName"},{tag:D.namespace,class:"tok-namespace"},{tag:D.className,class:"tok-className"},{tag:D.macroName,class:"tok-macroName"},{tag:D.propertyName,class:"tok-propertyName"},{tag:D.operator,class:"tok-operator"},{tag:D.comment,class:"tok-comment"},{tag:D.meta,class:"tok-meta"},{tag:D.invalid,class:"tok-invalid"},{tag:D.punctuation,class:"tok-punctuation"}]);var ul,Ji=new F;function yb(n){return N.define({combine:n?e=>e.concat(n):void 0})}var wb=new F,Pe=class{constructor(e,t,i=[],r=""){this.data=e,this.name=r,U.prototype.hasOwnProperty("tree")||Object.defineProperty(U.prototype,"tree",{get(){return Ee(this)}}),this.parser=t,this.extension=[Xi.of(this),U.languageData.of((s,o,l)=>{let a=mc(s,o,l),u=a.type.prop(Ji);if(!u)return[];let h=s.facet(u),c=a.type.prop(wb);if(c){let f=a.resolve(o-a.from,l);for(let d of c)if(d.test(f,s)){let p=s.facet(d.facet);return d.type=="replace"?p:p.concat(h)}}return h})].concat(i)}isActiveAt(e,t,i=-1){return mc(e,t,i).type.prop(Ji)==this.data}findRegions(e){let t=e.facet(Xi);if((t==null?void 0:t.data)==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],r=(s,o)=>{if(s.prop(Ji)==this.data){i.push({from:o,to:o+s.length});return}let l=s.prop(F.mounted);if(l){if(l.tree.prop(Ji)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+s.length});return}else if(l.overlay){let a=i.length;if(r(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;a<s.children.length;a++){let u=s.children[a];u instanceof ee&&r(u,s.positions[a]+o)}};return r(Ee(e),0),i}get allowsNesting(){return!0}};Pe.setState=Z.define();function mc(n,e,t){let i=n.facet(Xi),r=Ee(n).topNode;if(!i||i.allowsNesting)for(let s=r;s;s=s.enter(e,t,fe.ExcludeBuffers))s.type.isTop&&(r=s);return r}var Nt=class extends Pe{constructor(e,t,i){super(e,t,[],i),this.parser=t}static define(e){let t=yb(e.languageData);return new Nt(t,e.parser.configure({props:[Ji.add(i=>i.isTop?t:void 0)]}),e.name)}configure(e,t){return new Nt(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}};function Ee(n){let e=n.field(Pe.state,!1);return e?e.tree:ee.empty}var dl=class{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e<i||t>=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}},Bn=null,Qi=class{constructor(e,t,i=[],r,s,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=r,this.treeLen=s,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new Qi(e,t,[],ee.empty,0,i,[],null)}startParse(){return this.parser.startParse(new dl(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=ee.empty&&this.isDone(t!=null?t:this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let r=Date.now()+e;e=()=>Date.now()>r}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t<this.state.doc.length&&this.parse.stopAt(t);;){let r=this.parse.advance();if(r)if(this.fragments=this.withoutTempSkipped(it.addTree(r,this.fragments,this.parse.stoppedAt!=null)),this.treeLen=(i=this.parse.stoppedAt)!==null&&i!==void 0?i:this.state.doc.length,this.tree=r,this.parse=null,this.treeLen<(t!=null?t:this.state.doc.length))this.parse=this.startParse();else return!0;if(e())return!1}})}takeTree(){let e,t;this.parse&&(e=this.parse.parsedPos)>=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(it.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=Bn;Bn=this;try{return e()}finally{Bn=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=gc(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:r,treeLen:s,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((u,h,c,f)=>a.push({fromA:u,toA:h,fromB:c,toB:f})),i=it.applyChanges(i,a),r=ee.empty,s=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let u of this.skipped){let h=e.mapPos(u.from,1),c=e.mapPos(u.to,-1);h<c&&l.push({from:h,to:c})}}}return new Qi(this.parser,t,i,r,s,o,l,this.scheduleOn)}updateViewport(e){if(this.viewport.from==e.from&&this.viewport.to==e.to)return!1;this.viewport=e;let t=this.skipped.length;for(let i=0;i<this.skipped.length;i++){let{from:r,to:s}=this.skipped[i];r<e.to&&s>e.from&&(this.fragments=gc(this.fragments,r,s),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends qi{createParse(t,i,r){let s=r[0].from,o=r[r.length-1].to;return{parsedPos:s,advance(){let a=Bn;if(a){for(let u of r)a.tempSkipped.push(u);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new ee(de.none,[],[],o-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return Bn}};function gc(n,e,t){return it.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}var Bt=class{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new Bt(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=Qi.create(e.facet(Xi).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new Bt(i)}};Pe.state=De.define({create:Bt.init,update(n,e){for(let t of e.effects)if(t.is(Pe.setState))return t.value;return e.startState.facet(Xi)!=e.state.facet(Xi)?Bt.init(e.state):n.apply(e)}});var wc=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(wc=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:500-100})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});var hl=typeof navigator<"u"&&(!((ul=navigator.scheduling)===null||ul===void 0)&&ul.isInputPending)?()=>navigator.scheduling.isInputPending():null,vb=qe.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(Pe.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),e.docChanged&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(Pe.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=wc(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnd<t&&(this.chunkEnd<0||this.view.hasFocus)&&(this.chunkEnd=t+3e4,this.chunkBudget=3e3),this.chunkBudget<=0)return;let{state:i,viewport:{to:r}}=this.view,s=i.field(Pe.state);if(s.tree==s.context.tree&&s.context.isDone(r+1e5))return;let o=Date.now()+Math.min(this.chunkBudget,100,e&&!hl?Math.max(25,e.timeRemaining()-5):1e9),l=s.context.treeLen<r&&i.doc.length>r+1e3,a=s.context.work(()=>hl&&hl()||Date.now()>o,r+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:Pe.setState.of(new Bt(s.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>bt(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),Xi=N.define({combine(n){return n.length?n[0]:null},enables:n=>[Pe.state,vb,H.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]});var Cb=N.define(),rs=N.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function Hn(n){let e=n.facet(rs);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function Wn(n,e){let t="",i=n.tabSize,r=n.facet(rs)[0];if(r==" "){for(;e>=i;)t+=" ",e-=i;r=" "}for(let s=0;s<e;s++)t+=r;return t}function yl(n,e){n instanceof U&&(n=new bi(n));for(let i of n.state.facet(Cb)){let r=i(n,e);if(r!==void 0)return r}let t=Ee(n.state);return t?xb(n,t,e):null}var bi=class{constructor(e,t={}){this.state=e,this.options=t,this.unit=Hn(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:r,simulateDoubleBreak:s}=this.options;return r!=null&&r>=i.from&&r<=i.to?s&&r==e?{text:"",from:e}:(t<0?r<e:r<=e)?{text:i.text.slice(r-i.from),from:r}:{text:i.text.slice(0,r-i.from),from:i.from}:i}textAfterPos(e,t=1){if(this.options.simulateDoubleBreak&&e==this.options.simulateBreak)return"";let{text:i,from:r}=this.lineAt(e,t);return i.slice(e-r,Math.min(i.length,e+100-r))}column(e,t=1){let{text:i,from:r}=this.lineAt(e,t),s=this.countColumn(i,e-r),o=this.options.overrideIndentation?this.options.overrideIndentation(r):-1;return o>-1&&(s+=o-this.countColumn(i,i.search(/\S|$/))),s}countColumn(e,t=e.length){return fi(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:r}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let o=s(r);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}},Sb=new F;function xb(n,e,t){return vc(e.resolveInner(t).enterUnfinishedNodesBefore(t),t,n)}function kb(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function Mb(n){let e=n.type.prop(Sb);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(F.closedBy))){let r=n.lastChild,s=r&&i.indexOf(r.name)>-1;return o=>Ab(o,!0,1,void 0,s&&!kb(o)?r.from:void 0)}return n.parent==null?Tb:null}function vc(n,e,t){for(;n;n=n.parent){let i=Mb(n);if(i)return i(Fn.create(t,e,n))}return null}function Tb(){return 0}var Fn=class extends bi{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.node=i}static create(e,t,i){return new Fn(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){let e=this.state.doc.lineAt(this.node.from);for(;;){let t=this.node.resolve(e.from);for(;t.parent&&t.parent.from==t.from;)t=t.parent;if(Rb(t,this.node))break;e=this.state.doc.lineAt(t.from)}return this.lineIndent(e.from)}continue(){let e=this.node.parent;return e?vc(e,this.pos,this.base):0}};function Rb(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function Db(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let r=n.options.simulateBreak,s=n.state.doc.lineAt(t.from),o=r==null||r<=s.from?s.to:Math.min(s.to,r);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped)return a.from<o?t:null;l=a.to}}function Ab(n,e,t,i,r){let s=n.textAfter,o=s.match(/^\s*/)[0].length,l=i&&s.slice(o,o+i.length)==i||r==n.pos+o,a=e?Db(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}var St=class{constructor(e,t){this.specs=e;let i;function r(l){let a=Ve.newName();return(i||(i=Object.create(null)))["."+a]=l,a}let s=typeof t.all=="string"?t.all:t.all?r(t.all):void 0,o=t.scope;this.scope=o instanceof Pe?l=>l.prop(Ji)==o.data:o?l=>l==o:void 0,this.style=al(e.map(l=>({tag:l.tag,class:l.class||r(Object.assign({},l,{tag:null}))})),{all:s}).style,this.module=i?new Ve(i):null,this.themeType=t.themeType}static define(e,t){return new St(e,t||{})}},pl=N.define(),Cc=N.define({combine(n){return n.length?[n[0]]:null}});function cl(n){let e=n.facet(pl);return e.length?e:n.facet(Cc)}function _n(n,e){let t=[Pb],i;return n instanceof St&&(n.module&&t.push(H.styleModule.of(n.module)),i=n.themeType),e!=null&&e.fallback?t.push(Cc.of(n)):i?t.push(pl.computeN([H.darkTheme],r=>r.facet(H.darkTheme)==(i=="dark")?[n]:[])):t.push(pl.of(n)),t}var ml=class{constructor(e){this.markCache=Object.create(null),this.tree=Ee(e.state),this.decorations=this.buildDeco(e,cl(e.state))}update(e){let t=Ee(e.state),i=cl(e.state),r=i!=cl(e.startState);t.length<e.view.viewport.to&&!r&&t.type==this.tree.type?this.decorations=this.decorations.map(e.changes):(t!=this.tree||e.viewportChanged||r)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i))}buildDeco(e,t){if(!t||!this.tree.length)return Q.none;let i=new Xe;for(let{from:r,to:s}of e.visibleRanges)pc(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=Q.mark({class:a})))},r,s);return i.finish()}},Pb=Oi.high(qe.fromClass(ml,{decorations:n=>n.decorations})),wl=St.define([{tag:D.meta,color:"#404740"},{tag:D.link,textDecoration:"underline"},{tag:D.heading,textDecoration:"underline",fontWeight:"bold"},{tag:D.emphasis,fontStyle:"italic"},{tag:D.strong,fontWeight:"bold"},{tag:D.strikethrough,textDecoration:"line-through"},{tag:D.keyword,color:"#708"},{tag:[D.atom,D.bool,D.url,D.contentSeparator,D.labelName],color:"#219"},{tag:[D.literal,D.inserted],color:"#164"},{tag:[D.string,D.deleted],color:"#a11"},{tag:[D.regexp,D.escape,D.special(D.string)],color:"#e40"},{tag:D.definition(D.variableName),color:"#00f"},{tag:D.local(D.variableName),color:"#30a"},{tag:[D.typeName,D.namespace],color:"#085"},{tag:D.className,color:"#167"},{tag:[D.special(D.variableName),D.macroName],color:"#256"},{tag:D.definition(D.propertyName),color:"#00c"},{tag:D.comment,color:"#940"},{tag:D.invalid,color:"#f00"}]);var Eb=1e4,Ob="()[]{}";var Ib=new F;function gl(n,e,t){let i=n.prop(e<0?F.openedBy:F.closedBy);if(i)return i;if(n.name.length==1){let r=t.indexOf(n.name);if(r>-1&&r%2==(e<0?1:0))return[t[r+e]]}return null}function bl(n){let e=n.type.prop(Ib);return e?e(n.node):n}function yi(n,e,t,i={}){let r=i.maxScanDistance||Eb,s=i.brackets||Ob,o=Ee(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let u=gl(a.type,t,s);if(u&&a.from<a.to){let h=bl(a);if(h&&(t>0?e>=h.from&&e<h.to:e>h.from&&e<=h.to))return Vb(n,e,t,a,h,u,s)}}return Lb(n,e,t,o,l.type,r,s)}function Vb(n,e,t,i,r,s,o){let l=i.parent,a={from:r.from,to:r.to},u=0,h=l==null?void 0:l.cursor();if(h&&(t<0?h.childBefore(i.from):h.childAfter(i.to)))do if(t<0?h.to<=i.from:h.from>=i.to){if(u==0&&s.indexOf(h.type.name)>-1&&h.from<h.to){let c=bl(h);return{start:a,end:c?{from:c.from,to:c.to}:void 0,matched:!0}}else if(gl(h.type,t,o))u++;else if(gl(h.type,-t,o)){if(u==0){let c=bl(h);return{start:a,end:c&&c.from<c.to?{from:c.from,to:c.to}:void 0,matched:!1}}u--}}while(t<0?h.prevSibling():h.nextSibling());return{start:a,matched:!1}}function Lb(n,e,t,i,r,s,o){let l=t<0?n.sliceDoc(e-1,e):n.sliceDoc(e,e+1),a=o.indexOf(l);if(a<0||a%2==0!=t>0)return null;let u={from:t<0?e-1:e,to:t>0?e+1:e},h=n.doc.iterRange(e,t>0?n.doc.length:0),c=0;for(let f=0;!h.next().done&&f<=s;){let d=h.value;t<0&&(f+=d.length);let p=e+f*t;for(let m=t>0?0:d.length-1,g=t>0?d.length:-1;m!=g;m+=t){let b=o.indexOf(d[m]);if(!(b<0||i.resolveInner(p+m,1).type!=r))if(b%2==0==t>0)c++;else{if(c==1)return{start:u,end:{from:p+m,to:p+m+1},matched:b>>1==a>>1};c--}}t>0&&(f+=d.length)}return h.done?{start:u,matched:!1}:null}var Nb=Object.create(null),bc=[de.none];var yc=[],Bb=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Bb[n]=Fb(Nb,e);function fl(n,e){yc.indexOf(n)>-1||(yc.push(n),console.warn(e))}function Fb(n,e){let t=null;for(let s of e.split(".")){let o=n[s]||D[s];o?typeof o=="function"?t?t=o(t):fl(s,`Modifier ${s} used at start of tag`):t?fl(s,`Tag ${s} used as modifier`):t=o:fl(s,`Unknown highlighting tag ${s}`)}if(!t)return 0;let i=e.replace(/ /g,"_"),r=de.define({id:bc.length,name:i,props:[Nn({[i]:t})]});return bc.push(r),r.id}var Hb=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.head),i=Tl(n.state,t.from);return i.line?Wb(n):i.block?zb(n):!1};function Ml(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let r=n(e,t);return r?(i(t.update(r)),!0):!1}}var Wb=Ml(Kb,0);var _b=Ml(Ac,0);var zb=Ml((n,e)=>Ac(n,e,$b(e)),0);function Tl(n,e){let t=n.languageDataAt("commentTokens",e);return t.length?t[0]:{}}var zn=50;function Ub(n,{open:e,close:t},i,r){let s=n.sliceDoc(i-zn,i),o=n.sliceDoc(r,r+zn),l=/\s*$/.exec(s)[0].length,a=/^\s*/.exec(o)[0].length,u=s.length-l;if(s.slice(u-e.length,u)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:r+a,margin:a&&1}};let h,c;r-i<=2*zn?h=c=n.sliceDoc(i,r):(h=n.sliceDoc(i,i+zn),c=n.sliceDoc(r-zn,r));let f=/^\s*/.exec(h)[0].length,d=/\s*$/.exec(c)[0].length,p=c.length-d-t.length;return h.slice(f,f+e.length)==e&&c.slice(p,p+t.length)==t?{open:{pos:i+f+e.length,margin:/\s/.test(h.charAt(f+e.length))?1:0},close:{pos:r-d-t.length,margin:/\s/.test(c.charAt(p-1))?1:0}}:null}function $b(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),r=t.to<=i.to?i:n.doc.lineAt(t.to),s=e.length-1;s>=0&&e[s].to>i.from?e[s].to=r.to:e.push({from:i.from,to:r.to})}return e}function Ac(n,e,t=e.selection.ranges){let i=t.map(s=>Tl(e,s.from).block);if(!i.every(s=>s))return null;let r=t.map((s,o)=>Ub(e,i[o],s.from,s.to));if(n!=2&&!r.every(s=>s))return{changes:e.changes(t.map((s,o)=>r[o]?[]:[{from:s.from,insert:i[o].open+" "},{from:s.to,insert:" "+i[o].close}]))};if(n!=1&&r.some(s=>s)){let s=[];for(let o=0,l;o<r.length;o++)if(l=r[o]){let a=i[o],{open:u,close:h}=l;s.push({from:u.pos-a.open.length,to:u.pos+u.margin},{from:h.pos-h.margin,to:h.pos+a.close.length})}return{changes:s}}return null}function Kb(n,e,t=e.selection.ranges){let i=[],r=-1;for(let{from:s,to:o}of t){let l=i.length,a=1e9;for(let u=s;u<=o;){let h=e.doc.lineAt(u);if(h.from>r&&(s==o||o>h.from)){r=h.from;let c=Tl(e,h.from).line;if(!c)continue;let f=/^\s*/.exec(h.text)[0].length,d=f==h.length,p=h.text.slice(f,f+c.length)==c?f:-1;f<h.text.length&&f<a&&(a=f),i.push({line:h,comment:p,token:c,indent:f,empty:d,single:!1})}u=h.to+1}if(a<1e9)for(let u=l;u<i.length;u++)i[u].indent<i[u].line.text.length&&(i[u].indent=a);i.length==l+1&&(i[l].single=!0)}if(n!=2&&i.some(s=>s.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:l,token:a,indent:u,empty:h,single:c}of i)(c||!h)&&s.push({from:l.from+u,insert:a+" "});let o=e.changes(s);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(s=>s.comment>=0)){let s=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let u=o.from+l,h=u+a.length;o.text[h-o.from]==" "&&h++,s.push({from:u,to:h})}return{changes:s}}return null}var Cl=Ie.define(),qb=Ie.define(),Gb=N.define(),Pc=N.define({combine(n){return Ii(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,r)=>e(i,r)||t(i,r)})}});function jb(n){let e=0;return n.iterChangedRanges((t,i)=>e=i),e}var Ec=De.define({create(){return He.empty},update(n,e){let t=e.state.facet(Pc),i=e.annotation(Cl);if(i){let a=e.docChanged?T.single(jb(e.changes)):void 0,u=we.fromTransaction(e,a),h=i.side,c=h==0?n.undone:n.done;return u?c=os(c,c.length,t.minDepth,u):c=Vc(c,e.startState.selection),new He(h==0?i.rest:c,h==0?c:i.rest)}let r=e.annotation(qb);if((r=="full"||r=="before")&&(n=n.isolate()),e.annotation(ne.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let s=we.fromTransaction(e),o=e.annotation(ne.time),l=e.annotation(ne.userEvent);return s?n=n.addChanges(s,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(r=="full"||r=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new He(n.done.map(we.fromJSON),n.undone.map(we.fromJSON))}});function Rl(n={}){return[Ec,Pc.of(n),H.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?Oc:e.inputType=="historyRedo"?Sl:null;return i?(e.preventDefault(),i(t)):!1}})]}function ls(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let r=t.field(Ec,!1);if(!r)return!1;let s=r.pop(n,t,e);return s?(i(s),!0):!1}}var Oc=ls(0,!1),Sl=ls(1,!1),Jb=ls(0,!0),Qb=ls(1,!0);var we=class{constructor(e,t,i,r,s){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=r,this.selectionsAfter=s}setSelAfter(e){return new we(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(r=>r.toJSON())}}static fromJSON(e){return new we(e.changes&&ie.fromJSON(e.changes),[],e.mapped&&Re.fromJSON(e.mapped),e.startSelection&&T.fromJSON(e.startSelection),e.selectionsAfter.map(T.fromJSON))}static fromTransaction(e,t){let i=Fe;for(let r of e.startState.facet(Gb)){let s=r(e);s.length&&(i=i.concat(s))}return!i.length&&e.changes.empty?null:new we(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,Fe)}static selection(e){return new we(void 0,Fe,void 0,void 0,e)}};function os(n,e,t,i){let r=e+1>t+20?e-t-1:0,s=n.slice(r,e);return s.push(i),s}function Xb(n,e){let t=[],i=!1;return n.iterChangedRanges((r,s)=>t.push(r,s)),e.iterChangedRanges((r,s,o,l)=>{for(let a=0;a<t.length;){let u=t[a++],h=t[a++];l>=u&&o<=h&&(i=!0)}}),i}function Yb(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function Ic(n,e){return n.length?e.length?n.concat(e):n:e}var Fe=[],Zb=200;function Vc(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-Zb));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),os(n,n.length-1,1e9,t.setSelAfter(i)))}else return[we.selection([e])]}function e0(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function vl(n,e){if(!n.length)return n;let t=n.length,i=Fe;for(;t;){let r=t0(n[t-1],e,i);if(r.changes&&!r.changes.empty||r.effects.length){let s=n.slice(0,t);return s[t-1]=r,s}else e=r.mapped,t--,i=r.selectionsAfter}return i.length?[we.selection(i)]:Fe}function t0(n,e,t){let i=Ic(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):Fe,t);if(!n.changes)return we.selection(i);let r=n.changes.map(e),s=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(s):s;return new we(r,Z.mapEffects(n.effects,e),o,n.startSelection.map(s),i)}var i0=/^(input\.type|delete)($|\.)/,He=class{constructor(e,t,i=0,r=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=r}isolate(){return this.prevTime?new He(this.done,this.undone):this}addChanges(e,t,i,r,s){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||i0.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime<r.newGroupDelay&&r.joinToEvent(s,Xb(l.changes,e.changes))||i=="input.type.compose")?o=os(o,o.length-1,r.minDepth,new we(e.changes.compose(l.changes),Ic(e.effects,l.effects),l.mapped,l.startSelection,Fe)):o=os(o,o.length,r.minDepth,e),new He(o,Fe,t,i)}addSelection(e,t,i,r){let s=this.done.length?this.done[this.done.length-1].selectionsAfter:Fe;return s.length>0&&t-this.prevTime<r&&i==this.prevUserEvent&&i&&/^select($|\.)/.test(i)&&Yb(s[s.length-1],e)?this:new He(Vc(this.done,e),this.undone,t,i)}addMapping(e){return new He(vl(this.done,e),vl(this.undone,e),this.prevTime,this.prevUserEvent)}pop(e,t,i){let r=e==0?this.done:this.undone;if(r.length==0)return null;let s=r[r.length-1];if(i&&s.selectionsAfter.length)return t.update({selection:s.selectionsAfter[s.selectionsAfter.length-1],annotations:Cl.of({side:e,rest:e0(r)}),userEvent:e==0?"select.undo":"select.redo",scrollIntoView:!0});if(s.changes){let o=r.length==1?Fe:r.slice(0,r.length-1);return s.mapped&&(o=vl(o,s.mapped)),t.update({changes:s.changes,selection:s.startSelection,effects:s.effects,annotations:Cl.of({side:e,rest:o}),filter:!1,userEvent:e==0?"undo":"redo",scrollIntoView:!0})}else return null}};He.empty=new He(Fe,Fe);var Dl=[{key:"Mod-z",run:Oc,preventDefault:!0},{key:"Mod-y",mac:"Mod-Shift-z",run:Sl,preventDefault:!0},{linux:"Ctrl-Shift-z",run:Sl,preventDefault:!0},{key:"Mod-u",run:Jb,preventDefault:!0},{key:"Alt-u",mac:"Mod-Shift-u",run:Qb,preventDefault:!0}];function Yi(n,e){return T.create(n.ranges.map(e),n.mainIndex)}function ot(n,e){return n.update({selection:e,scrollIntoView:!0,userEvent:"select"})}function je({state:n,dispatch:e},t){let i=Yi(n.selection,t);return i.eq(n.selection)?!1:(e(ot(n,i)),!0)}function as(n,e){return T.cursor(e?n.to:n.from)}function Lc(n,e){return je(n,t=>t.empty?n.moveByChar(t,e):as(t,e))}function ve(n){return n.textDirectionAt(n.state.selection.main.head)==le.LTR}var Nc=n=>Lc(n,!ve(n)),Bc=n=>Lc(n,ve(n));function Fc(n,e){return je(n,t=>t.empty?n.moveByGroup(t,e):as(t,e))}var n0=n=>Fc(n,!ve(n)),r0=n=>Fc(n,ve(n));function s0(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function us(n,e,t){let i=Ee(n).resolveInner(e.head),r=t?F.closedBy:F.openedBy;for(let a=e.head;;){let u=t?i.childAfter(a):i.childBefore(a);if(!u)break;s0(n,u,r)?i=u:a=t?u.to:u.from}let s=i.type.prop(r),o,l;return s&&(o=t?yi(n,i.from,1):yi(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,T.cursor(l,t?-1:1)}var o0=n=>je(n,e=>us(n.state,e,!ve(n))),l0=n=>je(n,e=>us(n.state,e,ve(n)));function Hc(n,e){return je(n,t=>{if(!t.empty)return as(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}var Wc=n=>Hc(n,!1),_c=n=>Hc(n,!0);function zc(n){let e=n.scrollDOM.clientHeight<n.scrollDOM.scrollHeight-2,t=0,i=0,r;if(e){for(let s of n.state.facet(H.scrollMargins)){let o=s(n);o!=null&&o.top&&(t=Math.max(o==null?void 0:o.top,t)),o!=null&&o.bottom&&(i=Math.max(o==null?void 0:o.bottom,i))}r=n.scrollDOM.clientHeight-t-i}else r=(n.dom.ownerDocument.defaultView||window).innerHeight;return{marginTop:t,marginBottom:i,selfScroll:e,height:Math.max(n.defaultLineHeight,r-5)}}function Uc(n,e){let t=zc(n),{state:i}=n,r=Yi(i.selection,o=>o.empty?n.moveVertically(o,e,t.height):as(o,e));if(r.eq(i.selection))return!1;let s;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,u=l.bottom-t.marginBottom;o&&o.top>a&&o.bottom<u&&(s=H.scrollIntoView(r.main.head,{y:"start",yMargin:o.top-a}))}return n.dispatch(ot(i,r),{effects:s}),!0}var Sc=n=>Uc(n,!1),xl=n=>Uc(n,!0);function Ft(n,e,t){let i=n.lineBlockAt(e.head),r=n.moveToLineBoundary(e,t);if(r.head==e.head&&r.head!=(t?i.to:i.from)&&(r=n.moveToLineBoundary(e,t,!1)),!t&&r.head==i.from&&i.length){let s=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;s&&e.head!=i.from+s&&(r=T.cursor(i.from+s))}return r}var a0=n=>je(n,e=>Ft(n,e,!0)),u0=n=>je(n,e=>Ft(n,e,!1)),h0=n=>je(n,e=>Ft(n,e,!ve(n))),c0=n=>je(n,e=>Ft(n,e,ve(n))),f0=n=>je(n,e=>T.cursor(n.lineBlockAt(e.head).from,1)),d0=n=>je(n,e=>T.cursor(n.lineBlockAt(e.head).to,-1));function p0(n,e,t){let i=!1,r=Yi(n.selection,s=>{let o=yi(n,s.head,-1)||yi(n,s.head,1)||s.head>0&&yi(n,s.head-1,1)||s.head<n.doc.length&&yi(n,s.head+1,-1);if(!o||!o.end)return s;i=!0;let l=o.start.from==s.head?o.end.to:o.end.from;return t?T.range(s.anchor,l):T.cursor(l)});return i?(e(ot(n,r)),!0):!1}var m0=({state:n,dispatch:e})=>p0(n,e,!1);function We(n,e){let t=Yi(n.state.selection,i=>{let r=e(i);return T.range(i.anchor,r.head,r.goalColumn,r.bidiLevel||void 0)});return t.eq(n.state.selection)?!1:(n.dispatch(ot(n.state,t)),!0)}function $c(n,e){return We(n,t=>n.moveByChar(t,e))}var Kc=n=>$c(n,!ve(n)),qc=n=>$c(n,ve(n));function Gc(n,e){return We(n,t=>n.moveByGroup(t,e))}var g0=n=>Gc(n,!ve(n)),b0=n=>Gc(n,ve(n));var y0=n=>We(n,e=>us(n.state,e,!ve(n))),w0=n=>We(n,e=>us(n.state,e,ve(n)));function jc(n,e){return We(n,t=>n.moveVertically(t,e))}var Jc=n=>jc(n,!1),Qc=n=>jc(n,!0);function Xc(n,e){return We(n,t=>n.moveVertically(t,e,zc(n).height))}var xc=n=>Xc(n,!1),kc=n=>Xc(n,!0),v0=n=>We(n,e=>Ft(n,e,!0)),C0=n=>We(n,e=>Ft(n,e,!1)),S0=n=>We(n,e=>Ft(n,e,!ve(n))),x0=n=>We(n,e=>Ft(n,e,ve(n))),k0=n=>We(n,e=>T.cursor(n.lineBlockAt(e.head).from)),M0=n=>We(n,e=>T.cursor(n.lineBlockAt(e.head).to)),Mc=({state:n,dispatch:e})=>(e(ot(n,{anchor:0})),!0),Tc=({state:n,dispatch:e})=>(e(ot(n,{anchor:n.doc.length})),!0),Rc=({state:n,dispatch:e})=>(e(ot(n,{anchor:n.selection.main.anchor,head:0})),!0),Dc=({state:n,dispatch:e})=>(e(ot(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),T0=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),R0=({state:n,dispatch:e})=>{let t=cs(n).map(({from:i,to:r})=>T.range(i,Math.min(r+1,n.doc.length)));return e(n.update({selection:T.create(t),userEvent:"select"})),!0},D0=({state:n,dispatch:e})=>{let t=Yi(n.selection,i=>{var r;let s=Ee(n).resolveInner(i.head,1);for(;!(s.from<i.from&&s.to>=i.to||s.to>i.to&&s.from<=i.from||!(!((r=s.parent)===null||r===void 0)&&r.parent));)s=s.parent;return T.range(s.to,s.from)});return e(ot(n,t)),!0},A0=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=T.create([t.main]):t.main.empty||(i=T.create([T.cursor(t.main.head)])),i?(e(ot(n,i)),!0):!1};function hs(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,r=i.changeByRange(s=>{let{from:o,to:l}=s;if(o==l){let a=e(o);a<o?(t="delete.backward",a=ss(n,a,!1)):a>o&&(t="delete.forward",a=ss(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=ss(n,o,!1),l=ss(n,l,!0);return o==l?{range:s}:{changes:{from:o,to:l},range:T.cursor(o)}});return r.changes.empty?!1:(n.dispatch(i.update(r,{scrollIntoView:!0,userEvent:t,effects:t=="delete.selection"?H.announce.of(i.phrase("Selection deleted")):void 0})),!0)}function ss(n,e,t){if(n instanceof H)for(let i of n.state.facet(H.atomicRanges).map(r=>r(n)))i.between(e,e,(r,s)=>{r<e&&s>e&&(e=t?s:r)});return e}var Yc=(n,e)=>hs(n,t=>{let{state:i}=n,r=i.doc.lineAt(t),s,o;if(!e&&t>r.from&&t<r.from+200&&!/[^ \t]/.test(s=r.text.slice(0,t-r.from))){if(s[s.length-1]==" ")return t-1;let l=fi(s,i.tabSize),a=l%Hn(i)||Hn(i);for(let u=0;u<a&&s[s.length-1-u]==" ";u++)t--;o=t}else o=Ce(r.text,t-r.from,e,e)+r.from,o==t&&r.number!=(e?i.doc.lines:1)&&(o+=e?1:-1);return o}),kl=n=>Yc(n,!1),Zc=n=>Yc(n,!0),ef=(n,e)=>hs(n,t=>{let i=t,{state:r}=n,s=r.doc.lineAt(i),o=r.charCategorizer(i);for(let l=null;;){if(i==(e?s.to:s.from)){i==t&&s.number!=(e?r.doc.lines:1)&&(i+=e?1:-1);break}let a=Ce(s.text,i-s.from,e)+s.from,u=s.text.slice(Math.min(i,a)-s.from,Math.max(i,a)-s.from),h=o(u);if(l!=null&&h!=l)break;(u!=" "||i!=t)&&(l=h),i=a}return i}),tf=n=>ef(n,!1),P0=n=>ef(n,!0),nf=n=>hs(n,e=>{let t=n.lineBlockAt(e).to;return e<t?t:Math.min(n.state.doc.length,e+1)}),E0=n=>hs(n,e=>{let t=n.lineBlockAt(e).from;return e>t?t:Math.max(0,e-1)});var O0=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:_.of(["",""])},range:T.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},I0=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let r=i.from,s=n.doc.lineAt(r),o=r==s.from?r-1:Ce(s.text,r-s.from,!1)+s.from,l=r==s.to?r+1:Ce(s.text,r-s.from,!0)+s.from;return{changes:{from:o,to:l,insert:n.doc.slice(r,l).append(n.doc.slice(o,r))},range:T.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function cs(n){let e=[],t=-1;for(let i of n.selection.ranges){let r=n.doc.lineAt(i.from),s=n.doc.lineAt(i.to);if(!i.empty&&i.to==s.from&&(s=n.doc.lineAt(i.to-1)),t>=r.number){let o=e[e.length-1];o.to=s.to,o.ranges.push(i)}else e.push({from:r.from,to:s.to,ranges:[i]});t=s.number+1}return e}function rf(n,e,t){if(n.readOnly)return!1;let i=[],r=[];for(let s of cs(n)){if(t?s.to==n.doc.length:s.from==0)continue;let o=n.doc.lineAt(t?s.to+1:s.from-1),l=o.length+1;if(t){i.push({from:s.to,to:o.to},{from:s.from,insert:o.text+n.lineBreak});for(let a of s.ranges)r.push(T.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:s.from},{from:s.to,insert:n.lineBreak+o.text});for(let a of s.ranges)r.push(T.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:T.create(r,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}var V0=({state:n,dispatch:e})=>rf(n,e,!1),L0=({state:n,dispatch:e})=>rf(n,e,!0);function sf(n,e,t){if(n.readOnly)return!1;let i=[];for(let r of cs(n))t?i.push({from:r.from,insert:n.doc.slice(r.from,r.to)+n.lineBreak}):i.push({from:r.to,insert:n.lineBreak+n.doc.slice(r.from,r.to)});return e(n.update({changes:i,scrollIntoView:!0,userEvent:"input.copyline"})),!0}var N0=({state:n,dispatch:e})=>sf(n,e,!1),B0=({state:n,dispatch:e})=>sf(n,e,!0),F0=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(cs(e).map(({from:r,to:s})=>(r>0?r--:s<e.doc.length&&s++,{from:r,to:s}))),i=Yi(e.selection,r=>n.moveVertically(r,!0)).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function H0(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Ee(n).resolveInner(e),i=t.childBefore(e),r=t.childAfter(e),s;return i&&r&&i.to<=e&&r.from>=e&&(s=i.type.prop(F.closedBy))&&s.indexOf(r.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(r.from).from?{from:i.to,to:r.from}:null}var W0=of(!1),_0=of(!0);function of(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(r=>{let{from:s,to:o}=r,l=e.doc.lineAt(s),a=!n&&s==o&&H0(e,s);n&&(s=o=(o<=l.to?l:e.doc.lineAt(o)).to);let u=new bi(e,{simulateBreak:s,simulateDoubleBreak:!!a}),h=yl(u,s);for(h==null&&(h=/^\s*/.exec(e.doc.lineAt(s).text)[0].length);o<l.to&&/\s/.test(l.text[o-l.from]);)o++;a?{from:s,to:o}=a:s>l.from&&s<l.from+100&&!/\S/.test(l.text.slice(0,s))&&(s=l.from);let c=["",Wn(e,h)];return a&&c.push(Wn(e,u.lineIndent(l.from,-1))),{changes:{from:s,to:o,insert:_.of(c)},range:T.cursor(s+1+c[1].length)}});return t(e.update(i,{scrollIntoView:!0,userEvent:"input"})),!0}}function Al(n,e){let t=-1;return n.changeByRange(i=>{let r=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,r,i),t=l.number),o=l.to+1}let s=n.changes(r);return{changes:r,range:T.range(s.mapPos(i.anchor,1),s.mapPos(i.head,1))}})}var z0=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new bi(n,{overrideIndentation:s=>{let o=t[s];return o==null?-1:o}}),r=Al(n,(s,o,l)=>{let a=yl(i,s.from);if(a==null)return;/\S/.test(s.text)||(a=0);let u=/^\s*/.exec(s.text)[0],h=Wn(n,a);(u!=h||l.from<s.from+u.length)&&(t[s.from]=a,o.push({from:s.from,to:s.from+u.length,insert:h}))});return r.changes.empty||e(n.update(r,{userEvent:"indent"})),!0},U0=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(Al(n,(t,i)=>{i.push({from:t.from,insert:n.facet(rs)})}),{userEvent:"input.indent"})),!0),$0=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(Al(n,(t,i)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let s=fi(r,n.tabSize),o=0,l=Wn(n,Math.max(0,s-Hn(n)));for(;o<r.length&&o<l.length&&r.charCodeAt(o)==l.charCodeAt(o);)o++;i.push({from:t.from+o,to:t.from+r.length,insert:l.slice(o)})}),{userEvent:"delete.dedent"})),!0);var K0=[{key:"Ctrl-b",run:Nc,shift:Kc,preventDefault:!0},{key:"Ctrl-f",run:Bc,shift:qc},{key:"Ctrl-p",run:Wc,shift:Jc},{key:"Ctrl-n",run:_c,shift:Qc},{key:"Ctrl-a",run:f0,shift:k0},{key:"Ctrl-e",run:d0,shift:M0},{key:"Ctrl-d",run:Zc},{key:"Ctrl-h",run:kl},{key:"Ctrl-k",run:nf},{key:"Ctrl-Alt-h",run:tf},{key:"Ctrl-o",run:O0},{key:"Ctrl-t",run:I0},{key:"Ctrl-v",run:xl}],q0=[{key:"ArrowLeft",run:Nc,shift:Kc,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:n0,shift:g0,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:h0,shift:S0,preventDefault:!0},{key:"ArrowRight",run:Bc,shift:qc,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:r0,shift:b0,preventDefault:!0},{mac:"Cmd-ArrowRight",run:c0,shift:x0,preventDefault:!0},{key:"ArrowUp",run:Wc,shift:Jc,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Mc,shift:Rc},{mac:"Ctrl-ArrowUp",run:Sc,shift:xc},{key:"ArrowDown",run:_c,shift:Qc,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Tc,shift:Dc},{mac:"Ctrl-ArrowDown",run:xl,shift:kc},{key:"PageUp",run:Sc,shift:xc},{key:"PageDown",run:xl,shift:kc},{key:"Home",run:u0,shift:C0,preventDefault:!0},{key:"Mod-Home",run:Mc,shift:Rc},{key:"End",run:a0,shift:v0,preventDefault:!0},{key:"Mod-End",run:Tc,shift:Dc},{key:"Enter",run:W0},{key:"Mod-a",run:T0},{key:"Backspace",run:kl,shift:kl},{key:"Delete",run:Zc},{key:"Mod-Backspace",mac:"Alt-Backspace",run:tf},{key:"Mod-Delete",mac:"Alt-Delete",run:P0},{mac:"Mod-Backspace",run:E0},{mac:"Mod-Delete",run:nf}].concat(K0.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),fs=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:o0,shift:y0},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:l0,shift:w0},{key:"Alt-ArrowUp",run:V0},{key:"Shift-Alt-ArrowUp",run:N0},{key:"Alt-ArrowDown",run:L0},{key:"Shift-Alt-ArrowDown",run:B0},{key:"Escape",run:A0},{key:"Mod-Enter",run:_0},{key:"Alt-l",mac:"Ctrl-l",run:R0},{key:"Mod-i",run:D0,preventDefault:!0},{key:"Mod-[",run:$0},{key:"Mod-]",run:U0},{key:"Mod-Alt-\\",run:z0},{key:"Shift-Mod-k",run:F0},{key:"Shift-Mod-\\",run:m0},{key:"Mod-/",run:Hb},{key:"Alt-A",run:_b}].concat(q0);var en=class{constructor(e,t,i,r,s,o,l,a,u,h=0,c){this.p=e,this.stack=t,this.state=i,this.reducePos=r,this.pos=s,this.score=o,this.buffer=l,this.bufferBase=a,this.curContext=u,this.lookAhead=h,this.parent=c}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,i=0){let r=e.parser.context;return new en(e,[],t,i,i,0,[],0,r?new ds(r,r.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,r=e&65535,{parser:s}=this.p,o=s.dynamicPrecedence(r);if(o&&(this.score+=o),i==0){this.pushState(s.getGoto(this.state,r,!0),this.reducePos),r<s.minRepeatTerm&&this.storeNode(r,this.reducePos,this.reducePos,4,!0),this.reduceContext(r,this.reducePos);return}let l=this.stack.length-(i-1)*3-(e&262144?6:0),a=l?this.stack[l-2]:this.p.ranges[0].from,u=this.reducePos-a;u>=2e3&&!(!((t=this.p.parser.nodeSet.types[r])===null||t===void 0)&&t.isAnonymous)&&(a==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=u):this.p.lastBigReductionSize<u&&(this.p.bigReductionCount=1,this.p.lastBigReductionStart=a,this.p.lastBigReductionSize=u));let h=l?this.stack[l-1]:0,c=this.bufferBase+this.buffer.length-h;if(r<s.minRepeatTerm||e&131072){let f=s.stateFlag(this.state,1)?this.pos:this.reducePos;this.storeNode(r,a,f,c+4,!0)}if(e&262144)this.state=this.stack[l];else{let f=this.stack[l-3];this.state=s.getGoto(f,r,!0)}for(;this.stack.length>l;)this.stack.pop();this.reduceContext(r,a)}storeNode(e,t,i,r=4,s=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]<this.buffer.length+this.bufferBase)){let o=this,l=this.buffer.length;if(l==0&&o.parent&&(l=o.bufferBase-o.parent.bufferBase,o=o.parent),l>0&&o.buffer[l-4]==0&&o.buffer[l-1]>-1){if(t==i)return;if(o.buffer[l-2]>=t){o.buffer[l-2]=i;return}}}if(!s||this.pos==i)this.buffer.push(e,t,i,r);else{let o=this.buffer.length;if(o>0&&this.buffer[o-4]!=0)for(;o>0&&this.buffer[o-2]>i;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,r>4&&(r-=4);this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=i,this.buffer[o+3]=r}}shift(e,t,i){let r=this.pos;if(e&131072)this.pushState(e&65535,this.pos);else if(e&262144)this.pos=i,this.shiftContext(t,r),t<=this.p.parser.maxNode&&this.buffer.push(t,r,i,4);else{let s=e,{parser:o}=this.p;(i>this.pos||t<=o.maxNode)&&(this.pos=i,o.stateFlag(s,1)||(this.reducePos=i)),this.pushState(s,r),this.shiftContext(t,r),t<=o.maxNode&&this.buffer.push(t,r,i,4)}}apply(e,t,i){e&65536?this.reduce(e):this.shift(e,t,i)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let r=this.pos;this.reducePos=this.pos=r+e.length,this.pushState(t,r),this.buffer.push(i,r,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(;t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),r=e.bufferBase+t;for(;e&&r==e.bufferBase;)e=e.parent;return new en(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,r,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new El(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if(!(i&65536))return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>4<<1||this.stack.length>=120){let r=[];for(let s=0,o;s<t.length;s+=2)(o=t[s+1])!=this.state&&this.p.parser.hasAction(o,e)&&r.push(t[s],o);if(this.stack.length<120)for(let s=0;r.length<4<<1&&s<t.length;s+=2){let o=t[s+1];r.some((l,a)=>a&1&&l==o)||r.push(t[s],o)}t=r}let i=[];for(let r=0;r<t.length&&i.length<4;r+=2){let s=t[r+1];if(s==this.state)continue;let o=this.split();o.pushState(s,this.pos),o.storeNode(0,o.pos,o.pos,4,!0),o.shiftContext(t[r],this.pos),o.score-=200,i.push(o)}return i}forceReduce(){let e=this.p.parser.stateSlot(this.state,5);if(!(e&65536))return!1;let{parser:t}=this.p;if(!t.validAction(this.state,e)){let i=e>>19,r=e&65535,s=this.stack.length-i*3;if(s<0||t.getGoto(this.stack[s],r,!1)<0)return!1;this.storeNode(0,this.reducePos,this.reducePos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(e),!0}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t<this.stack.length;t+=3)if(this.stack[t]!=e.stack[t])return!1;return!0}get parser(){return this.p.parser}dialectEnabled(e){return this.p.parser.dialect.flags[e]}shiftContext(e,t){this.curContext&&this.updateContext(this.curContext.tracker.shift(this.curContext.context,e,this,this.p.stream.reset(t)))}reduceContext(e,t){this.curContext&&this.updateContext(this.curContext.tracker.reduce(this.curContext.context,e,this,this.p.stream.reset(t)))}emitContext(){let e=this.buffer.length-1;(e<0||this.buffer[e]!=-3)&&this.buffer.push(this.curContext.hash,this.reducePos,this.reducePos,-3)}emitLookAhead(){let e=this.buffer.length-1;(e<0||this.buffer[e]!=-4)&&this.buffer.push(this.lookAhead,this.reducePos,this.reducePos,-4)}updateContext(e){if(e!=this.curContext.context){let t=new ds(this.curContext.tracker,e);t.hash!=this.curContext.hash&&this.emitContext(),this.curContext=t}}setLookAhead(e){e>this.lookAhead&&(this.emitLookAhead(),this.lookAhead=e)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}},ds=class{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}},lf;(function(n){n[n.Insert=200]="Insert",n[n.Delete=190]="Delete",n[n.Reduce=100]="Reduce",n[n.MaxNext=4]="MaxNext",n[n.MaxInsertStackDepth=300]="MaxInsertStackDepth",n[n.DampenInsertStackDepth=120]="DampenInsertStackDepth",n[n.MinBigReduction=2e3]="MinBigReduction"})(lf||(lf={}));var El=class{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let r=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=r}},tn=class{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new tn(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new tn(this.stack,this.pos,this.index)}};function Un(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let i=0,r=0;i<n.length;){let s=0;for(;;){let o=n.charCodeAt(i++),l=!1;if(o==126){s=65535;break}o>=92&&o--,o>=34&&o--;let a=o-32;if(a>=46&&(a-=46,l=!0),s+=a,l)break;s*=46}t?t[r++]=s:t=new e(s)}return t}var Zi=class{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}},af=new Zi,Ol=class{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=af,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,r=this.rangeIndex,s=this.pos+e;for(;s<i.from;){if(!r)return null;let o=this.ranges[--r];s-=i.from-o.to,i=o}for(;t<0?s>i.to:s>=i.to;){if(r==this.ranges.length-1)return null;let o=this.ranges[++r];s+=o.from-i.to,i=o}return s}clipPos(e){if(e>=this.range.from&&e<this.range.to)return e;for(let t of this.ranges)if(t.to>e)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,r;if(t>=0&&t<this.chunk.length)i=this.pos+e,r=this.chunk.charCodeAt(t);else{let s=this.resolveOffset(e,1);if(s==null)return-1;if(i=s,i>=this.chunk2Pos&&i<this.chunk2Pos+this.chunk2.length)r=this.chunk2.charCodeAt(i-this.chunk2Pos);else{let o=this.rangeIndex,l=this.range;for(;l.to<=i;)l=this.ranges[++o];this.chunk2=this.input.chunk(this.chunk2Pos=i),i+this.chunk2.length>l.to&&(this.chunk2=this.chunk2.slice(0,l.to-i)),r=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),r}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i<this.token.start)throw new RangeError("Token end out of bounds");this.token.value=e,this.token.end=i}getChunk(){if(this.pos>=this.chunk2Pos&&this.pos<this.chunk2Pos+this.chunk2.length){let{chunk:e,chunkPos:t}=this;this.chunk=this.chunk2,this.chunkPos=this.chunk2Pos,this.chunk2=e,this.chunk2Pos=t,this.chunkOff=this.pos-this.chunkPos}else{this.chunk2=this.chunk,this.chunk2Pos=this.chunkPos;let e=this.input.chunk(this.pos),t=this.pos+e.length;this.chunk=t>this.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=af,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e<this.range.from;)this.range=this.ranges[--this.rangeIndex];for(;e>=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e<this.chunkPos+this.chunk.length?this.chunkOff=e-this.chunkPos:(this.chunk="",this.chunkOff=0),this.readNext()}return this}read(e,t){if(e>=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i="";for(let r of this.ranges){if(r.from>=t)break;r.to>e&&(i+=this.input.read(Math.max(r.from,e),Math.min(r.to,t)))}return i}},Ht=class{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;mf(this.data,e,t,this.id,i.data,i.tokenPrecTable)}};Ht.prototype.contextual=Ht.prototype.fallback=Ht.prototype.extend=!1;var Il=class{constructor(e,t,i){this.precTable=t,this.elseToken=i,this.data=typeof e=="string"?Un(e):e}token(e,t){let i=e.pos,r;for(;r=e.pos,mf(this.data,e,t,0,this.data,this.precTable),!(e.token.value>-1);){if(this.elseToken==null)return;if(e.next<0)break;e.advance(),e.reset(r+1,e.token)}r>i&&(e.reset(i,e.token),e.acceptToken(this.elseToken,r-i))}};Il.prototype.contextual=Ht.prototype.fallback=Ht.prototype.extend=!1;function mf(n,e,t,i,r,s){let o=0,l=1<<i,{dialect:a}=t.p.parser;e:for(;l&n[o];){let u=n[o+1];for(let d=o+3;d<u;d+=2)if((n[d+1]&l)>0){let p=n[d];if(a.allows(p)&&(e.token.value==-1||e.token.value==p||j0(p,e.token.value,r,s))){e.acceptToken(p);break}}let h=e.next,c=0,f=n[o+2];if(e.next<0&&f>c&&n[u+f*3-3]==65535&&n[u+f*3-3]==65535){o=n[u+f*3-1];continue e}for(;c<f;){let d=c+f>>1,p=u+d+(d<<1),m=n[p],g=n[p+1]||65536;if(h<m)f=d;else if(h>=g)c=d+1;else{o=n[p+2],e.advance();continue e}}break}}function uf(n,e,t){for(let i=e,r;(r=n[i])!=65535;i++)if(r==t)return i-e;return-1}function j0(n,e,t,i){let r=uf(t,i,e);return r<0||uf(t,i,n)<r}var Je=typeof process<"u"&&process.env&&/\bparse\b/.test(process.env.LOG),Pl=null,hf;(function(n){n[n.Margin=25]="Margin"})(hf||(hf={}));function cf(n,e,t){let i=n.cursor(fe.IncludeAnonymous);for(i.moveTo(e);;)if(!(t<0?i.childBefore(e):i.childAfter(e)))for(;;){if((t<0?i.to<e:i.from>e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(n.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:n.length}}var Vl=class{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?cf(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?cf(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(e<this.nextStart)return null;for(;this.fragment&&this.safeTo<=e;)this.nextFragment();if(!this.fragment)return null;for(;;){let t=this.trees.length-1;if(t<0)return this.nextFragment(),null;let i=this.trees[t],r=this.index[t];if(r==i.children.length){this.trees.pop(),this.start.pop(),this.index.pop();continue}let s=i.children[r],o=this.start[t]+i.positions[r];if(o>e)return this.nextStart=o,null;if(s instanceof ee){if(o==e){if(o<this.safeFrom)return null;let l=o+s.length;if(l<=this.safeTo){let a=s.prop(F.lookAhead);if(!a||l+a<this.fragment.to)return s}}this.index[t]++,o+s.length>=Math.max(this.safeFrom,e)&&(this.trees.push(s),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+s.length}}},Ll=class{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new Zi)}getActions(e){let t=0,i=null,{parser:r}=e.p,{tokenizers:s}=r,o=r.stateSlot(e.state,3),l=e.curContext?e.curContext.hash:0,a=0;for(let u=0;u<s.length;u++){if(!(1<<u&o))continue;let h=s[u],c=this.tokens[u];if(!(i&&!h.fallback)&&((h.contextual||c.start!=e.pos||c.mask!=o||c.context!=l)&&(this.updateCachedToken(c,h,e),c.mask=o,c.context=l),c.lookAhead>c.end+25&&(a=Math.max(c.lookAhead,a)),c.value!=0)){let f=t;if(c.extended>-1&&(t=this.addActions(e,c.extended,c.end,t)),t=this.addActions(e,c.value,c.end,t),!h.extend&&(i=c,t>f))break}}for(;this.actions.length>t;)this.actions.pop();return a&&e.setLookAhead(a),!i&&e.pos==this.stream.end&&(i=new Zi,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new Zi,{pos:i,p:r}=e;return t.start=i,t.end=Math.min(i+1,r.stream.end),t.value=i==r.stream.end?r.parser.eofTerm:0,t}updateCachedToken(e,t,i){let r=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(r,e),i),e.value>-1){let{parser:s}=i.p;for(let o=0;o<s.specialized.length;o++)if(s.specialized[o]==e.value){let l=s.specializers[o](this.stream.read(e.start,e.end),i);if(l>=0&&i.p.parser.dialect.allows(l>>1)){l&1?e.extended=l>>1:e.value=l>>1;break}}}else e.value=0,e.end=this.stream.clipPos(r+1)}putAction(e,t,i,r){for(let s=0;s<r;s+=3)if(this.actions[s]==e)return r;return this.actions[r++]=e,this.actions[r++]=t,this.actions[r++]=i,r}addActions(e,t,i,r){let{state:s}=e,{parser:o}=e.p,{data:l}=o;for(let a=0;a<2;a++)for(let u=o.stateSlot(s,a?2:1);;u+=3){if(l[u]==65535)if(l[u+1]==1)u=xt(l,u+2);else{r==0&&l[u+1]==2&&(r=this.putAction(xt(l,u+2),t,i,r));break}l[u]==t&&(r=this.putAction(xt(l,u+1),t,i,r))}return r}},ff;(function(n){n[n.Distance=5]="Distance",n[n.MaxRemainingPerStep=3]="MaxRemainingPerStep",n[n.MinBufferLengthPrune=500]="MinBufferLengthPrune",n[n.ForceReduceLimit=10]="ForceReduceLimit",n[n.CutDepth=15e3]="CutDepth",n[n.CutTo=9e3]="CutTo",n[n.MaxLeftAssociativeReductionCount=300]="MaxLeftAssociativeReductionCount",n[n.MaxStackCount=12]="MaxStackCount"})(ff||(ff={}));var Nl=class{constructor(e,t,i,r){this.parser=e,this.input=t,this.ranges=r,this.recovering=0,this.nextStackID=9812,this.minStackPos=0,this.reused=[],this.stoppedAt=null,this.lastBigReductionStart=-1,this.lastBigReductionSize=0,this.bigReductionCount=0,this.stream=new Ol(t,r),this.tokens=new Ll(e,this.stream),this.topTerm=e.top[1];let{from:s}=r[0];this.stacks=[en.start(this,e.top[0],s)],this.fragments=i.length&&this.stream.end-s>e.bufferLength*4?new Vl(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],r,s;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;o<e.length;o++){let l=e[o];for(;;){if(this.tokens.mainToken=null,l.pos>t)i.push(l);else{if(this.advanceStack(l,i,e))continue;{r||(r=[],s=[]),r.push(l);let a=this.tokens.getMainToken(l);s.push(a.value,a.end)}}break}}if(!i.length){let o=r&&J0(r);if(o)return this.stackToTree(o);if(this.parser.strict)throw Je&&r&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&r){let o=this.stoppedAt!=null&&r[0].pos>this.stoppedAt?r[0]:this.runRecovery(r,s,i);if(o)return this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(i.length>o)for(i.sort((l,a)=>a.score-l.score);i.length>o;)i.pop();i.some(l=>l.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let o=0;o<i.length-1;o++){let l=i[o];for(let a=o+1;a<i.length;a++){let u=i[a];if(l.sameState(u)||l.buffer.length>500&&u.buffer.length>500)if((l.score-u.score||l.buffer.length-u.buffer.length)>0)i.splice(a--,1);else{i.splice(o--,1);continue e}}}i.length>12&&i.splice(12,i.length-12)}this.minStackPos=i[0].pos;for(let o=1;o<i.length;o++)i[o].pos<this.minStackPos&&(this.minStackPos=i[o].pos);return null}stopAt(e){if(this.stoppedAt!=null&&this.stoppedAt<e)throw new RangeError("Can't move stoppedAt forward");this.stoppedAt=e}advanceStack(e,t,i){let r=e.pos,{parser:s}=this,o=Je?this.stackID(e)+" -> ":"";if(this.stoppedAt!=null&&r>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let u=e.curContext&&e.curContext.tracker.strict,h=u?e.curContext.hash:0;for(let c=this.fragments.nodeAt(r);c;){let f=this.parser.nodeSet.types[c.type.id]==c.type?s.getGoto(e.state,c.type.id):-1;if(f>-1&&c.length&&(!u||(c.prop(F.contextHash)||0)==h))return e.useNode(c,f),Je&&console.log(o+this.stackID(e)+` (via reuse of ${s.getName(c.type.id)})`),!0;if(!(c instanceof ee)||c.children.length==0||c.positions[0]>0)break;let d=c.children[0];if(d instanceof ee&&c.positions[0]==0)c=d;else break}}let l=s.stateSlot(e.state,4);if(l>0)return e.reduce(l),Je&&console.log(o+this.stackID(e)+` (via always-reduce ${s.getName(l&65535)})`),!0;if(e.stack.length>=15e3)for(;e.stack.length>9e3&&e.forceReduce(););let a=this.tokens.getActions(e);for(let u=0;u<a.length;){let h=a[u++],c=a[u++],f=a[u++],d=u==a.length||!i,p=d?e:e.split();if(p.apply(h,c,f),Je&&console.log(o+this.stackID(p)+` (via ${h&65536?`reduce of ${s.getName(h&65535)}`:"shift"} for ${s.getName(c)} @ ${r}${p==e?"":", split"})`),d)return!0;p.pos>r?t.push(p):i.push(p)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return df(e,t),!0}}runRecovery(e,t,i){let r=null,s=!1;for(let o=0;o<e.length;o++){let l=e[o],a=t[o<<1],u=t[(o<<1)+1],h=Je?this.stackID(l)+" -> ":"";if(l.deadEnd&&(s||(s=!0,l.restart(),Je&&console.log(h+this.stackID(l)+" (restarted)"),this.advanceFully(l,i))))continue;let c=l.split(),f=h;for(let d=0;c.forceReduce()&&d<10&&(Je&&console.log(f+this.stackID(c)+" (via force-reduce)"),!this.advanceFully(c,i));d++)Je&&(f=this.stackID(c)+" -> ");for(let d of l.recoverByInsert(a))Je&&console.log(h+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>l.pos?(u==l.pos&&(u++,a=0),l.recoverByDelete(a,u),Je&&console.log(h+this.stackID(l)+` (via recover-delete ${this.parser.getName(a)})`),df(l,i)):(!r||r.score<l.score)&&(r=l)}return r}stackToTree(e){return e.close(),ee.build({buffer:tn.create(e),nodeSet:this.parser.nodeSet,topID:this.topTerm,maxBufferLength:this.parser.bufferLength,reused:this.reused,start:this.ranges[0].from,length:e.pos-this.ranges[0].from,minRepeatType:this.parser.minRepeatTerm})}stackID(e){let t=(Pl||(Pl=new WeakMap)).get(e);return t||Pl.set(e,t=String.fromCodePoint(this.nextStackID++)),t+e}};function df(n,e){for(let t=0;t<e.length;t++){let i=e[t];if(i.pos==n.pos&&i.sameState(n)){e[t].score<n.score&&(e[t]=n);return}}e.push(n)}var Bl=class{constructor(e,t,i){this.source=e,this.flags=t,this.disabled=i}allows(e){return!this.disabled||this.disabled[e]==0}};var Wt=class extends qi{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let l=0;l<e.repeatNodeCount;l++)t.push("");let i=Object.keys(e.topRules).map(l=>e.topRules[l][1]),r=[];for(let l=0;l<t.length;l++)r.push([]);function s(l,a,u){r[l].push([a,a.deserialize(String(u))])}if(e.nodeProps)for(let l of e.nodeProps){let a=l[0];typeof a=="string"&&(a=F[a]);for(let u=1;u<l.length;){let h=l[u++];if(h>=0)s(h,a,l[u++]);else{let c=l[u+-h];for(let f=-h;f>0;f--)s(l[u++],a,c);u++}}}this.nodeSet=new mi(t.map((l,a)=>de.define({name:a>=this.minRepeatTerm?void 0:l,id:a,props:r[a],top:i.indexOf(a)>-1,error:a==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(a)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=1024;let o=Un(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let l=0;l<this.specializerSpecs.length;l++)this.specialized[l]=this.specializerSpecs[l].term;this.specializers=this.specializerSpecs.map(pf),this.states=Un(e.states,Uint32Array),this.data=Un(e.stateData),this.goto=Un(e.goto),this.maxTerm=e.maxTerm,this.tokenizers=e.tokenizers.map(l=>typeof l=="number"?new Ht(o,l):l),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let r=new Nl(this,e,t,i);for(let s of this.wrappers)r=s(r,e,t,i);return r}getGoto(e,t,i=!1){let r=this.goto;if(t>=r[0])return-1;for(let s=r[t+1];;){let o=r[s++],l=o&1,a=r[s++];if(l&&i)return a;for(let u=s+(o>>1);s<u;s++)if(r[s]==e)return a;if(l)return-1}}hasAction(e,t){let i=this.data;for(let r=0;r<2;r++)for(let s=this.stateSlot(e,r?2:1),o;;s+=3){if((o=i[s])==65535)if(i[s+1]==1)o=i[s=xt(i,s+2)];else{if(i[s+1]==2)return xt(i,s+2);break}if(o==t||o==0)return xt(i,s+1)}return 0}stateSlot(e,t){return this.states[e*6+t]}stateFlag(e,t){return(this.stateSlot(e,0)&t)>0}validAction(e,t){if(t==this.stateSlot(e,4))return!0;for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=xt(this.data,i+2);else return!1;if(t==xt(this.data,i+1))return!0}}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=xt(this.data,i+2);else break;if(!(this.data[i+2]&1)){let r=this.data[i+1];t.some((s,o)=>o&1&&s==r)||t.push(this.data[i],r)}}return t}configure(e){let t=Object.assign(Object.create(Wt.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let r=e.tokenizers.find(s=>s.from==i);return r?r.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,r)=>{let s=e.specializers.find(l=>l.from==i.external);if(!s)return i;let o=Object.assign(Object.assign({},i),{external:s.to});return t.specializers[r]=pf(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let s of e.split(" ")){let o=t.indexOf(s);o>=0&&(i[o]=!0)}let r=null;for(let s=0;s<t.length;s++)if(!i[s])for(let o=this.dialects[t[s]],l;(l=this.data[o++])!=65535;)(r||(r=new Uint8Array(this.maxTerm+1)))[l]=1;return new Bl(e,i,r)}static deserialize(e){return new Wt(e)}};function xt(n,e){return n[e]|n[e+1]<<16}function J0(n){let e=null;for(let t of n){let i=t.p.stoppedAt;(t.pos==t.p.stream.end||i!=null&&t.pos>i)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.score<t.score)&&(e=t)}return e}function pf(n){if(n.external){let e=n.extend?1:0;return(t,i)=>n.external(t,i)<<1|e}return n.get}var Q0=[...fs,...Dl],X0=(()=>[el(),Rl(),Zo(),_n(wl,{fallback:!0}),On.of(Q0)])();import{isNumericColumn as SM}from"@vuu-ui/vuu-utils";var gf=[{label:"=",boost:10,type:"operator"},{label:"!=",boost:9,type:"operator"}],Y0=[...gf,{label:"in",boost:6,type:"operator"},{label:"starts",boost:5,type:"operator"},{label:"ends",boost:4,type:"operator"}],Z0=[...gf,{label:">",boost:8,type:"operator"},{label:"<",boost:7,type:"operator"}];import w1 from"classnames";import{useEffect as S1,useMemo as x1,useRef as k1}from"react";var ps=Wt.deserialize({version:14,states:"%QOVQPOOOOQO'#C_'#C_O_QQO'#C^OOQO'#DO'#DOOvQQO'#C|OOQO'#DR'#DROVQPO'#CuOOQO'#C}'#C}QOQPOOOOQO'#C`'#C`O!UQQO,58xO!dQPO,59VOVQPO,59]OVQPO,59_O!iQPO,59hO!nQQO,59aOOQO'#DQ'#DQOOQO1G.d1G.dO!UQQO1G.qO!yQQO1G.wOOQO1G.y1G.yOOQO'#Cw'#CwOOQO1G/S1G/SOOQO1G.{1G.{O#[QPO'#CnO#dQPO7+$]O!UQQO'#CxO#iQPO,59YOOQO<<Gw<<GwOOQO,59d,59dOOQO-E6v-E6v",stateData:"#q~OoOS~OsPOvUO~OTXOUXOVXOWXOXXOYXO`ZO~Of[Oh]Oj^OmpX~OZ`O[`O]`O^`O~OabO~OseO~Of[Oh]OwgO~Oh]Ofeijeimeiwei~OcjOdbX~OdlO~OcjOdba~O",goto:"#YvPPw}!TPPPPPPPPPPwPP!WPP!ZP!ZP!aP!g!jPPP!p!s!aP#P!aXROU[]XQOU[]RYQRibXTOU[]XVOU[]Rf^QkhRnkRWOQSOQ_UQc[Rd]QaYQhbRmj",nodeNames:"\u26A0 Filter ColumnValueExpression Column Operator Eq NotEq Gt Lt Starts Ends Number String True False ColumnSetExpression In LBrack Values Comma RBrack AndExpression And OrExpression Or ParenthesizedExpression As FilterName",maxTerm:39,skippedNodes:[0],repeatNodeCount:1,tokenData:"6p~RnXY#PYZ#P]^#Ppq#Pqr#brs#mxy$eyz$j|}$o!O!P$t!Q![%S!^!_%_!_!`%d!`!a%i!c!}%n!}#O&V#P#Q&[#R#S%n#T#U&a#U#X%n#X#Y(w#Y#Z+]#Z#]%n#]#^.]#^#c%n#c#d/e#d#g%n#g#h0m#h#i4[#i#o%n~#USo~XY#PYZ#P]^#Ppq#P~#eP!_!`#h~#mOU~~#pWOX#mZ]#m^r#mrs$Ys#O#m#P;'S#m;'S;=`$_<%lO#m~$_O[~~$bP;=`<%l#m~$jOv~~$oOw~~$tOc~~$wP!Q![$z~%PPZ~!Q![$z~%XQZ~!O!P$t!Q![%S~%dOW~~%iOT~~%nOV~P%sUsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%n~&[Oa~~&aOd~R&fYsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c'U#c#g%n#g#h(^#h#o%nR'ZWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#W%n#W#X's#X#o%nR'zUfQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR(eUjQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR(|WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c)f#c#o%nR)kWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#W%n#W#X*T#X#o%nR*YWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h*r#h#o%nR*yUYQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR+bVsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#U+w#U#o%nR+|WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#`%n#`#a,f#a#o%nR,kWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h-T#h#o%nR-YWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#X%n#X#Y-r#Y#o%nR-yU^QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR.bWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c.z#c#o%nR/RU`QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR/jWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g0S#g#o%nR0ZUhQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR0rWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#h%n#h#i1[#i#o%nR1aVsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#U1v#U#o%nR1{WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g2e#g#o%nR2jWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#h%n#h#i3S#i#o%nR3XWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h3q#h#o%nR3xUXQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR4aWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g4y#g#o%nR5OWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#i%n#i#j5h#j#o%nR5mWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#X%n#X#Y6V#Y#o%nR6^U]QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%n",tokenizers:[0,1],topRules:{Filter:[0,1]},tokenPrec:0});var BM=Nt.define({name:"VuuFilterQuery",parser:ps.configure({props:[Nn({Identifier:D.variableName,String:D.string,Or:D.emphasis,Operator:D.operator})]})});import{isMultiClauseFilter as $n,isMultiValueFilter as iy,isSingleValueFilter as ny}from"@vuu-ui/vuu-utils";var ke,Fl=class{constructor(){W(this,ke,void 0)}setFilterCombinatorOp(e,t=k(this,ke)){$n(t)&&t.op===e||P(this,ke,{op:e,filters:[k(this,ke)]})}add(e){if(k(this,ke)===void 0)P(this,ke,e);else if($n(k(this,ke)))k(this,ke).filters.push(e);else throw Error("Invalid filter passed to FilterExpression")}setColumn(e,t=k(this,ke)){if($n(t)){let i=t.filters.at(-1);i&&this.setColumn(e,i)}else t&&(t.column=e)}setOp(e,t=k(this,ke)){if($n(t)){let i=t.filters.at(-1);i&&this.setOp(e,i)}else t&&(t.op=e)}setValue(e,t=k(this,ke)){var i;if($n(t)){let r=t.filters.at(-1);r&&this.setValue(e,r)}else iy(t)?((i=t.values)!=null||(t.values=[]),t.values.push(e)):ny(t)&&(t.value=e)}toJSON(e=k(this,ke)){return this.name?{...e,name:this.name}:e}};ke=new WeakMap;var Hl=(n,e)=>{let t=new Fl,i=n.cursor();do{let{name:r,from:s,to:o}=i;switch(r){case"ColumnValueExpression":t.add({});break;case"ColumnSetExpression":t.add({op:"in"});break;case"Or":case"And":t.setFilterCombinatorOp(e.substring(s,o));break;case"Column":t.setColumn(e.substring(s,o));break;case"Operator":t.setOp(e.substring(s,o));break;case"String":t.setValue(e.substring(s+1,o-1));break;case"Number":t.setValue(parseFloat(e.substring(s,o)));break;case"True":t.setValue(!0);break;case"False":t.setValue(!1);break;case"FilterName":t.name=e.substring(s,o);break;default:}}while(i.next());return t.toJSON()};var ry=ps.configure({strict:!0}),Kn=n=>{let e=ry.parse(n);return Hl(e,n)};var sy=St.define([{tag:D.variableName,color:"var(--vuuFilterEditor-variableColor)"},{tag:D.comment,color:"green",fontStyle:"italic"}]),oy=_n(sy);var ly=H.theme({"&":{color:"var(--vuuFilterEditor-color)",backgroundColor:"var(--vuuFilterEditor-background)",fontSize:"var(--vuuFilterEditor-fontSize)"},".cm-content":{caretColor:"var(--vuuFilterEditor-cursorColor)",padding:0},".cm-line":{lineHeight:"var(--vuuFilterEditor-lineHeight)"},"&.cm-focused .cm-cursor":{borderLeftColor:"var(--vuuFilterEditor-cursorColor)"},"&.cm-focused .cm-selectionBackground, ::selection":{backgroundColor:"var(--vuuFilterEditor-selectionBackground)"},".cm-selectionBackground, ::selection":{backgroundColor:"var(--vuuFilterEditor-selectionBackground)"},".cm-scroller":{fontFamily:"var(--vuuFilterEditor-fontFamily)"},".cm-tooltip":{background:"var(--vuuFilterEditor-tooltipBackground)",border:"var(--vuuFilterEditor-tooltipBorder)",boxShadow:"var(--vuuFilterEditor-tooltipElevation)","&.cm-tooltip-autocomplete > ul":{fontFamily:"var(--vuuFilterEditor-fontFamily)",fontSize:"var(--vuuFilterEditor-fontSize)",maxHeight:"240px"},"&.cm-tooltip-autocomplete > ul > li":{alignItems:"center",display:"flex",height:"var(--vuuFilterEditor-suggestion-height)",padding:"0 3px",lineHeight:"var(--vuuFilterEditor-suggestion-height)"},"&.cm-tooltip-autocomplete li[aria-selected]":{background:"var(--vuuFilterEditor-suggestion-selectedBackground)",color:"var(--vuuFilterEditor-suggestion-selectedColor)"}},".cm-completionIcon":{height:"18px",flex:"0 0 16px"},".cm-completionLabel":{flex:"1 1 auto"},".cm-completionIcon-filter":{position:"relative","&:after":{background:"var(--salt-text-secondary-foreground)",content:"''","-webkit-mask":"var(--svg-filter) center center/13px 13px","-webkit-mask-repeat":"no-repeat",position:"absolute",height:"18px",left:"0px",top:"0px",width:"16px"}}},{dark:!1});import{useCallback as u1}from"react";import{jsx as U1,jsxs as $1}from"react/jsx-runtime";import{EventEmitter as Cy,getLoggingConfig as Sy,uuid as xy}from"@vuu-ui/vuu-utils";var bf=n=>n.type==="viewport-update"&&n.mode==="size-only";var qn=(n,e)=>n===e?!0:n===void 0&&e===void 0,ay=({filter:n},{filter:e})=>n===void 0&&(e==null?void 0:e.filter)===""||e===void 0&&(n==null?void 0:n.filter)==="",uy=(n,e)=>{var t,i;return ay(n,e)?!1:((t=n.filter)==null?void 0:t.filter)!==((i=e.filter)==null?void 0:i.filter)},hy=({sort:n},{sort:e})=>n===void 0&&(e==null?void 0:e.sortDefs.length)===0||e===void 0&&(n==null?void 0:n.sortDefs.length)===0,cy=(n,e)=>{let{sort:t}=n,{sort:i}=e;return qn(t,i)||hy(n,e)?!1:t===void 0||i===void 0||(t==null?void 0:t.sortDefs.length)!==(i==null?void 0:i.sortDefs.length)?!0:t.sortDefs.some(({column:r,sortType:s},o)=>r!==i.sortDefs[o].column||s!==i.sortDefs[o].sortType)};var fy=({groupBy:n},{groupBy:e})=>n===void 0&&(e==null?void 0:e.length)===0||e===void 0&&(n==null?void 0:n.length)===0,dy=(n,e)=>{let{groupBy:t}=n,{groupBy:i}=e;return qn(t,i)||fy(n,e)?!1:t===void 0||i===void 0||(t==null?void 0:t.length)!==(i==null?void 0:i.length)?!0:t.some((r,s)=>r!==(i==null?void 0:i[s]))},py=({columns:n},{columns:e})=>n===void 0&&(e==null?void 0:e.length)===0||e===void 0&&(n==null?void 0:n.length)===0,my=(n,e)=>{let{columns:t}=n,{columns:i}=e;return qn(t,i)||py(n,e)?!1:t===void 0||i===void 0||(t==null?void 0:t.length)!==(i==null?void 0:i.length)?!0:t.some((r,s)=>r!==(i==null?void 0:i[s]))},gy=({aggregations:n},{aggregations:e})=>n===void 0&&(e==null?void 0:e.length)===0||e===void 0&&(n==null?void 0:n.length)===0,by=(n,e)=>{let{aggregations:t}=n,{aggregations:i}=e;return qn(t,i)||gy(n,e)?!1:t===void 0||i===void 0||t.length!==i.length?!0:t.some(({column:r,aggType:s},o)=>r!==i[o].column||s!==i[o].aggType)},yy=()=>!1,yf=(n,e)=>qn(n,e)?!1:n===void 0||e===void 0?!0:my(n,e)||uy(n,e)||cy(n,e)||dy(n,e)||by(n,e)||yy(n,e),wy=["config","aggregate","viewport-update","columns","debounce-begin","disabled","enabled","filter","groupBy","vuu-link-created","vuu-link-removed","vuu-links","vuu-menu","sort","subscribed"],wf=n=>{let e=n.type;return wy.includes(e)},vf=n=>["config","aggregate","columns","filter","groupBy","sort"].includes(n.type),Cf=n=>{if(n.aggregations&&n.columns&&n.filter&&n.groupBy&&n.sort)return n;{let{aggregations:e=[],columns:t=[],filter:i={filter:""},groupBy:r=[],sort:s={sortDefs:[]},visualLink:o}=n;return{aggregations:e,columns:t,filter:i,groupBy:r,sort:s,visualLink:o}}};var Sf="GET_TABLE_LIST",xf="GET_TABLE_META";var Wl=n=>n.type==="connection-status",kf=n=>typeof n.result<"u";var Mf='\nvar le=(o,e,t)=>{if(!e.has(o))throw TypeError("Cannot "+t)};var c=(o,e,t)=>(le(o,e,"read from private field"),t?t.call(o):e.get(o)),U=(o,e,t)=>{if(e.has(o))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(o):e.set(o,t)},ce=(o,e,t,r)=>(le(o,e,"write to private field"),r?r.call(o,t):e.set(o,t),t);function pe(o,e,t=[],r=[]){for(let s=0,n=o.length;s<n;s++)(e(o[s],s)?t:r).push(o[s]);return[t,r]}var N={IDX:0,RENDER_IDX:1,IS_LEAF:2,IS_EXPANDED:3,DEPTH:4,COUNT:5,KEY:6,SELECTED:7,count:8,PARENT_IDX:"parent_idx",IDX_POINTER:"idx_pointer",FILTER_COUNT:"filter_count",NEXT_FILTER_IDX:"next_filter_idx"};function j({from:o,to:e},t=0,r=Number.MAX_SAFE_INTEGER){if(t===0)return r<o?{from:0,to:0}:{from:o,to:Math.min(e,r)};if(o===0)return{from:o,to:Math.min(e+t,r)};{let s=e-o,n=Math.round(t/2),i=o-n<0,l=r-(e+n)<0;return i&&l?{from:0,to:r}:i?{from:0,to:s+t}:l?{from:Math.max(0,r-(s+t)),to:r}:{from:o-n,to:e+n}}}var je=(o,{from:e,to:t})=>o>=e&&o<t,w=class{constructor(e,t){this.from=e,this.to=t}isWithin(e){return je(e,this)}overlap(e,t){return e>=this.to||t<this.from?[0,0]:[Math.max(e,this.from),Math.min(t,this.to)]}copy(){return new w(this.from,this.to)}};var{KEY:Ot}=N;var F=()=>{},Ye="error",{loggingLevel:W=Ye}=typeof loggingSettings<"u"?loggingSettings:{},V=o=>{let e=W==="debug",t=e||W==="info",r=t||W==="warn",s=r||W==="error",n=t?a=>console.info(`[${o}] ${a}`):F,i=r?a=>console.warn(`[${o}] ${a}`):F,l=e?a=>console.debug(`[${o}] ${a}`):F;return{errorEnabled:s,error:s?a=>console.error(`[${o}] ${a}`):F}};var{debug:Xe,debugEnabled:Ze}=V("range-monitor"),q=class{constructor(e){this.source=e;this.range={from:0,to:0};this.timestamp=0}isSet(){return this.timestamp!==0}set({from:e,to:t}){let{timestamp:r}=this;if(this.range.from=e,this.range.to=t,this.timestamp=performance.now(),r)Ze&&Xe(`<${this.source}> [${e}-${t}], ${(this.timestamp-r).toFixed(0)} ms elapsed`);else return 0}};function ge(o){return Array.isArray(o)}function Qe(o){return!Array.isArray(o)}var y,de=class{constructor(){U(this,y,new Map)}addListener(e,t){let r=c(this,y).get(e);r?ge(r)?r.push(t):Qe(r)&&c(this,y).set(e,[r,t]):c(this,y).set(e,t)}removeListener(e,t){if(!c(this,y).has(e))return;let r=c(this,y).get(e),s=-1;if(r===t)c(this,y).delete(e);else if(Array.isArray(r)){for(let n=length;n-- >0;)if(r[n]===t){s=n;break}if(s<0)return;r.length===1?(r.length=0,c(this,y).delete(e)):r.splice(s,1)}}removeAllListeners(e){e&&c(this,y).has(e)?c(this,y).delete(e):e===void 0&&c(this,y).clear()}emit(e,...t){if(c(this,y)){let r=c(this,y).get(e);r&&this.invokeHandler(r,t)}}once(e,t){let r=(...s)=>{this.removeListener(e,r),t(...s)};this.on(e,r)}on(e,t){this.addListener(e,t)}invokeHandler(e,t){if(ge(e))e.slice().forEach(r=>this.invokeHandler(r,t));else switch(t.length){case 0:e();break;case 1:e(t[0]);break;case 2:e(t[0],t[1]);break;default:e.call(null,...t)}}};y=new WeakMap;var B=String.fromCharCode(8200),d=String.fromCharCode(8199);var Ht={DIGIT:d,TWO_DIGITS:d+d,THREE_DIGITS:d+d+d,FULL_PADDING:[null,B+d,B+d+d,B+d+d+d,B+d+d+d+d]};var Jt=d+d+d+d+d+d+d+d+d;var et={Enter:"Enter",Delete:"Delete"},tt={Home:"Home",End:"End",ArrowRight:"ArrowRight",ArrowLeft:"ArrowLeft",ArrowDown:"ArrowDown",ArrowUp:"ArrowUp",Tab:"Tab"},rt={F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12"},er={...et,...tt,...rt};var{COUNT:nr}=N;var G=class{constructor(e){this.keys=new Map,this.free=[],this.nextKeyValue=0,this.reset(e)}next(){return this.free.length>0?this.free.pop():this.nextKeyValue++}reset({from:e,to:t}){this.keys.forEach((s,n)=>{(n<e||n>=t)&&(this.free.push(s),this.keys.delete(n))});let r=t-e;this.keys.size+this.free.length>r&&(this.free.length=r-this.keys.size);for(let s=e;s<t;s++)if(!this.keys.has(s)){let n=this.next();this.keys.set(s,n)}}keyFor(e){let t=this.keys.get(e);if(t===void 0)throw console.log(`key not found\n keys: ${this.toDebugString()}\n free : ${this.free.join(",")} \n `),Error(`KeySet, no key found for rowIndex ${e}`);return t}toDebugString(){return Array.from(this.keys.entries()).map((e,t)=>`${e}=>${t}`).join(",")}};var fe=o=>{if(o.every(t=>typeof t=="number"))return o;let e=[];for(let t of o)if(typeof t=="number")e.push(t);else for(let r=t[0];r<=t[1];r++)e.push(r);return e};var{debug:Wr,debugEnabled:qr,error:st,info:T,warn:x}=V("websocket-connection"),he="ws",nt=o=>o.startsWith(he+"://")||o.startsWith(he+"s://"),me={},X=Symbol("setWebsocket"),$=Symbol("connectionCallback");async function Se(o,e){return Q(o,e)}async function Y(o){Q(o.url,o[$],o)}async function Q(o,e,t){let r=me[o]||(me[o]={attemptsRemaining:5,status:"disconnected"});try{e({type:"connection-status",status:"connecting"});let s=typeof t<"u",n=await it(o);console.info("%c\u26A1 %cconnected","font-size: 24px;color: green;font-weight: bold;","color:green; font-size: 14px;"),t!==void 0&&t[X](n);let i=t!=null?t:new Z(n,o,e),l=s?"reconnected":"connected";return e({type:"connection-status",status:l}),i.status=l,i}catch{let n=--r.attemptsRemaining>0;if(e({type:"connection-status",status:"disconnected",reason:"failed to connect",retry:n}),n)return ot(o,e,t,1e4);throw Error("Failed to establish connection")}}var ot=(o,e,t,r)=>new Promise(s=>{setTimeout(()=>{s(Q(o,e,t))},r)}),it=o=>new Promise((e,t)=>{let r=nt(o)?o:`wss://${o}`,s=new WebSocket(r);s.onopen=()=>e(s),s.onerror=n=>t(n)}),Ce=()=>{x==null||x("Connection cannot be closed, socket not yet opened")},be=o=>{x==null||x(`Message cannot be sent, socket closed ${o.body.type}`)},at=o=>{try{return JSON.parse(o)}catch{throw Error(`Error parsing JSON response from server ${o}`)}},Z=class{constructor(e,t,r){this.close=Ce;this.requiresLogin=!0;this.send=be;this.status="ready";this.url=t,this[$]=r,this[X](e)}reconnect(){Y(this)}[($,X)](e){let t=this[$];e.onmessage=n=>{let i=at(n.data);t(i)},e.onerror=()=>{st("\u26A1 connection error"),t({type:"connection-status",status:"disconnected",reason:"error"}),this.status!=="closed"&&(Y(this),this.send=s)},e.onclose=()=>{T==null||T("\u26A1 connection close"),t({type:"connection-status",status:"disconnected",reason:"close"}),this.status!=="closed"&&(Y(this),this.send=s)};let r=n=>{e.send(JSON.stringify(n))},s=n=>{T==null||T(`TODO queue message until websocket reconnected ${n.body.type}`)};this.send=r,this.close=()=>{this.status="closed",e.close(),this.close=Ce,this.send=be,T==null||T("close websocket")}}};var ut=["VIEW_PORT_MENUS_SELECT_RPC","VIEW_PORT_MENU_TABLE_RPC","VIEW_PORT_MENU_ROW_RPC","VIEW_PORT_MENU_CELL_RPC"],ye=o=>ut.includes(o.type),ee=({requestId:o,...e})=>[o,e];var Ve=o=>o.type==="connection-status";var Re=o=>"viewport"in o;var Me="CHANGE_VP_SUCCESS",Te="CHANGE_VP_RANGE_SUCCESS",we="CLOSE_TREE_NODE",Ee="CLOSE_TREE_SUCCESS";var Ie="CREATE_VP",ve="CREATE_VP_SUCCESS",De="DISABLE_VP",xe="DISABLE_VP_SUCCESS";var _e="ENABLE_VP",Le="ENABLE_VP_SUCCESS";var te="GET_VP_VISUAL_LINKS",Oe="GET_VIEW_PORT_MENUS";var ke="HB",Pe="HB_RESP",Ae="LOGIN",Ue="LOGIN_SUCCESS",Ne="OPEN_TREE_NODE",Fe="OPEN_TREE_SUCCESS";var We="REMOVE_VP";var re="RPC_RESP";var qe="SET_SELECTION_SUCCESS",se="TABLE_META_RESP",ne="TABLE_LIST_RESP",Be="TABLE_ROW";var $e=o=>{switch(o){case"TypeAheadRpcHandler":return"TYPEAHEAD";default:return"SIMUL"}};var Ke=[],R=V("array-backed-moving-window"),h,K=class{constructor({from:e,to:t},{from:r,to:s},n){U(this,h,void 0);this.setRowCount=e=>{var t;if((t=R.info)==null||t.call(R,`setRowCount ${e}`),e<this.internalData.length&&(this.internalData.length=e),e<this.rowCount){this.rowsWithinRange=0;let r=Math.min(e,this.clientRange.to);for(let s=this.clientRange.from;s<r;s++){let n=s-c(this,h).from;this.internalData[n]!==void 0&&(this.rowsWithinRange+=1)}}this.rowCount=e};this.bufferBreakout=(e,t)=>{let r=this.bufferSize*.25;return c(this,h).to-t<r?!0:c(this,h).from>0&&e-c(this,h).from<r};this.bufferSize=n,this.clientRange=new w(e,t),ce(this,h,new w(r,s)),this.internalData=new Array(n),this.rowsWithinRange=0,this.rowCount=0}get range(){return c(this,h)}get hasAllRowsWithinRange(){return this.rowsWithinRange===this.clientRange.to-this.clientRange.from||this.rowCount>0&&this.clientRange.from+this.rowsWithinRange===this.rowCount}outOfRange(e,t){let{from:r,to:s}=this.range;if(t<r||e>=s)return!0}setAtIndex(e){let{rowIndex:t}=e,r=this.isWithinClientRange(t);if(r||this.isWithinRange(t)){let s=t-c(this,h).from;!this.internalData[s]&&r&&(this.rowsWithinRange+=1),this.internalData[s]=e}return r}getAtIndex(e){return c(this,h).isWithin(e)&&this.internalData[e-c(this,h).from]!=null?this.internalData[e-c(this,h).from]:void 0}isWithinRange(e){return c(this,h).isWithin(e)}isWithinClientRange(e){return this.clientRange.isWithin(e)}setClientRange(e,t){var a;(a=R.debug)==null||a.call(R,`setClientRange ${e} - ${t}`);let r=this.clientRange.from,s=Math.min(this.clientRange.to,this.rowCount);if(e===r&&t===s)return[!1,Ke];let n=this.clientRange.copy();this.clientRange.from=e,this.clientRange.to=t,this.rowsWithinRange=0;for(let u=e;u<t;u++){let g=u-c(this,h).from;this.internalData[g]&&(this.rowsWithinRange+=1)}let i=Ke,l=c(this,h).from;if(this.hasAllRowsWithinRange)if(t>n.to){let u=Math.max(e,n.to);i=this.internalData.slice(u-l,t-l)}else{let u=Math.min(n.from,t);i=this.internalData.slice(e-l,u-l)}return[this.bufferBreakout(e,t),i]}setRange(e,t){var i;(i=R.debug)==null||i.call(R,`setRange ${e} - ${t}`);let[r,s]=c(this,h).overlap(e,t),n=new Array(t-e+this.bufferSize);this.rowsWithinRange=0;for(let l=r;l<s;l++){let f=this.getAtIndex(l);if(f){let a=l-e;n[a]=f,this.isWithinClientRange(l)&&(this.rowsWithinRange+=1)}}this.internalData=n,c(this,h).from=e,c(this,h).to=t}getData(){var l;let{from:e,to:t}=c(this,h),{from:r,to:s}=this.clientRange,n=Math.max(0,r-e),i=Math.min(t-e,t,s-e,(l=this.rowCount)!=null?l:t);return this.internalData.slice(n,i)}clear(){var e;(e=R.debug)==null||e.call(R,"clear"),this.internalData.length=0,this.rowsWithinRange=0,this.setRowCount(0)}getCurrentDataRange(){let e=this.internalData,t=e.length,[r]=this.internalData,s=this.internalData[t-1];if(r&&s)return[r.rowIndex,s.rowIndex];for(let n=0;n<t;n++)if(e[n]!==void 0){r=e[n];break}for(let n=t-1;n>=0;n--)if(e[n]!==void 0){s=e[n];break}return r&&s?[r.rowIndex,s.rowIndex]:[-1,-1]}};h=new WeakMap;var He=o=>o!==void 0&&o.groupBy!==void 0&&o.groupBy.length>0;var lt=[],{debug:C,debugEnabled:H,error:ct,info:p,infoEnabled:pt,warn:_}=V("viewport"),gt=({rowKey:o,updateType:e})=>e==="U"&&!o.startsWith("$root"),J=class{constructor({aggregations:e,bufferSize:t=50,columns:r,filter:s,groupBy:n=[],table:i,range:l,sort:f,title:a,viewport:u,visualLink:g}){this.dataWindow=void 0;this.hasUpdates=!1;this.pendingUpdates=[];this.pendingOperations=new Map;this.pendingRangeRequests=[];this.rowCountChanged=!1;this.serverTableMeta=null;this.batchMode=!0;this.useBatchMode=!0;this.rangeMonitor=new q("ViewPort");this.disabled=!1;this.isTree=!1;this.status="";this.suspended=!1;this.rangeRequestAlreadyPending=e=>{let{bufferSize:t}=this,r=t*.25,{from:s}=e;for(let{from:n,to:i}of this.pendingRangeRequests)if(s>=n&&s<i){if(e.to+r<=i)return!0;s=i}return!1};this.getNewRowCount=()=>{if(this.rowCountChanged&&this.dataWindow)return this.rowCountChanged=!1,this.dataWindow.rowCount};this.aggregations=e,this.bufferSize=t,this.clientRange=l,this.clientViewportId=u,this.columns=r,this.filter=s,this.groupBy=n,this.keys=new G(l),this.pendingLinkedParent=g,this.table=i,this.sort=f,this.title=a,pt&&(p==null||p(`constructor #${u} ${i.table} bufferSize=${t}`))}get hasUpdatesToProcess(){return this.suspended?!1:this.rowCountChanged||this.hasUpdates}get size(){var e,t;return(t=(e=this.dataWindow)==null?void 0:e.rowCount)!=null?t:0}subscribe(){let{filter:e}=this.filter;return this.status=this.status==="subscribed"?"resubscribing":"subscribing",{type:Ie,table:this.table,range:j(this.clientRange,this.bufferSize),aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:e}}}handleSubscribed({viewPortId:e,aggregations:t,columns:r,filterSpec:s,range:n,sort:i,groupBy:l}){return this.serverViewportId=e,this.status="subscribed",this.aggregations=t,this.columns=r,this.groupBy=l,this.isTree=l&&l.length>0,this.dataWindow=new K(this.clientRange,n,this.bufferSize),{aggregations:t,type:"subscribed",clientViewportId:this.clientViewportId,columns:r,filter:s,groupBy:l,range:n,sort:i,tableMeta:this.serverTableMeta}}awaitOperation(e,t){this.pendingOperations.set(e,t)}completeOperation(e,...t){var l;let{clientViewportId:r,pendingOperations:s}=this,n=s.get(e);if(!n){ct("no matching operation found to complete");return}let{type:i}=n;if(p==null||p(`completeOperation ${i}`),s.delete(e),i==="CHANGE_VP_RANGE"){let[f,a]=t;(l=this.dataWindow)==null||l.setRange(f,a);for(let u=this.pendingRangeRequests.length-1;u>=0;u--){let g=this.pendingRangeRequests[u];if(g.requestId===e){g.acked=!0;break}else _==null||_("range requests sent faster than they are being ACKed")}}else{if(i==="config")return He(n.data)?(this.isTree=!0,this.groupBy=n.data.groupBy):this.isTree&&(this.isTree=!1,this.groupBy=[]),C==null||C(`config change confirmed, isTree : ${this.isTree}`),{clientViewportId:r,type:i,config:n.data};if(i==="groupBy")return this.isTree=n.data.length>0,this.groupBy=n.data,C==null||C(`groupBy change confirmed, isTree : ${this.isTree}`),{clientViewportId:r,type:i,groupBy:n.data};if(i==="columns")return this.columns=n.data,{clientViewportId:r,type:i,columns:n.data};if(i==="filter")return this.filter=n.data,{clientViewportId:r,type:i,filter:n.data};if(i==="aggregate")return this.aggregations=n.data,{clientViewportId:r,type:"aggregate",aggregations:this.aggregations};if(i==="sort")return this.sort=n.data,{clientViewportId:r,type:i,sort:this.sort};if(i!=="selection"){if(i==="disable")return this.disabled=!0,{type:"disabled",clientViewportId:r};if(i==="enable")return this.disabled=!1,{type:"enabled",clientViewportId:r};if(i==="CREATE_VISUAL_LINK"){let[f,a,u]=t;return this.linkedParent={colName:f,parentViewportId:a,parentColName:u},this.pendingLinkedParent=void 0,{type:"vuu-link-created",clientViewportId:r,colName:f,parentViewportId:a,parentColName:u}}else if(i==="REMOVE_VISUAL_LINK")return this.linkedParent=void 0,{type:"vuu-link-removed",clientViewportId:r}}}}rangeRequest(e,t){H&&this.rangeMonitor.set(t);let r="CHANGE_VP_RANGE";if(this.dataWindow){let[s,n]=this.dataWindow.setClientRange(t.from,t.to),i,l=this.dataWindow.rowCount||void 0,f=s&&!this.rangeRequestAlreadyPending(t)?{type:r,viewPortId:this.serverViewportId,...j(t,this.bufferSize,l)}:null;if(f){H&&(C==null||C(`create CHANGE_VP_RANGE: [${f.from} - ${f.to}]`)),this.awaitOperation(e,{type:r});let u=this.pendingRangeRequests.at(-1);if(u)if(u.acked)console.warn("Range Request before previous request is filled");else{let{from:g,to:m}=u;this.dataWindow.outOfRange(g,m)?i={clientViewportId:this.clientViewportId,type:"debounce-begin"}:_==null||_("Range Request before previous request is acked")}this.pendingRangeRequests.push({...f,requestId:e}),this.useBatchMode&&(this.batchMode=!0)}else n.length>0&&(this.batchMode=!1);this.keys.reset(this.dataWindow.clientRange);let a=this.isTree?ie:oe;return n.length?[f,n.map(u=>a(u,this.keys))]:i?[f,void 0,i]:[f]}else return[null]}setLinks(e){return this.links=e,[{type:"vuu-links",links:e,clientViewportId:this.clientViewportId},this.pendingLinkedParent]}setMenu(e){return{type:"vuu-menu",menu:e,clientViewportId:this.clientViewportId}}setTableMeta(e,t){this.serverTableMeta={columns:e,dataTypes:t}}openTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:Ne,vpId:this.serverViewportId,treeKey:t.key}}closeTreeNode(e,t){return this.useBatchMode&&(this.batchMode=!0),{type:we,vpId:this.serverViewportId,treeKey:t.key}}createLink(e,t,r,s){let n={type:"CREATE_VISUAL_LINK",parentVpId:r,childVpId:this.serverViewportId,parentColumnName:s,childColumnName:t};return this.awaitOperation(e,n),this.useBatchMode&&(this.batchMode=!0),n}removeLink(e){let t={type:"REMOVE_VISUAL_LINK",childVpId:this.serverViewportId};return this.awaitOperation(e,t),t}suspend(){this.suspended=!0,p==null||p("suspend")}resume(){return this.suspended=!1,H&&(C==null||C(`resume: ${this.currentData()}`)),this.currentData()}currentData(){let e=[];if(this.dataWindow){let t=this.dataWindow.getData(),{keys:r}=this,s=this.isTree?ie:oe;for(let n of t)n&&e.push(s(n,r))}return e}enable(e){return this.awaitOperation(e,{type:"enable"}),p==null||p(`enable: ${this.serverViewportId}`),{type:_e,viewPortId:this.serverViewportId}}disable(e){return this.awaitOperation(e,{type:"disable"}),p==null||p(`disable: ${this.serverViewportId}`),{type:De,viewPortId:this.serverViewportId}}columnRequest(e,t){return this.awaitOperation(e,{type:"columns",data:t}),C==null||C(`columnRequest: ${t}`),this.createRequest({columns:t})}filterRequest(e,t){this.awaitOperation(e,{type:"filter",data:t});let{filter:r}=t;return p==null||p(`filterRequest: ${r}`),this.createRequest({filterSpec:{filter:r}})}setConfig(e,t){this.awaitOperation(e,{type:"config",data:t});let{filter:r,...s}=t;return H?C==null||C(`setConfig ${JSON.stringify(t)}`):p==null||p("setConfig"),this.createRequest({...s,filterSpec:typeof(r==null?void 0:r.filter)=="string"?{filter:r.filter}:{filter:""}},!0)}aggregateRequest(e,t){return this.awaitOperation(e,{type:"aggregate",data:t}),p==null||p(`aggregateRequest: ${t}`),this.createRequest({aggregations:t})}sortRequest(e,t){return this.awaitOperation(e,{type:"sort",data:t}),p==null||p(`sortRequest: ${JSON.stringify(t.sortDefs)}`),this.createRequest({sort:t})}groupByRequest(e,t=lt){var r;return this.awaitOperation(e,{type:"groupBy",data:t}),this.useBatchMode&&(this.batchMode=!0),this.isTree||(r=this.dataWindow)==null||r.clear(),this.createRequest({groupBy:t})}selectRequest(e,t){return this.awaitOperation(e,{type:"selection",data:t}),p==null||p(`selectRequest: ${t}`),{type:"SET_SELECTION",vpId:this.serverViewportId,selection:fe(t)}}removePendingRangeRequest(e,t){for(let r=this.pendingRangeRequests.length-1;r>=0;r--){let{from:s,to:n}=this.pendingRangeRequests[r],i=!0;if(e>=s&&e<n||t>s&&t<n){i||console.warn("removePendingRangeRequest TABLE_ROWS are not for latest request"),this.pendingRangeRequests.splice(r,1);break}else i=!1}}updateRows(e){var s,n,i;let[{rowIndex:t}]=e,{rowIndex:r}=e.at(-1);this.removePendingRangeRequest(t,r);for(let l of e)this.isTree&&gt(l)||((l.updateType==="SIZE"||((s=this.dataWindow)==null?void 0:s.rowCount)!==l.vpSize)&&((n=this.dataWindow)==null||n.setRowCount(l.vpSize),this.rowCountChanged=!0),l.updateType==="U"&&(i=this.dataWindow)!=null&&i.setAtIndex(l)&&(this.hasUpdates=!0,this.batchMode||this.pendingUpdates.push(l)))}getClientRows(){let e,t="size-only";if(this.hasUpdates&&this.dataWindow){let{keys:r}=this,s=this.isTree?ie:oe;if(this.pendingUpdates.length>0){e=[],t="update";for(let n of this.pendingUpdates)e.push(s(n,r));this.pendingUpdates.length=0}else{let n=this.dataWindow.getData();if(this.dataWindow.hasAllRowsWithinRange){e=[],t="batch";for(let i of n)e.push(s(i,r));this.batchMode=!1}}this.hasUpdates=!1}return[e,t]}createRequest(e,t=!1){return t?{type:"CHANGE_VP",viewPortId:this.serverViewportId,...e}:{type:"CHANGE_VP",viewPortId:this.serverViewportId,aggregations:this.aggregations,columns:this.columns,sort:this.sort,groupBy:this.groupBy,filterSpec:{filter:this.filter.filter},...e}}},oe=({rowIndex:o,rowKey:e,sel:t,data:r},s)=>[o,s.keyFor(o),!0,null,null,0,e,t].concat(r),ie=({rowIndex:o,rowKey:e,sel:t,data:r},s)=>{let[n,i,,l,,f,...a]=r;return[o,s.keyFor(o),l,i,n,f,e,t].concat(a)};var Je=1;var{debug:E,debugEnabled:P,error:L,info:I,infoEnabled:dt,warn:O}=V("server-proxy"),S=()=>`${Je++}`,ft={},ht=o=>o.disabled!==!0&&o.suspended!==!0,mt=(o,e,t)=>o.map(r=>r.parentVpId===e?{...r,label:t}:r);function Ct(o,e){return o.map(t=>{let{parentVpId:r}=t,s=e.get(r);if(s)return{...t,parentClientVpId:s.clientViewportId,label:s.title};throw Error("addLabelsToLinks viewport not found")})}var bt=(o,e)=>o.viewPortId===e.viewPortId?o.rowIndex===e.rowIndex?o.ts>e.ts?1:-1:o.rowIndex>e.rowIndex?1:-1:o.viewPortId>e.viewPortId?1:-1,z=class{constructor(e,t){this.authToken="";this.pendingTableMetaRequests=new Map;this.queuedRequests=[];this.cachedTableMeta=new Map;this.connection=e,this.postMessageToClient=t,this.viewports=new Map,this.mapClientToServerViewport=new Map}async reconnect(){await this.login(this.authToken);let[e,t]=pe(Array.from(this.viewports.values()),ht);this.viewports.clear(),this.mapClientToServerViewport.clear();let r=s=>{s.forEach(n=>{let{clientViewportId:i}=n;this.viewports.set(i,n),this.sendMessageToServer(n.subscribe(),i)})};r(e),setTimeout(()=>{r(t)},2e3)}async login(e){if(e)return this.authToken=e,new Promise((t,r)=>{this.sendMessageToServer({type:Ae,token:this.authToken,user:"user"},""),this.pendingLogin={resolve:t,reject:r}});this.authToken===""&&L("login, cannot login until auth token has been obtained")}subscribe(e){if(this.mapClientToServerViewport.has(e.viewport))L(`spurious subscribe call ${e.viewport}`);else{if(!this.hasMetaDataFor(e.table)){I==null||I(`subscribe to ${e.table.table}, no metadata yet, request metadata`);let r=S();this.sendMessageToServer({type:"GET_TABLE_META",table:e.table},r),this.pendingTableMetaRequests.set(r,e.viewport)}let t=new J(e);this.viewports.set(e.viewport,t),this.sendIfReady(t.subscribe(),e.viewport,this.sessionId!=="")}}unsubscribe(e){let t=this.mapClientToServerViewport.get(e);t?(I==null||I(`Unsubscribe Message (Client to Server):\n ${t}`),this.sendMessageToServer({type:We,viewPortId:t})):L(`failed to unsubscribe client viewport ${e}, viewport not found`)}getViewportForClient(e,t=!0){let r=this.mapClientToServerViewport.get(e);if(r){let s=this.viewports.get(r);if(s)return s;if(t)throw Error(`Viewport not found for client viewport ${e}`);return null}else{if(this.viewports.has(e))return this.viewports.get(e);if(t)throw Error(`Viewport server id not found for client viewport ${e}`);return null}}setViewRange(e,t){let r=S(),[s,n,i]=e.rangeRequest(r,t.range);s&&this.sendIfReady(s,r,e.status==="subscribed"),n?this.postMessageToClient({mode:"batch",type:"viewport-update",clientViewportId:e.clientViewportId,rows:n}):i&&this.postMessageToClient(i)}setConfig(e,t){let r=S(),s=e.setConfig(r,t.config);this.sendIfReady(s,r,e.status==="subscribed")}aggregate(e,t){let r=S(),s=e.aggregateRequest(r,t.aggregations);this.sendIfReady(s,r,e.status==="subscribed")}sort(e,t){let r=S(),s=e.sortRequest(r,t.sort);this.sendIfReady(s,r,e.status==="subscribed")}groupBy(e,t){let r=S(),s=e.groupByRequest(r,t.groupBy);this.sendIfReady(s,r,e.status==="subscribed")}filter(e,t){let r=S(),{filter:s}=t,n=e.filterRequest(r,s);this.sendIfReady(n,r,e.status==="subscribed")}setColumns(e,t){let r=S(),{columns:s}=t,n=e.columnRequest(r,s);this.sendIfReady(n,r,e.status==="subscribed")}setTitle(e,t){e&&(e.title=t.title,this.updateTitleOnVisualLinks(e))}select(e,t){let r=S(),{selected:s}=t,n=e.selectRequest(r,s);this.sendIfReady(n,r,e.status==="subscribed")}disableViewport(e){let t=S(),r=e.disable(t);this.sendIfReady(r,t,e.status==="subscribed")}enableViewport(e){let t=S(),r=e.enable(t);this.sendIfReady(r,t,e.status==="subscribed")}resumeViewport(e){let t=e.resume();this.postMessageToClient({clientViewportId:e.clientViewportId,rows:t,type:"viewport-update"})}openTreeNode(e,t){if(e.serverViewportId){let r=S();this.sendIfReady(e.openTreeNode(r,t),r,e.status==="subscribed")}}closeTreeNode(e,t){if(e.serverViewportId){let r=S();this.sendIfReady(e.closeTreeNode(r,t),r,e.status==="subscribed")}}createLink(e,t){let{parentClientVpId:r,parentColumnName:s,childColumnName:n}=t,i=S(),l=this.mapClientToServerViewport.get(r);if(l){let f=e.createLink(i,n,l,s);this.sendMessageToServer(f,i)}else L("ServerProxy unable to create link, viewport not found")}removeLink(e){let t=S(),r=e.removeLink(t);this.sendMessageToServer(r,t)}updateTitleOnVisualLinks(e){var s;let{serverViewportId:t,title:r}=e;for(let n of this.viewports.values())if(n!==e&&n.links&&t&&r&&(s=n.links)!=null&&s.some(i=>i.parentVpId===t)){let[i]=n.setLinks(mt(n.links,t,r));this.postMessageToClient(i)}}removeViewportFromVisualLinks(e){var t;for(let r of this.viewports.values())if((t=r.links)!=null&&t.some(({parentVpId:s})=>s===e)){let[s]=r.setLinks(r.links.filter(({parentVpId:n})=>n!==e));this.postMessageToClient(s)}}menuRpcCall(e){let t=this.getViewportForClient(e.vpId,!1);if(t!=null&&t.serverViewportId){let[r,s]=ee(e);this.sendMessageToServer({...s,vpId:t.serverViewportId},r)}}rpcCall(e){let[t,r]=ee(e),s=$e(r.service);this.sendMessageToServer(r,t,{module:s})}handleMessageFromClient(e){if(E==null||E(`handleMessageFromClient: ${e.type}`),Re(e))if(e.type==="disable"){let t=this.getViewportForClient(e.viewport,!1);return t!==null?this.disableViewport(t):void 0}else{let t=this.getViewportForClient(e.viewport);switch(e.type){case"setViewRange":return this.setViewRange(t,e);case"config":return this.setConfig(t,e);case"aggregate":return this.aggregate(t,e);case"sort":return this.sort(t,e);case"groupBy":return this.groupBy(t,e);case"filter":return this.filter(t,e);case"select":return this.select(t,e);case"suspend":return t.suspend();case"resume":return this.resumeViewport(t);case"enable":return this.enableViewport(t);case"openTreeNode":return this.openTreeNode(t,e);case"closeTreeNode":return this.closeTreeNode(t,e);case"createLink":return this.createLink(t,e);case"removeLink":return this.removeLink(t);case"setColumns":return this.setColumns(t,e);case"setTitle":return this.setTitle(t,e);default:}}else{if(ye(e))return this.menuRpcCall(e);{let{type:t,requestId:r}=e;switch(t){case"GET_TABLE_LIST":return this.sendMessageToServer({type:t},r);case"GET_TABLE_META":return this.sendMessageToServer({type:t,table:e.table},r);case"RPC_CALL":return this.rpcCall(e);default:}}}L(`Vuu ServerProxy Unexpected message from client ${JSON.stringify(e)}`)}sendIfReady(e,t,r=!0){return r?this.sendMessageToServer(e,t):this.queuedRequests.push(e),r}sendMessageToServer(e,t=`${Je++}`,r=ft){let{module:s="CORE"}=r;this.authToken&&this.connection.send({requestId:t,sessionId:this.sessionId,token:this.authToken,user:"user",module:s,body:e})}handleMessageFromServer(e){var i;let{body:t,requestId:r,sessionId:s}=e,{viewports:n}=this;switch(t.type){case ke:this.sendMessageToServer({type:Pe,ts:+new Date},"NA");break;case Ue:if(s)this.sessionId=s,(i=this.pendingLogin)==null||i.resolve(s),this.pendingLogin=void 0;else throw Error("LOGIN_SUCCESS did not provide sessionId");break;case ve:{let a=n.get(r);if(a){let{status:u}=a,{viewPortId:g}=t;r!==g&&(n.delete(r),n.set(g,a)),this.mapClientToServerViewport.set(r,g);let m=a.handleSubscribed(t);m&&(this.postMessageToClient(m),P&&E(`post DataSourceSubscribedMessage to client: ${JSON.stringify(m)}`)),a.disabled&&this.disableViewport(a),u==="subscribing"&&(this.sendMessageToServer({type:te,vpId:g}),this.sendMessageToServer({type:Oe,vpId:g}),Array.from(n.entries()).filter(([b,{disabled:M}])=>b!==g&&!M).forEach(([b])=>{this.sendMessageToServer({type:te,vpId:b})}))}}break;case"REMOVE_VP_SUCCESS":{let a=this.viewports.get(t.viewPortId);a&&(this.mapClientToServerViewport.delete(a.clientViewportId),n.delete(t.viewPortId),this.removeViewportFromVisualLinks(t.viewPortId))}break;case qe:{let a=this.viewports.get(t.vpId);a&&a.completeOperation(r)}break;case Me:case xe:if(n.has(t.viewPortId)){let a=this.viewports.get(t.viewPortId);if(a){let u=a.completeOperation(r);u!==void 0&&(this.postMessageToClient(u),P&&E(`postMessageToClient ${JSON.stringify(u)}`))}}break;case Le:{let a=this.viewports.get(t.viewPortId);if(a){let u=a.completeOperation(r);if(u){this.postMessageToClient(u);let g=a.currentData();P&&E(`Enable Response (ServerProxy to Client):\n ${JSON.stringify(u)}`),this.postMessageToClient({clientViewportId:a.clientViewportId,mode:"batch",rows:g,size:a.size,type:"viewport-update"}),P&&E(`Enable Response (ServerProxy to Client): ${JSON.stringify(u)}`)}}}break;case Be:{t.rows.sort(bt);let a="",u,g=0;for(let m=0,b=t.rows.length,M=m===b-1;m<b;m++,M=m===b-1){let k=t.rows[m];if(k.viewPortId!==a||M){let D=b===1?k.viewPortId:a;if(D!=="")if(u=n.get(D),u)if(g===0&&M)u.updateRows(t.rows);else{let A=M?b:m;u.updateRows(t.rows.slice(g,A)),g=m}else O==null||O(`TABLE_ROW message received for non registered viewport ${D}`);a=k.viewPortId}}this.processUpdates()}break;case Te:{let a=this.viewports.get(t.viewPortId);if(a){let{from:u,to:g}=t;a.completeOperation(r,u,g)}}break;case Fe:case Ee:break;case"CREATE_VISUAL_LINK_SUCCESS":{let a=this.viewports.get(t.childVpId),u=this.viewports.get(t.parentVpId);if(a&&u){let{childColumnName:g,parentColumnName:m}=t,b=a.completeOperation(r,g,u.clientViewportId,m);b&&this.postMessageToClient(b)}}break;case"REMOVE_VISUAL_LINK_SUCCESS":{let a=this.viewports.get(t.childVpId);if(a){let u=a.completeOperation(r);u&&this.postMessageToClient(u)}}break;case ne:this.postMessageToClient({type:ne,tables:t.tables,requestId:r});break;case se:{this.cacheTableMeta(t.table,t.columns,t.dataTypes);let a=this.pendingTableMetaRequests.get(r);if(a){this.pendingTableMetaRequests.delete(r);let u=this.viewports.get(a);u?u.setTableMeta(t.columns,t.dataTypes):O==null||O("Message has come back AFTER CREATE_VP_SUCCESS, what do we do now")}else this.postMessageToClient({type:se,table:t.table,columns:t.columns,dataTypes:t.dataTypes,requestId:r})}break;case"VP_VISUAL_LINKS_RESP":{let a=this.getActiveLinks(t.links),u=this.viewports.get(t.vpId);if(a.length&&u){let g=Ct(a,this.viewports),[m,b]=u.setLinks(g);if(this.postMessageToClient(m),b){let{link:M,parentClientVpId:k}=b,D=S(),A=this.mapClientToServerViewport.get(k);if(A){let ze=u.createLink(D,M.fromColumn,A,M.toColumn);this.sendMessageToServer(ze,D)}}}}break;case"VIEW_PORT_MENUS_RESP":if(t.menu.name){let a=this.viewports.get(t.vpId);if(a){let u=a.setMenu(t.menu);this.postMessageToClient(u)}}break;case"VIEW_PORT_MENU_RESP":{let{action:a}=t;this.postMessageToClient({type:"VIEW_PORT_MENU_RESP",action:a,tableAlreadyOpen:this.isTableOpen(a.table),requestId:r})}break;case re:{let{method:a,result:u}=t;this.postMessageToClient({type:re,method:a,result:u,requestId:r})}break;case"ERROR":L(t.msg);break;default:dt&&I(`handleMessageFromServer ${t.type}.`)}}hasMetaDataFor(e){return this.cachedTableMeta.has(`${e.module}:${e.table}`)}cacheTableMeta(e,t,r){this.hasMetaDataFor(e)||this.cachedTableMeta.set(`${e.module}:${e.table}`,{columns:t,serverDataTypes:r})}isTableOpen(e){if(e){let t=e.table;for(let r of this.viewports.values())if(!r.suspended&&r.table.table===t)return!0}}getActiveLinks(e){return e.filter(t=>{let r=this.viewports.get(t.parentVpId);return r&&!r.suspended})}processUpdates(){this.viewports.forEach(e=>{var t;if(e.hasUpdatesToProcess){let[r,s]=e.getClientRows(),n=e.getNewRowCount();(n!==void 0||r&&r.length>0)&&(P&&E(`postMessageToClient #${e.clientViewportId} viewport-update ${s}, ${(t=r==null?void 0:r.length)!=null?t:"no"} rows, size ${n}`),this.postMessageToClient({clientViewportId:e.clientViewportId,mode:s,rows:r,size:n,type:"viewport-update"}))}})}};var v,{info:ae,infoEnabled:ue}=V("worker");async function St(o,e,t){let r=await Se(o,s=>{Ve(s)?(t(s),s.status==="reconnected"&&v.reconnect()):v.handleMessageFromServer(s)});v=new z(r,s=>yt(s)),r.requiresLogin&&await v.login(e)}function yt(o){postMessage(o)}var Vt=async({data:o})=>{switch(o.type){case"connect":await St(o.url,o.token,postMessage),postMessage({type:"connected"});break;case"subscribe":ue&&ae(`client subscribe: ${JSON.stringify(o)}`),v.subscribe(o);break;case"unsubscribe":ue&&ae(`client unsubscribe: ${JSON.stringify(o)}`),v.unsubscribe(o.viewport);break;default:ue&&ae(`client message: ${JSON.stringify(o)}`),v.handleMessageFromClient(o)}};self.addEventListener("message",Vt);postMessage({type:"ready"});\n\n';var ky=new Blob([Sy()+Mf],{type:"text/javascript"}),My=URL.createObjectURL(ky),nn,_l,zl=[],Ty,Ry,Dy=new Promise((n,e)=>{Ty=n,Ry=e}),bs=()=>Dy,ms=new Map,gs=new Map,Ay=async(n,e="",t)=>e===""&&_l===void 0?new Promise(i=>{zl.push({resolve:i})}):_l||(_l=new Promise(i=>{let r=new Worker(My),s=window.setTimeout(()=>{console.error("timed out waiting for worker to load")},1e3);r.onmessage=o=>{let{data:l}=o;if(l.type==="ready")window.clearTimeout(s),r.postMessage({type:"connect",url:n,token:e});else if(l.type==="connected"){r.onmessage=Tf,i(r);for(let a of zl)a.resolve(r);zl.length=0}else Wl(l)?t(o):console.warn("ConnectionManager: Unexpected message from the worker")}}));function Tf({data:n}){if(Wl(n))Rf.emit("connection-status",n);else if(wf(n)){let e=ms.get(n.clientViewportId);e?e.postMessageToClientDataSource(n):console.error(`[ConnectionManager] ${n.type} message received, viewport not found`)}else{let e=n.requestId;if(gs.has(e)){let{resolve:t}=gs.get(e);gs.delete(e);let{type:i,requestId:r,...s}=n;kf(n)?t(n.result):t(s)}else console.warn("%cConnectionManager Unexpected message from the worker","color:red;font-weight:bold;")}}var Ul=n=>{let e=xy();return nn.postMessage({requestId:e,...n}),new Promise((t,i)=>{gs.set(e,{resolve:t,reject:i})})},Py={subscribe:(n,e)=>{ms.set(n.viewport,{status:"subscribing",request:n,postMessageToClientDataSource:e}),nn.postMessage({type:"subscribe",...n})},unsubscribe:n=>{nn.postMessage({type:"unsubscribe",viewport:n})},send:n=>{nn.postMessage(n)},destroy:n=>{n&&ms.has(n)&&ms.delete(n)},rpcCall:async n=>Ul(n),getTableList:async()=>Ul({type:Sf}),getTableMeta:async n=>Ul({type:xf,table:n})},$l=class extends Cy{async connect(e,t){return nn=await Ay(e,t,Tf),Py}destroy(){nn.terminate()}},Rf=new $l;import{getFullRange as cT,metadataKeys as Ey,WindowRange as fT}from"@vuu-ui/vuu-utils";import{useCallback as pT,useEffect as mT,useMemo as gT,useRef as bT,useState as yT}from"react";var{SELECTED:wT}=Ey;import{useCallback as ST,useEffect as xT,useState as kT}from"react";import{useCallback as DT}from"react";import{getRowRecord as NT,metadataKeys as Iy}from"@vuu-ui/vuu-utils";import{useCallback as HT}from"react";var{KEY:WT}=Iy;var Vy=n=>n.type==="vuu-links";var Ly=n=>n.type==="vuu-menu",Df=n=>Ly(n)||Vy(n),Af=n=>n.type==="vuu-link-created"||n.type==="vuu-link-removed";import{useCallback as $T,useEffect as KT,useState as qT}from"react";import{EventEmitter as Ny,isSelected as By,KeySet as Fy,metadataKeys as Hy,uuid as Pf}from"@vuu-ui/vuu-utils";var{IDX:Wy,SELECTED:Ef}=Hy,_y=(n,e)=>[e,e,!0,!1,1,0,n[0],0,...n],zy=n=>{let e={columns:[],dataTypes:[]};return n.forEach(t=>{var i;e.columns.push(t.name),e.dataTypes.push((i=t.serverDataType)!=null?i:"string")}),e},Uy=(n,e)=>{let[t]=n,i=n.slice();return i[1]=e.keyFor(t),i},_t,zt,kt,Ut,$t,Kt,ys,ws,qt,rn,Of=class extends Ny{constructor({aggregations:t,columnDescriptors:i,columns:r,data:s,filter:o,groupBy:l,sort:a,title:u,viewport:h}){super();this.status="initialising";this.disabled=!1;this.suspended=!1;W(this,_t,[]);W(this,zt,[]);W(this,kt,void 0);W(this,Ut,{filter:""});W(this,$t,[]);W(this,Kt,{from:0,to:0});W(this,ys,0);W(this,ws,0);W(this,qt,{sortDefs:[]});W(this,rn,void 0);this.keys=new Fy(k(this,Kt));if(!s||!i)throw Error("ArrayDataSource constructor called without data");this.columnDescriptors=i,this.tableMeta=zy(i),P(this,kt,s.map(_y)),this.viewport=h||Pf(),t&&P(this,_t,t),r&&P(this,zt,r),o&&P(this,Ut,o),l&&P(this,$t,l),a&&P(this,qt,a),P(this,rn,u)}async subscribe({viewport:t=(h=>(h=this.viewport)!=null?h:Pf())(),columns:i,aggregations:r,range:s,sort:o,groupBy:l,filter:a},u){var c;this.clientCallback=u,console.log(`subscribe range ${s==null?void 0:s.from} ${s==null?void 0:s.to}`),r&&P(this,_t,r),i&&P(this,zt,i),a&&P(this,Ut,a),l&&P(this,$t,l),s&&P(this,Kt,s),o&&P(this,qt,o),this.status==="initialising"&&(this.viewport=t,this.status="subscribed",(c=this.clientCallback)==null||c.call(this,{aggregations:k(this,_t),type:"subscribed",clientViewportId:this.viewport,columns:k(this,zt),filter:k(this,Ut),groupBy:k(this,$t),range:k(this,Kt),sort:k(this,qt),tableMeta:this.tableMeta}),this.clientCallback({clientViewportId:this.viewport,type:"viewport-update",size:k(this,kt).length}))}unsubscribe(){console.log("noop")}suspend(){return console.log("noop"),this}resume(){return console.log("noop"),this}disable(){return console.log("noop"),this}enable(){return console.log("noop"),this}select(t){var r;let i=[];for(let s of k(this,kt)){let{[Wy]:o,[Ef]:l}=s,a=l===1,u=By(t,o);if(u!==a){let h=s.slice();h[Ef]=u?1:0,k(this,kt)[o]=h,i.push(h)}}i.length>0&&((r=this.clientCallback)==null||r.call(this,{clientViewportId:this.viewport,mode:"update",type:"viewport-update",rows:i}))}openTreeNode(t){console.log("TODO: open tree node",{key:t})}closeTreeNode(t){console.log("TODO: close tree node",{key:t})}get config(){}get selectedRowsCount(){return k(this,ys)}get size(){return k(this,ws)}get range(){return k(this,Kt)}set range(t){P(this,Kt,t),this.keys.reset(t),requestAnimationFrame(()=>{var i;(i=this.clientCallback)==null||i.call(this,{clientViewportId:this.viewport,rows:k(this,kt).slice(t.from,t.to).map(r=>Uy(r,this.keys)),size:k(this,kt).length,type:"viewport-update"})})}get columns(){return k(this,zt)}set columns(t){P(this,zt,t),console.log(`ArrayDataSource setColumns ${t.join(",")}`)}get aggregations(){return k(this,_t)}set aggregations(t){P(this,_t,t)}get sort(){return k(this,qt)}set sort(t){P(this,qt,t)}get filter(){return k(this,Ut)}set filter(t){P(this,Ut,t),console.log(`RemoteDataSource ${JSON.stringify(t)}`)}get groupBy(){return k(this,$t)}set groupBy(t){P(this,$t,t)}get title(){return k(this,rn)}set title(t){P(this,rn,t)}createLink({parentVpId:t,link:{fromColumn:i,toColumn:r}}){console.log("create link",{parentVpId:t,fromColumn:i,toColumn:r})}removeLink(){console.log("remove link")}async menuRpcCall(t){console.log("rmenuRpcCall",{rpcRequest:t})}};_t=new WeakMap,zt=new WeakMap,kt=new WeakMap,Ut=new WeakMap,$t=new WeakMap,Kt=new WeakMap,ys=new WeakMap,ws=new WeakMap,qt=new WeakMap,rn=new WeakMap;import{EventEmitter as $y,isSelected as Ky,jsonToDataSourceRows as qy,KeySet as Gy,metadataKeys as jy,uuid as If}from"@vuu-ui/vuu-utils";var{DEPTH:sn,IDX:Vf,IS_EXPANDED:Jy,IS_LEAF:Qy,KEY:Hf,SELECTED:Lf}=jy,Nf=(n,e)=>{let[t]=n,i=n.slice();return i[1]=e.keyFor(t),i},Gt,jt,Me,Jt,Qt,lt,vs,Cs,Xt,on,Bf=class extends $y{constructor({aggregations:t,data:i,filter:r,groupBy:s,sort:o,title:l,viewport:a}){super();this.status="initialising";this.expandedRows=new Set;this.visibleRows=[];W(this,Gt,[]);W(this,jt,[]);W(this,Me,void 0);W(this,Jt,{filter:""});W(this,Qt,[]);W(this,lt,{from:0,to:0});W(this,vs,0);W(this,Cs,0);W(this,Xt,{sortDefs:[]});W(this,on,void 0);this.keys=new Gy(k(this,lt));if(!i)throw Error("JsonDataSource constructor called without data");[this.columnDescriptors,pa(this,Me)._]=qy(i),this.visibleRows=k(this,Me).filter(u=>u[sn]===0).map((u,h)=>[h,h].concat(u.slice(2))),this.viewport=a||If(),t&&P(this,Gt,t),this.columnDescriptors&&P(this,jt,this.columnDescriptors.map(u=>u.name)),r&&P(this,Jt,r),s&&P(this,Qt,s),o&&P(this,Xt,o),P(this,on,l)}async subscribe({viewport:t=(h=>(h=this.viewport)!=null?h:If())(),columns:i,aggregations:r,range:s,sort:o,groupBy:l,filter:a},u){var c;this.clientCallback=u,console.log(`subscribe range ${s==null?void 0:s.from} ${s==null?void 0:s.to}`),r&&P(this,Gt,r),i&&P(this,jt,i),a&&P(this,Jt,a),l&&P(this,Qt,l),s&&P(this,lt,s),o&&P(this,Xt,o),this.status==="initialising"&&(this.viewport=t,this.status="subscribed",(c=this.clientCallback)==null||c.call(this,{aggregations:k(this,Gt),type:"subscribed",clientViewportId:this.viewport,columns:k(this,jt),filter:k(this,Jt),groupBy:k(this,Qt),range:k(this,lt),sort:k(this,Xt),tableMeta:{columns:[],dataTypes:[]}}),this.clientCallback({clientViewportId:this.viewport,type:"viewport-update",size:this.visibleRows.length}))}unsubscribe(){console.log("noop")}suspend(){return console.log("noop"),this}resume(){return console.log("noop"),this}disable(){return console.log("noop"),this}enable(){return console.log("noop"),this}select(t){var r;let i=[];for(let s of k(this,Me)){let{[Vf]:o,[Lf]:l}=s,a=l===1,u=Ky(t,o);if(u!==a){let h=s.slice();h[Lf]=u?1:0,k(this,Me)[o]=h,i.push(h)}}i.length>0&&((r=this.clientCallback)==null||r.call(this,{clientViewportId:this.viewport,mode:"update",type:"viewport-update",rows:i}))}openTreeNode(t){var s;this.expandedRows.add(t),this.visibleRows=Ff(k(this,Me),this.expandedRows);let{from:i,to:r}=k(this,lt);(s=this.clientCallback)==null||s.call(this,{clientViewportId:this.viewport,rows:this.visibleRows.slice(i,r).map(o=>Nf(o,this.keys)),size:this.visibleRows.length,type:"viewport-update"}),console.log(this.expandedRows)}closeTreeNode(t,i=!1){if(this.expandedRows.delete(t),i)for(let r of this.expandedRows.keys())r.startsWith(t)&&this.expandedRows.delete(r);this.visibleRows=Ff(k(this,Me),this.expandedRows),this.sendRowsToClient()}get config(){}get selectedRowsCount(){return k(this,vs)}get size(){return k(this,Cs)}get range(){return k(this,lt)}set range(t){P(this,lt,t),this.keys.reset(t),requestAnimationFrame(()=>{this.sendRowsToClient()})}sendRowsToClient(){var r;let{from:t,to:i}=k(this,lt);(r=this.clientCallback)==null||r.call(this,{clientViewportId:this.viewport,rows:this.visibleRows.slice(t,i).map(s=>Nf(s,this.keys)),size:this.visibleRows.length,type:"viewport-update"})}get columns(){return k(this,jt)}set columns(t){P(this,jt,t),console.log(`ArrayDataSource setColumns ${t.join(",")}`)}get aggregations(){return k(this,Gt)}set aggregations(t){P(this,Gt,t)}get sort(){return k(this,Xt)}set sort(t){P(this,Xt,t)}get filter(){return k(this,Jt)}set filter(t){P(this,Jt,t),console.log(`RemoteDataSource ${JSON.stringify(t)}`)}get groupBy(){return k(this,Qt)}set groupBy(t){P(this,Qt,t)}get title(){return k(this,on)}set title(t){P(this,on,t)}createLink({parentVpId:t,link:{fromColumn:i,toColumn:r}}){console.log("create link",{parentVpId:t,fromColumn:i,toColumn:r})}removeLink(){console.log("remove link")}async menuRpcCall(t){console.log("rmenuRpcCall",{rpcRequest:t})}getChildRows(t){let i=k(this,Me).find(s=>s[Hf]===t);if(i){let{[Vf]:s,[sn]:o}=i,l=s+1,a=[];do{let{[sn]:u}=k(this,Me)[l];if(u===o+1)a.push(k(this,Me)[l]);else if(u<=o)break;l+=1}while(l<k(this,Me).length);return a}else console.warn(`JsonDataSource getChildRows row not found for key ${t}`);let r=t.split("|").slice(1);return console.log({sections:r,parentRow:i}),[]}getRowsAtDepth(t,i=!0){return(i?this.visibleRows:k(this,Me)).filter(s=>s[sn]===t)}};Gt=new WeakMap,jt=new WeakMap,Me=new WeakMap,Jt=new WeakMap,Qt=new WeakMap,lt=new WeakMap,vs=new WeakMap,Cs=new WeakMap,Xt=new WeakMap,on=new WeakMap;function Ff(n,e){let t=[],i={value:0};for(let r=0;r<n.length;r++){let s=n[r],{[sn]:o,[Hf]:l,[Qy]:a}=s,u=e.has(l);if(t.push(Xy(s,i,u)),!a&&!u)do r+=1;while(r<n.length-1&&n[r+1][sn]>o)}return t}var Xy=(n,e,t)=>{let i=n.slice();return i[0]=e.value,i[1]=e.value,t&&(i[Jy]=!0),e.value+=1,i};import{debounce as Wf,EventEmitter as Yy,throttle as _f,uuid as Zy}from"@vuu-ui/vuu-utils";var Yt,Zt,_e,ei,at,ln,wi,Gn,an,ti,vi,un,zf=class extends Yy{constructor({bufferSize:t=100,aggregations:i,columns:r,filter:s,groupBy:o,sort:l,table:a,title:u,viewport:h,visualLink:c}){super();this.server=null;this.status="initialising";this.disabled=!1;this.suspended=!1;W(this,Yt,[]);W(this,Zt,[]);W(this,_e,void 0);W(this,ei,{filter:""});W(this,at,[]);W(this,ln,"throttle");W(this,wi,{from:0,to:0});W(this,Gn,0);W(this,an,0);W(this,ti,{sortDefs:[]});W(this,vi,void 0);W(this,un,void 0);this.handleMessageFromServer=t=>{var i,r;if(t.type==="subscribed")this.status="subscribed",(i=this.clientCallback)==null||i.call(this,t);else if(t.type==="disabled")this.status="disabled";else if(t.type==="enabled")this.status="enabled";else{if(vf(t))return;t.type==="debounce-begin"?this.optimize="debounce":(t.type==="viewport-update"&&t.size!==void 0&&t.size!==k(this,an)&&(P(this,an,t.size),this.emit("resize",t.size)),this.configChangePending&&this.setConfigPending(),bf(t)?this.throttleSizeCallback(t):((r=this.clientCallback)==null||r.call(this,t),this.optimize==="debounce"&&this.revertDebounce()))}};this.revertDebounce=Wf(()=>{this.optimize="throttle"},500);this.throttleSizeCallback=_f(t=>{var i;(i=this.clientCallback)==null||i.call(this,t)},2e3);this.rawRangeRequest=t=>{this.viewport&&this.server&&this.server.send({viewport:this.viewport,type:"setViewRange",range:t})};this.debounceRangeRequest=Wf(t=>{this.viewport&&this.server&&this.server.send({viewport:this.viewport,type:"setViewRange",range:t})},50);this.throttleRangeRequest=_f(t=>{this.viewport&&this.server&&this.server.send({viewport:this.viewport,type:"setViewRange",range:t})},100);if(!a)throw Error("RemoteDataSource constructor called without table");this.bufferSize=t,this.table=a,this.viewport=h,i&&P(this,Yt,i),r&&P(this,Zt,r),s&&P(this,ei,s),o&&P(this,at,o),l&&P(this,ti,l),P(this,vi,u),P(this,un,c),this.refreshConfig(),this.rangeRequest=this.throttleRangeRequest}async subscribe({viewport:t=(h=>(h=this.viewport)!=null?h:Zy())(),columns:i,aggregations:r,range:s,sort:o,groupBy:l,filter:a},u){var f;if(this.clientCallback=u,r&&P(this,Yt,r),i&&P(this,Zt,i),a&&P(this,ei,a),l&&P(this,at,l),s&&P(this,wi,s),o&&P(this,ti,o),this.status!=="initialising")return;this.status="subscribing",this.viewport=t,this.server=await bs();let{bufferSize:c}=this;(f=this.server)==null||f.subscribe({aggregations:k(this,Yt),bufferSize:c,columns:k(this,Zt),filter:k(this,ei),groupBy:k(this,at),viewport:t,table:this.table,range:k(this,wi),sort:k(this,ti),title:k(this,vi),visualLink:this.visualLink},this.handleMessageFromServer)}unsubscribe(){var t,i;this.viewport&&((t=this.server)==null||t.unsubscribe(this.viewport)),(i=this.server)==null||i.destroy(this.viewport),this.removeAllListeners()}suspend(){var t;return this.viewport&&(this.suspended=!0,(t=this.server)==null||t.send({type:"suspend",viewport:this.viewport})),this}resume(){var t;return this.viewport&&this.suspended&&((t=this.server)==null||t.send({type:"resume",viewport:this.viewport}),this.suspended=!1),this}disable(){var t;return this.viewport&&(this.status="disabling",this.disabled=!0,(t=this.server)==null||t.send({viewport:this.viewport,type:"disable"})),this}enable(){var t;return this.viewport&&this.disabled&&(this.status="enabling",(t=this.server)==null||t.send({viewport:this.viewport,type:"enable"}),this.disabled=!1),this}select(t){var i;P(this,Gn,t.length),this.viewport&&((i=this.server)==null||i.send({viewport:this.viewport,type:"select",selected:t}))}openTreeNode(t){var i;this.viewport&&((i=this.server)==null||i.send({viewport:this.viewport,type:"openTreeNode",key:t}))}closeTreeNode(t){var i;this.viewport&&((i=this.server)==null||i.send({viewport:this.viewport,type:"closeTreeNode",key:t}))}refreshConfig(t){let{aggregations:i,columns:r,filter:s,groupBy:o,sort:l,visualLink:a}=this,u=i.length>0,h=r.length>0,c=s.filter!=="",f=o.length>0,d=l.sortDefs.length>0,p=a!==void 0;if(u||h||c||f||d){let m={};u&&(m.aggregations=i),h&&(m.columns=r),c&&(m.filter=s),f&&(m.groupBy=o),d&&(m.sort=l),p&&(m.visualLink=a),P(this,_e,m)}else P(this,_e,void 0);this.emit("config",k(this,_e),t)}get config(){return k(this,_e)}set config(t){var i;if(yf(k(this,_e),t)&&t){let r=t!=null&&t.filter&&(t==null?void 0:t.filter.filterStruct)===void 0?{...t,filter:{filter:t.filter.filter,filterStruct:Kn(t.filter.filter)}}:t;P(this,_e,Cf(r)),k(this,_e)&&this.viewport&&this.server&&t&&((i=this.server)==null||i.send({viewport:this.viewport,type:"config",config:k(this,_e)})),this.emit("config",k(this,_e))}}get optimize(){return k(this,ln)}set optimize(t){if(t!==k(this,ln)){switch(P(this,ln,t),t){case"none":this.rangeRequest=this.rawRangeRequest;break;case"debounce":this.rangeRequest=this.debounceRangeRequest;break;case"throttle":this.rangeRequest=this.throttleRangeRequest;break}this.emit("optimize",t)}}get selectedRowsCount(){return k(this,Gn)}get size(){return k(this,an)}get range(){return k(this,wi)}set range(t){P(this,wi,t),this.rangeRequest(t)}get columns(){return k(this,Zt)}set columns(t){if(P(this,Zt,t),this.viewport){let i={viewport:this.viewport,type:"setColumns",columns:t};this.server&&this.server.send(i)}this.refreshConfig()}get aggregations(){return k(this,Yt)}set aggregations(t){var i;P(this,Yt,t),this.viewport&&((i=this.server)==null||i.send({viewport:this.viewport,type:"aggregate",aggregations:t})),this.refreshConfig()}get sort(){return k(this,ti)}set sort(t){if(P(this,ti,t),this.viewport){let i={viewport:this.viewport,type:"sort",sort:t};this.server&&this.server.send(i)}this.refreshConfig()}get filter(){return k(this,ei)}set filter(t){if(P(this,ei,t),this.viewport){let i={viewport:this.viewport,type:"filter",filter:t};this.server&&this.server.send(i)}this.refreshConfig()}get groupBy(){return k(this,at)}set groupBy(t){var r;let i=k(this,at).length>0;if(P(this,at,t!=null?t:[]),this.viewport){let s={viewport:this.viewport,type:"groupBy",groupBy:k(this,at)};this.server&&this.server.send(s)}!i&&t.length>0&&this.viewport&&((r=this.clientCallback)==null||r.call(this,{clientViewportId:this.viewport,type:"viewport-update",size:0,rows:[]})),this.refreshConfig(),this.setConfigPending({groupBy:t})}get title(){return k(this,vi)}set title(t){var i;P(this,vi,t),this.viewport&&t&&((i=this.server)==null||i.send({type:"setTitle",title:t,viewport:this.viewport}))}get visualLink(){return k(this,un)}set visualLink(t){var i,r;if(P(this,un,t),t){let{parentClientVpId:s,link:{fromColumn:o,toColumn:l}}=t;this.viewport&&((i=this.server)==null||i.send({viewport:this.viewport,type:"createLink",parentClientVpId:s,parentColumnName:l,childColumnName:o}))}else this.viewport&&((r=this.server)==null||r.send({type:"removeLink",viewport:this.viewport}));this.refreshConfig()}setConfigPending(t){let i=this.configChangePending;this.configChangePending=t,t!==void 0?this.emit("config",t,!1):this.emit("config",i,!0)}async menuRpcCall(t){var i;if(this.viewport)return(i=this.server)==null?void 0:i.rpcCall({vpId:this.viewport,...t})}};Yt=new WeakMap,Zt=new WeakMap,_e=new WeakMap,ei=new WeakMap,at=new WeakMap,ln=new WeakMap,wi=new WeakMap,Gn=new WeakMap,an=new WeakMap,ti=new WeakMap,vi=new WeakMap,un=new WeakMap;import{useCallback as qR,useRef as GR}from"react";import{createEl as NR}from"@vuu-ui/vuu-utils";import{Toolbar as BD}from"@heswell/salt-lab";import WD from"classnames";import{ToggleButton as MD,ToolbarField as TD}from"@heswell/salt-lab";import{Dropdown as iD}from"@heswell/salt-lab";import{useCallback as sD,useState as oD}from"react";import{jsx as aD}from"react/jsx-runtime";import{Dropdown as cD}from"@heswell/salt-lab";import{useCallback as pD,useState as mD}from"react";import{jsx as bD}from"react/jsx-runtime";import{jsx as PD}from"react/jsx-runtime";import{jsx as $D}from"react/jsx-runtime";import{extractFilterForColumn as tA,partition as iA}from"@vuu-ui/vuu-utils";var Kl=n=>n!==void 0&&n.op==="in";function ql(n){return n!==void 0&&(n.op==="and"||n.op==="or")}var tw=n=>typeof n=="string"?`"${n}"`:n,Gl=n=>ql(n)?n.filters.map(e=>Gl(e)).join(` ${n.op} `):Kl(n)?`${n.column} ${n.op} [${n.values.join(",")}]`:`${n.column} ${n.op} ${tw(n.value)}`;var Uf=(n,e)=>{if(ql(e)){let[t,i]=e.filters;if(t.column===n.name)return[i,Gl(i)];if(i.column===n.name)return[t,Gl(t)]}return[void 0,""]};import{addGroupColumn as $f,addSortColumn as Kf,AggregationType as iw,setAggregations as jn,setSortColumn as qf}from"@vuu-ui/vuu-utils";var nw=(n,e)=>{if(n.filterStruct&&e){let[t,i]=Uf(e,n.filterStruct);return{filter:i,filterStruct:t}}else return n},{Average:rw,Count:sw,High:ow,Low:lw,Sum:aw}=iw,Gf=({dataSource:n,onPersistentColumnOperation:e})=>(i,r)=>{let s=r;if(s.column&&n){let{column:o}=s;switch(i){case"sort-asc":return n.sort=qf(n.sort,o,"A"),!0;case"sort-dsc":return n.sort=qf(n.sort,o,"D"),!0;case"sort-add-asc":return n.sort=Kf(n.sort,o,"A"),!0;case"sort-add-dsc":return n.sort=Kf(n.sort,o,"D"),!0;case"group":return n.groupBy=$f(n.groupBy,o),!0;case"group-add":return n.groupBy=$f(n.groupBy,o),!0;case"column-hide":return e({type:"hideColumns",columns:[o]}),!0;case"column-remove":return n.columns=n.columns.filter(l=>l!==o.name),!0;case"filter-remove-column":return n.filter=nw(n.filter,o),!0;case"remove-filters":return n.filter={filter:""},!0;case"agg-avg":return n.aggregations=jn(n.aggregations,o,rw),!0;case"agg-high":return n.aggregations=jn(n.aggregations,o,ow),!0;case"agg-low":return n.aggregations=jn(n.aggregations,o,lw),!0;case"agg-count":return n.aggregations=jn(n.aggregations,o,sw),!0;case"agg-sum":return n.aggregations=jn(n.aggregations,o,aw),!0;case"column-pin-floating":return e({type:"pinColumn",column:o,pin:"floating"}),!0;case"column-pin-left":return e({type:"pinColumn",column:o,pin:"left"}),!0;case"column-pin-right":return e({type:"pinColumn",column:o,pin:"right"}),!0;case"column-unpin":return e({type:"pinColumn",column:o,pin:void 0}),!0;default:}}return!1};import{getColumnPinStyle as cw,isGroupColumn as fw,metadataKeys as dw,notHidden as pw,visibleColumnAtIndex as mw}from"@vuu-ui/vuu-utils";import{useCallback as Xf,useMemo as gw}from"react";import jf from"classnames";import{useRef as uw}from"react";import{jsx as Jn,jsxs as Qf}from"react/jsx-runtime";var ii="vuuTable-groupHeaderCell",hw=n=>{let{column:e,className:t,onRemoveColumn:i}=n;return Qf("div",{className:jf(`${ii}-col`,t),role:"columnheader",children:[Jn("span",{className:`${ii}-label`,children:e.name}),Jn("span",{className:`${ii}-close`,"data-icon":"close-circle",onClick:()=>i==null?void 0:i(e)})]})},Jf=({column:n,className:e,onRemoveColumn:t,onResize:i,...r})=>{let s=uw(null),{isResizing:o,...l}=pr({column:n,onResize:i,rootRef:s}),a=jf(ii,e,{vuuPinLeft:n.pin==="left",[`${ii}-right`]:n.align==="right",[`${ii}-resizing`]:n.resizing,[`${ii}-pending`]:n.groupConfirmed===!1}),{columns:u}=n;return Jn("th",{className:a,ref:s,...r,children:Qf("div",{className:`${ii}-inner`,children:[u.map(h=>Jn(hw,{column:h,onRemoveColumn:t},h.key)),n.resizeable!==!1?Jn(fr,{...l}):null]})})};import{jsx as Mt,jsxs as jl}from"react/jsx-runtime";var Yf="vuuTable",{RENDER_IDX:bw}=dw,Zf=({columns:n,columnsWithinViewport:e,data:t,headings:i,onColumnResize:r,onHeaderCellDragStart:s,onContextMenu:o,onRemoveColumnFromGroupBy:l,onRowClick:a,onSort:u,onToggleGroup:h,virtualColSpan:c=0,rowCount:f,rowHeight:d})=>{let p=Xf(b=>{s==null||s(b)},[s]),m=gw(()=>n.filter(pw),[n]),g=Xf(b=>{var M;let y=b.target.closest(".vuuTable-headerCell"),x=parseInt((M=y==null?void 0:y.dataset.idx)!=null?M:"-1"),v=mw(n,x),w=b.shiftKey;v&&u(v,w)},[n,u]);return jl("table",{"aria-rowcount":f,className:`${Yf}-table`,children:[Mt("colgroup",{children:m.map((b,C)=>Mt("col",{width:`${b.width}px`},C))}),jl("thead",{children:[i.map((b,C)=>Mt("tr",{className:"vuuTable-heading",children:b.map(({label:y,span:x},v)=>Mt("th",{colSpan:x,className:"vuuTable-headingCell",children:y},v))},C)),Mt("tr",{children:m.map((b,C)=>{let y=cw(b);return fw(b)?Mt(Jf,{column:b,"data-idx":C,onRemoveColumn:l,onResize:r,style:y},C):Mt(mr,{column:b,"data-idx":C,onClick:g,onDragStart:p,onResize:r,style:y},C)})})]}),jl("tbody",{onContextMenu:o,children:[t==null?void 0:t.map((b,C)=>Mt(cr,{columns:e,height:d,index:C,onClick:a,virtualColSpan:c,onToggleGroup:h,row:b},b[bw])),Mt("tr",{className:`${Yf}-filler`})]})]})};import{applySort as Lv,buildColumnMap as Nv,isJsonGroup as Bv,metadataKeys as Fv,moveItem as Hv}from"@vuu-ui/vuu-utils";import{useCallback as ut,useEffect as Pd,useMemo as Wv,useRef as aa,useState as _v}from"react";import{getFullRange as Jl,metadataKeys as yw,WindowRange as ww}from"@vuu-ui/vuu-utils";import{useCallback as hn,useEffect as Ss,useMemo as vw,useRef as Qn,useState as Cw}from"react";var{SELECTED:Xn}=yw;function ed({dataSource:n,onConfigChange:e,onFeatureEnabled:t,onFeatureInvocation:i,onSizeChange:r,onSubscribed:s,range:o={from:0,to:0},renderBufferSize:l=0,viewportRowCount:a}){let[,u]=Cw(null),h=Qn(!0),c=Qn(!1),f=Qn({from:0,to:0}),d=Qn(null),p=Qn([]),m=vw(()=>new Ql(Jl(o)),[]),g=hn(w=>{for(let M of w)m.add(M);p.current=m.data,c.current=!0},[m]),b=hn(w=>{w.type==="subscribed"?s==null||s(w):w.type==="viewport-update"?(typeof w.size=="number"&&(r==null||r(w.size),m.setRowCount(w.size)),w.rows?g(w.rows):typeof w.size=="number"&&(p.current=m.data,c.current=!0)):Df(w)?t==null||t(w):Af(w)?i==null||i(w):console.log(`useDataSource unexpected message ${w.type}`)},[m,t,i,r,s,g]);Ss(()=>()=>{d.current&&(cancelAnimationFrame(d.current),d.current=null),h.current=!1},[]);let C=hn(()=>{h.current&&(c.current&&(u({}),c.current=!1),d.current=requestAnimationFrame(C))},[u]);Ss(()=>{d.current=requestAnimationFrame(C)},[C]);let y=hn(w=>{let{from:M}=n.range,L={from:M,to:M+w},E=Jl(L,l);n.range=f.current=E,n.emit("range",L),m.setRange(E)},[n,m,l]),x=hn(w=>{let M=Jl(w,l);n.range=f.current=M,m.setRange(M),n.emit("range",w)},[n,m,l]),v=hn(()=>m.getSelectedRows(),[m]);return Ss(()=>{n==null||n.subscribe({range:f.current},b)},[n,b,e]),Ss(()=>{y(a)},[y,a]),{data:p.current,getSelectedRows:v,range:f.current,setRange:x,dataSource:n}}var Ql=class{constructor({from:e,to:t}){this.rowCount=0;this.setRowCount=e=>{e<this.data.length&&(this.data.length=e),this.rowCount=e};this.range=new ww(e,t),this.data=new Array(t-e),this.rowCount=0}add(e){var i;let[t]=e;if(this.isWithinRange(t)){let r=t-this.range.from;this.data[r]=e;let s=e[Xn],o=(i=this.data[r-1])==null?void 0:i[Xn];o===0&&s?this.data[r-1][Xn]=2:o===2&&!s&&(this.data[r-1][Xn]=0)}}getAtIndex(e){return this.range.isWithin(e)&&this.data[e-this.range.from]!=null?this.data[e-this.range.from]:void 0}isWithinRange(e){return this.range.isWithin(e)}setRange({from:e,to:t}){if(e!==this.range.from||t!==this.range.to){let[i,r]=this.range.overlap(e,t),s=new Array(t-e);for(let o=i;o<r;o++){let l=this.getAtIndex(o);if(l){let a=o-e;s[a]=l}}this.data=s,this.range.from=e,this.range.to=t}}getSelectedRows(){return this.data.filter(e=>e[Xn]===1)}};import{useDragDrop as Sw}from"@heswell/salt-lab";import{useCallback as td,useLayoutEffect as xw,useRef as kw,useState as Mw}from"react";var id=({onDrop:n,tableContainerRef:e,tableLayout:t})=>{let[i,r]=Mw(t),s=kw(),o=td(()=>{console.log("handleDropSettle"),s.current=void 0,r("row")},[]),{draggable:l,draggedItemIndex:a,onMouseDown:u}=Sw({allowDragDrop:!0,draggableClassName:"table-column",orientation:"horizontal",containerRef:e,itemQuery:".vuuTable-table",onDrop:n,onDropSettle:o}),h=td(c=>{let{clientX:f,clientY:d}=c;console.log("useDraggableColumn handleHeaderCellDragStart means mouseDown fired on a column in RowBasedTable");let m=c.target.closest(".vuuTable-headerCell"),{dataset:{idx:g="-1"}}=m;s.current={clientX:f,clientY:d,idx:g},r("column")},[]);return xw(()=>{var c;if(i==="column"&&s.current&&!l){let{clientX:f,clientY:d,idx:p}=s.current,m=(c=e.current)==null?void 0:c.querySelector(`.vuuTable-table[data-idx="${p}"]`);if(m){let g={persist:()=>{},nativeEvent:{clientX:f,clientY:d,target:m}};u==null||u(g)}}},[l,u,e,i]),{draggable:l,draggedItemIndex:a,tableLayout:i,onHeaderCellDragStart:i==="row"?h:void 0}};import{withinRange as Ow}from"@vuu-ui/vuu-utils";import{useCallback as Tt,useEffect as Iw,useLayoutEffect as Vw,useMemo as Lw,useRef as sa}from"react";function Tw(n,...e){let t=new Set(n);for(let i of e)for(let r of i)t.add(r);return t}var Xl="ArrowUp",Yl="ArrowDown",Zl="ArrowLeft",ea="ArrowRight";var ta="Home",ia="End",na="PageUp",ra="PageDown";var Rw=new Set(["Enter","Delete"," "]),Dw=new Set(["Tab"]),Aw=new Set(["ArrowRight","ArrowLeft"]),nd=new Set([ta,ia,na,ra,Yl,Zl,ea,Xl]),Pw=new Set(["F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12"]),XA=Tw(Rw,nd,Aw,Pw,Dw);var Ew=["Home","End","PageUp","PageDown"],rd=n=>Ew.includes(n),sd=n=>nd.has(n);var od=n=>`thead th:nth-child(${n+1})`,Nw=(n,e)=>`tbody > tr[aria-rowindex='${n}'] > td:nth-child(${e+1})`,Bw=[-1,-1];function Fw(n,[e,t],i,r){return n===Xl?e>-1?[e-1,t]:[e,t]:n===Yl?e===-1?[0,t]:e===r-1?[e,t]:[e+1,t]:n===ea?t<i-1?[e,t+1]:[e,t]:n===Zl?t>0?[e,t-1]:[e,t]:[e,t]}var ld=({columnCount:n=0,containerRef:e,disableHighlightOnFocus:t,data:i,requestScroll:r,rowCount:s=0,viewportRange:o})=>{var E;let{from:l,to:a}=o,u=sa([-1,-1]),h=sa(),c=sa([-1,0]),f=Tt(([S,R])=>{var I;let O=S===-1?od(R):Nw(S,R);return(I=e.current)==null?void 0:I.querySelector(O)},[e]),d=S=>S==null?void 0:S.closest("th,td"),p=S=>{var R,O;if(S.tagName==="TH")return[-1,parseInt((R=S.dataset.idx)!=null?R:"-1",10)];{let I=S.closest("tr");if(I){let z=parseInt((O=I.ariaRowIndex)!=null?O:"-1",10),B=Array.from(I.childNodes).indexOf(S);return[z,B]}}return Bw},m=Tt(S=>{var R;if(e.current){let O=f(S);O?(O!==h.current&&((R=h.current)==null||R.setAttribute("tabindex",""),h.current=O,O.setAttribute("tabindex","0")),O.focus()):Ow(S[0],o)||(h.current=void 0,r==null||r({type:"scroll-page",direction:"up"}))}},[e,f,r,o]),g=Tt((S,R,O=!1)=>{let I=[S,R];c.current=I,m(I),O&&(u.current=I)},[m]),b=Tt(()=>{var S;(S=h.current)==null||S.setAttribute("tabindex",""),h.current=void 0},[]),C=Tt(async(S,R)=>{switch(S){case ra:r==null||r({type:"scroll-page",direction:"down"});break;case na:r==null||r({type:"scroll-page",direction:"up"});break;case ta:r==null||r({type:"scroll-end",direction:"home"});break;case ia:r==null||r({type:"scroll-end",direction:"end"});break}return R},[r]),y=Tt(()=>{var S;if(t!==!0&&(S=e.current)!=null&&S.contains(document.activeElement)){let R=d(document.activeElement);R&&(u.current=p(R))}},[t,e]),x=Tt(async S=>{let[R,O]=rd(S)?await C(S,c.current):Fw(S,c.current,n,s),[I,z]=c.current;(R!==I||O!==z)&&g(R,O,!0)},[n,C,s,g]),v=Tt(S=>{i.length>0&&sd(S.key)&&(S.preventDefault(),S.stopPropagation(),x(S.key))},[i,x]),w=Tt(S=>{let R=S.target,O=d(R);if(O){let[I,z]=p(O);g(I,z)}},[g]),M=Lw(()=>({onClick:w,onFocus:y,onKeyDown:v}),[w,y,v]);Vw(()=>{let{current:S}=c,R=S[0]>=l&&S[0]<=a;h.current&&!R?b():!h.current&&R&&m(S)},[m,l,a,b]);let L=((E=e.current)==null?void 0:E.firstChild)!=null;return Iw(()=>{var S;if(L&&h.current===void 0){let R=(S=e.current)==null?void 0:S.querySelector(od(0));R&&(R.setAttribute("tabindex","0"),h.current=R)}},[e,L]),M};import{useCallback as _w,useRef as zw,useState as Uw}from"react";import{useCallback as Hw,useEffect as ad,useRef as Ww}from"react";var Ci=new Map,hd=(n,e,t)=>{switch(t){case"height":return e.height;case"clientHeight":return n.clientHeight;case"clientWidth":return n.clientWidth;case"contentHeight":return e.contentHeight;case"contentWidth":return e.contentWidth;case"scrollHeight":return Math.ceil(n.scrollHeight);case"scrollWidth":return Math.ceil(n.scrollWidth);case"width":return e.width;default:return 0}},ud=new ResizeObserver(n=>{for(let e of n){let{target:t,borderBoxSize:i,contentBoxSize:r}=e,s=Ci.get(t);if(s){let[{blockSize:o,inlineSize:l}]=i,[{blockSize:a,inlineSize:u}]=r,{onResize:h,measurements:c}=s,f=!1;for(let[d,p]of Object.entries(c)){let m=hd(t,{height:o,width:l,contentHeight:a,contentWidth:u},d);m!==p&&(f=!0,c[d]=m)}f&&h&&h(c)}}});function cd(n,e,t,i=!1){let r=Ww(e),s=Hw(o=>{let{width:l,height:a}=o.getBoundingClientRect(),{clientWidth:u,clientHeight:h}=o;return r.current.reduce((c,f)=>(c[f]=hd(o,{width:l,height:a,contentHeight:h,contentWidth:u},f),c),{})},[]);ad(()=>{let o=n.current;async function l(){Ci.set(o,{measurements:{}}),await document.fonts.ready;let a=Ci.get(o);if(a){let u=s(o);a.measurements=u,ud.observe(o),i&&t(u)}else console.log("%cuseResizeObserver an target expected to be under observation wa snot found. This warrants investigation","font-weight:bold; color:red;")}if(o){if(Ci.has(o))throw Error("useResizeObserver attemping to observe same element twice");l()}return()=>{o&&Ci.has(o)&&(ud.unobserve(o),Ci.delete(o))}},[s,n]),ad(()=>{let o=n.current,l=Ci.get(o);if(l){if(r.current!==e){r.current=e;let a=s(o);l.measurements=a}l.onResize=t}},[e,s,n,t])}var $w=["clientHeight","clientWidth"],fd=n=>Number.isFinite(n),dd=({defaultHeight:n=0,defaultWidth:e=0,height:t,width:i})=>{let r=zw(null),[s,o]=Uw({outer:{height:t!=null?t:"100%",width:i!=null?i:"100%"}}),l=_w(({clientWidth:a,clientHeight:u})=>{o(h=>{let{inner:c,outer:f}=h;return fd(u)&&fd(a)&&(a!==(c==null?void 0:c.width)||u!==(c==null?void 0:c.height))?{outer:f,inner:{width:Math.floor(a)||e,height:Math.floor(u)||n}}:h})},[n,e]);return cd(r,$w,l,!0),{containerRef:r,outerSize:s.outer,innerSize:s.inner}};import{deselectItem as Kw,metadataKeys as qw,selectItem as Gw}from"@vuu-ui/vuu-utils";import{useCallback as jw,useRef as pd}from"react";var{IDX:Jw,SELECTED:Qw}=qw,Xw=[],md=({selectionModel:n,onSelectionChange:e})=>{let t=pd(-1),i=pd(Xw);return jw((s,o,l)=>{let{[Jw]:a,[Qw]:u}=s,{current:h}=t,{current:c}=i,d=(u?Kw:Gw)(n,c,a,o,l,h);i.current=d,t.current=a,e&&e(d)},[e,n])};import{moveItem as Yw}from"@heswell/salt-lab";import{applyFilterToColumns as Zw,applyGroupByToColumns as ev,applySortToColumns as tv,findColumn as iv,getCellRenderer as nv,getColumnName as rv,getTableHeadings as sv,getValueFormatter as ov,isFilteredColumn as lv,isGroupColumn as av,isPinned as uv,isTypeDescriptor as hv,logger as cv,metadataKeys as fv,sortPinnedColumns as gd,stripFilterFromColumns as dv}from"@vuu-ui/vuu-utils";import{useReducer as pv}from"react";var{info:oa}=cv("useTableModel"),mv=100,bd=fv.count,gv=({serverDataType:n})=>n===void 0,bv=n=>{var e,t;if(hv(n.type))return nv((t=(e=n.type)==null?void 0:e.renderer)==null?void 0:t.name)},yv=(n,e,t)=>{var r;let i=e.indexOf(n.name);return i!==-1&&t[i]?t[i]:(r=n.serverDataType)!=null?r:"string"},wv=["int","long","double"],yd=n=>n===void 0?void 0:wv.includes(n)?"right":"left",vv=(n,e)=>{switch(oa==null||oa(`GridModelReducer ${e.type}`),e.type){case"init":return vd(e);case"moveColumn":return Sv(n,e);case"resizeColumn":return Mv(n,e);case"setTypes":return Tv(n,e);case"hideColumns":return xv(n,e);case"showColumns":return kv(n,e);case"pinColumn":return Rv(n,e);case"updateColumnProp":return Yn(n,e);case"tableConfig":return Sd(n,e);default:return console.log(`unhandled action ${e.type}`),n}},wd=(n,e)=>{let[t,i]=pv(vv,{tableConfig:n,dataSourceConfig:e},vd);return{columns:t.columns,dispatchColumnAction:i,headings:t.headings}};function vd({dataSourceConfig:n,tableConfig:e}){let t=e.columns.map(Cd(e)),i=t.some(uv)?gd(t):t,r={columns:i,headings:sv(i)};if(n){let{columns:s,...o}=n;return Sd(r,{type:"tableConfig",...o})}else return r}var Cv=(n,e)=>e==="uppercase"?n.toUpperCase():e==="capitalize"?n[0].toUpperCase()+n.slice(1).toLowerCase():n,Cd=n=>(e,t)=>{let{columnDefaultWidth:i=mv,columnFormatHeader:r}=n,{align:s=yd(e.serverDataType),key:o,name:l,label:a=l,width:u=i,...h}=e,c={...h,align:s,CellRenderer:bv(e),label:Cv(a,r),key:o!=null?o:t+bd,name:l,originalIdx:t,valueFormatter:ov(e),width:u};return av(c)&&(c.columns=c.columns.map(f=>Cd(n)(f,f.key))),c};function Sv(n,{column:e,moveBy:t,moveTo:i}){let{columns:r}=n;if(typeof t=="number"){let s=r.indexOf(e),o=r.slice(),[l]=o.splice(s,1);return o.splice(s+t,0,l),{...n,columns:o}}else if(typeof i=="number"){let s=r.indexOf(e);return{...n,columns:Yw(r,s,i)}}return n}function xv(n,{columns:e}){return e.some(t=>t.hidden!==!0)?e.reduce((t,i)=>i.hidden!==!0?Yn(t,{type:"updateColumnProp",column:i,hidden:!0}):t,n):n}function kv(n,{columns:e}){return e.some(t=>t.hidden)?e.reduce((t,i)=>i.hidden?Yn(t,{type:"updateColumnProp",column:i,hidden:!1}):t,n):n}function Mv(n,{column:e,phase:t,width:i}){let r="updateColumnProp",s=t!=="end";switch(t){case"begin":case"end":return Yn(n,{type:r,column:e,resizing:s});case"resize":return Yn(n,{type:r,column:e,width:i});default:throw Error(`useTableModel.resizeColumn, invalid resizePhase ${t}`)}}function Tv(n,{columnNames:e,serverDataTypes:t}){let{columns:i}=n;if(i.some(gv)){let r=i.map(s=>{var l;let o=yv(s,e,t);return{...s,align:(l=s.align)!=null?l:yd(o),serverDataType:o}});return{...n,columns:r}}else return n}function Rv(n,e){let{columns:t}=n,{column:i,pin:r}=e,s=t.find(o=>o.name===i.name);return s?(t=cn(t,{...s,pin:r}),t=gd(t),{...n,columns:t}):n}function Yn(n,e){let{columns:t}=n,{align:i,column:r,hidden:s,label:o,resizing:l,width:a}=e,u=t.find(h=>h.name===r.name);return u&&((i==="left"||i==="right")&&(t=cn(t,{...u,align:i})),typeof o=="string"&&(t=cn(t,{...u,label:o})),typeof l=="boolean"&&(t=cn(t,{...u,resizing:l})),typeof s=="boolean"&&(t=cn(t,{...u,hidden:s})),typeof a=="number"&&(t=cn(t,{...u,width:a}))),{...n,columns:t}}function Sd(n,{columns:e,confirmed:t,filter:i,groupBy:r,sort:s}){let o=e&&e.length>0,l=r!==void 0,a=typeof(i==null?void 0:i.filter)=="string",u=s&&s.sortDefs.length>0,h=n;return o&&(h={...n,columns:e.map((c,f)=>{let d=rv(c),p=f+bd,m=iv(h.columns,d);if(m)return m.key===p?m:{...m,key:p};throw Error(`useTableModel column ${c} not found`)})}),l&&(h={...n,columns:ev(h.columns,r,t)}),u&&(h={...n,columns:tv(h.columns,s)}),a?h={...n,columns:Zw(h.columns,i)}:h.columns.some(lv)&&(h={...n,columns:dv(h.columns)}),h}function cn(n,e){return n.map(t=>t.name===e.name?e:t)}import{useCallback as Zn,useRef as er}from"react";var xd=n=>{let{scrollLeft:e,scrollTop:t}=n,{clientHeight:i,clientWidth:r,scrollHeight:s,scrollWidth:o}=n,l=e/(o-r),a=t/(s-i);return[l,a,e,t]},Dv=n=>{let{clientHeight:e,clientWidth:t,scrollHeight:i,scrollWidth:r}=n;return[r-t,i-e]},kd=({onHorizontalScroll:n,onVerticalScroll:e,viewport:t})=>{let i=er({scrollTop:0,scrollLeft:0}),r=er(null),s=er(null),o=er(null),l=er(!1),{maxScrollContainerScrollHorizontal:a,maxScrollContainerScrollVertical:u}=t,h=Zn((m,g)=>{let{current:b}=o;b&&b.scrollTo({top:g,left:m,behavior:"auto"})},[o]),c=Zn(()=>{let{current:m}=o;if(m){let{current:g}=i,{scrollLeft:b,scrollTop:C}=m;g.scrollTop!==C&&(g.scrollTop=C,e==null||e(C)),g.scrollLeft!==b&&(g.scrollLeft=b,n==null||n(b))}},[n,e]),f=Zn(()=>{let{current:m}=s,{current:g}=r;if(m&&g){let[b,C,y,x]=xd(m);l.current=!0,g.scrollLeft=Math.round(b*a),g.scrollTop=Math.round(C*u),h(y,x)}},[a,u,s,r,h]),d=Zn(()=>{let{current:m}=s,{current:g}=r,{current:b}=l;if(b)l.current=!1;else if(m&&g){let[C,y]=xd(g),[x,v]=Dv(m),w=Math.round(C*x),M=Math.round(y*v);m.scrollTo({left:w,top:M,behavior:"auto"}),h(w,M)}},[s,r,h]),p=Zn(m=>{let{current:g}=r;if(g){if(l.current=!1,m.type==="scroll-page"){let{clientHeight:b,scrollLeft:C,scrollTop:y}=g,{direction:x}=m,v=x==="down"?b:-b,w=Math.min(Math.max(0,y+v),t.maxScrollContainerScrollVertical);g.scrollTo({top:w,left:C,behavior:"auto"})}else if(m.type==="scroll-end"){let{direction:b}=m,C=b==="end"?t.maxScrollContainerScrollVertical:0;g.scrollTo({top:C,left:g.scrollLeft,behavior:"auto"})}}},[t.maxScrollContainerScrollVertical]);return{scrollbarContainerRef:r,onScrollbarContainerScroll:d,contentContainerRef:s,onContentContainerScroll:f,tableContainerRef:o,onTableContainerScroll:c,requestScroll:p}};import{useMemo as Md}from"react";var Av={fillerHeight:0,maxScrollContainerScrollHorizontal:0,maxScrollContainerScrollVertical:0,pinnedWidthLeft:0,pinnedWidthRight:0,rowCount:0,scrollContentHeight:0,scrollbarSize:0,scrollContentWidth:0,totalHeaderHeight:0},Pv=n=>{let e=0,t=0,i=0;for(let r of n){let{hidden:s,pin:o,width:l}=r,a=s?0:l;o==="left"?e+=a:o==="right"?t+=a:i+=a}return{pinnedWidthLeft:e,pinnedWidthRight:t,unpinnedWidth:i}},Td=({columns:n,headerHeight:e,headings:t,rowCount:i,rowHeight:r,size:s})=>{let{pinnedWidthLeft:o,pinnedWidthRight:l,unpinnedWidth:a}=Md(()=>Pv(n),[n]);return Md(()=>{var h;if(s){let c=t.length,f=15,d=i*r,p=o+a+l,m=d+e-(((h=s==null?void 0:s.height)!=null?h:0)-e-f),g=p-s.width+o,b=(s.height-e)/r,C=Number.isInteger(b)?b+1:Math.ceil(b);return{fillerHeight:(i-C)*r,maxScrollContainerScrollHorizontal:g,maxScrollContainerScrollVertical:m,pinnedWidthLeft:o,pinnedWidthRight:l,rowCount:C,scrollContentHeight:e+d+f,scrollbarSize:f,scrollContentWidth:p,totalHeaderHeight:e*(1+c)}}else return Av},[e,t.length,o,l,i,r,s,a])};import{getColumnsInViewport as Rd,itemsChanged as Ev}from"@vuu-ui/vuu-utils";import{useCallback as Dd,useEffect as Ov,useMemo as Iv,useRef as la,useState as Vv}from"react";var Ad=({columns:n,rowHeight:e,setRange:t,viewportMeasurements:i})=>{let r=la(-1),{rowCount:s,scrollContentWidth:o,maxScrollContainerScrollHorizontal:l}=i,a=o-l,u=la(0),[h,c]=Iv(()=>Rd(n,u.current,u.current+a),[a,n]),f=la(c);Ov(()=>{p(h)},[h]);let[d,p]=Vv(h),m=Dd(b=>{u.current=b;let[C,y]=Rd(n,b,b+a);Ev(d,C)&&(f.current=y,p(C))},[a,n,d]),g=Dd(b=>{let C=Math.floor(b/e);C!==r.current&&(r.current=C,t({from:C,to:C+s}))},[e,t,s]);return{columnsWithinViewport:d,onHorizontalScroll:m,onVerticalScroll:g,virtualColSpan:f.current}};var zv=[],{KEY:Uv,IS_EXPANDED:Ed,IS_LEAF:Od}=Fv,Id=({config:n,dataSource:e,headerHeight:t,onConfigChange:i,onFeatureEnabled:r,onFeatureInvocation:s,onSelectionChange:o,renderBufferSize:l=0,rowHeight:a,selectionModel:u,tableLayout:h,...c})=>{var ca,fa;let[f,d]=_v(0),p=aa(!1),m=aa();if(m.current=e,e===void 0)throw Error("no data source provided to DataTable");let g=dd(c),b=ut($=>{d($)},[]),{columns:C,dispatchColumnAction:y,headings:x}=wd(n,e.config),v=ut($=>{p.current=!0,y($)},[y]),w=Gf({dataSource:e,onPersistentColumnOperation:v}),M=Td({columns:C,headerHeight:t,headings:x,rowCount:f,rowHeight:a,size:g.innerSize}),L=ut($=>{if($.tableMeta){let{columns:ae,dataTypes:Te}=$.tableMeta;p.current=!0,y({type:"setTypes",columnNames:ae,serverDataTypes:Te})}},[y]),E=ut($=>{e.select($),o==null||o($)},[e,o]),S=md({onSelectionChange:E,selectionModel:u}),{data:R,getSelectedRows:O,range:I,setRange:z}=ed({dataSource:e,onFeatureEnabled:r,onFeatureInvocation:s,onSubscribed:L,onSizeChange:b,renderBufferSize:l,viewportRowCount:M.rowCount}),B=aa();B.current=R;let X=ut(($,ae=!1,Te)=>{e&&(e.sort=Lv(e.sort,$,ae,Te))},[e]),be=ut(($,ae,Te)=>{let pe=C.find(ct=>ct.name===ae);if(pe)$==="end"&&(p.current=!0),y({type:"resizeColumn",phase:$,column:pe,width:Te});else throw Error(`useDataTable.handleColumnResize, column ${ae} not found`)},[C,y]),se=ut(($,ae)=>{let Te=Bv(ae,$),pe=$[Uv];if($[Ed]){if(e.closeTreeNode(pe,!0),Te){let ct=C.indexOf(ae);e.getRowsAtDepth(ct+1).some(ft=>ft[Ed]||ft[Od])||y({type:"hideColumns",columns:C.slice(ct+2)})}}else if(e.openTreeNode(pe),Te){let ct=e.getChildRows(pe),ni=C.indexOf(ae)+1,ft=[C[ni]];ct.some(xi=>xi[Od])&&ft.push(C[ni+1]),ft.some(xi=>xi.hidden)&&y({type:"showColumns",columns:ft})}},[C,e,y]),{onVerticalScroll:K,onHorizontalScroll:G,columnsWithinViewport:ze,virtualColSpan:Qe}=Ad({columns:C,rowHeight:a,setRange:z,viewportMeasurements:M}),{requestScroll:Dt,...ht}=kd({onHorizontalScroll:G,onVerticalScroll:K,viewport:M,viewportHeight:((fa=(ca=g.innerSize)==null?void 0:ca.height)!=null?fa:0)-t}),ir=ld({columnCount:C.length,containerRef:g.containerRef,data:R,requestScroll:Dt,rowCount:e==null?void 0:e.size,viewportRange:I}),xs=ut($=>{e&&e.groupBy.includes($.name)&&(e.groupBy=e.groupBy.filter(ae=>ae!==$.name))},[e]),nr=ut(($,ae)=>{let Te=e.columns[$],pe=Hv(e.columns,Te,ae);pe!==e.columns&&(e.columns=pe,y({type:"tableConfig",columns:pe}))},[e,y]),Ld=id({onDrop:nr,tableContainerRef:ht.tableContainerRef,tableLayout:h});Pd(()=>{m.current&&(p.current=!0,y({type:"init",tableConfig:n,dataSourceConfig:m.current.config}))},[n,y]),Pd(()=>{e.on("config",($,ae)=>{p.current=!0,y({type:"tableConfig",...$,confirmed:ae})})},[e,y]),Wv(()=>{p.current&&(i==null||i({...n,columns:C}),p.current=!1)},[C,n,i]);let ha=ki(),Nd=ut($=>{var ft;let{current:ae}=B,{current:Te}=m,pe=$.target,ct=pe==null?void 0:pe.closest("td"),ni=pe==null?void 0:pe.closest("tr");if(ct&&ni&&ae&&Te){let{columns:xi,selectedRowsCount:Bd}=Te,Fd=Nv(xi),Hd=parseInt((ft=ni.ariaRowIndex)!=null?ft:"-1"),Wd=Array.from(ni.childNodes).indexOf(ct),_d=ae.find(([Ud])=>Ud===Hd),zd=xi[Wd];ha($,"grid",{columnMap:Fd,columnName:zd,row:_d,selectedRows:Bd===0?zv:O(),viewport:e==null?void 0:e.viewport})}},[e==null?void 0:e.viewport,O,ha]);return{containerMeasurements:g,containerProps:ir,columns:C,columnsWithinViewport:ze,data:R,dispatchColumnAction:y,handleContextMenuAction:w,headings:x,onColumnResize:be,onContextMenu:Nd,onRemoveColumnFromGroupBy:xs,onRowClick:S,onSort:X,onToggleGroup:se,virtualColSpan:Qe,scrollProps:ht,rowCount:f,viewportMeasurements:M,...Ld}};import qv from"classnames";import{isDataLoading as Gv}from"@vuu-ui/vuu-utils";import{jsx as Si,jsxs as Vd}from"react/jsx-runtime";var Rt="vuuTable",sE=({allowConfigEditing:n=!1,className:e,config:t,dataSource:i,headerHeight:r=25,height:s,id:o,onConfigChange:l,onFeatureEnabled:a,onFeatureInvocation:u,onSelectionChange:h,onShowConfigEditor:c,renderBufferSize:f=0,rowHeight:d=20,selectionModel:p="extended",style:m,tableLayout:g="row",width:b,zebraStripes:C=!1,...y})=>{let x=Kv(o),{containerMeasurements:{containerRef:v,innerSize:w,outerSize:M},containerProps:L,dispatchColumnAction:E,draggable:S,draggedItemIndex:R,handleContextMenuAction:O,scrollProps:I,tableLayout:z,viewportMeasurements:B,...X}=Id({config:t,dataSource:i,renderBufferSize:f,headerHeight:r,height:s,onConfigChange:l,onFeatureEnabled:a,onFeatureInvocation:u,onSelectionChange:h,rowHeight:d,selectionModel:p,tableLayout:g,width:b}),be={...M,"--content-height":`${B.scrollContentHeight}px`,"--content-width":`${B.scrollContentWidth}px`,"--filler-height":`${B.fillerHeight}px`,"--pinned-width-left":`${B.pinnedWidthLeft}px`,"--pinned-width-right":`${B.pinnedWidthRight}px`,"--header-height":`${r}px`,"--row-height":`${d}px`,"--scrollbar-size":`${B.scrollbarSize}px`,"--table-height":`${w==null?void 0:w.height}px`,"--table-width":`${w==null?void 0:w.width}px`,"--total-header-height":`${B==null?void 0:B.totalHeaderHeight}px`},se={left:B.pinnedWidthLeft-1,top:(B==null?void 0:B.totalHeaderHeight)-1},K=z==="column"?ou:Zf,G=qv(Rt,e,{[`${Rt}-zebra`]:C,[`${Rt}-loading`]:Gv(X.columns)});return Si(Fa,{menuActionHandler:O,menuBuilder:lu(i),children:Vd("div",{...L,className:G,id:x,ref:v,style:be,tabIndex:-1,children:[w?Si("div",{className:`${Rt}-scrollbarContainer`,onScroll:I.onScrollbarContainerScroll,ref:I.scrollbarContainerRef,style:se,children:Si("div",{className:`${Rt}-scrollContent`})}):null,w?Vd("div",{className:`${Rt}-contentContainer`,onScroll:I.onContentContainerScroll,ref:I.contentContainerRef,...y,children:[Si("div",{className:`${Rt}-scrollContent`}),Si("div",{className:`${Rt}-tableContainer`,onScroll:I.onTableContainerScroll,ref:I.tableContainerRef,children:Si(K,{...X,headerHeight:r,rowHeight:d})}),S]}):null,n&&w?Si($v,{className:`${Rt}-settings`,"data-icon":"settings",onClick:c,variant:"secondary"}):null]})})};import jv from"classnames";import{isJsonAttribute as Jv,metadataKeys as Qv,registerComponent as Xv}from"@vuu-ui/vuu-utils";import{jsx as ua,jsxs as iC}from"react/jsx-runtime";var tr="vuuJsonCell",{IS_EXPANDED:Yv,KEY:Zv}=Qv,eC=n=>{let e=n.lastIndexOf("|");return e===-1?"":n.slice(e+1)},tC=({column:n,row:e})=>{let{key:t}=n,i=e[t],r=!1;Jv(i)&&(i=i.slice(0,-1),r=!0);let s=eC(e[Zv]),o=jv({[`${tr}-name`]:s===i,[`${tr}-value`]:s!==i,[`${tr}-group`]:r});if(r){let l=e[Yv]?"minus-box":"plus-box";return iC("span",{className:o,children:[ua("span",{className:`${tr}-value`,children:i}),ua("span",{className:`${tr}-toggle`,"data-icon":l})]})}else return i?ua("span",{className:o,children:i}):null};Xv("json",tC,"cell-renderer",{});export{sE as Table,dd as useMeasuredContainer};
1
+ // src/Table.tsx
2
+ import { ContextMenuProvider } from "@vuu-ui/vuu-popups";
3
+ import { Button, useIdMemo } from "@salt-ds/core";
4
+
5
+ // src/ColumnBasedTable.tsx
6
+ import { metadataKeys as metadataKeys4 } from "@vuu-ui/vuu-utils";
7
+ import { useCallback as useCallback8 } from "react";
8
+ import cx6 from "classnames";
9
+
10
+ // src/TableRow.tsx
11
+ import {
12
+ isGroupColumn,
13
+ isJsonColumn,
14
+ isJsonGroup,
15
+ metadataKeys as metadataKeys3,
16
+ notHidden
17
+ } from "@vuu-ui/vuu-utils";
18
+ import cx2 from "classnames";
19
+ import { memo as memo2, useCallback as useCallback3 } from "react";
20
+
21
+ // src/TableCell.tsx
22
+ import { getColumnPinStyle, metadataKeys } from "@vuu-ui/vuu-utils";
23
+ import { EditableLabel } from "@heswell/salt-lab";
24
+ import cx from "classnames";
25
+ import { memo, useCallback, useRef, useState } from "react";
26
+ import { jsx } from "react/jsx-runtime";
27
+ var { KEY } = metadataKeys;
28
+ var TableCell = memo(
29
+ ({ className: classNameProp, column, onClick, row }) => {
30
+ const labelFieldRef = useRef(null);
31
+ const {
32
+ align,
33
+ CellRenderer,
34
+ key,
35
+ pin,
36
+ editable,
37
+ resizing,
38
+ valueFormatter
39
+ } = column;
40
+ const [editing, setEditing] = useState(false);
41
+ const value = valueFormatter(row[key]);
42
+ const [editableValue, setEditableValue] = useState(value);
43
+ const handleTitleMouseDown = () => {
44
+ var _a;
45
+ (_a = labelFieldRef.current) == null ? void 0 : _a.focus();
46
+ };
47
+ const handleTitleKeyDown = (evt) => {
48
+ if (evt.key === "Enter") {
49
+ setEditing(true);
50
+ }
51
+ };
52
+ const handleClick = useCallback(() => {
53
+ onClick == null ? void 0 : onClick(column);
54
+ }, [column, onClick]);
55
+ const handleEnterEditMode = () => {
56
+ setEditing(true);
57
+ };
58
+ const handleExitEditMode = (originalValue = "", finalValue = "", allowDeactivation = true, editCancelled = false) => {
59
+ var _a;
60
+ setEditing(false);
61
+ if (editCancelled) {
62
+ setEditableValue(originalValue);
63
+ } else if (finalValue !== originalValue) {
64
+ setEditableValue(finalValue);
65
+ }
66
+ if (allowDeactivation === false) {
67
+ (_a = labelFieldRef.current) == null ? void 0 : _a.focus();
68
+ }
69
+ };
70
+ const className = cx(classNameProp, {
71
+ vuuAlignRight: align === "right",
72
+ vuuPinFloating: pin === "floating",
73
+ vuuPinLeft: pin === "left",
74
+ vuuPinRight: pin === "right",
75
+ "vuuTableCell-resizing": resizing
76
+ }) || void 0;
77
+ const pinnedStyle = getColumnPinStyle(column);
78
+ return editable ? /* @__PURE__ */ jsx(
79
+ "td",
80
+ {
81
+ className,
82
+ "data-editable": true,
83
+ style: pinnedStyle,
84
+ onKeyDown: handleTitleKeyDown,
85
+ children: /* @__PURE__ */ jsx(
86
+ EditableLabel,
87
+ {
88
+ editing,
89
+ value: editableValue,
90
+ onChange: setEditableValue,
91
+ onMouseDownCapture: handleTitleMouseDown,
92
+ onEnterEditMode: handleEnterEditMode,
93
+ onExitEditMode: handleExitEditMode,
94
+ onKeyDown: handleTitleKeyDown,
95
+ ref: labelFieldRef,
96
+ tabIndex: 0
97
+ },
98
+ "title"
99
+ )
100
+ }
101
+ ) : /* @__PURE__ */ jsx("td", { className, style: pinnedStyle, onClick: handleClick, children: CellRenderer ? /* @__PURE__ */ jsx(CellRenderer, { column, row }) : value });
102
+ },
103
+ cellValuesAreEqual
104
+ );
105
+ TableCell.displayName = "TableCell";
106
+ function cellValuesAreEqual(prev, next) {
107
+ return prev.column === next.column && prev.onClick === next.onClick && prev.row[KEY] === next.row[KEY] && prev.row[prev.column.key] === next.row[next.column.key];
108
+ }
109
+
110
+ // src/TableGroupCell.tsx
111
+ import { metadataKeys as metadataKeys2 } from "@vuu-ui/vuu-utils";
112
+ import { useCallback as useCallback2 } from "react";
113
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
114
+ var { DEPTH, IS_LEAF } = metadataKeys2;
115
+ var getGroupValueAndOffset = (columns, row) => {
116
+ const { [DEPTH]: depth, [IS_LEAF]: isLeaf } = row;
117
+ if (isLeaf || depth > columns.length) {
118
+ return [null, depth === null ? 0 : depth - 1];
119
+ } else if (depth === 0) {
120
+ return ["$root", 0];
121
+ } else {
122
+ const column = columns[depth - 1];
123
+ return [row[column.key], depth - 1];
124
+ }
125
+ };
126
+ var TableGroupCell = ({ column, onClick, row }) => {
127
+ const { columns } = column;
128
+ const [value, offset] = getGroupValueAndOffset(columns, row);
129
+ const handleClick = useCallback2(() => {
130
+ onClick == null ? void 0 : onClick(column);
131
+ }, [column, onClick]);
132
+ const style = {
133
+ left: column.pin == "left" ? column.pinnedOffset : void 0
134
+ };
135
+ const isLeaf = row[IS_LEAF];
136
+ const spacers = Array(offset).fill(0).map((n, i) => /* @__PURE__ */ jsx2("span", { className: "vuuTableGroupCell-spacer" }, i));
137
+ return /* @__PURE__ */ jsxs(
138
+ "td",
139
+ {
140
+ className: "vuuTableGroupCell vuuPinLeft",
141
+ onClick: isLeaf ? void 0 : handleClick,
142
+ style,
143
+ children: [
144
+ spacers,
145
+ isLeaf ? null : /* @__PURE__ */ jsx2("span", { className: "vuuTableGroupCell-toggle", "data-icon": "triangle-right" }),
146
+ /* @__PURE__ */ jsx2("span", { children: value })
147
+ ]
148
+ }
149
+ );
150
+ };
151
+
152
+ // src/TableRow.tsx
153
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
154
+ var { IDX, IS_EXPANDED, SELECTED } = metadataKeys3;
155
+ var classBase = "vuuTableRow";
156
+ var TableRow = memo2(function Row({
157
+ columns,
158
+ height,
159
+ index,
160
+ onClick,
161
+ onToggleGroup,
162
+ virtualColSpan = 0,
163
+ row
164
+ }) {
165
+ const {
166
+ [IDX]: rowIndex,
167
+ [IS_EXPANDED]: isExpanded,
168
+ [SELECTED]: isSelected
169
+ } = row;
170
+ const className = cx2(classBase, {
171
+ [`${classBase}-even`]: rowIndex % 2 === 0,
172
+ [`${classBase}-expanded`]: isExpanded,
173
+ [`${classBase}-preSelected`]: isSelected === 2
174
+ });
175
+ const offset = rowIndex - index;
176
+ const handleRowClick = useCallback3(
177
+ (evt) => {
178
+ const rangeSelect = evt.shiftKey;
179
+ const keepExistingSelection = evt.ctrlKey || evt.metaKey;
180
+ onClick == null ? void 0 : onClick(row, rangeSelect, keepExistingSelection);
181
+ },
182
+ [onClick, row]
183
+ );
184
+ const handleGroupCellClick = useCallback3(
185
+ (column) => {
186
+ if (isGroupColumn(column) || isJsonGroup(column, row)) {
187
+ onToggleGroup == null ? void 0 : onToggleGroup(row, column);
188
+ }
189
+ },
190
+ [onToggleGroup, row]
191
+ );
192
+ return /* @__PURE__ */ jsxs2(
193
+ "tr",
194
+ {
195
+ "aria-selected": isSelected === 1 ? true : void 0,
196
+ "aria-rowindex": rowIndex,
197
+ className,
198
+ onClick: handleRowClick,
199
+ style: {
200
+ transform: `translate(0px, ${offset * height}px)`
201
+ },
202
+ children: [
203
+ virtualColSpan > 0 ? /* @__PURE__ */ jsx3("td", { colSpan: virtualColSpan }) : null,
204
+ columns.filter(notHidden).map((column) => {
205
+ const isGroup = isGroupColumn(column);
206
+ const isJsonCell = isJsonColumn(column);
207
+ const Cell = isGroup ? TableGroupCell : TableCell;
208
+ return /* @__PURE__ */ jsx3(
209
+ Cell,
210
+ {
211
+ column,
212
+ onClick: isGroup || isJsonCell ? handleGroupCellClick : void 0,
213
+ row
214
+ },
215
+ column.name
216
+ );
217
+ })
218
+ ]
219
+ }
220
+ );
221
+ });
222
+
223
+ // src/TableHeaderCell.tsx
224
+ import cx5 from "classnames";
225
+ import { useCallback as useCallback7, useRef as useRef4 } from "react";
226
+
227
+ // src/ColumnResizer.tsx
228
+ import { useCallback as useCallback4, useRef as useRef2 } from "react";
229
+ import { jsx as jsx4 } from "react/jsx-runtime";
230
+ var NOOP = () => void 0;
231
+ var baseClass = "vuuColumnResizer";
232
+ var ColumnResizer = ({
233
+ onDrag,
234
+ onDragEnd = NOOP,
235
+ onDragStart = NOOP
236
+ }) => {
237
+ const position = useRef2(0);
238
+ const onMouseMove = useCallback4(
239
+ (e) => {
240
+ if (e.stopPropagation) {
241
+ e.stopPropagation();
242
+ }
243
+ if (e.preventDefault) {
244
+ e.preventDefault();
245
+ }
246
+ const x = Math.round(e.clientX);
247
+ const moveBy = x - position.current;
248
+ position.current = x;
249
+ if (moveBy !== 0) {
250
+ onDrag(e, moveBy);
251
+ }
252
+ },
253
+ [onDrag]
254
+ );
255
+ const onMouseUp = useCallback4(
256
+ (e) => {
257
+ window.removeEventListener("mouseup", onMouseUp);
258
+ window.removeEventListener("mousemove", onMouseMove);
259
+ onDragEnd(e);
260
+ },
261
+ [onDragEnd, onMouseMove]
262
+ );
263
+ const handleMouseDown = useCallback4(
264
+ (e) => {
265
+ onDragStart(e);
266
+ position.current = Math.round(e.clientX);
267
+ window.addEventListener("mouseup", onMouseUp);
268
+ window.addEventListener("mousemove", onMouseMove);
269
+ if (e.stopPropagation) {
270
+ e.stopPropagation();
271
+ }
272
+ if (e.preventDefault) {
273
+ e.preventDefault();
274
+ }
275
+ },
276
+ [onDragStart, onMouseMove, onMouseUp]
277
+ );
278
+ return /* @__PURE__ */ jsx4("div", { className: baseClass, onMouseDown: handleMouseDown });
279
+ };
280
+
281
+ // src/SortIndicator.tsx
282
+ import cx3 from "classnames";
283
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
284
+ var classBase2 = "vuuSortIndicator";
285
+ var SortIndicator = ({ sorted }) => {
286
+ if (!sorted) {
287
+ return null;
288
+ }
289
+ const direction = typeof sorted === "number" ? sorted < 0 ? "dsc" : "asc" : sorted === "A" ? "asc" : "dsc";
290
+ return typeof sorted === "number" ? /* @__PURE__ */ jsxs3("div", { className: cx3(classBase2, "multi-col", direction), children: [
291
+ /* @__PURE__ */ jsx5("span", { "data-icon": `sorted-${direction}` }),
292
+ /* @__PURE__ */ jsx5("span", { className: "vuuSortPosition", children: Math.abs(sorted) })
293
+ ] }) : /* @__PURE__ */ jsx5("div", { className: cx3(classBase2, "single-col"), children: /* @__PURE__ */ jsx5("span", { "data-icon": `sorted-${direction}` }) });
294
+ };
295
+
296
+ // src/useTableColumnResize.tsx
297
+ import { useCallback as useCallback5, useRef as useRef3 } from "react";
298
+ var useTableColumnResize = ({
299
+ column,
300
+ onResize,
301
+ rootRef
302
+ }) => {
303
+ const widthRef = useRef3(0);
304
+ const isResizing = useRef3(false);
305
+ const { name } = column;
306
+ const handleResizeStart = useCallback5(() => {
307
+ if (onResize && rootRef.current) {
308
+ const { width } = rootRef.current.getBoundingClientRect();
309
+ widthRef.current = Math.round(width);
310
+ isResizing.current = true;
311
+ onResize == null ? void 0 : onResize("begin", name);
312
+ }
313
+ }, [name, onResize, rootRef]);
314
+ const handleResize = useCallback5(
315
+ (_evt, moveBy) => {
316
+ if (rootRef.current) {
317
+ if (onResize) {
318
+ const { width } = rootRef.current.getBoundingClientRect();
319
+ const newWidth = Math.round(width) + moveBy;
320
+ if (newWidth !== widthRef.current && newWidth > 0) {
321
+ onResize("resize", name, newWidth);
322
+ widthRef.current = newWidth;
323
+ }
324
+ }
325
+ }
326
+ },
327
+ [name, onResize, rootRef]
328
+ );
329
+ const handleResizeEnd = useCallback5(() => {
330
+ if (onResize) {
331
+ onResize("end", name, widthRef.current);
332
+ setTimeout(() => {
333
+ isResizing.current = false;
334
+ }, 100);
335
+ }
336
+ }, [name, onResize]);
337
+ return {
338
+ isResizing: isResizing.current,
339
+ onDrag: handleResize,
340
+ onDragStart: handleResizeStart,
341
+ onDragEnd: handleResizeEnd
342
+ };
343
+ };
344
+
345
+ // src/TableHeaderCell.tsx
346
+ import { useContextMenu as useContextMenu2 } from "@vuu-ui/vuu-popups";
347
+
348
+ // src/filter-indicator.tsx
349
+ import { useContextMenu } from "@vuu-ui/vuu-popups";
350
+ import cx4 from "classnames";
351
+ import { useCallback as useCallback6 } from "react";
352
+ import { jsx as jsx6 } from "react/jsx-runtime";
353
+ var FilterIndicator = ({ column, filter }) => {
354
+ const showContextMenu = useContextMenu();
355
+ const handleClick = useCallback6(
356
+ (evt) => {
357
+ evt.stopPropagation();
358
+ showContextMenu(evt, "filter", { column, filter });
359
+ },
360
+ [column, filter, showContextMenu]
361
+ );
362
+ if (!column.filter) {
363
+ return null;
364
+ }
365
+ return /* @__PURE__ */ jsx6(
366
+ "div",
367
+ {
368
+ className: cx4("vuuFilterIndicator"),
369
+ "data-icon": "filter",
370
+ onClick: handleClick
371
+ }
372
+ );
373
+ };
374
+
375
+ // src/TableHeaderCell.tsx
376
+ import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
377
+ var classBase3 = "vuuTable-headerCell";
378
+ var TableHeaderCell = ({
379
+ column,
380
+ className: classNameProp,
381
+ onClick,
382
+ onDragStart,
383
+ onResize,
384
+ ...props
385
+ }) => {
386
+ const rootRef = useRef4(null);
387
+ const { isResizing, ...resizeProps } = useTableColumnResize({
388
+ column,
389
+ onResize,
390
+ rootRef
391
+ });
392
+ const showContextMenu = useContextMenu2();
393
+ const dragTimerRef = useRef4(null);
394
+ const handleContextMenu = (e) => {
395
+ showContextMenu(e, "header", { column });
396
+ };
397
+ const handleClick = useCallback7(
398
+ (evt) => !isResizing && (onClick == null ? void 0 : onClick(evt)),
399
+ [isResizing, onClick]
400
+ );
401
+ const handleMouseDown = useCallback7(
402
+ (evt) => {
403
+ dragTimerRef.current = window.setTimeout(() => {
404
+ onDragStart == null ? void 0 : onDragStart(evt);
405
+ dragTimerRef.current = null;
406
+ }, 250);
407
+ },
408
+ [onDragStart]
409
+ );
410
+ const handleMouseUp = useCallback7(() => {
411
+ if (dragTimerRef.current !== null) {
412
+ window.clearTimeout(dragTimerRef.current);
413
+ dragTimerRef.current = null;
414
+ }
415
+ }, []);
416
+ const className = cx5(classBase3, classNameProp, {
417
+ vuuPinFloating: column.pin === "floating",
418
+ vuuPinLeft: column.pin === "left",
419
+ vuuPinRight: column.pin === "right",
420
+ vuuEndPin: column.endPin,
421
+ [`${classBase3}-resizing`]: column.resizing,
422
+ [`${classBase3}-right`]: column.align === "right"
423
+ });
424
+ return /* @__PURE__ */ jsx7(
425
+ "th",
426
+ {
427
+ className,
428
+ ...props,
429
+ onClick: handleClick,
430
+ onContextMenu: handleContextMenu,
431
+ onMouseDown: handleMouseDown,
432
+ onMouseUp: handleMouseUp,
433
+ ref: rootRef,
434
+ children: /* @__PURE__ */ jsxs4("div", { className: `${classBase3}-inner`, children: [
435
+ /* @__PURE__ */ jsx7(FilterIndicator, { column }),
436
+ /* @__PURE__ */ jsx7("div", { className: `${classBase3}-label`, children: column.label }),
437
+ /* @__PURE__ */ jsx7(SortIndicator, { sorted: column.sorted }),
438
+ column.resizeable !== false ? /* @__PURE__ */ jsx7(ColumnResizer, { ...resizeProps }) : null
439
+ ] })
440
+ }
441
+ );
442
+ };
443
+
444
+ // src/ColumnBasedTable.tsx
445
+ import { Fragment, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
446
+ var classBase4 = "vuuTable";
447
+ var { RENDER_IDX } = metadataKeys4;
448
+ var ColumnBasedTable = ({
449
+ columns,
450
+ data,
451
+ headerHeight,
452
+ onHeaderCellDragEnd,
453
+ rowHeight
454
+ }) => {
455
+ const handleDragEnd = useCallback8(() => {
456
+ onHeaderCellDragEnd == null ? void 0 : onHeaderCellDragEnd();
457
+ }, [onHeaderCellDragEnd]);
458
+ console.log(`ColumnBasedTable render`);
459
+ return /* @__PURE__ */ jsx8(Fragment, { children: columns.map((column, i) => /* @__PURE__ */ jsx8(
460
+ "table",
461
+ {
462
+ className: cx6(`${classBase4}-table`, `${classBase4}-columnBased`, {
463
+ vuuPinLeft: column.pin === "left"
464
+ }),
465
+ "data-idx": i,
466
+ id: `col-${i}`,
467
+ style: {
468
+ width: column.width,
469
+ left: column.pinnedOffset,
470
+ "--vuuTableHeaderHeight": `${headerHeight}px`,
471
+ "--row-height": `${rowHeight}px`
472
+ },
473
+ children: /* @__PURE__ */ jsxs5("tbody", { children: [
474
+ /* @__PURE__ */ jsx8("tr", { children: /* @__PURE__ */ jsx8(
475
+ TableHeaderCell,
476
+ {
477
+ column,
478
+ "data-idx": i,
479
+ onDragEnd: handleDragEnd
480
+ },
481
+ i
482
+ ) }, "header"),
483
+ data.map((row, j) => /* @__PURE__ */ jsx8(
484
+ TableRow,
485
+ {
486
+ columns: [column],
487
+ height: rowHeight,
488
+ index: j,
489
+ row
490
+ },
491
+ row[RENDER_IDX]
492
+ )),
493
+ /* @__PURE__ */ jsx8("tr", { className: "vuuTable-filler" })
494
+ ] })
495
+ },
496
+ column.name
497
+ )) });
498
+ };
499
+
500
+ // src/context-menu/buildContextMenuDescriptors.ts
501
+ import { isNumericColumn } from "@vuu-ui/vuu-utils";
502
+ var buildContextMenuDescriptors = (dataSource) => (location, options) => {
503
+ const descriptors = [];
504
+ if (dataSource === void 0) {
505
+ return descriptors;
506
+ }
507
+ if (location === "header") {
508
+ descriptors.push(
509
+ ...buildSortMenuItems(options, dataSource)
510
+ );
511
+ descriptors.push(
512
+ ...buildGroupMenuItems(options, dataSource)
513
+ );
514
+ descriptors.push(
515
+ ...buildAggregationMenuItems(options, dataSource)
516
+ );
517
+ descriptors.push(...buildColumnDisplayMenuItems(options));
518
+ } else if (location === "filter") {
519
+ const { column, filter } = options;
520
+ const colIsOnlyFilter = (filter == null ? void 0 : filter.column) === (column == null ? void 0 : column.name);
521
+ descriptors.push({
522
+ label: "Edit filter",
523
+ action: "filter-edit",
524
+ options
525
+ });
526
+ descriptors.push({
527
+ label: "Remove filter",
528
+ action: "filter-remove-column",
529
+ options
530
+ });
531
+ if (column && !colIsOnlyFilter) {
532
+ descriptors.push({
533
+ label: `Remove all filters`,
534
+ action: "remove-filters",
535
+ options
536
+ });
537
+ }
538
+ }
539
+ return descriptors;
540
+ };
541
+ function buildSortMenuItems(options, { sort: { sortDefs } }) {
542
+ const { column } = options;
543
+ const menuItems = [];
544
+ if (column === void 0) {
545
+ return menuItems;
546
+ }
547
+ const hasSort = sortDefs.length > 0;
548
+ if (column.sorted === "A") {
549
+ menuItems.push({
550
+ label: "Reverse Sort (DSC)",
551
+ action: "sort-dsc",
552
+ options
553
+ });
554
+ } else if (column.sorted === "D") {
555
+ menuItems.push({
556
+ label: "Reverse Sort (ASC)",
557
+ action: "sort-asc",
558
+ options
559
+ });
560
+ } else if (typeof column.sorted === "number") {
561
+ if (column.sorted > 0) {
562
+ menuItems.push({
563
+ label: "Reverse Sort (DSC)",
564
+ action: "sort-add-dsc",
565
+ options
566
+ });
567
+ } else {
568
+ menuItems.push({
569
+ label: "Reverse Sort (ASC)",
570
+ action: "sort-add-asc",
571
+ options
572
+ });
573
+ }
574
+ if (hasSort && Math.abs(column.sorted) < sortDefs.length) {
575
+ menuItems.push({
576
+ label: "Remove from sort",
577
+ action: "sort-remove",
578
+ options
579
+ });
580
+ }
581
+ menuItems.push({
582
+ label: "New Sort",
583
+ children: [
584
+ { label: "Ascending", action: "sort-asc", options },
585
+ { label: "Descending", action: "sort-dsc", options }
586
+ ]
587
+ });
588
+ } else if (hasSort) {
589
+ menuItems.push({
590
+ label: "Add to sort",
591
+ children: [
592
+ { label: "Ascending", action: "sort-add-asc", options },
593
+ { label: "Descending", action: "sort-add-dsc", options }
594
+ ]
595
+ });
596
+ menuItems.push({
597
+ label: "New Sort",
598
+ children: [
599
+ { label: "Ascending", action: "sort-asc", options },
600
+ { label: "Descending", action: "sort-dsc", options }
601
+ ]
602
+ });
603
+ } else {
604
+ menuItems.push({
605
+ label: "Sort",
606
+ children: [
607
+ { label: "Ascending", action: "sort-asc", options },
608
+ { label: "Descending", action: "sort-dsc", options }
609
+ ]
610
+ });
611
+ }
612
+ return menuItems;
613
+ }
614
+ function buildAggregationMenuItems(options, dataSource) {
615
+ const { column } = options;
616
+ if (column === void 0 || dataSource.groupBy.length === 0) {
617
+ return [];
618
+ }
619
+ const { name, label = name } = column;
620
+ return [
621
+ {
622
+ label: `Aggregate ${label}`,
623
+ children: [{ label: "Count", action: "agg-count", options }].concat(
624
+ isNumericColumn(column) ? [
625
+ { label: "Sum", action: "agg-sum", options },
626
+ { label: "Avg", action: "agg-avg", options },
627
+ { label: "High", action: "agg-high", options },
628
+ { label: "Low", action: "agg-low", options }
629
+ ] : []
630
+ )
631
+ }
632
+ ];
633
+ }
634
+ var pinColumn = (options, pinLocation) => ({
635
+ label: `Pin ${pinLocation}`,
636
+ action: `column-pin-${pinLocation}`,
637
+ options
638
+ });
639
+ var pinLeft = (options) => pinColumn(options, "left");
640
+ var pinFloating = (options) => pinColumn(options, "floating");
641
+ var pinRight = (options) => pinColumn(options, "right");
642
+ function buildColumnDisplayMenuItems(options) {
643
+ const { column } = options;
644
+ if (column === void 0) {
645
+ return [];
646
+ }
647
+ const { pin } = column;
648
+ const menuItems = [
649
+ {
650
+ label: `Hide column`,
651
+ action: "column-hide",
652
+ options
653
+ },
654
+ {
655
+ label: `Remove column`,
656
+ action: "column-remove",
657
+ options
658
+ }
659
+ ];
660
+ if (pin === void 0) {
661
+ menuItems.push({
662
+ label: `Pin column`,
663
+ children: [pinLeft(options), pinFloating(options), pinRight(options)]
664
+ });
665
+ } else if (pin === "left") {
666
+ menuItems.push(
667
+ { label: "Unpin column", action: "column-unpin", options },
668
+ {
669
+ label: `Pin column`,
670
+ children: [pinFloating(options), pinRight(options)]
671
+ }
672
+ );
673
+ } else if (pin === "right") {
674
+ menuItems.push(
675
+ { label: "Unpin column", action: "column-unpin", options },
676
+ {
677
+ label: `Pin column`,
678
+ children: [pinLeft(options), pinFloating(options)]
679
+ }
680
+ );
681
+ } else if (pin === "floating") {
682
+ menuItems.push(
683
+ { label: "Unpin column", action: "column-unpin", options },
684
+ {
685
+ label: `Pin column`,
686
+ children: [pinLeft(options), pinRight(options)]
687
+ }
688
+ );
689
+ }
690
+ return menuItems;
691
+ }
692
+ function buildGroupMenuItems(options, { groupBy }) {
693
+ const { column } = options;
694
+ const menuItems = [];
695
+ if (column === void 0) {
696
+ return menuItems;
697
+ }
698
+ const { name, label = name } = column;
699
+ if (groupBy.length === 0) {
700
+ menuItems.push({
701
+ label: `Group by ${label}`,
702
+ action: "group",
703
+ options
704
+ });
705
+ } else {
706
+ menuItems.push({
707
+ label: `Add ${label} to group by`,
708
+ action: "group-add",
709
+ options
710
+ });
711
+ }
712
+ return menuItems;
713
+ }
714
+
715
+ // src/context-menu/useContextMenu.ts
716
+ import { removeColumnFromFilter } from "@vuu-ui/vuu-filters";
717
+ import {
718
+ addGroupColumn,
719
+ addSortColumn,
720
+ AggregationType,
721
+ setAggregations,
722
+ setSortColumn
723
+ } from "@vuu-ui/vuu-utils";
724
+ var removeFilterColumn = (dataSourceFilter, column) => {
725
+ if (dataSourceFilter.filterStruct && column) {
726
+ const [filterStruct, filter] = removeColumnFromFilter(
727
+ column,
728
+ dataSourceFilter.filterStruct
729
+ );
730
+ return {
731
+ filter,
732
+ filterStruct
733
+ };
734
+ } else {
735
+ return dataSourceFilter;
736
+ }
737
+ };
738
+ var { Average, Count, High, Low, Sum } = AggregationType;
739
+ var useContextMenu3 = ({
740
+ dataSource,
741
+ onPersistentColumnOperation
742
+ }) => {
743
+ const handleContextMenuAction = (type, options) => {
744
+ const gridOptions = options;
745
+ if (gridOptions.column && dataSource) {
746
+ const { column } = gridOptions;
747
+ switch (type) {
748
+ case "sort-asc":
749
+ return dataSource.sort = setSortColumn(dataSource.sort, column, "A"), true;
750
+ case "sort-dsc":
751
+ return dataSource.sort = setSortColumn(dataSource.sort, column, "D"), true;
752
+ case "sort-add-asc":
753
+ return dataSource.sort = addSortColumn(dataSource.sort, column, "A"), true;
754
+ case "sort-add-dsc":
755
+ return dataSource.sort = addSortColumn(dataSource.sort, column, "D"), true;
756
+ case "group":
757
+ return dataSource.groupBy = addGroupColumn(dataSource.groupBy, column), true;
758
+ case "group-add":
759
+ return dataSource.groupBy = addGroupColumn(dataSource.groupBy, column), true;
760
+ case "column-hide":
761
+ return onPersistentColumnOperation({ type: "hideColumns", columns: [column] }), true;
762
+ case "column-remove":
763
+ return dataSource.columns = dataSource.columns.filter((name) => name !== column.name), true;
764
+ case "filter-remove-column":
765
+ return dataSource.filter = removeFilterColumn(dataSource.filter, column), true;
766
+ case "remove-filters":
767
+ return dataSource.filter = { filter: "" }, true;
768
+ case "agg-avg":
769
+ return dataSource.aggregations = setAggregations(dataSource.aggregations, column, Average), true;
770
+ case "agg-high":
771
+ return dataSource.aggregations = setAggregations(dataSource.aggregations, column, High), true;
772
+ case "agg-low":
773
+ return dataSource.aggregations = setAggregations(dataSource.aggregations, column, Low), true;
774
+ case "agg-count":
775
+ return dataSource.aggregations = setAggregations(dataSource.aggregations, column, Count), true;
776
+ case "agg-sum":
777
+ return dataSource.aggregations = setAggregations(dataSource.aggregations, column, Sum), true;
778
+ case "column-pin-floating":
779
+ return onPersistentColumnOperation({ type: "pinColumn", column, pin: "floating" }), true;
780
+ case "column-pin-left":
781
+ return onPersistentColumnOperation({ type: "pinColumn", column, pin: "left" }), true;
782
+ case "column-pin-right":
783
+ return onPersistentColumnOperation({ type: "pinColumn", column, pin: "right" }), true;
784
+ case "column-unpin":
785
+ return onPersistentColumnOperation({ type: "pinColumn", column, pin: void 0 }), true;
786
+ default:
787
+ }
788
+ }
789
+ return false;
790
+ };
791
+ return handleContextMenuAction;
792
+ };
793
+
794
+ // src/RowBasedTable.tsx
795
+ import {
796
+ getColumnPinStyle as getColumnPinStyle2,
797
+ isGroupColumn as isGroupColumn2,
798
+ metadataKeys as metadataKeys5,
799
+ notHidden as notHidden2,
800
+ visibleColumnAtIndex
801
+ } from "@vuu-ui/vuu-utils";
802
+ import { useCallback as useCallback9, useMemo } from "react";
803
+
804
+ // src/TableGroupHeaderCell.tsx
805
+ import cx7 from "classnames";
806
+ import { useRef as useRef5 } from "react";
807
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
808
+ var classBase5 = "vuuTable-groupHeaderCell";
809
+ var ColHeader = (props) => {
810
+ const { column, className, onRemoveColumn } = props;
811
+ return /* @__PURE__ */ jsxs6("div", { className: cx7(`${classBase5}-col`, className), role: "columnheader", children: [
812
+ /* @__PURE__ */ jsx9("span", { className: `${classBase5}-label`, children: column.name }),
813
+ /* @__PURE__ */ jsx9(
814
+ "span",
815
+ {
816
+ className: `${classBase5}-close`,
817
+ "data-icon": "close-circle",
818
+ onClick: () => onRemoveColumn == null ? void 0 : onRemoveColumn(column)
819
+ }
820
+ )
821
+ ] });
822
+ };
823
+ var TableGroupHeaderCell = ({
824
+ column: groupColumn,
825
+ className: classNameProp,
826
+ onRemoveColumn,
827
+ onResize,
828
+ ...props
829
+ }) => {
830
+ const rootRef = useRef5(null);
831
+ const { isResizing, ...resizeProps } = useTableColumnResize({
832
+ column: groupColumn,
833
+ onResize,
834
+ rootRef
835
+ });
836
+ const className = cx7(classBase5, classNameProp, {
837
+ vuuPinLeft: groupColumn.pin === "left",
838
+ [`${classBase5}-right`]: groupColumn.align === "right",
839
+ [`${classBase5}-resizing`]: groupColumn.resizing,
840
+ [`${classBase5}-pending`]: groupColumn.groupConfirmed === false
841
+ });
842
+ const { columns } = groupColumn;
843
+ return /* @__PURE__ */ jsx9("th", { className, ref: rootRef, ...props, children: /* @__PURE__ */ jsxs6("div", { className: `${classBase5}-inner`, children: [
844
+ columns.map((column) => /* @__PURE__ */ jsx9(
845
+ ColHeader,
846
+ {
847
+ column,
848
+ onRemoveColumn
849
+ },
850
+ column.key
851
+ )),
852
+ groupColumn.resizeable !== false ? /* @__PURE__ */ jsx9(ColumnResizer, { ...resizeProps }) : null
853
+ ] }) });
854
+ };
855
+
856
+ // src/RowBasedTable.tsx
857
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
858
+ var classBase6 = "vuuTable";
859
+ var { RENDER_IDX: RENDER_IDX2 } = metadataKeys5;
860
+ var RowBasedTable = ({
861
+ columns,
862
+ columnsWithinViewport,
863
+ data,
864
+ headings,
865
+ onColumnResize,
866
+ onHeaderCellDragStart,
867
+ onContextMenu,
868
+ onRemoveColumnFromGroupBy,
869
+ onRowClick,
870
+ onSort,
871
+ onToggleGroup,
872
+ virtualColSpan = 0,
873
+ rowCount,
874
+ rowHeight
875
+ }) => {
876
+ const handleDragStart = useCallback9(
877
+ (evt) => {
878
+ onHeaderCellDragStart == null ? void 0 : onHeaderCellDragStart(evt);
879
+ },
880
+ [onHeaderCellDragStart]
881
+ );
882
+ const visibleColumns = useMemo(() => {
883
+ return columns.filter(notHidden2);
884
+ }, [columns]);
885
+ const handleHeaderClick = useCallback9(
886
+ (evt) => {
887
+ var _a;
888
+ const targetElement = evt.target;
889
+ const headerCell = targetElement.closest(
890
+ ".vuuTable-headerCell"
891
+ );
892
+ const colIdx = parseInt((_a = headerCell == null ? void 0 : headerCell.dataset.idx) != null ? _a : "-1");
893
+ const column = visibleColumnAtIndex(columns, colIdx);
894
+ const isAdditive = evt.shiftKey;
895
+ column && onSort(column, isAdditive);
896
+ },
897
+ [columns, onSort]
898
+ );
899
+ return /* @__PURE__ */ jsxs7("table", { "aria-rowcount": rowCount, className: `${classBase6}-table`, children: [
900
+ /* @__PURE__ */ jsx10("colgroup", { children: visibleColumns.map((column, i) => /* @__PURE__ */ jsx10("col", { width: `${column.width}px` }, i)) }),
901
+ /* @__PURE__ */ jsxs7("thead", { children: [
902
+ headings.map((colHeaders, i) => /* @__PURE__ */ jsx10("tr", { className: "vuuTable-heading", children: colHeaders.map(({ label, span }, j) => /* @__PURE__ */ jsx10("th", { colSpan: span, className: "vuuTable-headingCell", children: label }, j)) }, i)),
903
+ /* @__PURE__ */ jsx10("tr", { children: visibleColumns.map((column, i) => {
904
+ const style = getColumnPinStyle2(column);
905
+ return isGroupColumn2(column) ? /* @__PURE__ */ jsx10(
906
+ TableGroupHeaderCell,
907
+ {
908
+ column,
909
+ "data-idx": i,
910
+ onRemoveColumn: onRemoveColumnFromGroupBy,
911
+ onResize: onColumnResize,
912
+ style
913
+ },
914
+ i
915
+ ) : /* @__PURE__ */ jsx10(
916
+ TableHeaderCell,
917
+ {
918
+ column,
919
+ "data-idx": i,
920
+ onClick: handleHeaderClick,
921
+ onDragStart: handleDragStart,
922
+ onResize: onColumnResize,
923
+ style
924
+ },
925
+ i
926
+ );
927
+ }) })
928
+ ] }),
929
+ /* @__PURE__ */ jsxs7("tbody", { onContextMenu, children: [
930
+ data == null ? void 0 : data.map((row, i) => /* @__PURE__ */ jsx10(
931
+ TableRow,
932
+ {
933
+ columns: columnsWithinViewport,
934
+ height: rowHeight,
935
+ index: i,
936
+ onClick: onRowClick,
937
+ virtualColSpan,
938
+ onToggleGroup,
939
+ row
940
+ },
941
+ row[RENDER_IDX2]
942
+ )),
943
+ /* @__PURE__ */ jsx10("tr", { className: `${classBase6}-filler` })
944
+ ] })
945
+ ] });
946
+ };
947
+
948
+ // src/useDataTable.ts
949
+ import { useContextMenu as usePopupContextMenu } from "@vuu-ui/vuu-popups";
950
+ import {
951
+ applySort,
952
+ buildColumnMap,
953
+ isJsonGroup as isJsonGroup2,
954
+ metadataKeys as metadataKeys9,
955
+ moveItem as moveItem2
956
+ } from "@vuu-ui/vuu-utils";
957
+ import {
958
+ useCallback as useCallback18,
959
+ useEffect as useEffect5,
960
+ useMemo as useMemo6,
961
+ useRef as useRef14,
962
+ useState as useState6
963
+ } from "react";
964
+
965
+ // src/useDataSource.ts
966
+ import {
967
+ isVuuFeatureAction,
968
+ isVuuFeatureInvocation
969
+ } from "@vuu-ui/vuu-data";
970
+ import { getFullRange, metadataKeys as metadataKeys6, WindowRange } from "@vuu-ui/vuu-utils";
971
+ import { useCallback as useCallback10, useEffect, useMemo as useMemo2, useRef as useRef6, useState as useState2 } from "react";
972
+ var { SELECTED: SELECTED2 } = metadataKeys6;
973
+ function useDataSource({
974
+ dataSource,
975
+ onConfigChange,
976
+ onFeatureEnabled,
977
+ onFeatureInvocation,
978
+ onSizeChange,
979
+ onSubscribed,
980
+ range = { from: 0, to: 0 },
981
+ renderBufferSize = 0,
982
+ viewportRowCount
983
+ }) {
984
+ const [, forceUpdate] = useState2(null);
985
+ const isMounted = useRef6(true);
986
+ const hasUpdated = useRef6(false);
987
+ const rangeRef = useRef6({ from: 0, to: 0 });
988
+ const rafHandle = useRef6(null);
989
+ const data = useRef6([]);
990
+ const dataWindow = useMemo2(
991
+ () => new MovingWindow(getFullRange(range)),
992
+ // eslint-disable-next-line react-hooks/exhaustive-deps
993
+ []
994
+ );
995
+ const setData = useCallback10(
996
+ (updates) => {
997
+ for (const row of updates) {
998
+ dataWindow.add(row);
999
+ }
1000
+ data.current = dataWindow.data;
1001
+ hasUpdated.current = true;
1002
+ },
1003
+ [dataWindow]
1004
+ );
1005
+ const datasourceMessageHandler = useCallback10(
1006
+ (message) => {
1007
+ if (message.type === "subscribed") {
1008
+ onSubscribed == null ? void 0 : onSubscribed(message);
1009
+ } else if (message.type === "viewport-update") {
1010
+ if (typeof message.size === "number") {
1011
+ onSizeChange == null ? void 0 : onSizeChange(message.size);
1012
+ dataWindow.setRowCount(message.size);
1013
+ }
1014
+ if (message.rows) {
1015
+ setData(message.rows);
1016
+ } else if (typeof message.size === "number") {
1017
+ data.current = dataWindow.data;
1018
+ hasUpdated.current = true;
1019
+ }
1020
+ } else if (isVuuFeatureAction(message)) {
1021
+ onFeatureEnabled == null ? void 0 : onFeatureEnabled(message);
1022
+ } else if (isVuuFeatureInvocation(message)) {
1023
+ onFeatureInvocation == null ? void 0 : onFeatureInvocation(message);
1024
+ } else {
1025
+ console.log(`useDataSource unexpected message ${message.type}`);
1026
+ }
1027
+ },
1028
+ [
1029
+ dataWindow,
1030
+ onFeatureEnabled,
1031
+ onFeatureInvocation,
1032
+ onSizeChange,
1033
+ onSubscribed,
1034
+ setData
1035
+ ]
1036
+ );
1037
+ useEffect(
1038
+ () => () => {
1039
+ if (rafHandle.current) {
1040
+ cancelAnimationFrame(rafHandle.current);
1041
+ rafHandle.current = null;
1042
+ }
1043
+ isMounted.current = false;
1044
+ },
1045
+ []
1046
+ );
1047
+ const refreshIfUpdated = useCallback10(() => {
1048
+ if (isMounted.current) {
1049
+ if (hasUpdated.current) {
1050
+ forceUpdate({});
1051
+ hasUpdated.current = false;
1052
+ }
1053
+ rafHandle.current = requestAnimationFrame(refreshIfUpdated);
1054
+ }
1055
+ }, [forceUpdate]);
1056
+ useEffect(() => {
1057
+ rafHandle.current = requestAnimationFrame(refreshIfUpdated);
1058
+ }, [refreshIfUpdated]);
1059
+ const adjustRange = useCallback10(
1060
+ (rowCount) => {
1061
+ const { from } = dataSource.range;
1062
+ const rowRange = { from, to: from + rowCount };
1063
+ const fullRange = getFullRange(rowRange, renderBufferSize);
1064
+ dataSource.range = rangeRef.current = fullRange;
1065
+ dataSource.emit("range", rowRange);
1066
+ dataWindow.setRange(fullRange);
1067
+ },
1068
+ [dataSource, dataWindow, renderBufferSize]
1069
+ );
1070
+ const setRange = useCallback10(
1071
+ (range2) => {
1072
+ const fullRange = getFullRange(range2, renderBufferSize);
1073
+ dataSource.range = rangeRef.current = fullRange;
1074
+ dataWindow.setRange(fullRange);
1075
+ dataSource.emit("range", range2);
1076
+ },
1077
+ [dataSource, dataWindow, renderBufferSize]
1078
+ );
1079
+ const getSelectedRows = useCallback10(() => {
1080
+ return dataWindow.getSelectedRows();
1081
+ }, [dataWindow]);
1082
+ useEffect(() => {
1083
+ dataSource == null ? void 0 : dataSource.subscribe(
1084
+ {
1085
+ range: rangeRef.current
1086
+ },
1087
+ datasourceMessageHandler
1088
+ );
1089
+ }, [dataSource, datasourceMessageHandler, onConfigChange]);
1090
+ useEffect(() => {
1091
+ adjustRange(viewportRowCount);
1092
+ }, [adjustRange, viewportRowCount]);
1093
+ return {
1094
+ data: data.current,
1095
+ getSelectedRows,
1096
+ range: rangeRef.current,
1097
+ setRange,
1098
+ dataSource
1099
+ };
1100
+ }
1101
+ var MovingWindow = class {
1102
+ constructor({ from, to }) {
1103
+ this.rowCount = 0;
1104
+ this.setRowCount = (rowCount) => {
1105
+ if (rowCount < this.data.length) {
1106
+ this.data.length = rowCount;
1107
+ }
1108
+ this.rowCount = rowCount;
1109
+ };
1110
+ this.range = new WindowRange(from, to);
1111
+ this.data = new Array(to - from);
1112
+ this.rowCount = 0;
1113
+ }
1114
+ add(data) {
1115
+ var _a;
1116
+ const [index] = data;
1117
+ if (this.isWithinRange(index)) {
1118
+ const internalIndex = index - this.range.from;
1119
+ this.data[internalIndex] = data;
1120
+ const isSelected = data[SELECTED2];
1121
+ const preSelected = (_a = this.data[internalIndex - 1]) == null ? void 0 : _a[SELECTED2];
1122
+ if (preSelected === 0 && isSelected) {
1123
+ this.data[internalIndex - 1][SELECTED2] = 2;
1124
+ } else if (preSelected === 2 && !isSelected) {
1125
+ this.data[internalIndex - 1][SELECTED2] = 0;
1126
+ }
1127
+ }
1128
+ }
1129
+ getAtIndex(index) {
1130
+ return this.range.isWithin(index) && this.data[index - this.range.from] != null ? this.data[index - this.range.from] : void 0;
1131
+ }
1132
+ isWithinRange(index) {
1133
+ return this.range.isWithin(index);
1134
+ }
1135
+ setRange({ from, to }) {
1136
+ if (from !== this.range.from || to !== this.range.to) {
1137
+ const [overlapFrom, overlapTo] = this.range.overlap(from, to);
1138
+ const newData = new Array(to - from);
1139
+ for (let i = overlapFrom; i < overlapTo; i++) {
1140
+ const data = this.getAtIndex(i);
1141
+ if (data) {
1142
+ const index = i - from;
1143
+ newData[index] = data;
1144
+ }
1145
+ }
1146
+ this.data = newData;
1147
+ this.range.from = from;
1148
+ this.range.to = to;
1149
+ }
1150
+ }
1151
+ getSelectedRows() {
1152
+ return this.data.filter((row) => row[SELECTED2] === 1);
1153
+ }
1154
+ };
1155
+
1156
+ // src/useDraggableColumn.ts
1157
+ import { useDragDrop } from "@heswell/salt-lab";
1158
+ import {
1159
+ useCallback as useCallback11,
1160
+ useLayoutEffect,
1161
+ useRef as useRef7,
1162
+ useState as useState3
1163
+ } from "react";
1164
+ var useDraggableColumn = ({
1165
+ onDrop,
1166
+ tableContainerRef,
1167
+ tableLayout: tableLayoutProp
1168
+ }) => {
1169
+ const [tableLayout, setTableLayout] = useState3(tableLayoutProp);
1170
+ const mousePosRef = useRef7();
1171
+ const handleDropSettle = useCallback11(() => {
1172
+ console.log(`handleDropSettle`);
1173
+ mousePosRef.current = void 0;
1174
+ setTableLayout("row");
1175
+ }, []);
1176
+ const { draggable, draggedItemIndex, onMouseDown } = useDragDrop({
1177
+ allowDragDrop: true,
1178
+ draggableClassName: "table-column",
1179
+ orientation: "horizontal",
1180
+ containerRef: tableContainerRef,
1181
+ itemQuery: ".vuuTable-table",
1182
+ onDrop,
1183
+ onDropSettle: handleDropSettle
1184
+ });
1185
+ const handleHeaderCellDragStart = useCallback11((evt) => {
1186
+ const { clientX, clientY } = evt;
1187
+ console.log(
1188
+ `useDraggableColumn handleHeaderCellDragStart means mouseDown fired on a column in RowBasedTable`
1189
+ );
1190
+ const sourceElement = evt.target;
1191
+ const thElement = sourceElement.closest(".vuuTable-headerCell");
1192
+ const {
1193
+ dataset: { idx = "-1" }
1194
+ } = thElement;
1195
+ mousePosRef.current = {
1196
+ clientX,
1197
+ clientY,
1198
+ idx
1199
+ };
1200
+ setTableLayout("column");
1201
+ }, []);
1202
+ useLayoutEffect(() => {
1203
+ var _a;
1204
+ if (tableLayout === "column" && mousePosRef.current && !draggable) {
1205
+ const { clientX, clientY, idx } = mousePosRef.current;
1206
+ const target = (_a = tableContainerRef.current) == null ? void 0 : _a.querySelector(
1207
+ `.vuuTable-table[data-idx="${idx}"]`
1208
+ );
1209
+ if (target) {
1210
+ const evt = {
1211
+ persist: () => void 0,
1212
+ nativeEvent: {
1213
+ clientX,
1214
+ clientY,
1215
+ target
1216
+ }
1217
+ };
1218
+ onMouseDown == null ? void 0 : onMouseDown(evt);
1219
+ }
1220
+ }
1221
+ }, [draggable, onMouseDown, tableContainerRef, tableLayout]);
1222
+ return {
1223
+ draggable,
1224
+ draggedItemIndex,
1225
+ tableLayout,
1226
+ onHeaderCellDragStart: tableLayout === "row" ? handleHeaderCellDragStart : void 0
1227
+ };
1228
+ };
1229
+
1230
+ // src/useKeyboardNavigation.ts
1231
+ import { withinRange } from "@vuu-ui/vuu-utils";
1232
+ import {
1233
+ useCallback as useCallback12,
1234
+ useEffect as useEffect2,
1235
+ useLayoutEffect as useLayoutEffect2,
1236
+ useMemo as useMemo3,
1237
+ useRef as useRef8
1238
+ } from "react";
1239
+
1240
+ // src/keyUtils.ts
1241
+ function union(set1, ...sets) {
1242
+ const result = new Set(set1);
1243
+ for (let set of sets) {
1244
+ for (let element of set) {
1245
+ result.add(element);
1246
+ }
1247
+ }
1248
+ return result;
1249
+ }
1250
+ var ArrowUp = "ArrowUp";
1251
+ var ArrowDown = "ArrowDown";
1252
+ var ArrowLeft = "ArrowLeft";
1253
+ var ArrowRight = "ArrowRight";
1254
+ var Home = "Home";
1255
+ var End = "End";
1256
+ var PageUp = "PageUp";
1257
+ var PageDown = "PageDown";
1258
+ var actionKeys = /* @__PURE__ */ new Set(["Enter", "Delete", " "]);
1259
+ var focusKeys = /* @__PURE__ */ new Set(["Tab"]);
1260
+ var arrowLeftRightKeys = /* @__PURE__ */ new Set(["ArrowRight", "ArrowLeft"]);
1261
+ var navigationKeys = /* @__PURE__ */ new Set([
1262
+ Home,
1263
+ End,
1264
+ PageUp,
1265
+ PageDown,
1266
+ ArrowDown,
1267
+ ArrowLeft,
1268
+ ArrowRight,
1269
+ ArrowUp
1270
+ ]);
1271
+ var functionKeys = /* @__PURE__ */ new Set([
1272
+ "F1",
1273
+ "F2",
1274
+ "F3",
1275
+ "F4",
1276
+ "F5",
1277
+ "F6",
1278
+ "F7",
1279
+ "F8",
1280
+ "F9",
1281
+ "F10",
1282
+ "F11",
1283
+ "F12"
1284
+ ]);
1285
+ var specialKeys = union(
1286
+ actionKeys,
1287
+ navigationKeys,
1288
+ arrowLeftRightKeys,
1289
+ functionKeys,
1290
+ focusKeys
1291
+ );
1292
+ var PageKeys = ["Home", "End", "PageUp", "PageDown"];
1293
+ var isPagingKey = (key) => PageKeys.includes(key);
1294
+ var isNavigationKey = (key) => {
1295
+ return navigationKeys.has(key);
1296
+ };
1297
+
1298
+ // src/useKeyboardNavigation.ts
1299
+ var headerCellQuery = (colIdx) => `thead th:nth-child(${colIdx + 1})`;
1300
+ var dataCellQuery = (rowIdx, colIdx) => `tbody > tr[aria-rowindex='${rowIdx}'] > td:nth-child(${colIdx + 1})`;
1301
+ var NULL_CELL_POS = [-1, -1];
1302
+ function nextCellPos(key, [rowIdx, colIdx], columnCount, rowCount) {
1303
+ if (key === ArrowUp) {
1304
+ if (rowIdx > -1) {
1305
+ return [rowIdx - 1, colIdx];
1306
+ } else {
1307
+ return [rowIdx, colIdx];
1308
+ }
1309
+ } else if (key === ArrowDown) {
1310
+ if (rowIdx === -1) {
1311
+ return [0, colIdx];
1312
+ } else if (rowIdx === rowCount - 1) {
1313
+ return [rowIdx, colIdx];
1314
+ } else {
1315
+ return [rowIdx + 1, colIdx];
1316
+ }
1317
+ } else if (key === ArrowRight) {
1318
+ if (colIdx < columnCount - 1) {
1319
+ return [rowIdx, colIdx + 1];
1320
+ } else {
1321
+ return [rowIdx, colIdx];
1322
+ }
1323
+ } else if (key === ArrowLeft) {
1324
+ if (colIdx > 0) {
1325
+ return [rowIdx, colIdx - 1];
1326
+ } else {
1327
+ return [rowIdx, colIdx];
1328
+ }
1329
+ }
1330
+ return [rowIdx, colIdx];
1331
+ }
1332
+ var useKeyboardNavigation = ({
1333
+ columnCount = 0,
1334
+ containerRef,
1335
+ disableHighlightOnFocus,
1336
+ data,
1337
+ requestScroll,
1338
+ rowCount = 0,
1339
+ viewportRange
1340
+ }) => {
1341
+ var _a;
1342
+ const { from: viewportFirstRow, to: viewportLastRow } = viewportRange;
1343
+ const focusedCellPos = useRef8([-1, -1]);
1344
+ const focusableCell = useRef8();
1345
+ const activeCellPos = useRef8([-1, 0]);
1346
+ const getTableCell = useCallback12(
1347
+ ([rowIdx, colIdx]) => {
1348
+ var _a2;
1349
+ const cssQuery = rowIdx === -1 ? headerCellQuery(colIdx) : dataCellQuery(rowIdx, colIdx);
1350
+ return (_a2 = containerRef.current) == null ? void 0 : _a2.querySelector(
1351
+ cssQuery
1352
+ );
1353
+ },
1354
+ [containerRef]
1355
+ );
1356
+ const getFocusedCell = (element) => element == null ? void 0 : element.closest("th,td");
1357
+ const getTableCellPos = (tableCell) => {
1358
+ var _a2, _b;
1359
+ if (tableCell.tagName === "TH") {
1360
+ const colIdx = parseInt((_a2 = tableCell.dataset.idx) != null ? _a2 : "-1", 10);
1361
+ return [-1, colIdx];
1362
+ } else {
1363
+ const focusedRow = tableCell.closest("tr");
1364
+ if (focusedRow) {
1365
+ const rowIdx = parseInt((_b = focusedRow.ariaRowIndex) != null ? _b : "-1", 10);
1366
+ const colIdx = Array.from(focusedRow.childNodes).indexOf(tableCell);
1367
+ return [rowIdx, colIdx];
1368
+ }
1369
+ }
1370
+ return NULL_CELL_POS;
1371
+ };
1372
+ const focusCell = useCallback12(
1373
+ (cellPos) => {
1374
+ var _a2;
1375
+ if (containerRef.current) {
1376
+ const activeCell = getTableCell(cellPos);
1377
+ if (activeCell) {
1378
+ if (activeCell !== focusableCell.current) {
1379
+ (_a2 = focusableCell.current) == null ? void 0 : _a2.setAttribute("tabindex", "");
1380
+ focusableCell.current = activeCell;
1381
+ activeCell.setAttribute("tabindex", "0");
1382
+ }
1383
+ activeCell.focus();
1384
+ } else if (!withinRange(cellPos[0], viewportRange)) {
1385
+ focusableCell.current = void 0;
1386
+ requestScroll == null ? void 0 : requestScroll({ type: "scroll-page", direction: "up" });
1387
+ }
1388
+ }
1389
+ },
1390
+ // TODO we recreate this function whenever viewportRange changes, which will
1391
+ // be often whilst scrolling - store range in a a ref ?
1392
+ [containerRef, getTableCell, requestScroll, viewportRange]
1393
+ );
1394
+ const setActiveCell = useCallback12(
1395
+ (rowIdx, colIdx, fromKeyboard = false) => {
1396
+ const pos = [rowIdx, colIdx];
1397
+ activeCellPos.current = pos;
1398
+ focusCell(pos);
1399
+ if (fromKeyboard) {
1400
+ focusedCellPos.current = pos;
1401
+ }
1402
+ },
1403
+ [focusCell]
1404
+ );
1405
+ const virtualizeActiveCell = useCallback12(() => {
1406
+ var _a2;
1407
+ (_a2 = focusableCell.current) == null ? void 0 : _a2.setAttribute("tabindex", "");
1408
+ focusableCell.current = void 0;
1409
+ }, []);
1410
+ const nextPageItemIdx = useCallback12(
1411
+ async (key, cellPos) => {
1412
+ switch (key) {
1413
+ case PageDown:
1414
+ requestScroll == null ? void 0 : requestScroll({ type: "scroll-page", direction: "down" });
1415
+ break;
1416
+ case PageUp:
1417
+ requestScroll == null ? void 0 : requestScroll({ type: "scroll-page", direction: "up" });
1418
+ break;
1419
+ case Home:
1420
+ requestScroll == null ? void 0 : requestScroll({ type: "scroll-end", direction: "home" });
1421
+ break;
1422
+ case End:
1423
+ requestScroll == null ? void 0 : requestScroll({ type: "scroll-end", direction: "end" });
1424
+ break;
1425
+ }
1426
+ return cellPos;
1427
+ },
1428
+ [requestScroll]
1429
+ );
1430
+ const handleFocus = useCallback12(() => {
1431
+ var _a2;
1432
+ if (disableHighlightOnFocus !== true) {
1433
+ if ((_a2 = containerRef.current) == null ? void 0 : _a2.contains(document.activeElement)) {
1434
+ const focusedCell = getFocusedCell(document.activeElement);
1435
+ if (focusedCell) {
1436
+ focusedCellPos.current = getTableCellPos(focusedCell);
1437
+ }
1438
+ }
1439
+ }
1440
+ }, [disableHighlightOnFocus, containerRef]);
1441
+ const navigateChildItems = useCallback12(
1442
+ async (key) => {
1443
+ const [nextRowIdx, nextColIdx] = isPagingKey(key) ? await nextPageItemIdx(key, activeCellPos.current) : nextCellPos(key, activeCellPos.current, columnCount, rowCount);
1444
+ const [rowIdx, colIdx] = activeCellPos.current;
1445
+ if (nextRowIdx !== rowIdx || nextColIdx !== colIdx) {
1446
+ setActiveCell(nextRowIdx, nextColIdx, true);
1447
+ }
1448
+ },
1449
+ [columnCount, nextPageItemIdx, rowCount, setActiveCell]
1450
+ );
1451
+ const handleKeyDown = useCallback12(
1452
+ (e) => {
1453
+ if (data.length > 0 && isNavigationKey(e.key)) {
1454
+ e.preventDefault();
1455
+ e.stopPropagation();
1456
+ void navigateChildItems(e.key);
1457
+ }
1458
+ },
1459
+ [data, navigateChildItems]
1460
+ );
1461
+ const handleClick = useCallback12(
1462
+ // Might not be a cell e.g the Settings button
1463
+ (evt) => {
1464
+ const target = evt.target;
1465
+ const focusedCell = getFocusedCell(target);
1466
+ if (focusedCell) {
1467
+ const [rowIdx, colIdx] = getTableCellPos(focusedCell);
1468
+ setActiveCell(rowIdx, colIdx);
1469
+ }
1470
+ },
1471
+ [setActiveCell]
1472
+ );
1473
+ const containerProps = useMemo3(() => {
1474
+ return {
1475
+ onClick: handleClick,
1476
+ onFocus: handleFocus,
1477
+ onKeyDown: handleKeyDown
1478
+ };
1479
+ }, [handleClick, handleFocus, handleKeyDown]);
1480
+ useLayoutEffect2(() => {
1481
+ const { current: cellPos } = activeCellPos;
1482
+ const withinViewport = cellPos[0] >= viewportFirstRow && cellPos[0] <= viewportLastRow;
1483
+ if (focusableCell.current && !withinViewport) {
1484
+ virtualizeActiveCell();
1485
+ } else if (!focusableCell.current && withinViewport) {
1486
+ focusCell(cellPos);
1487
+ }
1488
+ }, [focusCell, viewportFirstRow, viewportLastRow, virtualizeActiveCell]);
1489
+ const fullyRendered = ((_a = containerRef.current) == null ? void 0 : _a.firstChild) != null;
1490
+ useEffect2(() => {
1491
+ var _a2;
1492
+ if (fullyRendered && focusableCell.current === void 0) {
1493
+ const headerCell = (_a2 = containerRef.current) == null ? void 0 : _a2.querySelector(
1494
+ headerCellQuery(0)
1495
+ );
1496
+ if (headerCell) {
1497
+ headerCell.setAttribute("tabindex", "0");
1498
+ focusableCell.current = headerCell;
1499
+ }
1500
+ }
1501
+ }, [containerRef, fullyRendered]);
1502
+ return containerProps;
1503
+ };
1504
+
1505
+ // src/useMeasuredContainer.ts
1506
+ import { useCallback as useCallback14, useRef as useRef10, useState as useState4 } from "react";
1507
+
1508
+ // src/useResizeObserver.ts
1509
+ import { useCallback as useCallback13, useEffect as useEffect3, useRef as useRef9 } from "react";
1510
+ var observedMap = /* @__PURE__ */ new Map();
1511
+ var getTargetSize = (element, size, dimension) => {
1512
+ switch (dimension) {
1513
+ case "height":
1514
+ return size.height;
1515
+ case "clientHeight":
1516
+ return element.clientHeight;
1517
+ case "clientWidth":
1518
+ return element.clientWidth;
1519
+ case "contentHeight":
1520
+ return size.contentHeight;
1521
+ case "contentWidth":
1522
+ return size.contentWidth;
1523
+ case "scrollHeight":
1524
+ return Math.ceil(element.scrollHeight);
1525
+ case "scrollWidth":
1526
+ return Math.ceil(element.scrollWidth);
1527
+ case "width":
1528
+ return size.width;
1529
+ default:
1530
+ return 0;
1531
+ }
1532
+ };
1533
+ var resizeObserver = new ResizeObserver((entries) => {
1534
+ for (const entry of entries) {
1535
+ const { target, borderBoxSize, contentBoxSize } = entry;
1536
+ const observedTarget = observedMap.get(target);
1537
+ if (observedTarget) {
1538
+ const [{ blockSize: height, inlineSize: width }] = borderBoxSize;
1539
+ const [{ blockSize: contentHeight, inlineSize: contentWidth }] = contentBoxSize;
1540
+ const { onResize, measurements } = observedTarget;
1541
+ let sizeChanged = false;
1542
+ for (const [dimension, size] of Object.entries(measurements)) {
1543
+ const newSize = getTargetSize(
1544
+ target,
1545
+ { height, width, contentHeight, contentWidth },
1546
+ dimension
1547
+ );
1548
+ if (newSize !== size) {
1549
+ sizeChanged = true;
1550
+ measurements[dimension] = newSize;
1551
+ }
1552
+ }
1553
+ if (sizeChanged) {
1554
+ onResize && onResize(measurements);
1555
+ }
1556
+ }
1557
+ }
1558
+ });
1559
+ function useResizeObserver(ref, dimensions, onResize, reportInitialSize = false) {
1560
+ const dimensionsRef = useRef9(dimensions);
1561
+ const measure = useCallback13((target) => {
1562
+ const { width, height } = target.getBoundingClientRect();
1563
+ const { clientWidth: contentWidth, clientHeight: contentHeight } = target;
1564
+ return dimensionsRef.current.reduce(
1565
+ (map, dim) => {
1566
+ map[dim] = getTargetSize(
1567
+ target,
1568
+ { width, height, contentHeight, contentWidth },
1569
+ dim
1570
+ );
1571
+ return map;
1572
+ },
1573
+ {}
1574
+ );
1575
+ }, []);
1576
+ useEffect3(() => {
1577
+ const target = ref.current;
1578
+ async function registerObserver() {
1579
+ observedMap.set(target, { measurements: {} });
1580
+ await document.fonts.ready;
1581
+ const observedTarget = observedMap.get(target);
1582
+ if (observedTarget) {
1583
+ const measurements = measure(target);
1584
+ observedTarget.measurements = measurements;
1585
+ resizeObserver.observe(target);
1586
+ if (reportInitialSize) {
1587
+ onResize(measurements);
1588
+ }
1589
+ } else {
1590
+ console.log(
1591
+ `%cuseResizeObserver an target expected to be under observation wa snot found. This warrants investigation`,
1592
+ "font-weight:bold; color:red;"
1593
+ );
1594
+ }
1595
+ }
1596
+ if (target) {
1597
+ if (observedMap.has(target)) {
1598
+ throw Error(
1599
+ "useResizeObserver attemping to observe same element twice"
1600
+ );
1601
+ }
1602
+ registerObserver();
1603
+ }
1604
+ return () => {
1605
+ if (target && observedMap.has(target)) {
1606
+ resizeObserver.unobserve(target);
1607
+ observedMap.delete(target);
1608
+ }
1609
+ };
1610
+ }, [measure, ref]);
1611
+ useEffect3(() => {
1612
+ const target = ref.current;
1613
+ const record = observedMap.get(target);
1614
+ if (record) {
1615
+ if (dimensionsRef.current !== dimensions) {
1616
+ dimensionsRef.current = dimensions;
1617
+ const measurements = measure(target);
1618
+ record.measurements = measurements;
1619
+ }
1620
+ record.onResize = onResize;
1621
+ }
1622
+ }, [dimensions, measure, ref, onResize]);
1623
+ }
1624
+
1625
+ // src/useMeasuredContainer.ts
1626
+ var ClientWidthHeight = ["clientHeight", "clientWidth"];
1627
+ var isNumber = (val) => Number.isFinite(val);
1628
+ var useMeasuredContainer = ({
1629
+ defaultHeight = 0,
1630
+ defaultWidth = 0,
1631
+ height,
1632
+ width
1633
+ }) => {
1634
+ const containerRef = useRef10(null);
1635
+ const [size, setSize] = useState4({
1636
+ outer: {
1637
+ height: height != null ? height : "100%",
1638
+ width: width != null ? width : "100%"
1639
+ }
1640
+ });
1641
+ const onResize = useCallback14(
1642
+ ({ clientWidth, clientHeight }) => {
1643
+ setSize((currentSize) => {
1644
+ const { inner, outer } = currentSize;
1645
+ return isNumber(clientHeight) && isNumber(clientWidth) && (clientWidth !== (inner == null ? void 0 : inner.width) || clientHeight !== (inner == null ? void 0 : inner.height)) ? {
1646
+ outer,
1647
+ inner: {
1648
+ width: Math.floor(clientWidth) || defaultWidth,
1649
+ height: Math.floor(clientHeight) || defaultHeight
1650
+ }
1651
+ } : currentSize;
1652
+ });
1653
+ },
1654
+ [defaultHeight, defaultWidth]
1655
+ );
1656
+ useResizeObserver(containerRef, ClientWidthHeight, onResize, true);
1657
+ return {
1658
+ containerRef,
1659
+ outerSize: size.outer,
1660
+ innerSize: size.inner
1661
+ };
1662
+ };
1663
+
1664
+ // src/useSelection.ts
1665
+ import { deselectItem, metadataKeys as metadataKeys7, selectItem } from "@vuu-ui/vuu-utils";
1666
+ import { useCallback as useCallback15, useRef as useRef11 } from "react";
1667
+ var { IDX: IDX2, SELECTED: SELECTED3 } = metadataKeys7;
1668
+ var NO_SELECTION = [];
1669
+ var useSelection = ({
1670
+ selectionModel,
1671
+ onSelectionChange
1672
+ }) => {
1673
+ selectionModel === "extended" || selectionModel === "checkbox";
1674
+ const lastActiveRef = useRef11(-1);
1675
+ const selectedRef = useRef11(NO_SELECTION);
1676
+ const handleSelectionChange = useCallback15(
1677
+ (row, rangeSelect, keepExistingSelection) => {
1678
+ const { [IDX2]: idx, [SELECTED3]: isSelected } = row;
1679
+ const { current: active } = lastActiveRef;
1680
+ const { current: selected } = selectedRef;
1681
+ const selectOperation = isSelected ? deselectItem : selectItem;
1682
+ const newSelected = selectOperation(
1683
+ selectionModel,
1684
+ selected,
1685
+ idx,
1686
+ rangeSelect,
1687
+ keepExistingSelection,
1688
+ active
1689
+ );
1690
+ selectedRef.current = newSelected;
1691
+ lastActiveRef.current = idx;
1692
+ if (onSelectionChange) {
1693
+ onSelectionChange(newSelected);
1694
+ }
1695
+ },
1696
+ [onSelectionChange, selectionModel]
1697
+ );
1698
+ return handleSelectionChange;
1699
+ };
1700
+
1701
+ // src/useTableModel.ts
1702
+ import { moveItem } from "@heswell/salt-lab";
1703
+ import {
1704
+ applyFilterToColumns,
1705
+ applyGroupByToColumns,
1706
+ applySortToColumns,
1707
+ findColumn,
1708
+ getCellRenderer,
1709
+ getColumnName,
1710
+ getTableHeadings,
1711
+ getValueFormatter,
1712
+ isFilteredColumn,
1713
+ isGroupColumn as isGroupColumn3,
1714
+ isPinned,
1715
+ isTypeDescriptor,
1716
+ logger,
1717
+ metadataKeys as metadataKeys8,
1718
+ sortPinnedColumns,
1719
+ stripFilterFromColumns
1720
+ } from "@vuu-ui/vuu-utils";
1721
+ import { useReducer } from "react";
1722
+ var { info } = logger("useTableModel");
1723
+ var DEFAULT_COLUMN_WIDTH = 100;
1724
+ var KEY_OFFSET = metadataKeys8.count;
1725
+ var columnWithoutDataType = ({ serverDataType }) => serverDataType === void 0;
1726
+ var getCellRendererForColumn = (column) => {
1727
+ var _a, _b;
1728
+ if (isTypeDescriptor(column.type)) {
1729
+ return getCellRenderer((_b = (_a = column.type) == null ? void 0 : _a.renderer) == null ? void 0 : _b.name);
1730
+ }
1731
+ };
1732
+ var getDataType = (column, columnNames, dataTypes) => {
1733
+ var _a;
1734
+ const index = columnNames.indexOf(column.name);
1735
+ if (index !== -1 && dataTypes[index]) {
1736
+ return dataTypes[index];
1737
+ } else {
1738
+ return (_a = column.serverDataType) != null ? _a : "string";
1739
+ }
1740
+ };
1741
+ var numericTypes = ["int", "long", "double"];
1742
+ var getDefaultAlignment = (serverDataType) => serverDataType === void 0 ? void 0 : numericTypes.includes(serverDataType) ? "right" : "left";
1743
+ var columnReducer = (state, action) => {
1744
+ info == null ? void 0 : info(`GridModelReducer ${action.type}`);
1745
+ switch (action.type) {
1746
+ case "init":
1747
+ return init(action);
1748
+ case "moveColumn":
1749
+ return moveColumn(state, action);
1750
+ case "resizeColumn":
1751
+ return resizeColumn(state, action);
1752
+ case "setTypes":
1753
+ return setTypes(state, action);
1754
+ case "hideColumns":
1755
+ return hideColumns(state, action);
1756
+ case "showColumns":
1757
+ return showColumns(state, action);
1758
+ case "pinColumn":
1759
+ return pinColumn2(state, action);
1760
+ case "updateColumnProp":
1761
+ return updateColumnProp(state, action);
1762
+ case "tableConfig":
1763
+ return updateTableConfig(state, action);
1764
+ default:
1765
+ console.log(`unhandled action ${action.type}`);
1766
+ return state;
1767
+ }
1768
+ };
1769
+ var useTableModel = (tableConfig, dataSourceConfig) => {
1770
+ const [state, dispatchColumnAction] = useReducer(columnReducer, { tableConfig, dataSourceConfig }, init);
1771
+ return {
1772
+ columns: state.columns,
1773
+ dispatchColumnAction,
1774
+ headings: state.headings
1775
+ };
1776
+ };
1777
+ function init({ dataSourceConfig, tableConfig }) {
1778
+ const columns = tableConfig.columns.map(
1779
+ toKeyedColumWithDefaults(tableConfig)
1780
+ );
1781
+ const maybePinnedColumns = columns.some(isPinned) ? sortPinnedColumns(columns) : columns;
1782
+ const state = {
1783
+ columns: maybePinnedColumns,
1784
+ headings: getTableHeadings(maybePinnedColumns)
1785
+ };
1786
+ if (dataSourceConfig) {
1787
+ const { columns: columns2, ...rest } = dataSourceConfig;
1788
+ return updateTableConfig(state, {
1789
+ type: "tableConfig",
1790
+ ...rest
1791
+ });
1792
+ } else {
1793
+ return state;
1794
+ }
1795
+ }
1796
+ var getLabel = (label, columnFormatHeader) => {
1797
+ if (columnFormatHeader === "uppercase") {
1798
+ return label.toUpperCase();
1799
+ } else if (columnFormatHeader === "capitalize") {
1800
+ return label[0].toUpperCase() + label.slice(1).toLowerCase();
1801
+ }
1802
+ return label;
1803
+ };
1804
+ var toKeyedColumWithDefaults = (options) => (column, index) => {
1805
+ const { columnDefaultWidth = DEFAULT_COLUMN_WIDTH, columnFormatHeader } = options;
1806
+ const {
1807
+ align = getDefaultAlignment(column.serverDataType),
1808
+ key,
1809
+ name,
1810
+ label = name,
1811
+ width = columnDefaultWidth,
1812
+ ...rest
1813
+ } = column;
1814
+ const keyedColumnWithDefaults = {
1815
+ ...rest,
1816
+ align,
1817
+ CellRenderer: getCellRendererForColumn(column),
1818
+ label: getLabel(label, columnFormatHeader),
1819
+ key: key != null ? key : index + KEY_OFFSET,
1820
+ name,
1821
+ originalIdx: index,
1822
+ valueFormatter: getValueFormatter(column),
1823
+ width
1824
+ };
1825
+ if (isGroupColumn3(keyedColumnWithDefaults)) {
1826
+ keyedColumnWithDefaults.columns = keyedColumnWithDefaults.columns.map(
1827
+ (col) => toKeyedColumWithDefaults(options)(col, col.key)
1828
+ );
1829
+ }
1830
+ return keyedColumnWithDefaults;
1831
+ };
1832
+ function moveColumn(state, { column, moveBy, moveTo }) {
1833
+ const { columns } = state;
1834
+ if (typeof moveBy === "number") {
1835
+ const idx = columns.indexOf(column);
1836
+ const newColumns = columns.slice();
1837
+ const [movedColumns] = newColumns.splice(idx, 1);
1838
+ newColumns.splice(idx + moveBy, 0, movedColumns);
1839
+ return {
1840
+ ...state,
1841
+ columns: newColumns
1842
+ };
1843
+ } else if (typeof moveTo === "number") {
1844
+ const index = columns.indexOf(column);
1845
+ return {
1846
+ ...state,
1847
+ columns: moveItem(columns, index, moveTo)
1848
+ };
1849
+ }
1850
+ return state;
1851
+ }
1852
+ function hideColumns(state, { columns }) {
1853
+ if (columns.some((col) => col.hidden !== true)) {
1854
+ return columns.reduce((s, c) => {
1855
+ if (c.hidden !== true) {
1856
+ return updateColumnProp(s, {
1857
+ type: "updateColumnProp",
1858
+ column: c,
1859
+ hidden: true
1860
+ });
1861
+ } else {
1862
+ return s;
1863
+ }
1864
+ }, state);
1865
+ } else {
1866
+ return state;
1867
+ }
1868
+ }
1869
+ function showColumns(state, { columns }) {
1870
+ if (columns.some((col) => col.hidden)) {
1871
+ return columns.reduce((s, c) => {
1872
+ if (c.hidden) {
1873
+ return updateColumnProp(s, {
1874
+ type: "updateColumnProp",
1875
+ column: c,
1876
+ hidden: false
1877
+ });
1878
+ } else {
1879
+ return s;
1880
+ }
1881
+ }, state);
1882
+ } else {
1883
+ return state;
1884
+ }
1885
+ }
1886
+ function resizeColumn(state, { column, phase, width }) {
1887
+ const type = "updateColumnProp";
1888
+ const resizing = phase !== "end";
1889
+ switch (phase) {
1890
+ case "begin":
1891
+ case "end":
1892
+ return updateColumnProp(state, { type, column, resizing });
1893
+ case "resize":
1894
+ return updateColumnProp(state, { type, column, width });
1895
+ default:
1896
+ throw Error(`useTableModel.resizeColumn, invalid resizePhase ${phase}`);
1897
+ }
1898
+ }
1899
+ function setTypes(state, { columnNames, serverDataTypes }) {
1900
+ const { columns } = state;
1901
+ if (columns.some(columnWithoutDataType)) {
1902
+ const cols = columns.map((column) => {
1903
+ var _a;
1904
+ const serverDataType = getDataType(column, columnNames, serverDataTypes);
1905
+ return {
1906
+ ...column,
1907
+ align: (_a = column.align) != null ? _a : getDefaultAlignment(serverDataType),
1908
+ serverDataType
1909
+ };
1910
+ });
1911
+ return {
1912
+ ...state,
1913
+ columns: cols
1914
+ };
1915
+ } else {
1916
+ return state;
1917
+ }
1918
+ }
1919
+ function pinColumn2(state, action) {
1920
+ let { columns } = state;
1921
+ const { column, pin } = action;
1922
+ const targetColumn = columns.find((col) => col.name === column.name);
1923
+ if (targetColumn) {
1924
+ columns = replaceColumn(columns, { ...targetColumn, pin });
1925
+ columns = sortPinnedColumns(columns);
1926
+ return {
1927
+ ...state,
1928
+ columns
1929
+ };
1930
+ } else {
1931
+ return state;
1932
+ }
1933
+ }
1934
+ function updateColumnProp(state, action) {
1935
+ let { columns } = state;
1936
+ const { align, column, hidden, label, resizing, width } = action;
1937
+ const targetColumn = columns.find((col) => col.name === column.name);
1938
+ if (targetColumn) {
1939
+ if (align === "left" || align === "right") {
1940
+ columns = replaceColumn(columns, { ...targetColumn, align });
1941
+ }
1942
+ if (typeof label === "string") {
1943
+ columns = replaceColumn(columns, { ...targetColumn, label });
1944
+ }
1945
+ if (typeof resizing === "boolean") {
1946
+ columns = replaceColumn(columns, { ...targetColumn, resizing });
1947
+ }
1948
+ if (typeof hidden === "boolean") {
1949
+ columns = replaceColumn(columns, { ...targetColumn, hidden });
1950
+ }
1951
+ if (typeof width === "number") {
1952
+ columns = replaceColumn(columns, { ...targetColumn, width });
1953
+ }
1954
+ }
1955
+ return {
1956
+ ...state,
1957
+ columns
1958
+ };
1959
+ }
1960
+ function updateTableConfig(state, { columns, confirmed, filter, groupBy, sort }) {
1961
+ const hasColumns = columns && columns.length > 0;
1962
+ const hasGroupBy = groupBy !== void 0;
1963
+ const hasFilter = typeof (filter == null ? void 0 : filter.filter) === "string";
1964
+ const hasSort = sort && sort.sortDefs.length > 0;
1965
+ let result = state;
1966
+ if (hasColumns) {
1967
+ result = {
1968
+ ...state,
1969
+ columns: columns.map((colName, index) => {
1970
+ const columnName = getColumnName(colName);
1971
+ const key = index + KEY_OFFSET;
1972
+ const col = findColumn(result.columns, columnName);
1973
+ if (col) {
1974
+ if (col.key === key) {
1975
+ return col;
1976
+ } else {
1977
+ return {
1978
+ ...col,
1979
+ key
1980
+ };
1981
+ }
1982
+ }
1983
+ throw Error(`useTableModel column ${colName} not found`);
1984
+ })
1985
+ };
1986
+ }
1987
+ if (hasGroupBy) {
1988
+ result = {
1989
+ ...state,
1990
+ columns: applyGroupByToColumns(result.columns, groupBy, confirmed)
1991
+ };
1992
+ }
1993
+ if (hasSort) {
1994
+ result = {
1995
+ ...state,
1996
+ columns: applySortToColumns(result.columns, sort)
1997
+ };
1998
+ }
1999
+ if (hasFilter) {
2000
+ result = {
2001
+ ...state,
2002
+ columns: applyFilterToColumns(result.columns, filter)
2003
+ };
2004
+ } else if (result.columns.some(isFilteredColumn)) {
2005
+ result = {
2006
+ ...state,
2007
+ columns: stripFilterFromColumns(result.columns)
2008
+ };
2009
+ }
2010
+ return result;
2011
+ }
2012
+ function replaceColumn(state, column) {
2013
+ return state.map((col) => col.name === column.name ? column : col);
2014
+ }
2015
+
2016
+ // src/useTableScroll.ts
2017
+ import { useCallback as useCallback16, useRef as useRef12 } from "react";
2018
+ var getPctScroll = (container) => {
2019
+ const { scrollLeft, scrollTop } = container;
2020
+ const { clientHeight, clientWidth, scrollHeight, scrollWidth } = container;
2021
+ const pctScrollLeft = scrollLeft / (scrollWidth - clientWidth);
2022
+ const pctScrollTop = scrollTop / (scrollHeight - clientHeight);
2023
+ return [pctScrollLeft, pctScrollTop, scrollLeft, scrollTop];
2024
+ };
2025
+ var getMaxScroll = (container) => {
2026
+ const { clientHeight, clientWidth, scrollHeight, scrollWidth } = container;
2027
+ return [scrollWidth - clientWidth, scrollHeight - clientHeight];
2028
+ };
2029
+ var useTableScroll = ({
2030
+ onHorizontalScroll,
2031
+ onVerticalScroll,
2032
+ viewport
2033
+ }) => {
2034
+ const scrollPosRef = useRef12({ scrollTop: 0, scrollLeft: 0 });
2035
+ const scrollbarContainerRef = useRef12(null);
2036
+ const contentContainerRef = useRef12(null);
2037
+ const tableContainerRef = useRef12(null);
2038
+ const contentContainerScrolledRef = useRef12(false);
2039
+ const {
2040
+ maxScrollContainerScrollHorizontal: maxScrollLeft,
2041
+ maxScrollContainerScrollVertical: maxScrollTop
2042
+ } = viewport;
2043
+ const scrollTable = useCallback16(
2044
+ (scrollLeft, scrollTop) => {
2045
+ const { current: tableContainer } = tableContainerRef;
2046
+ if (tableContainer) {
2047
+ tableContainer.scrollTo({
2048
+ top: scrollTop,
2049
+ left: scrollLeft,
2050
+ behavior: "auto"
2051
+ });
2052
+ }
2053
+ },
2054
+ [tableContainerRef]
2055
+ );
2056
+ const handleTableContainerScroll = useCallback16(() => {
2057
+ const { current: tableContainer } = tableContainerRef;
2058
+ if (tableContainer) {
2059
+ const { current: scrollPos } = scrollPosRef;
2060
+ const { scrollLeft, scrollTop } = tableContainer;
2061
+ if (scrollPos.scrollTop !== scrollTop) {
2062
+ scrollPos.scrollTop = scrollTop;
2063
+ onVerticalScroll == null ? void 0 : onVerticalScroll(scrollTop);
2064
+ }
2065
+ if (scrollPos.scrollLeft !== scrollLeft) {
2066
+ scrollPos.scrollLeft = scrollLeft;
2067
+ onHorizontalScroll == null ? void 0 : onHorizontalScroll(scrollLeft);
2068
+ }
2069
+ }
2070
+ }, [onHorizontalScroll, onVerticalScroll]);
2071
+ const handleContentContainerScroll = useCallback16(() => {
2072
+ const { current: rootContainer } = contentContainerRef;
2073
+ const { current: scrollContainer } = scrollbarContainerRef;
2074
+ if (rootContainer && scrollContainer) {
2075
+ const [pctScrollLeft, pctScrollTop, scrollLeft, scrollTop] = getPctScroll(rootContainer);
2076
+ contentContainerScrolledRef.current = true;
2077
+ scrollContainer.scrollLeft = Math.round(pctScrollLeft * maxScrollLeft);
2078
+ scrollContainer.scrollTop = Math.round(pctScrollTop * maxScrollTop);
2079
+ scrollTable(scrollLeft, scrollTop);
2080
+ }
2081
+ }, [
2082
+ maxScrollLeft,
2083
+ maxScrollTop,
2084
+ contentContainerRef,
2085
+ scrollbarContainerRef,
2086
+ scrollTable
2087
+ ]);
2088
+ const handleScrollbarContainerScroll = useCallback16(() => {
2089
+ const { current: contentContainer } = contentContainerRef;
2090
+ const { current: scrollbarContainer } = scrollbarContainerRef;
2091
+ const { current: contentContainerScrolled } = contentContainerScrolledRef;
2092
+ if (contentContainerScrolled) {
2093
+ contentContainerScrolledRef.current = false;
2094
+ } else if (contentContainer && scrollbarContainer) {
2095
+ const [pctScrollLeft, pctScrollTop] = getPctScroll(scrollbarContainer);
2096
+ const [maxScrollLeft2, maxScrollTop2] = getMaxScroll(contentContainer);
2097
+ const rootScrollLeft = Math.round(pctScrollLeft * maxScrollLeft2);
2098
+ const rootScrollTop = Math.round(pctScrollTop * maxScrollTop2);
2099
+ contentContainer.scrollTo({
2100
+ left: rootScrollLeft,
2101
+ top: rootScrollTop,
2102
+ behavior: "auto"
2103
+ });
2104
+ scrollTable(rootScrollLeft, rootScrollTop);
2105
+ }
2106
+ }, [contentContainerRef, scrollbarContainerRef, scrollTable]);
2107
+ const requestScroll = useCallback16(
2108
+ (scrollRequest) => {
2109
+ const { current: scrollbarContainer } = scrollbarContainerRef;
2110
+ if (scrollbarContainer) {
2111
+ contentContainerScrolledRef.current = false;
2112
+ if (scrollRequest.type === "scroll-page") {
2113
+ const { clientHeight, scrollLeft, scrollTop } = scrollbarContainer;
2114
+ const { direction } = scrollRequest;
2115
+ const scrollBy = direction === "down" ? clientHeight : -clientHeight;
2116
+ const newScrollTop = Math.min(
2117
+ Math.max(0, scrollTop + scrollBy),
2118
+ viewport.maxScrollContainerScrollVertical
2119
+ );
2120
+ scrollbarContainer.scrollTo({
2121
+ top: newScrollTop,
2122
+ left: scrollLeft,
2123
+ behavior: "auto"
2124
+ });
2125
+ } else if (scrollRequest.type === "scroll-end") {
2126
+ const { direction } = scrollRequest;
2127
+ const scrollTo = direction === "end" ? viewport.maxScrollContainerScrollVertical : 0;
2128
+ scrollbarContainer.scrollTo({
2129
+ top: scrollTo,
2130
+ left: scrollbarContainer.scrollLeft,
2131
+ behavior: "auto"
2132
+ });
2133
+ }
2134
+ }
2135
+ },
2136
+ [viewport.maxScrollContainerScrollVertical]
2137
+ );
2138
+ return {
2139
+ /** Ref to be assigned to ScrollbarContainer */
2140
+ scrollbarContainerRef,
2141
+ /** Scroll handler to be attached to ScrollbarContainer */
2142
+ onScrollbarContainerScroll: handleScrollbarContainerScroll,
2143
+ /** Ref to be assigned to ContentContainer */
2144
+ contentContainerRef,
2145
+ /** Scroll handler to be attached to ContentContainer */
2146
+ onContentContainerScroll: handleContentContainerScroll,
2147
+ /** Ref to be assigned to TableContainer */
2148
+ tableContainerRef,
2149
+ /** Scroll handler to be attached to TableContainer */
2150
+ onTableContainerScroll: handleTableContainerScroll,
2151
+ /** Scroll the table */
2152
+ requestScroll
2153
+ };
2154
+ };
2155
+
2156
+ // src/useTableViewport.ts
2157
+ import { useMemo as useMemo4 } from "react";
2158
+ var UNMEASURED_VIEWPORT = {
2159
+ fillerHeight: 0,
2160
+ maxScrollContainerScrollHorizontal: 0,
2161
+ maxScrollContainerScrollVertical: 0,
2162
+ pinnedWidthLeft: 0,
2163
+ pinnedWidthRight: 0,
2164
+ rowCount: 0,
2165
+ scrollContentHeight: 0,
2166
+ scrollbarSize: 0,
2167
+ scrollContentWidth: 0,
2168
+ totalHeaderHeight: 0
2169
+ };
2170
+ var measurePinnedColumns = (columns) => {
2171
+ let pinnedWidthLeft = 0;
2172
+ let pinnedWidthRight = 0;
2173
+ let unpinnedWidth = 0;
2174
+ for (const column of columns) {
2175
+ const { hidden, pin, width } = column;
2176
+ const visibleWidth = hidden ? 0 : width;
2177
+ if (pin === "left") {
2178
+ pinnedWidthLeft += visibleWidth;
2179
+ } else if (pin === "right") {
2180
+ pinnedWidthRight += visibleWidth;
2181
+ } else {
2182
+ unpinnedWidth += visibleWidth;
2183
+ }
2184
+ }
2185
+ return { pinnedWidthLeft, pinnedWidthRight, unpinnedWidth };
2186
+ };
2187
+ var useTableViewport = ({
2188
+ columns,
2189
+ headerHeight,
2190
+ headings,
2191
+ rowCount,
2192
+ rowHeight,
2193
+ size
2194
+ }) => {
2195
+ const { pinnedWidthLeft, pinnedWidthRight, unpinnedWidth } = useMemo4(
2196
+ () => measurePinnedColumns(columns),
2197
+ [columns]
2198
+ );
2199
+ const viewportMeasurements = useMemo4(() => {
2200
+ var _a;
2201
+ if (size) {
2202
+ const headingsDepth = headings.length;
2203
+ const scrollbarSize = 15;
2204
+ const contentHeight = rowCount * rowHeight;
2205
+ const scrollContentWidth = pinnedWidthLeft + unpinnedWidth + pinnedWidthRight;
2206
+ const maxScrollContainerScrollVertical = contentHeight + headerHeight - (((_a = size == null ? void 0 : size.height) != null ? _a : 0) - headerHeight - scrollbarSize);
2207
+ const maxScrollContainerScrollHorizontal = scrollContentWidth - size.width + pinnedWidthLeft;
2208
+ const visibleRows = (size.height - headerHeight) / rowHeight;
2209
+ const count = Number.isInteger(visibleRows) ? visibleRows + 1 : Math.ceil(visibleRows);
2210
+ return {
2211
+ fillerHeight: (rowCount - count) * rowHeight,
2212
+ maxScrollContainerScrollHorizontal,
2213
+ maxScrollContainerScrollVertical,
2214
+ pinnedWidthLeft,
2215
+ pinnedWidthRight,
2216
+ rowCount: count,
2217
+ scrollContentHeight: headerHeight + contentHeight + scrollbarSize,
2218
+ scrollbarSize,
2219
+ scrollContentWidth,
2220
+ totalHeaderHeight: headerHeight * (1 + headingsDepth)
2221
+ };
2222
+ } else {
2223
+ return UNMEASURED_VIEWPORT;
2224
+ }
2225
+ }, [
2226
+ headerHeight,
2227
+ headings.length,
2228
+ pinnedWidthLeft,
2229
+ pinnedWidthRight,
2230
+ rowCount,
2231
+ rowHeight,
2232
+ size,
2233
+ unpinnedWidth
2234
+ ]);
2235
+ return viewportMeasurements;
2236
+ };
2237
+
2238
+ // src/useVirtualViewport.ts
2239
+ import { getColumnsInViewport, itemsChanged } from "@vuu-ui/vuu-utils";
2240
+ import { useCallback as useCallback17, useEffect as useEffect4, useMemo as useMemo5, useRef as useRef13, useState as useState5 } from "react";
2241
+ var useVirtualViewport = ({
2242
+ columns,
2243
+ rowHeight,
2244
+ setRange,
2245
+ viewportMeasurements
2246
+ }) => {
2247
+ const firstRowRef = useRef13(-1);
2248
+ const {
2249
+ rowCount: viewportRowCount,
2250
+ scrollContentWidth: contentWidth,
2251
+ maxScrollContainerScrollHorizontal
2252
+ } = viewportMeasurements;
2253
+ const availableWidth = contentWidth - maxScrollContainerScrollHorizontal;
2254
+ const scrollLeftRef = useRef13(0);
2255
+ const [visibleColumns, preSpan] = useMemo5(
2256
+ () => getColumnsInViewport(
2257
+ columns,
2258
+ scrollLeftRef.current,
2259
+ scrollLeftRef.current + availableWidth
2260
+ ),
2261
+ [availableWidth, columns]
2262
+ );
2263
+ const preSpanRef = useRef13(preSpan);
2264
+ useEffect4(() => {
2265
+ setColumnsWithinViewport(visibleColumns);
2266
+ }, [visibleColumns]);
2267
+ const [columnsWithinViewport, setColumnsWithinViewport] = useState5(visibleColumns);
2268
+ const handleHorizontalScroll = useCallback17(
2269
+ (scrollLeft) => {
2270
+ scrollLeftRef.current = scrollLeft;
2271
+ const [visibleColumns2, pre] = getColumnsInViewport(
2272
+ columns,
2273
+ scrollLeft,
2274
+ scrollLeft + availableWidth
2275
+ );
2276
+ if (itemsChanged(columnsWithinViewport, visibleColumns2)) {
2277
+ preSpanRef.current = pre;
2278
+ setColumnsWithinViewport(visibleColumns2);
2279
+ }
2280
+ },
2281
+ [availableWidth, columns, columnsWithinViewport]
2282
+ );
2283
+ const handleVerticalScroll = useCallback17(
2284
+ (scrollTop) => {
2285
+ const firstRow = Math.floor(scrollTop / rowHeight);
2286
+ if (firstRow !== firstRowRef.current) {
2287
+ firstRowRef.current = firstRow;
2288
+ setRange({ from: firstRow, to: firstRow + viewportRowCount });
2289
+ }
2290
+ },
2291
+ [rowHeight, setRange, viewportRowCount]
2292
+ );
2293
+ return {
2294
+ columnsWithinViewport,
2295
+ onHorizontalScroll: handleHorizontalScroll,
2296
+ onVerticalScroll: handleVerticalScroll,
2297
+ /** number of leading columns not rendered because of virtualization */
2298
+ virtualColSpan: preSpanRef.current
2299
+ };
2300
+ };
2301
+
2302
+ // src/useDataTable.ts
2303
+ var NO_ROWS = [];
2304
+ var { KEY: KEY2, IS_EXPANDED: IS_EXPANDED2, IS_LEAF: IS_LEAF2 } = metadataKeys9;
2305
+ var useDataTable = ({
2306
+ config,
2307
+ dataSource,
2308
+ headerHeight,
2309
+ onConfigChange,
2310
+ onFeatureEnabled,
2311
+ onFeatureInvocation,
2312
+ onSelectionChange,
2313
+ renderBufferSize = 0,
2314
+ rowHeight,
2315
+ selectionModel,
2316
+ tableLayout,
2317
+ ...measuredProps
2318
+ }) => {
2319
+ var _a, _b;
2320
+ const [rowCount, setRowCount] = useState6(0);
2321
+ const expectConfigChangeRef = useRef14(false);
2322
+ const dataSourceRef = useRef14();
2323
+ dataSourceRef.current = dataSource;
2324
+ if (dataSource === void 0) {
2325
+ throw Error("no data source provided to DataTable");
2326
+ }
2327
+ const containerMeasurements = useMeasuredContainer(measuredProps);
2328
+ const onDataRowcountChange = useCallback18((size) => {
2329
+ setRowCount(size);
2330
+ }, []);
2331
+ const { columns, dispatchColumnAction, headings } = useTableModel(
2332
+ config,
2333
+ dataSource.config
2334
+ );
2335
+ const handlePersistentColumnOperation = useCallback18(
2336
+ (action) => {
2337
+ expectConfigChangeRef.current = true;
2338
+ dispatchColumnAction(action);
2339
+ },
2340
+ [dispatchColumnAction]
2341
+ );
2342
+ const handleContextMenuAction = useContextMenu3({
2343
+ dataSource,
2344
+ onPersistentColumnOperation: handlePersistentColumnOperation
2345
+ });
2346
+ const viewportMeasurements = useTableViewport({
2347
+ columns,
2348
+ headerHeight,
2349
+ headings,
2350
+ rowCount,
2351
+ rowHeight,
2352
+ size: containerMeasurements.innerSize
2353
+ });
2354
+ const onSubscribed = useCallback18(
2355
+ (subscription) => {
2356
+ if (subscription.tableMeta) {
2357
+ const { columns: columnNames, dataTypes: serverDataTypes } = subscription.tableMeta;
2358
+ expectConfigChangeRef.current = true;
2359
+ dispatchColumnAction({
2360
+ type: "setTypes",
2361
+ columnNames,
2362
+ serverDataTypes
2363
+ });
2364
+ }
2365
+ },
2366
+ [dispatchColumnAction]
2367
+ );
2368
+ const handleSelectionChange = useCallback18(
2369
+ (selected) => {
2370
+ dataSource.select(selected);
2371
+ onSelectionChange == null ? void 0 : onSelectionChange(selected);
2372
+ },
2373
+ [dataSource, onSelectionChange]
2374
+ );
2375
+ const handleRowClick = useSelection({
2376
+ onSelectionChange: handleSelectionChange,
2377
+ selectionModel
2378
+ });
2379
+ const { data, getSelectedRows, range, setRange } = useDataSource({
2380
+ dataSource,
2381
+ onFeatureEnabled,
2382
+ onFeatureInvocation,
2383
+ onSubscribed,
2384
+ onSizeChange: onDataRowcountChange,
2385
+ renderBufferSize,
2386
+ viewportRowCount: viewportMeasurements.rowCount
2387
+ });
2388
+ const dataRef = useRef14();
2389
+ dataRef.current = data;
2390
+ const handleSort = useCallback18(
2391
+ (column, extendSort = false, sortType) => {
2392
+ if (dataSource) {
2393
+ dataSource.sort = applySort(
2394
+ dataSource.sort,
2395
+ column,
2396
+ extendSort,
2397
+ sortType
2398
+ );
2399
+ }
2400
+ },
2401
+ [dataSource]
2402
+ );
2403
+ const handleColumnResize = useCallback18(
2404
+ (phase, columnName, width) => {
2405
+ const column = columns.find((column2) => column2.name === columnName);
2406
+ if (column) {
2407
+ if (phase === "end") {
2408
+ expectConfigChangeRef.current = true;
2409
+ }
2410
+ dispatchColumnAction({
2411
+ type: "resizeColumn",
2412
+ phase,
2413
+ column,
2414
+ width
2415
+ });
2416
+ } else {
2417
+ throw Error(
2418
+ `useDataTable.handleColumnResize, column ${columnName} not found`
2419
+ );
2420
+ }
2421
+ },
2422
+ [columns, dispatchColumnAction]
2423
+ );
2424
+ const handleToggleGroup = useCallback18(
2425
+ (row, column) => {
2426
+ const isJson = isJsonGroup2(column, row);
2427
+ const key = row[KEY2];
2428
+ if (row[IS_EXPANDED2]) {
2429
+ dataSource.closeTreeNode(key, true);
2430
+ if (isJson) {
2431
+ const idx = columns.indexOf(column);
2432
+ const rows = dataSource.getRowsAtDepth(idx + 1);
2433
+ if (!rows.some((row2) => row2[IS_EXPANDED2] || row2[IS_LEAF2])) {
2434
+ dispatchColumnAction({
2435
+ type: "hideColumns",
2436
+ columns: columns.slice(idx + 2)
2437
+ });
2438
+ }
2439
+ }
2440
+ } else {
2441
+ dataSource.openTreeNode(key);
2442
+ if (isJson) {
2443
+ const childRows = dataSource.getChildRows(key);
2444
+ const idx = columns.indexOf(column) + 1;
2445
+ const columnsToShow = [columns[idx]];
2446
+ if (childRows.some((row2) => row2[IS_LEAF2])) {
2447
+ columnsToShow.push(columns[idx + 1]);
2448
+ }
2449
+ if (columnsToShow.some((col) => col.hidden)) {
2450
+ dispatchColumnAction({
2451
+ type: "showColumns",
2452
+ columns: columnsToShow
2453
+ });
2454
+ }
2455
+ }
2456
+ }
2457
+ },
2458
+ [columns, dataSource, dispatchColumnAction]
2459
+ );
2460
+ const {
2461
+ onVerticalScroll,
2462
+ onHorizontalScroll,
2463
+ columnsWithinViewport,
2464
+ virtualColSpan
2465
+ } = useVirtualViewport({
2466
+ columns,
2467
+ rowHeight,
2468
+ setRange,
2469
+ viewportMeasurements
2470
+ });
2471
+ const { requestScroll, ...scrollProps } = useTableScroll({
2472
+ onHorizontalScroll,
2473
+ // onRangeChange: setRange,
2474
+ onVerticalScroll,
2475
+ viewport: viewportMeasurements,
2476
+ viewportHeight: ((_b = (_a = containerMeasurements.innerSize) == null ? void 0 : _a.height) != null ? _b : 0) - headerHeight
2477
+ });
2478
+ const containerProps = useKeyboardNavigation({
2479
+ columnCount: columns.length,
2480
+ containerRef: containerMeasurements.containerRef,
2481
+ data,
2482
+ requestScroll,
2483
+ rowCount: dataSource == null ? void 0 : dataSource.size,
2484
+ viewportRange: range
2485
+ });
2486
+ const handleRemoveColumnFromGroupBy = useCallback18(
2487
+ (column) => {
2488
+ if (dataSource && dataSource.groupBy.includes(column.name)) {
2489
+ dataSource.groupBy = dataSource.groupBy.filter(
2490
+ (columnName) => columnName !== column.name
2491
+ );
2492
+ }
2493
+ },
2494
+ [dataSource]
2495
+ );
2496
+ const handleDropColumn = useCallback18(
2497
+ (fromIndex, toIndex) => {
2498
+ const column = dataSource.columns[fromIndex];
2499
+ const columns2 = moveItem2(dataSource.columns, column, toIndex);
2500
+ if (columns2 !== dataSource.columns) {
2501
+ dataSource.columns = columns2;
2502
+ dispatchColumnAction({ type: "tableConfig", columns: columns2 });
2503
+ }
2504
+ },
2505
+ [dataSource, dispatchColumnAction]
2506
+ );
2507
+ const draggableHook = useDraggableColumn({
2508
+ onDrop: handleDropColumn,
2509
+ tableContainerRef: scrollProps.tableContainerRef,
2510
+ tableLayout
2511
+ });
2512
+ useEffect5(() => {
2513
+ if (dataSourceRef.current) {
2514
+ expectConfigChangeRef.current = true;
2515
+ dispatchColumnAction({
2516
+ type: "init",
2517
+ tableConfig: config,
2518
+ dataSourceConfig: dataSourceRef.current.config
2519
+ });
2520
+ }
2521
+ }, [config, dispatchColumnAction]);
2522
+ useEffect5(() => {
2523
+ dataSource.on("config", (config2, confirmed) => {
2524
+ expectConfigChangeRef.current = true;
2525
+ dispatchColumnAction({
2526
+ type: "tableConfig",
2527
+ ...config2,
2528
+ confirmed
2529
+ });
2530
+ });
2531
+ }, [dataSource, dispatchColumnAction]);
2532
+ useMemo6(() => {
2533
+ if (expectConfigChangeRef.current) {
2534
+ onConfigChange == null ? void 0 : onConfigChange({
2535
+ ...config,
2536
+ columns
2537
+ });
2538
+ expectConfigChangeRef.current = false;
2539
+ }
2540
+ }, [columns, config, onConfigChange]);
2541
+ const showContextMenu = usePopupContextMenu();
2542
+ const onContextMenu = useCallback18(
2543
+ (evt) => {
2544
+ var _a2;
2545
+ const { current: currentData } = dataRef;
2546
+ const { current: currentDataSource } = dataSourceRef;
2547
+ const target = evt.target;
2548
+ const cellEl = target == null ? void 0 : target.closest("td");
2549
+ const rowEl = target == null ? void 0 : target.closest("tr");
2550
+ if (cellEl && rowEl && currentData && currentDataSource) {
2551
+ const { columns: columns2, selectedRowsCount } = currentDataSource;
2552
+ const columnMap = buildColumnMap(columns2);
2553
+ const rowIndex = parseInt((_a2 = rowEl.ariaRowIndex) != null ? _a2 : "-1");
2554
+ const cellIndex = Array.from(rowEl.childNodes).indexOf(cellEl);
2555
+ const row = currentData.find(([idx]) => idx === rowIndex);
2556
+ const columnName = columns2[cellIndex];
2557
+ showContextMenu(evt, "grid", {
2558
+ columnMap,
2559
+ columnName,
2560
+ row,
2561
+ selectedRows: selectedRowsCount === 0 ? NO_ROWS : getSelectedRows(),
2562
+ viewport: dataSource == null ? void 0 : dataSource.viewport
2563
+ });
2564
+ }
2565
+ },
2566
+ [dataSource == null ? void 0 : dataSource.viewport, getSelectedRows, showContextMenu]
2567
+ );
2568
+ return {
2569
+ containerMeasurements,
2570
+ containerProps,
2571
+ columns,
2572
+ columnsWithinViewport,
2573
+ data,
2574
+ dispatchColumnAction,
2575
+ handleContextMenuAction,
2576
+ headings,
2577
+ onColumnResize: handleColumnResize,
2578
+ onContextMenu,
2579
+ onRemoveColumnFromGroupBy: handleRemoveColumnFromGroupBy,
2580
+ onRowClick: handleRowClick,
2581
+ onSort: handleSort,
2582
+ onToggleGroup: handleToggleGroup,
2583
+ virtualColSpan,
2584
+ scrollProps,
2585
+ rowCount,
2586
+ viewportMeasurements,
2587
+ ...draggableHook
2588
+ };
2589
+ };
2590
+
2591
+ // src/Table.tsx
2592
+ import cx8 from "classnames";
2593
+ import { isDataLoading } from "@vuu-ui/vuu-utils";
2594
+ import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
2595
+ var classBase7 = "vuuTable";
2596
+ var Table = ({
2597
+ allowConfigEditing: showSettings = false,
2598
+ className: classNameProp,
2599
+ config,
2600
+ dataSource,
2601
+ headerHeight = 25,
2602
+ height,
2603
+ id: idProp,
2604
+ onConfigChange,
2605
+ onFeatureEnabled,
2606
+ onFeatureInvocation,
2607
+ onSelectionChange,
2608
+ onShowConfigEditor: onShowSettings,
2609
+ renderBufferSize = 0,
2610
+ rowHeight = 20,
2611
+ selectionModel = "extended",
2612
+ style: styleProp,
2613
+ tableLayout: tableLayoutProp = "row",
2614
+ width,
2615
+ zebraStripes = false,
2616
+ ...props
2617
+ }) => {
2618
+ const id = useIdMemo(idProp);
2619
+ const {
2620
+ containerMeasurements: { containerRef, innerSize, outerSize },
2621
+ containerProps,
2622
+ dispatchColumnAction,
2623
+ draggable,
2624
+ draggedItemIndex,
2625
+ handleContextMenuAction,
2626
+ scrollProps,
2627
+ tableLayout,
2628
+ viewportMeasurements,
2629
+ ...tableProps
2630
+ } = useDataTable({
2631
+ config,
2632
+ dataSource,
2633
+ renderBufferSize,
2634
+ headerHeight,
2635
+ height,
2636
+ onConfigChange,
2637
+ onFeatureEnabled,
2638
+ onFeatureInvocation,
2639
+ onSelectionChange,
2640
+ rowHeight,
2641
+ selectionModel,
2642
+ tableLayout: tableLayoutProp,
2643
+ width
2644
+ });
2645
+ const style = {
2646
+ ...outerSize,
2647
+ "--content-height": `${viewportMeasurements.scrollContentHeight}px`,
2648
+ "--content-width": `${viewportMeasurements.scrollContentWidth}px`,
2649
+ "--filler-height": `${viewportMeasurements.fillerHeight}px`,
2650
+ "--pinned-width-left": `${viewportMeasurements.pinnedWidthLeft}px`,
2651
+ "--pinned-width-right": `${viewportMeasurements.pinnedWidthRight}px`,
2652
+ "--header-height": `${headerHeight}px`,
2653
+ "--row-height": `${rowHeight}px`,
2654
+ "--scrollbar-size": `${viewportMeasurements.scrollbarSize}px`,
2655
+ "--table-height": `${innerSize == null ? void 0 : innerSize.height}px`,
2656
+ "--table-width": `${innerSize == null ? void 0 : innerSize.width}px`,
2657
+ "--total-header-height": `${viewportMeasurements == null ? void 0 : viewportMeasurements.totalHeaderHeight}px`
2658
+ };
2659
+ const scrollbarContainerStyle = {
2660
+ left: viewportMeasurements.pinnedWidthLeft - 1,
2661
+ // The -1 is to align the top border, might cause innaccuracy
2662
+ // It is compensated by a hardcoded adjustment in css
2663
+ // top: measurements.top - 1 + headerHeight,
2664
+ top: (viewportMeasurements == null ? void 0 : viewportMeasurements.totalHeaderHeight) - 1
2665
+ };
2666
+ const Table2 = tableLayout === "column" ? ColumnBasedTable : RowBasedTable;
2667
+ const className = cx8(classBase7, classNameProp, {
2668
+ [`${classBase7}-zebra`]: zebraStripes,
2669
+ [`${classBase7}-loading`]: isDataLoading(tableProps.columns)
2670
+ });
2671
+ return /* @__PURE__ */ jsx11(
2672
+ ContextMenuProvider,
2673
+ {
2674
+ menuActionHandler: handleContextMenuAction,
2675
+ menuBuilder: buildContextMenuDescriptors(dataSource),
2676
+ children: /* @__PURE__ */ jsxs8(
2677
+ "div",
2678
+ {
2679
+ ...containerProps,
2680
+ className,
2681
+ id,
2682
+ ref: containerRef,
2683
+ style,
2684
+ tabIndex: -1,
2685
+ children: [
2686
+ innerSize ? /* @__PURE__ */ jsx11(
2687
+ "div",
2688
+ {
2689
+ className: `${classBase7}-scrollbarContainer`,
2690
+ onScroll: scrollProps.onScrollbarContainerScroll,
2691
+ ref: scrollProps.scrollbarContainerRef,
2692
+ style: scrollbarContainerStyle,
2693
+ children: /* @__PURE__ */ jsx11("div", { className: `${classBase7}-scrollContent` })
2694
+ }
2695
+ ) : null,
2696
+ innerSize ? /* @__PURE__ */ jsxs8(
2697
+ "div",
2698
+ {
2699
+ className: `${classBase7}-contentContainer`,
2700
+ onScroll: scrollProps.onContentContainerScroll,
2701
+ ref: scrollProps.contentContainerRef,
2702
+ ...props,
2703
+ children: [
2704
+ /* @__PURE__ */ jsx11("div", { className: `${classBase7}-scrollContent` }),
2705
+ /* @__PURE__ */ jsx11(
2706
+ "div",
2707
+ {
2708
+ className: `${classBase7}-tableContainer`,
2709
+ onScroll: scrollProps.onTableContainerScroll,
2710
+ ref: scrollProps.tableContainerRef,
2711
+ children: /* @__PURE__ */ jsx11(
2712
+ Table2,
2713
+ {
2714
+ ...tableProps,
2715
+ headerHeight,
2716
+ rowHeight
2717
+ }
2718
+ )
2719
+ }
2720
+ ),
2721
+ draggable
2722
+ ]
2723
+ }
2724
+ ) : null,
2725
+ showSettings && innerSize ? /* @__PURE__ */ jsx11(
2726
+ Button,
2727
+ {
2728
+ className: `${classBase7}-settings`,
2729
+ "data-icon": "settings",
2730
+ onClick: onShowSettings,
2731
+ variant: "secondary"
2732
+ }
2733
+ ) : null
2734
+ ]
2735
+ }
2736
+ )
2737
+ }
2738
+ );
2739
+ };
2740
+
2741
+ // src/cell-renderers/json-cell/JsonCell.tsx
2742
+ import cx9 from "classnames";
2743
+ import {
2744
+ isJsonAttribute,
2745
+ metadataKeys as metadataKeys10,
2746
+ registerComponent
2747
+ } from "@vuu-ui/vuu-utils";
2748
+ import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
2749
+ var classBase8 = "vuuJsonCell";
2750
+ var { IS_EXPANDED: IS_EXPANDED3, KEY: KEY3 } = metadataKeys10;
2751
+ var localKey = (key) => {
2752
+ const pos = key.lastIndexOf("|");
2753
+ if (pos === -1) {
2754
+ return "";
2755
+ } else {
2756
+ return key.slice(pos + 1);
2757
+ }
2758
+ };
2759
+ var JsonCell = ({ column, row }) => {
2760
+ const {
2761
+ key: columnKey
2762
+ /*, type, valueFormatter */
2763
+ } = column;
2764
+ let value = row[columnKey];
2765
+ let isToggle = false;
2766
+ if (isJsonAttribute(value)) {
2767
+ value = value.slice(0, -1);
2768
+ isToggle = true;
2769
+ }
2770
+ const rowKey = localKey(row[KEY3]);
2771
+ const className = cx9({
2772
+ [`${classBase8}-name`]: rowKey === value,
2773
+ [`${classBase8}-value`]: rowKey !== value,
2774
+ [`${classBase8}-group`]: isToggle
2775
+ });
2776
+ if (isToggle) {
2777
+ const toggleIcon = row[IS_EXPANDED3] ? "minus-box" : "plus-box";
2778
+ return /* @__PURE__ */ jsxs9("span", { className, children: [
2779
+ /* @__PURE__ */ jsx12("span", { className: `${classBase8}-value`, children: value }),
2780
+ /* @__PURE__ */ jsx12("span", { className: `${classBase8}-toggle`, "data-icon": toggleIcon })
2781
+ ] });
2782
+ } else if (value) {
2783
+ return /* @__PURE__ */ jsx12("span", { className, children: value });
2784
+ } else {
2785
+ return null;
2786
+ }
2787
+ };
2788
+ registerComponent("json", JsonCell, "cell-renderer", {});
2789
+ export {
2790
+ Table,
2791
+ useMeasuredContainer
2792
+ };
11
2793
  //# sourceMappingURL=index.js.map