import{Component as t,NewState as e,Util as i,$ as s,Hash as n,RefreshState as a}from"@web/state";const l={get:({url:t,...e})=>l.request({url:t,method:"GET",...e}),post:({url:t,data:e,...i})=>l.request({url:t,method:"POST",data:e,...i}),put:({url:t,data:e,...i})=>l.request({url:t,method:"PUT",data:e,...i}),delete:({url:t,...e})=>l.request({url:t,method:"DELETE",...e}),head:({url:t,...e})=>l.request({url:t,method:"HEAD",...e}),request:async({url:t,method:e="POST",data:i,headers:s={},responseType:n,timeout:a=1e4})=>{var l;const o={method:e=e.toUpperCase(),signal:null==(l=AbortSignal.timeout)?void 0:l.call(AbortSignal,a)};if(void 0!==i&&"GET"!==e&&"HEAD"!==e){if(i instanceof HTMLFormElement&&(i=new FormData(i)),i&&"object"==typeof i&&!(i instanceof FormData)&&!(i instanceof ArrayBuffer||ArrayBuffer.isView(i))&&Object.values(i).some(t=>t instanceof File||t instanceof Blob||t instanceof FileList||Array.isArray(t)&&t.some(t=>t instanceof File||t instanceof Blob))){const t=new FormData;for(const[e,s]of Object.entries(i))s instanceof FileList||Array.isArray(s)?Array.from(s).forEach(i=>t.append(e,i)):null!=s&&t.append(e,s);i=t}i instanceof FormData?delete s["Content-Type"]:"string"==typeof i||i instanceof ArrayBuffer||ArrayBuffer.isView(i)||(i=JSON.stringify(i),s["Content-Type"]||(s["Content-Type"]="application/json")),o.body=i}Object.keys(s).length&&(o.headers=s);const d={error:null,ok:null,status:0,headers:{},responseType:"",result:null};try{const e=await fetch(t,o);if(Object.assign(d,{ok:e.ok,status:e.status,headers:Object.fromEntries(e.headers.entries())}),!n){const t=e.headers.get("Content-Type")||"";n=t.includes("application/json")?"json":/image|video|audio|pdf|zip|octet-stream/.test(t)?"binary":"text",d.responseType=n}!1===d.ok&&(d.error=(d.statusText||"HTTP "+d.status+" error")+" for "+t),d.result="json"===n?await e.json():"binary"===n?await e.arrayBuffer():await e.text()}catch(t){Object.assign(d,{error:t.message||String(t),ok:!1})}return d}},o=t.register("API",t=>{t.request=e({url:"",method:"GET",headers:{},data:null,timeout:1e4,responseType:""}),t.response=e({loading:!1,ok:null,status:null,error:null,headers:{},responseType:"",result:null}),t.result=e(),t.do=(e={})=>new Promise((i,s)=>{const n={...t.request,...e};if(!n.url)throw new Error(".url is required");n.headers={...t.request.headers,...e.headers},t.response.loading=!0,l.request(n).then(e=>{if(Object.keys(e).forEach(i=>{"result"!==i&&(t.response[i]=e[i])}),e.result&&"object"==typeof e.result&&t.result&&"object"==typeof t.result?Object.assign(t.result,e.result):t.result=e.result,t.response.loading=!1,!1===e.ok)throw new Error(e.error);if("object"==typeof e.result&&e.result.error)throw new Error(e.result.error);t.dispatchEvent(new CustomEvent("response",{detail:e,bubbles:!1})),i(e)}).catch(i=>{var n;!e.noui&&(null==(n=globalThis.UI)?void 0:n.toast)&&UI.toast(i.message,{type:"danger"}),t.dispatchEvent(new CustomEvent("error",{detail:i,bubbles:!0})),s(i)})});let i=null;t.request.__watch(null,()=>{t.hasAttribute("auto")&&t.request.url&&(i||(i=Promise.resolve().then(()=>{t.do(),i=null})))})}),d={};t.register("Modal",t=>{t.modal=new bootstrap.Modal(t),t.addEventListener("bind",e=>{e.detail?t.modal.show():t.modal.hide()}),t.addEventListener("hide.bs.modal",()=>{var e;null==(e=document.activeElement)||e.blur(),t.dispatchEvent(new CustomEvent("change",{bubbles:!1,detail:!1}))}),i.copyFunction(t,t.modal,"show","hide")},i.makeDom('\n\n')),t.register("Dialog",t.getSetupFunction("Modal"),i.makeDom('\n\n'));let r=0;d.showDialog=function({title:t="",message:e="",buttons:i=["{#Close#}"],type:s="body"}){const n=document.body.appendChild(document.createElement("Dialog"));return n.style.zIndex=2e3+ ++r,Promise.resolve().then(()=>{Object.assign(n.state,{message:e,title:t,type:s,buttons:i}),n.show()}),new Promise(t=>{n.addEventListener("change",e=>{r--,t(n.result||0),n.remove()})})},d.alert=function(t,e={}){return d.showDialog({message:t,...e})},d.confirm=function(t,e={}){return new Promise(i=>d.showDialog({message:t,buttons:["{#Cancel#}","{#Confirm#}"],...e}).then(t=>i(t>=2)).catch(()=>i(!1)))},t.register("Toast",t=>{t.toast=new bootstrap.Toast(t,{autohide:t.state.delay>0}),i.copyFunction(t,t.toast,"show","hide"),t.addEventListener("show.bs.toast",()=>{if(t.state.delay>0){let e;const i=()=>{t.state.left=t.state.delay/1e3,e=setInterval(()=>{(!t.isConnected||--t.state.left<=0)&&clearInterval(e)},1e3)};i(),t.addEventListener("mouseenter",()=>{clearInterval(e),t.state.left=void 0}),t.addEventListener("mouseleave",i)}})},i.makeDom('\n
\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n
\n
\n'),i.makeDom('
')),d.toast=function(t,e={}){const i=e.delay??5e3,n=document.createElement("Toast");n.state={delay:i,left:i?i/1e3:void 0,type:e.type||"body",message:t,buttons:e.buttons||[]},s(`[toast-container="${e.container||"default"}"]`).appendChild(n),Promise.resolve().then(()=>n.show())},d.toastConfirm=function(t,e={}){return new Promise(i=>d.toast(t,{buttons:["{#Confirm#}"],...e}).then(t=>i(1===t)).catch(()=>i(!1)))},t.register("AutoForm",t=>{t.state.schema||(t.state.schema=[]),t.vertical=t.hasAttribute("vertical"),t.request={method:"POST"},t.response={},t.result=null,t.data=e(t.data||{}),t.form=s(t,"form"),t.submit=(e={})=>{var i,s;if(!t.form.reportValidity())return null==(s=null==(i=globalThis.UI)?void 0:i.toast)?void 0:s.call(i,"{#verify failed#}",{type:"danger"});if(!t.dispatchEvent(new CustomEvent("submit",{detail:t.data,cancelable:!0,bubbles:!1})))return;const n={...t.request,data:t.data,noui:!0,...e};let a=null;if(t.api)a=t.api.do(n);else{if(!t.request.url)return console.warn("{#please config .api or .request.url to auto submit#}");a=l.request(n)}a.then(e=>{if(t.response=e,t.result=e.result,"object"==typeof e.result&&e.result.error)throw new Error(e.result.error);t.dispatchEvent(new CustomEvent("response",{detail:e,bubbles:!1}))}).catch(e=>{var i;(null==(i=globalThis.UI)?void 0:i.toast)&&UI.toast(e.message,{type:"danger"}),t.dispatchEvent(new CustomEvent("error",{detail:e,bubbles:!0}))})}},i.makeDom('\n
\n
\n
\n \n
\n \n \n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n'),i.makeDom(""));const c=[],m={register:e=>{"undefined"!=typeof document&&("loading"!==document.readyState&&t.getTemplate("AutoForm")?m._addAutoFormComponent(e):c.push(e))},_addAutoFormComponent:e=>{var n;const a=t.getTemplate("AutoForm");a?null==(n=s(a.content,"[control-wrapper]"))||n.appendChild(i.makeDom(`<${e} $if="item.type.toUpperCase() === '${e.toUpperCase()}'" $name="item.name" $.="item.setting" $bind="this.data[item.name]">`)):"loading"!==document.readyState&&console.error("AutoForm template not found during registration of",e)}};if("undefined"!=typeof document){const t=()=>{c.forEach(t=>m._addAutoFormComponent(t)),c.length=0};"loading"!==document.readyState?setTimeout(t,100):document.addEventListener("DOMContentLoaded",()=>setTimeout(t,100),!0)}t.register("TagsInput",t=>{t.addEventListener("bind",e=>{t.state.tags=e.detail||[]})},i.makeDom(`\n
\n \n \n
\n`),i.makeDom("")),m.register("TagsInput");const u=t.register("FastList",t=>{const e=new Map,s=new Map;let n=1;t.state.renderedList=[];const a=i.newAvg();let l=0,o=0,d=0,r=null,c=null,m=0,u=0,p=10,h=!1;t.onItemUpdate=(t,i)=>{const l=t+m;if(null===r){const t=window.getComputedStyle(i);r=parseFloat(t.marginTop)||0,c=parseFloat(t.marginBottom)||0}0===l&&(d=r);const u=i.offsetHeight+r+c+o,p=e.get(l);if(u!==p){e.set(l,u),a.add(u);const t=u-(p||0),i=l-l%n;s.has(i)&&s.set(i,s.get(i)+t)}},t.refresh=()=>{if(!h)return;p=Math.ceil((t.clientHeight||100)/(a.get()||32));let i=[];const r=t.state.list,c=r.length;let v=0,f=l+d+o,b=0,g=0;for(v=0;v{if(h=!1,e.clear(),s.clear(),a.clear(),d=0,r=null,c=null,!(null==i?void 0:i.length))return;const m=i.length||0;n=Math.ceil(Math.sqrt(m))||10;const u=window.getComputedStyle(t);l=parseFloat(u.paddingTop)||0,o=parseFloat(u.rowGap)||0,t.state.renderedList=i.slice(0,Math.min(30,m))||[],requestAnimationFrame(()=>{if(h||t.state.list!==i)return;const l=a.get()||32;for(let t=0;t\n
\n
\n
\n\n'));t.attachSelectFeature=(t,e="itemclick",i="selectItem",s="itemActiveTag",n="selectedItem",a="idfield",l="auto-select")=>{const o=l&&t.hasAttribute(l);t[i]=(i,s)=>{o&&(t.state[n]=t.state[n]===i[t[a]]?null:i[t[a]]),t.dispatchEvent(new CustomEvent(e,{bubbles:!1,detail:!o||t.state[n]?{item:i,index:s}:{item:{},index:null}}))},t[s]=e=>null!==t.state[n]&&t.state[n]===e[t[a]]?"active":""},t.register("List",e=>{t.attachSelectFeature(e);const s={idfield:"id",labelfield:"label",summaryfield:"summary"};e.state.__watch("list",t=>{i.updateDefaults(e,s)})},i.makeDom('\n
\n
\n \n
${item[this.labelfield]}
\n
\n
\n
\n
\n')),t.register("GroupedList",e=>{t.getSetupFunction("List")(e),e._selectItem=e.selectItem,e.selectItem=(t,i)=>{e.state.selectedGroup=null,e._selectItem(t,i)},t.attachSelectFeature(e,"groupclick","selectGroup","groupActiveTag","selectedGroup","groupidfield",e.hasAttribute("auto-select-group")||e.hasAttribute("auto-select")&&"group-selectable"),e._selectGroup=e.selectGroup,e.selectGroup=(t,i)=>{e.state.selectedItem=null,e._selectGroup(t,i)};const s={typefield:"type",groupidfield:"id",grouplabelfield:"label",groupsummaryfield:"summary",groupfield:"group"};e.state.__watch("list",t=>{i.updateDefaults(e,s);const n=[];return(e.state.groups||[]).forEach(i=>{n.push({[e.typefield]:"group",...i}),t&&t.forEach(t=>{t[e.groupfield]===i[e.groupidfield]&&n.push({[e.typefield]:"item",...t})})}),n})},i.makeDom('\n
\n \n
\n')),t.register("FastGroupedList",e=>{t.getSetupFunction("List")(e),t.getSetupFunction("GroupedList")(e)},i.makeDom('\n\n
\n
\n \n
${item[this.grouplabelfield]}
\n
\n
\n
\n
\n \n
${item[this.labelfield]}
\n
\n
\n
\n
\n
\n')),t.register("Tree",t=>{const e={parentfield:"parent",groupicon:"folder",itemicon:"file"};t.state.__watch("list",()=>{i.updateDefaults(t,e);const s={};(t.state.list||[]).forEach(e=>{var i;return(s[i=e[t.parentfield]||""]??(s[i]=[])).push(e)});const n=[],a=(e,i)=>e.forEach(e=>{var l;const o=e[t.idfield],d=!!(null==(l=s[o])?void 0:l.length);n.push({...e,_level:i,_hasChildren:d}),d&&a(s[o],i+1)});return a(s[""]||[],0),n})},i.makeDom('\n\n\t
\n\t\t
\n\t\t
\n\t\t
\n\t\t
\n\t\t
\n\t
\n
\n'));const p=t.register("FastTree",e=>{t.getSetupFunction("List")(e),t.getSetupFunction("Tree")(e)},i.makeDom('\n\n\t
\n\t\t
\n\t\t
\n\t\t
\n\t\t
\n\t\t
\n\t
\n
\n'));t.register("CollapseTree",s=>{t.attachSelectFeature(s);const n={idfield:"id",parentfield:"parent",labelfield:"label",summaryfield:"summary"};s.collapsed=e({}),s.state.__watch("list",()=>{i.updateDefaults(s,n);const t={};(s.state.list||[]).forEach(e=>{var i;return(t[i=e[s.parentfield]||""]??(t[i]=[])).push(e)});const e=[],a=(i,n,l)=>i.forEach(i=>{var o;const d=i[s.idfield],r=!!(null==(o=t[d])?void 0:o.length);e.push({...i,_level:n,_hasChildren:r,_parents:l}),r&&a(t[d],n+1,[...l,d])});return a(t[""]||[],0,[]),e})},i.makeDom('\n\n\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t
\n\t\t
\n\t
\n
\n')),t.register("Nav",t=>{t.click=(e,i)=>{e.noselect||i||(n.nav=e.name),t.dispatchEvent(new CustomEvent("nav",{detail:{item:e},bubbles:!1}))}},i.makeDom('\n\n'));let h=!1,v={},f={};const b={start:(t,{onmousemove:e,onmouseup:i})=>{v={x:t.clientX,y:t.clientY,w:0,h:0},f={onmousemove:e,onmouseup:i},h=!0}};globalThis.MouseMover=b,"undefined"!=typeof document&&(document.addEventListener("mouseup",t=>{var e;h&&(h=!1,null==(e=f.onmouseup)||e.call(f,{event:t,...v}))}),document.addEventListener("mousemove",t=>{var e;h&&(v.w=t.clientX-v.x,v.h=t.clientY-v.y,null==(e=f.onmousemove)||e.call(f,{event:t,...v}))})),t.register("Resizer",t=>{const e=t.hasAttribute("vertical"),i=parseInt(t.getAttribute("min"))||10,s=parseInt(t.getAttribute("max"))||1e3,n=t.target||t.previousElementSibling,a=(t,n,a)=>{const l=t+(e?a:n);return ls?s:l};t.addEventListener("mousedown",i=>{const s=e?n.offsetHeight:n.offsetWidth;b.start(i,{onmousemove:({w:t,h:i})=>n.style[e?"height":"width"]=a(s,t,i)+"px",onmouseup:({w:e,h:i})=>t.dispatchEvent(new CustomEvent("resize",{detail:{oldSize:s,newSize:a(s,e,i)},bubbles:!1}))})})},i.makeDom("\n
\n"));const g=e({exitBlocks:0});if(globalThis.State=g,"undefined"!=typeof window&&window.addEventListener("beforeunload",t=>{g.exitBlocks>0&&t.preventDefault()}),globalThis.HTTP=l,globalThis.UI=d,globalThis.AutoForm=m,globalThis.MouseMover=b,"undefined"!=typeof document){const t=()=>{console.log("Base project triggering RefreshState"),a(document.documentElement)};"loading"!==document.readyState?t():document.addEventListener("DOMContentLoaded",t,!0)}export{o as APIComponent,m as AutoForm,u as FastListComponent,p as FastTreeComponent,l as HTTP,b as MouseMover,g as State,d as UI};