diff --git a/_framework/Avalonia.Base.wasm b/_framework/Avalonia.Base.wasm index b2e1d19..14d393f 100644 Binary files a/_framework/Avalonia.Base.wasm and b/_framework/Avalonia.Base.wasm differ diff --git a/_framework/Avalonia.Base.wasm.br b/_framework/Avalonia.Base.wasm.br index 1c2cdbe..e1b41b4 100644 Binary files a/_framework/Avalonia.Base.wasm.br and b/_framework/Avalonia.Base.wasm.br differ diff --git a/_framework/Avalonia.Base.wasm.gz b/_framework/Avalonia.Base.wasm.gz index 80b6619..88b2206 100644 Binary files a/_framework/Avalonia.Base.wasm.gz and b/_framework/Avalonia.Base.wasm.gz differ diff --git a/_framework/Avalonia.Browser.wasm b/_framework/Avalonia.Browser.wasm index d06e03a..555f4c5 100644 Binary files a/_framework/Avalonia.Browser.wasm and b/_framework/Avalonia.Browser.wasm differ diff --git a/_framework/Avalonia.Browser.wasm.br b/_framework/Avalonia.Browser.wasm.br index e2516a1..839d66d 100644 Binary files a/_framework/Avalonia.Browser.wasm.br and b/_framework/Avalonia.Browser.wasm.br differ diff --git a/_framework/Avalonia.Browser.wasm.gz b/_framework/Avalonia.Browser.wasm.gz index ce1d668..de4b2f6 100644 Binary files a/_framework/Avalonia.Browser.wasm.gz and b/_framework/Avalonia.Browser.wasm.gz differ diff --git a/_framework/Avalonia.Controls.ColorPicker.wasm b/_framework/Avalonia.Controls.ColorPicker.wasm index 9641b38..6a0b61c 100644 Binary files a/_framework/Avalonia.Controls.ColorPicker.wasm and b/_framework/Avalonia.Controls.ColorPicker.wasm differ diff --git a/_framework/Avalonia.Controls.ColorPicker.wasm.br b/_framework/Avalonia.Controls.ColorPicker.wasm.br index 54d3fef..5e0626a 100644 Binary files a/_framework/Avalonia.Controls.ColorPicker.wasm.br and b/_framework/Avalonia.Controls.ColorPicker.wasm.br differ diff --git a/_framework/Avalonia.Controls.ColorPicker.wasm.gz b/_framework/Avalonia.Controls.ColorPicker.wasm.gz index 627c52e..0df455b 100644 Binary files a/_framework/Avalonia.Controls.ColorPicker.wasm.gz and b/_framework/Avalonia.Controls.ColorPicker.wasm.gz differ diff --git a/_framework/Avalonia.Controls.DataGrid.wasm b/_framework/Avalonia.Controls.DataGrid.wasm index 1373412..315d6df 100644 Binary files a/_framework/Avalonia.Controls.DataGrid.wasm and b/_framework/Avalonia.Controls.DataGrid.wasm differ diff --git a/_framework/Avalonia.Controls.DataGrid.wasm.br b/_framework/Avalonia.Controls.DataGrid.wasm.br index 1499b8e..b77e5f8 100644 Binary files a/_framework/Avalonia.Controls.DataGrid.wasm.br and b/_framework/Avalonia.Controls.DataGrid.wasm.br differ diff --git a/_framework/Avalonia.Controls.DataGrid.wasm.gz b/_framework/Avalonia.Controls.DataGrid.wasm.gz index 5a06e4f..123b2a6 100644 Binary files a/_framework/Avalonia.Controls.DataGrid.wasm.gz and b/_framework/Avalonia.Controls.DataGrid.wasm.gz differ diff --git a/_framework/Avalonia.Controls.wasm b/_framework/Avalonia.Controls.wasm index 870dd0a..eb00014 100644 Binary files a/_framework/Avalonia.Controls.wasm and b/_framework/Avalonia.Controls.wasm differ diff --git a/_framework/Avalonia.Controls.wasm.br b/_framework/Avalonia.Controls.wasm.br index 2e6ef4d..b33ac1e 100644 Binary files a/_framework/Avalonia.Controls.wasm.br and b/_framework/Avalonia.Controls.wasm.br differ diff --git a/_framework/Avalonia.Controls.wasm.gz b/_framework/Avalonia.Controls.wasm.gz index 4e5184e..096441b 100644 Binary files a/_framework/Avalonia.Controls.wasm.gz and b/_framework/Avalonia.Controls.wasm.gz differ diff --git a/_framework/Avalonia.DesignerSupport.wasm b/_framework/Avalonia.DesignerSupport.wasm index 8fc950f..30cbe50 100644 Binary files a/_framework/Avalonia.DesignerSupport.wasm and b/_framework/Avalonia.DesignerSupport.wasm differ diff --git a/_framework/Avalonia.DesignerSupport.wasm.br b/_framework/Avalonia.DesignerSupport.wasm.br index 8a1f48a..69a5b71 100644 Binary files a/_framework/Avalonia.DesignerSupport.wasm.br and b/_framework/Avalonia.DesignerSupport.wasm.br differ diff --git a/_framework/Avalonia.DesignerSupport.wasm.gz b/_framework/Avalonia.DesignerSupport.wasm.gz index a9a6593..2745a30 100644 Binary files a/_framework/Avalonia.DesignerSupport.wasm.gz and b/_framework/Avalonia.DesignerSupport.wasm.gz differ diff --git a/_framework/Avalonia.Dialogs.wasm b/_framework/Avalonia.Dialogs.wasm index 9e9e316..e9e667b 100644 Binary files a/_framework/Avalonia.Dialogs.wasm and b/_framework/Avalonia.Dialogs.wasm differ diff --git a/_framework/Avalonia.Dialogs.wasm.br b/_framework/Avalonia.Dialogs.wasm.br index e99b044..cd60eb9 100644 Binary files a/_framework/Avalonia.Dialogs.wasm.br and b/_framework/Avalonia.Dialogs.wasm.br differ diff --git a/_framework/Avalonia.Dialogs.wasm.gz b/_framework/Avalonia.Dialogs.wasm.gz index 99d7e95..bf66c03 100644 Binary files a/_framework/Avalonia.Dialogs.wasm.gz and b/_framework/Avalonia.Dialogs.wasm.gz differ diff --git a/_framework/Avalonia.Markup.Xaml.wasm b/_framework/Avalonia.Markup.Xaml.wasm index 4b3b5b4..eb45ac2 100644 Binary files a/_framework/Avalonia.Markup.Xaml.wasm and b/_framework/Avalonia.Markup.Xaml.wasm differ diff --git a/_framework/Avalonia.Markup.Xaml.wasm.br b/_framework/Avalonia.Markup.Xaml.wasm.br index 84002f7..4a402f4 100644 Binary files a/_framework/Avalonia.Markup.Xaml.wasm.br and b/_framework/Avalonia.Markup.Xaml.wasm.br differ diff --git a/_framework/Avalonia.Markup.Xaml.wasm.gz b/_framework/Avalonia.Markup.Xaml.wasm.gz index 70801f9..5746364 100644 Binary files a/_framework/Avalonia.Markup.Xaml.wasm.gz and b/_framework/Avalonia.Markup.Xaml.wasm.gz differ diff --git a/_framework/Avalonia.Markup.wasm b/_framework/Avalonia.Markup.wasm index 35e47da..1e73724 100644 Binary files a/_framework/Avalonia.Markup.wasm and b/_framework/Avalonia.Markup.wasm differ diff --git a/_framework/Avalonia.Markup.wasm.br b/_framework/Avalonia.Markup.wasm.br index c997337..9d330c5 100644 Binary files a/_framework/Avalonia.Markup.wasm.br and b/_framework/Avalonia.Markup.wasm.br differ diff --git a/_framework/Avalonia.Markup.wasm.gz b/_framework/Avalonia.Markup.wasm.gz index 159b168..251292f 100644 Binary files a/_framework/Avalonia.Markup.wasm.gz and b/_framework/Avalonia.Markup.wasm.gz differ diff --git a/_framework/Avalonia.Metal.wasm b/_framework/Avalonia.Metal.wasm index 014c7b8..58eb305 100644 Binary files a/_framework/Avalonia.Metal.wasm and b/_framework/Avalonia.Metal.wasm differ diff --git a/_framework/Avalonia.Metal.wasm.br b/_framework/Avalonia.Metal.wasm.br index 1af98bc..8d3a2df 100644 Binary files a/_framework/Avalonia.Metal.wasm.br and b/_framework/Avalonia.Metal.wasm.br differ diff --git a/_framework/Avalonia.Metal.wasm.gz b/_framework/Avalonia.Metal.wasm.gz index 08bfcca..7ab2602 100644 Binary files a/_framework/Avalonia.Metal.wasm.gz and b/_framework/Avalonia.Metal.wasm.gz differ diff --git a/_framework/Avalonia.MicroCom.wasm b/_framework/Avalonia.MicroCom.wasm index 6ac48e3..0887d26 100644 Binary files a/_framework/Avalonia.MicroCom.wasm and b/_framework/Avalonia.MicroCom.wasm differ diff --git a/_framework/Avalonia.MicroCom.wasm.br b/_framework/Avalonia.MicroCom.wasm.br index 3c026b4..7b6d363 100644 Binary files a/_framework/Avalonia.MicroCom.wasm.br and b/_framework/Avalonia.MicroCom.wasm.br differ diff --git a/_framework/Avalonia.MicroCom.wasm.gz b/_framework/Avalonia.MicroCom.wasm.gz index 4374e93..bfd1602 100644 Binary files a/_framework/Avalonia.MicroCom.wasm.gz and b/_framework/Avalonia.MicroCom.wasm.gz differ diff --git a/_framework/Avalonia.OpenGL.wasm b/_framework/Avalonia.OpenGL.wasm index 3868e7c..ce09883 100644 Binary files a/_framework/Avalonia.OpenGL.wasm and b/_framework/Avalonia.OpenGL.wasm differ diff --git a/_framework/Avalonia.OpenGL.wasm.br b/_framework/Avalonia.OpenGL.wasm.br index ff0f65e..22fb970 100644 Binary files a/_framework/Avalonia.OpenGL.wasm.br and b/_framework/Avalonia.OpenGL.wasm.br differ diff --git a/_framework/Avalonia.OpenGL.wasm.gz b/_framework/Avalonia.OpenGL.wasm.gz index f2a82f1..f59cdfe 100644 Binary files a/_framework/Avalonia.OpenGL.wasm.gz and b/_framework/Avalonia.OpenGL.wasm.gz differ diff --git a/_framework/Avalonia.Remote.Protocol.wasm b/_framework/Avalonia.Remote.Protocol.wasm index 75461a0..a820a41 100644 Binary files a/_framework/Avalonia.Remote.Protocol.wasm and b/_framework/Avalonia.Remote.Protocol.wasm differ diff --git a/_framework/Avalonia.Remote.Protocol.wasm.br b/_framework/Avalonia.Remote.Protocol.wasm.br index 586c7d3..f3be8b9 100644 Binary files a/_framework/Avalonia.Remote.Protocol.wasm.br and b/_framework/Avalonia.Remote.Protocol.wasm.br differ diff --git a/_framework/Avalonia.Remote.Protocol.wasm.gz b/_framework/Avalonia.Remote.Protocol.wasm.gz index 0ec99a9..1eb9a18 100644 Binary files a/_framework/Avalonia.Remote.Protocol.wasm.gz and b/_framework/Avalonia.Remote.Protocol.wasm.gz differ diff --git a/_framework/Avalonia.Skia.wasm b/_framework/Avalonia.Skia.wasm index 8a7409b..a862de9 100644 Binary files a/_framework/Avalonia.Skia.wasm and b/_framework/Avalonia.Skia.wasm differ diff --git a/_framework/Avalonia.Skia.wasm.br b/_framework/Avalonia.Skia.wasm.br index 1b01707..bcddc70 100644 Binary files a/_framework/Avalonia.Skia.wasm.br and b/_framework/Avalonia.Skia.wasm.br differ diff --git a/_framework/Avalonia.Skia.wasm.gz b/_framework/Avalonia.Skia.wasm.gz index ac774d2..e4e2e8a 100644 Binary files a/_framework/Avalonia.Skia.wasm.gz and b/_framework/Avalonia.Skia.wasm.gz differ diff --git a/_framework/Avalonia.Vulkan.wasm b/_framework/Avalonia.Vulkan.wasm index f93b197..a8a3113 100644 Binary files a/_framework/Avalonia.Vulkan.wasm and b/_framework/Avalonia.Vulkan.wasm differ diff --git a/_framework/Avalonia.Vulkan.wasm.br b/_framework/Avalonia.Vulkan.wasm.br index 39817ac..351c844 100644 Binary files a/_framework/Avalonia.Vulkan.wasm.br and b/_framework/Avalonia.Vulkan.wasm.br differ diff --git a/_framework/Avalonia.Vulkan.wasm.gz b/_framework/Avalonia.Vulkan.wasm.gz index 47e1920..8490a5f 100644 Binary files a/_framework/Avalonia.Vulkan.wasm.gz and b/_framework/Avalonia.Vulkan.wasm.gz differ diff --git a/_framework/Avalonia.wasm b/_framework/Avalonia.wasm index 0eead5d..74f846b 100644 Binary files a/_framework/Avalonia.wasm and b/_framework/Avalonia.wasm differ diff --git a/_framework/Avalonia.wasm.br b/_framework/Avalonia.wasm.br index f58fab4..d4508ce 100644 Binary files a/_framework/Avalonia.wasm.br and b/_framework/Avalonia.wasm.br differ diff --git a/_framework/Avalonia.wasm.gz b/_framework/Avalonia.wasm.gz index 0312959..2f0892f 100644 Binary files a/_framework/Avalonia.wasm.gz and b/_framework/Avalonia.wasm.gz differ diff --git a/_framework/Semi.Avalonia.ColorPicker.pdb.gz b/_framework/Semi.Avalonia.ColorPicker.pdb.gz index 89b07fa..f39e91f 100644 Binary files a/_framework/Semi.Avalonia.ColorPicker.pdb.gz and b/_framework/Semi.Avalonia.ColorPicker.pdb.gz differ diff --git a/_framework/Semi.Avalonia.ColorPicker.wasm b/_framework/Semi.Avalonia.ColorPicker.wasm index 16a7cf0..9a4f4e5 100644 Binary files a/_framework/Semi.Avalonia.ColorPicker.wasm and b/_framework/Semi.Avalonia.ColorPicker.wasm differ diff --git a/_framework/Semi.Avalonia.ColorPicker.wasm.br b/_framework/Semi.Avalonia.ColorPicker.wasm.br index aca835c..a3a53e1 100644 Binary files a/_framework/Semi.Avalonia.ColorPicker.wasm.br and b/_framework/Semi.Avalonia.ColorPicker.wasm.br differ diff --git a/_framework/Semi.Avalonia.ColorPicker.wasm.gz b/_framework/Semi.Avalonia.ColorPicker.wasm.gz index 8ccd145..5d66501 100644 Binary files a/_framework/Semi.Avalonia.ColorPicker.wasm.gz and b/_framework/Semi.Avalonia.ColorPicker.wasm.gz differ diff --git a/_framework/Semi.Avalonia.DataGrid.pdb.gz b/_framework/Semi.Avalonia.DataGrid.pdb.gz index 3e92591..def6e21 100644 Binary files a/_framework/Semi.Avalonia.DataGrid.pdb.gz and b/_framework/Semi.Avalonia.DataGrid.pdb.gz differ diff --git a/_framework/Semi.Avalonia.DataGrid.wasm b/_framework/Semi.Avalonia.DataGrid.wasm index c998411..515e96f 100644 Binary files a/_framework/Semi.Avalonia.DataGrid.wasm and b/_framework/Semi.Avalonia.DataGrid.wasm differ diff --git a/_framework/Semi.Avalonia.DataGrid.wasm.br b/_framework/Semi.Avalonia.DataGrid.wasm.br index 811b982..be653cc 100644 Binary files a/_framework/Semi.Avalonia.DataGrid.wasm.br and b/_framework/Semi.Avalonia.DataGrid.wasm.br differ diff --git a/_framework/Semi.Avalonia.DataGrid.wasm.gz b/_framework/Semi.Avalonia.DataGrid.wasm.gz index 9122d32..06e68bd 100644 Binary files a/_framework/Semi.Avalonia.DataGrid.wasm.gz and b/_framework/Semi.Avalonia.DataGrid.wasm.gz differ diff --git a/_framework/Semi.Avalonia.Demo.Web.pdb.gz b/_framework/Semi.Avalonia.Demo.Web.pdb.gz index 181230c..be28074 100644 Binary files a/_framework/Semi.Avalonia.Demo.Web.pdb.gz and b/_framework/Semi.Avalonia.Demo.Web.pdb.gz differ diff --git a/_framework/Semi.Avalonia.Demo.Web.wasm b/_framework/Semi.Avalonia.Demo.Web.wasm index 07f2c3f..36c7fb8 100644 Binary files a/_framework/Semi.Avalonia.Demo.Web.wasm and b/_framework/Semi.Avalonia.Demo.Web.wasm differ diff --git a/_framework/Semi.Avalonia.Demo.Web.wasm.br b/_framework/Semi.Avalonia.Demo.Web.wasm.br index c61044d..f2ec6bc 100644 Binary files a/_framework/Semi.Avalonia.Demo.Web.wasm.br and b/_framework/Semi.Avalonia.Demo.Web.wasm.br differ diff --git a/_framework/Semi.Avalonia.Demo.Web.wasm.gz b/_framework/Semi.Avalonia.Demo.Web.wasm.gz index 9c34cf5..b631041 100644 Binary files a/_framework/Semi.Avalonia.Demo.Web.wasm.gz and b/_framework/Semi.Avalonia.Demo.Web.wasm.gz differ diff --git a/_framework/Semi.Avalonia.Demo.pdb.gz b/_framework/Semi.Avalonia.Demo.pdb.gz index 2e5a500..aa94a24 100644 Binary files a/_framework/Semi.Avalonia.Demo.pdb.gz and b/_framework/Semi.Avalonia.Demo.pdb.gz differ diff --git a/_framework/Semi.Avalonia.Demo.wasm b/_framework/Semi.Avalonia.Demo.wasm index 2142ad8..deafb90 100644 Binary files a/_framework/Semi.Avalonia.Demo.wasm and b/_framework/Semi.Avalonia.Demo.wasm differ diff --git a/_framework/Semi.Avalonia.Demo.wasm.br b/_framework/Semi.Avalonia.Demo.wasm.br index 712fd43..d9506fd 100644 Binary files a/_framework/Semi.Avalonia.Demo.wasm.br and b/_framework/Semi.Avalonia.Demo.wasm.br differ diff --git a/_framework/Semi.Avalonia.Demo.wasm.gz b/_framework/Semi.Avalonia.Demo.wasm.gz index 5af4327..bb50d60 100644 Binary files a/_framework/Semi.Avalonia.Demo.wasm.gz and b/_framework/Semi.Avalonia.Demo.wasm.gz differ diff --git a/_framework/Semi.Avalonia.pdb.gz b/_framework/Semi.Avalonia.pdb.gz index a562130..8d61181 100644 Binary files a/_framework/Semi.Avalonia.pdb.gz and b/_framework/Semi.Avalonia.pdb.gz differ diff --git a/_framework/Semi.Avalonia.wasm b/_framework/Semi.Avalonia.wasm index c48c884..bc7d804 100644 Binary files a/_framework/Semi.Avalonia.wasm and b/_framework/Semi.Avalonia.wasm differ diff --git a/_framework/Semi.Avalonia.wasm.br b/_framework/Semi.Avalonia.wasm.br index b1382b7..9c0ce6e 100644 Binary files a/_framework/Semi.Avalonia.wasm.br and b/_framework/Semi.Avalonia.wasm.br differ diff --git a/_framework/Semi.Avalonia.wasm.gz b/_framework/Semi.Avalonia.wasm.gz index 3ef7af7..b83b32d 100644 Binary files a/_framework/Semi.Avalonia.wasm.gz and b/_framework/Semi.Avalonia.wasm.gz differ diff --git a/_framework/SkiaSharp.wasm b/_framework/SkiaSharp.wasm index 4be1d40..9c2f03f 100644 Binary files a/_framework/SkiaSharp.wasm and b/_framework/SkiaSharp.wasm differ diff --git a/_framework/SkiaSharp.wasm.br b/_framework/SkiaSharp.wasm.br index 11166a8..dc0c2e5 100644 Binary files a/_framework/SkiaSharp.wasm.br and b/_framework/SkiaSharp.wasm.br differ diff --git a/_framework/SkiaSharp.wasm.gz b/_framework/SkiaSharp.wasm.gz index 0a092e4..ebf376f 100644 Binary files a/_framework/SkiaSharp.wasm.gz and b/_framework/SkiaSharp.wasm.gz differ diff --git a/_framework/System.Linq.wasm b/_framework/System.Linq.wasm index 4ce1f6a..1c9a88c 100644 Binary files a/_framework/System.Linq.wasm and b/_framework/System.Linq.wasm differ diff --git a/_framework/System.Linq.wasm.br b/_framework/System.Linq.wasm.br index 3ba29d5..6975d66 100644 Binary files a/_framework/System.Linq.wasm.br and b/_framework/System.Linq.wasm.br differ diff --git a/_framework/System.Linq.wasm.gz b/_framework/System.Linq.wasm.gz index 12ceda6..f5e5397 100644 Binary files a/_framework/System.Linq.wasm.gz and b/_framework/System.Linq.wasm.gz differ diff --git a/_framework/System.Private.CoreLib.wasm b/_framework/System.Private.CoreLib.wasm index 737d666..a464640 100644 Binary files a/_framework/System.Private.CoreLib.wasm and b/_framework/System.Private.CoreLib.wasm differ diff --git a/_framework/System.Private.CoreLib.wasm.br b/_framework/System.Private.CoreLib.wasm.br index d540fc1..f15e477 100644 Binary files a/_framework/System.Private.CoreLib.wasm.br and b/_framework/System.Private.CoreLib.wasm.br differ diff --git a/_framework/System.Private.CoreLib.wasm.gz b/_framework/System.Private.CoreLib.wasm.gz index d06adf0..31181a4 100644 Binary files a/_framework/System.Private.CoreLib.wasm.gz and b/_framework/System.Private.CoreLib.wasm.gz differ diff --git a/_framework/System.Runtime.InteropServices.JavaScript.wasm b/_framework/System.Runtime.InteropServices.JavaScript.wasm index 9d89137..2da7ee0 100644 Binary files a/_framework/System.Runtime.InteropServices.JavaScript.wasm and b/_framework/System.Runtime.InteropServices.JavaScript.wasm differ diff --git a/_framework/System.Runtime.InteropServices.JavaScript.wasm.br b/_framework/System.Runtime.InteropServices.JavaScript.wasm.br index 8a9615a..9a92733 100644 Binary files a/_framework/System.Runtime.InteropServices.JavaScript.wasm.br and b/_framework/System.Runtime.InteropServices.JavaScript.wasm.br differ diff --git a/_framework/System.Runtime.InteropServices.JavaScript.wasm.gz b/_framework/System.Runtime.InteropServices.JavaScript.wasm.gz index 6a354f5..902abdd 100644 Binary files a/_framework/System.Runtime.InteropServices.JavaScript.wasm.gz and b/_framework/System.Runtime.InteropServices.JavaScript.wasm.gz differ diff --git a/_framework/System.Runtime.wasm b/_framework/System.Runtime.wasm index f2ba63a..c3ae11d 100644 Binary files a/_framework/System.Runtime.wasm and b/_framework/System.Runtime.wasm differ diff --git a/_framework/System.Runtime.wasm.br b/_framework/System.Runtime.wasm.br index dfe8e52..197aedf 100644 Binary files a/_framework/System.Runtime.wasm.br and b/_framework/System.Runtime.wasm.br differ diff --git a/_framework/System.Runtime.wasm.gz b/_framework/System.Runtime.wasm.gz index b180add..97e8b27 100644 Binary files a/_framework/System.Runtime.wasm.gz and b/_framework/System.Runtime.wasm.gz differ diff --git a/_framework/avalonia.js b/_framework/avalonia.js index 1aeab2c..9364bf1 100755 --- a/_framework/avalonia.js +++ b/_framework/avalonia.js @@ -1,2 +1,2 @@ -var H=class{static getCaretCoordinates(e,t,n){var p,x;if(!I)throw new Error("textarea-caret-position#getCaretCoordinates should only be called in a browser");let r=(p=n==null?void 0:n.debug)!=null?p:!1;if(r){let v=document.querySelector("#input-textarea-caret-position-mirror-div");v&&((x=v.parentNode)==null||x.removeChild(v))}let i=document.createElement("div");i.id="input-textarea-caret-position-mirror-div",document.body.appendChild(i);let a=i.style,s=window.getComputedStyle?window.getComputedStyle(e):e.currentStyle,o=e.nodeName==="INPUT";a.whiteSpace="pre-wrap",o||(a.wordWrap="break-word"),a.position="absolute",r||(a.visibility="hidden"),O.forEach(v=>{if(o&&v==="lineHeight")if(s.boxSizing==="border-box"){let S=parseInt(s.height),D=parseInt(s.paddingTop)+parseInt(s.paddingBottom)+parseInt(s.borderTopWidth)+parseInt(s.borderBottomWidth),W=D+parseInt(s.lineHeight);S>W?a.lineHeight=`${S-D}px`:S===W?a.lineHeight=s.lineHeight:a.lineHeight="0"}else a.lineHeight=s.height;else a[v]=s[v]}),F?e.scrollHeight>parseInt(s.height)&&(a.overflowY="scroll"):a.overflow="hidden",i.textContent=e.value.substring(0,t),o&&(i.textContent=i.textContent.replace(/\s/g,"\xA0"));let d=document.createElement("span");d.textContent=e.value.substring(t)||".",i.appendChild(d);let u={top:d.offsetTop+parseInt(s.borderTopWidth),left:d.offsetLeft+parseInt(s.borderLeftWidth),height:parseInt(s.lineHeight)};return r?d.style.backgroundColor="#aaa":document.body.removeChild(i),u}},O=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],I=typeof window!="undefined",F=I&&window.mozInnerScreenX!=null;var l=class{static get InputHelper(){var e;return(e=this.resolvedExports)==null?void 0:e.Avalonia.Browser.Interop.InputHelper}static get DomHelper(){var e;return(e=this.resolvedExports)==null?void 0:e.Avalonia.Browser.Interop.DomHelper}static get TimerHelper(){var e;return(e=this.resolvedExports)==null?void 0:e.Avalonia.Browser.Interop.TimerHelper}static get CanvasHelper(){var e;return(e=this.resolvedExports)==null?void 0:e.Avalonia.Browser.Interop.CanvasHelper}};async function R(){let c=await globalThis.getDotnetRuntime(0);if(c!=null)return l.resolvedExports=await c.getAssemblyExports("Avalonia.Browser.dll"),l.resolvedExports}l.exportsPromise=R();var L=class{static initializeBackgroundHandlers(){this.clipboardState===0&&(globalThis.addEventListener("paste",e=>{this.clipboardState===2&&this.resolveClipboard(e.clipboardData.getData("text"))}),this.clipboardState=1)}static async readClipboardText(e){if(e.navigator.clipboard.readText)return await e.navigator.clipboard.readText();try{return await new Promise((t,n)=>{this.clipboardState=2,this.resolveClipboard=t,this.rejectClipboard=n})}finally{this.clipboardState=1,this.resolveClipboard=null,this.rejectClipboard=null}}static async writeClipboardText(e,t){return await e.navigator.clipboard.writeText(t)}static subscribeInputEvents(e,t){let n=this.subscribeKeyEvents(e,t),r=this.subscribePointerEvents(e,t),i=this.subscribeTextEvents(e,t),a=this.subscribeDropEvents(e,t),s=this.subscribeKeyboardGeometryChange(e,t);return()=>{n(),r(),i(),a(),s()}}static subscribeKeyEvents(e,t){let n=i=>{l.InputHelper.OnKeyDown(t,i.code,i.key,this.getModifiers(i)),this.clipboardState!==2&&i.preventDefault()};e.addEventListener("keydown",n);let r=i=>{l.InputHelper.OnKeyUp(t,i.code,i.key,this.getModifiers(i)),i.preventDefault(),this.rejectClipboard&&this.rejectClipboard()};return e.addEventListener("keyup",r),()=>{e.removeEventListener("keydown",n),e.removeEventListener("keyup",r)}}static subscribeTextEvents(e,t){let n=s=>{l.InputHelper.OnCompositionStart(t)};e.addEventListener("compositionstart",n);let r=s=>{let o=s.getTargetRanges(),d=-1,u=-1;o.length>0&&(d=o[0].startOffset,u=o[0].endOffset),s.inputType==="insertCompositionText"&&(d=2,u=d+2),l.InputHelper.OnBeforeInput(t,s.inputType,d,u)};e.addEventListener("beforeinput",r);let i=s=>{l.InputHelper.OnCompositionUpdate(t,s.data)};e.addEventListener("compositionupdate",i);let a=s=>{l.InputHelper.OnCompositionEnd(t,s.data),s.preventDefault()};return e.addEventListener("compositionend",a),()=>{e.removeEventListener("compositionstart",n),e.removeEventListener("compositionupdate",i),e.removeEventListener("compositionend",a)}}static subscribePointerEvents(e,t){let n=o=>{l.InputHelper.OnPointerMove(t,o.pointerType,o.pointerId,o.offsetX,o.offsetY,o.pressure,o.tiltX,o.tiltY,o.twist,this.getModifiers(o),o),o.preventDefault()},r=o=>{l.InputHelper.OnPointerDown(t,o.pointerType,o.pointerId,o.button,o.offsetX,o.offsetY,o.pressure,o.tiltX,o.tiltY,o.twist,this.getModifiers(o)),o.preventDefault()},i=o=>{l.InputHelper.OnPointerUp(t,o.pointerType,o.pointerId,o.button,o.offsetX,o.offsetY,o.pressure,o.tiltX,o.tiltY,o.twist,this.getModifiers(o)),o.preventDefault()},a=o=>{l.InputHelper.OnPointerCancel(t,o.pointerType,o.pointerId,o.offsetX,o.offsetY,o.pressure,o.tiltX,o.tiltY,o.twist,this.getModifiers(o))},s=o=>{l.InputHelper.OnWheel(t,o.offsetX,o.offsetY,o.deltaX,o.deltaY,this.getModifiers(o)),o.preventDefault()};return e.addEventListener("pointermove",n),e.addEventListener("pointerdown",r),e.addEventListener("pointerup",i),e.addEventListener("wheel",s),e.addEventListener("pointercancel",a),()=>{e.removeEventListener("pointerover",n),e.removeEventListener("pointerdown",r),e.removeEventListener("pointerup",i),e.removeEventListener("pointercancel",a),e.removeEventListener("wheel",s)}}static subscribeDropEvents(e,t){let n=i=>{let a=i.dataTransfer;l.InputHelper.OnDragDrop(t,i.type,i.offsetX,i.offsetY,this.getModifiers(i),a==null?void 0:a.effectAllowed,a)},r=i=>{i.preventDefault(),n(i)};return e.addEventListener("dragover",r),e.addEventListener("dragenter",n),e.addEventListener("dragleave",n),e.addEventListener("drop",r),()=>{e.removeEventListener("dragover",r),e.removeEventListener("dragenter",n),e.removeEventListener("dragleave",n),e.removeEventListener("drop",r)}}static getCoalescedEvents(e){return e.getCoalescedEvents().flatMap(t=>[t.offsetX,t.offsetY,t.pressure,t.tiltX,t.tiltY,t.twist])}static subscribeKeyboardGeometryChange(e,t){if("virtualKeyboard"in navigator){let n=r=>{let i=e.getBoundingClientRect(),a=r.target.boundingRect;l.InputHelper.OnKeyboardGeometryChange(t,a.x-i.x,a.y-i.y,a.width,a.height)};return navigator.virtualKeyboard.addEventListener("geometrychange",n),()=>{navigator.virtualKeyboard.removeEventListener("geometrychange",n)}}return()=>{}}static clearInput(e){e.value=""}static focusElement(e){e.focus()}static setCursor(e,t){t==="default"?e.style.removeProperty("cursor"):e.style.cursor=t}static setBounds(e,t,n,r,i,a){e.style.left=t.toFixed(0)+"px",e.style.top=n.toFixed(0)+"px";let{left:s,top:o}=H.getCaretCoordinates(e,a);e.style.left=(t-s).toFixed(0)+"px",e.style.top=(n-o).toFixed(0)+"px"}static hide(e){e.style.display="none"}static show(e){e.style.display="block"}static setSurroundingText(e,t,n,r){!e||(e.value=t,e.setSelectionRange(n,r),e.style.width="20px",e.style.width=`${e.scrollWidth}px`)}static getModifiers(e){let t=0;e.ctrlKey&&(t|=2),e.altKey&&(t|=1),e.shiftKey&&(t|=4),e.metaKey&&(t|=8);let n=e.buttons;return n&&(n&1&&(t|=16),n&2&&(t|=e.type==="pen"?2048:32),n&4&&(t|=64),n&8&&(t|=128),n&16&&(t|=256),n&32&&(t|=1024)),t}static setPointerCapture(e,t){e.setPointerCapture(t)}static releasePointerCapture(e,t){e.hasPointerCapture(t)&&e.releasePointerCapture(t)}};L.clipboardState=0;var h=class{static getGlobalThis(){return globalThis}static addClass(e,t){e.classList.add(t)}static getFirstElementById(e,t){return(t instanceof Window?t.document:t.ownerDocument).getElementById(e)}static getFirstElementByClassName(e,t){let r=(t instanceof Window?t.document:t).getElementsByClassName(e);return r?r[0]:null}static createAvaloniaCanvas(e){var r;let t=(r=e.getAttribute("data-containerId"))!=null?r:"0000",n=document.createElement("canvas");return n.id=`canvas${t}`,n.classList.add("avalonia-canvas"),n.style.width="100%",n.style.height="100%",n.style.position="absolute",n}static attachCanvas(e,t){e.prepend(t)}static detachCanvas(e,t){e.removeChild(t)}static createAvaloniaHost(e){let t=Math.random().toString(36).replace(/[^a-z]+/g,"").substr(2,10);e.classList.add("avalonia-container"),e.tabIndex=0,e.setAttribute("data-containerId",t),e.oncontextmenu=function(){return!1},e.style.overflow="hidden",e.style.touchAction="none";let n=document.createElement("div");n.id=`nativeHost${t}`,n.classList.add("avalonia-native-host"),n.style.left="0px",n.style.top="0px",n.style.width="100%",n.style.height="100%",n.style.position="absolute";let r=document.createElement("input");return r.id=`inputElement${t}`,r.classList.add("avalonia-input-element"),r.autocapitalize="none",r.type="text",r.spellcheck=!1,r.style.padding="0",r.style.margin="0",r.style.borderWidth="0",r.style.position="absolute",r.style.overflow="hidden",r.style.borderStyle="hidden",r.style.outline="none",r.style.background="transparent",r.style.color="transparent",r.style.display="none",r.style.height="20px",r.style.zIndex="-1",r.onpaste=function(){return!1},r.oncopy=function(){return!1},r.oncut=function(){return!1},e.prepend(r),e.prepend(n),{host:e,nativeHost:n,inputElement:r}}static isFullscreen(e){return e.document.fullscreenElement!=null}static async setFullscreen(e,t){t?await e.document.documentElement.requestFullscreen():await e.document.exitFullscreen()}static initGlobalDomEvents(e){if(e.document.documentElement.style.setProperty("--av-sat","env(safe-area-inset-top)"),e.document.documentElement.style.setProperty("--av-sar","env(safe-area-inset-right)"),e.document.documentElement.style.setProperty("--av-sab","env(safe-area-inset-bottom)"),e.document.documentElement.style.setProperty("--av-sal","env(safe-area-inset-left)"),e.matchMedia!==void 0){let t=e.matchMedia("(prefers-color-scheme: dark)"),n=e.matchMedia("(prefers-contrast: more)");t.addEventListener("change",r=>{l.DomHelper.DarkModeChanged(r.matches,n.matches)}),n.addEventListener("change",r=>{l.DomHelper.DarkModeChanged(t.matches,r.matches)})}e.document.addEventListener("visibilitychange",()=>{l.DomHelper.DocumentVisibilityChanged(e.document.visibilityState)}),e.document.visibilityState==="visible"&&e.setTimeout(()=>{l.DomHelper.DocumentVisibilityChanged(e.document.visibilityState)},10)}static getSafeAreaPadding(e){let t=parseFloat(getComputedStyle(e.document.documentElement).getPropertyValue("--av-sat")),n=parseFloat(getComputedStyle(e.document.documentElement).getPropertyValue("--av-sab")),r=parseFloat(getComputedStyle(e.document.documentElement).getPropertyValue("--av-sal")),i=parseFloat(getComputedStyle(e.document.documentElement).getPropertyValue("--av-sar"));return[r,t,n,i]}static getDarkMode(e){if(e.matchMedia===void 0)return[0,0];let t=e.matchMedia("(prefers-color-scheme: dark)"),n=e.matchMedia("(prefers-contrast: more)");return[t.matches?1:0,n.matches?1:0]}};var M=class{static hasNativeFilePicker(){return"showSaveFilePicker"in globalThis}static isMobile(){var i;let e=(i=globalThis.navigator)==null?void 0:i.userAgentData;if(e)return e.mobile;let t=navigator.userAgent,n=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,r=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw(n|u)|c55\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i;return n.test(t)||r.test(t.substr(0,4))}static isTv(){return navigator.userAgent.includes("SmartTV")}};var G=typeof SharedArrayBuffer!="undefined";function N(c){return G&&c[Symbol.toStringTag]==="SharedArrayBuffer"}var k=class{static async seek(e,t){return await e.seek(t)}static async truncate(e,t){return await e.truncate(t)}static async close(e){return await e.close()}static async write(e,t,n,r){var s;let i=(s=globalThis.getDotnetRuntime(0))==null?void 0:s.localHeapViewU8(),a;if(t._pointer>0&&t._length>0&&i&&!N(i.buffer))a=new Uint8Array(i.buffer,t._pointer+n,r);else{let o=new Uint8Array(r);t.copyTo(o,n),a=t}return await e.write(a)}static byteLength(e){return e.size}static async sliceArrayBuffer(e,t,n){let r=await e.slice(t,t+n).arrayBuffer();return new Uint8Array(r)}static toMemoryView(e){return e}};var P=class{},z=class{static createDefaultChild(e){return document.createElement("div")}static createAttachment(){return new P}static initializeWithChildHandle(e,t){e._child=t,e._child.style.position="absolute"}static attachTo(e,t){e._host&&e._child&&e._host.removeChild(e._child),e._host=t,e._host&&e._child&&e._host.appendChild(e._child)}static showInBounds(e,t,n,r,i){e._child&&(e._child.style.top=`${n}px`,e._child.style.left=`${t}px`,e._child.style.width=`${r}px`,e._child.style.height=`${i}px`,e._child.style.display="block")}static hideWithSize(e,t,n){e._child&&(e._child.style.width=`${t}px`,e._child.style.height=`${n}px`,e._child.style.display="none")}static releaseChild(e){e._child&&(e._child=void 0)}};var B=class{static addBackHandler(e){history.pushState(null,"",window.location.href),window.onpopstate=()=>{e()?history.forward():history.back()}}};var A=class{static itemsArrayAt(e,t){let n=e[t];if(!n)return[];let r=[];for(let i=0;i{var n,r;(n=this.resizeObserver)==null||n.callbacks.delete(e),(r=this.resizeObserver)==null||r.unobserve(e)}}static onResize(e,t){for(let n of e){let r=t.callbacks.get(n.target);if(!r)continue;let i=window.devicePixelRatio,a,s,o=i;n.devicePixelContentBoxSize?(a=n.devicePixelContentBoxSize[0].inlineSize,s=n.devicePixelContentBoxSize[0].blockSize,o=1):n.contentBoxSize?n.contentBoxSize[0]?(a=n.contentBoxSize[0].inlineSize,s=n.contentBoxSize[0].blockSize):(a=n.contentBoxSize.inlineSize,s=n.contentBoxSize.blockSize):(a=n.contentRect.width,s=n.contentRect.height);let d=Math.round(a*o),u=Math.round(s*o);r(d,u,i)}}};var y=class{constructor(e,t){this.canvas=e;this.renderTargetType=t}static setSize(e,t,n){e.canvas.width=t,e.canvas.height=n}};function _(){var t,n,r,i;let c=globalThis,e=(n=c.Module)!=null?n:(t=c.getDotnetRuntime(0))==null?void 0:t.Module;return(i=(r=e==null?void 0:e.GL)!=null?r:c.AvaloniaGL)!=null?i:c.SkiaSharpGL}var b=class extends y{constructor(t,n){var s,o;if(b._gl==null&&(b._gl=_()),!b._gl)throw new Error("Module.GL object wasn't initialized, WebGL can't be used.");let r={alpha:!0,depth:!0,stencil:!0,antialias:!1,premultipliedAlpha:!0,preserveDrawingBuffer:!1,failIfMajorPerformanceCaveat:!0,majorVersion:n===2?1:2,minorVersion:0,enableExtensionsByDefault:1,explicitSwapControl:0},i=n===2?t.getContext("webgl",r):t.getContext("webgl2",r);if(!i)throw new Error("HTMLCanvasElement.getContext returned null.");let a=b._gl.registerContext(i,r);i.gl_handle=a;super(t,"webgl");this.canvas=t;this.contextHandle=a,this.fboId=(o=(s=i.getParameter(i.FRAMEBUFFER_BINDING))==null?void 0:s.id)!=null?o:0,this.stencil=i.getParameter(i.STENCIL_BITS),this.sample=i.getParameter(i.SAMPLES),this.depth=i.getParameter(i.DEPTH_BITS),this.attrs=r}static getCurrentContext(){var t,n,r;return(r=(n=(t=b._gl)==null?void 0:t.currentContext)==null?void 0:n.handle)!=null?r:0}static makeContextCurrent(t){if(b._gl==null)return!1;let n=b._gl.makeContextCurrent(t);return t===0||n}},E=b;E._gl=null;var w=class extends y{constructor(t){let n=t.getContext("2d",{alpha:!0});if(!n)throw new Error("HTMLCanvasElement.getContext(2d) returned null.");super(t,"software");this.context=n,this.runtime=globalThis.getDotnetRuntime(0)}putPixelData(t,n,r,i){var d;let a=(d=this.runtime)==null?void 0:d.localHeapViewU8(),s;if(a!=null&&a.buffer){if(s=new Uint8ClampedArray(a.buffer,t,n),this.canvas instanceof OffscreenCanvas){let u=new ArrayBuffer(s.byteLength),p=new Uint8ClampedArray(u);p.set(s),s=p}}else throw new Error("Unable to access .NET memory");let o=new ImageData(s,r,i);this.context.putImageData(o,0,0)}static staticPutPixelData(t,n,r,i,a){t.putPixelData(n,r,i,a)}};var m=class{static create(e,t,n){var i,a;let r=m.nextId++;if(e===0)m.registry[r]={canvas:t},m.targets[r]=m.createRenderTarget(t,n);else{let s=globalThis,o=(a=s.Module)!=null?a:(i=s.getDotnetRuntime(0))==null?void 0:i.Module,d=o==null?void 0:o.PThread;if(d==null)throw new Error("Unable to access emscripten PThread api");let u=d.pthreads[e];if(u==null)throw new Error(`Unable get pthread with id ${e}`);let p;if(u.postMessage!=null?p=u:p=u.worker,p==null)throw new Error(`Unable get Worker for pthread ${e}`);let x=t.transferControlToOffscreen();p.postMessage({avaloniaCmd:"registerCanvas",canvas:x,modes:n,id:r},[x]),m.registry[r]={canvas:t,worker:p}}return r}static initializeWorker(){let e=self.onmessage;self.onmessage=t=>{let n=t;n.data.avaloniaCmd==="registerCanvas"?m.targets[n.data.id]=m.createRenderTarget(n.data.canvas,n.data.modes):n.data.avaloniaCmd==="unregisterCanvas"?delete m.targets[n.data.id]:e!=null&&e.call(self,t)}}static getRenderTarget(e){return m.targets[e]}static createRenderTarget(e,t){for(let n of t)try{return n===1?new w(e):new E(e,n)}catch(r){let i="";r instanceof Error&&(i=": "+r.message),console.error(`Failed to create render target for mode ${n} ${i}`)}return new w(e)}},f=m;f.targets={},f.registry={},f.nextId=1;var C=class{constructor(e,t,n,r){this.canvas=e;this.targetId=f.create(r,e,t),T.observeSize(e,(i,a,s)=>{var o;this.sizeParams=[i,a,s],(o=l.CanvasHelper)==null||o.OnSizeChanged(n,i,a,s)})}get width(){return this.sizeParams?this.sizeParams[0]:1}get height(){return this.sizeParams?this.sizeParams[1]:1}get scaling(){return this.sizeParams?this.sizeParams[2]:1}destroy(){}static create(e,t,n,r){let i=h.createAvaloniaCanvas(e);h.attachCanvas(e,i);try{return new C(i,t,n,r)}catch(a){throw h.detachCanvas(e,i),a}}static destroy(e){e.destroy()}};async function De(c,e){"serviceWorker"in navigator&&await globalThis.navigator.serviceWorker.register(c,e?{scope:e}:void 0)}export{h as AvaloniaDOM,M as Caniuse,C as CanvasSurface,A as GeneralHelpers,L as InputHelper,z as NativeControlHost,B as NavigationHelper,w as SoftwareRenderTarget,k as StreamHelper,g as TimerHelper,E as WebGlRenderTarget,y as WebRenderTarget,f as WebRenderTargetRegistry,De as registerServiceWorker}; +var g=class{static getCaretCoordinates(e,t,i){var b,d;if(!W)throw new Error("textarea-caret-position#getCaretCoordinates should only be called in a browser");let n=(b=i==null?void 0:i.debug)!=null?b:!1;if(n){let p=document.querySelector("#input-textarea-caret-position-mirror-div");p&&((d=p.parentNode)==null||d.removeChild(p))}let r=document.createElement("div");r.id="input-textarea-caret-position-mirror-div",document.body.appendChild(r);let a=r.style,o=window.getComputedStyle?window.getComputedStyle(e):e.currentStyle,l=e.nodeName==="INPUT";a.whiteSpace="pre-wrap",l||(a.wordWrap="break-word"),a.position="absolute",n||(a.visibility="hidden"),_.forEach(p=>{if(l&&p==="lineHeight")if(o.boxSizing==="border-box"){let w=parseInt(o.height),B=parseInt(o.paddingTop)+parseInt(o.paddingBottom)+parseInt(o.borderTopWidth)+parseInt(o.borderBottomWidth),D=B+parseInt(o.lineHeight);w>D?a.lineHeight=`${w-B}px`:w===D?a.lineHeight=o.lineHeight:a.lineHeight="0"}else a.lineHeight=o.height;else a[p]=o[p]}),F?e.scrollHeight>parseInt(o.height)&&(a.overflowY="scroll"):a.overflow="hidden",r.textContent=e.value.substring(0,t),l&&(r.textContent=r.textContent.replace(/\s/g,"\xA0"));let u=document.createElement("span");u.textContent=e.value.substring(t)||".",r.appendChild(u);let c={top:u.offsetTop+parseInt(o.borderTopWidth),left:u.offsetLeft+parseInt(o.borderLeftWidth),height:parseInt(o.lineHeight)};return n?u.style.backgroundColor="#aaa":document.body.removeChild(r),c}},_=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],W=typeof window!="undefined",F=W&&window.mozInnerScreenX!=null;var f=class{static initializeBackgroundHandlers(){this.clipboardState===0&&(globalThis.addEventListener("paste",e=>{this.clipboardState===2&&this.resolveClipboard(e.clipboardData.getData("text"))}),this.clipboardState=1)}static async readClipboardText(){if(globalThis.navigator.clipboard.readText)return await globalThis.navigator.clipboard.readText();try{return await new Promise((e,t)=>{this.clipboardState=2,this.resolveClipboard=e,this.rejectClipboard=t})}finally{this.clipboardState=1,this.resolveClipboard=null,this.rejectClipboard=null}}static subscribeKeyEvents(e,t,i){let n=a=>{t(a.code,a.key,this.getModifiers(a))&&this.clipboardState!==2&&a.preventDefault()};e.addEventListener("keydown",n);let r=a=>{i(a.code,a.key,this.getModifiers(a))&&a.preventDefault(),this.rejectClipboard&&this.rejectClipboard()};return e.addEventListener("keyup",r),()=>{e.removeEventListener("keydown",n),e.removeEventListener("keyup",r)}}static subscribeTextEvents(e,t,i,n,r){let a=c=>{i(c)&&c.preventDefault()};e.addEventListener("compositionstart",a);let o=c=>{let b=c.getTargetRanges(),d=-1,p=-1;b.length>0&&(d=b[0].startOffset,p=b[0].endOffset),c.inputType==="insertCompositionText"&&(d=2,p=d+2),t(c,d,p)&&c.preventDefault()};e.addEventListener("beforeinput",o);let l=c=>{n(c)&&c.preventDefault()};e.addEventListener("compositionupdate",l);let u=c=>{r(c)&&c.preventDefault()};return e.addEventListener("compositionend",u),()=>{e.removeEventListener("compositionstart",a),e.removeEventListener("compositionupdate",l),e.removeEventListener("compositionend",u)}}static subscribePointerEvents(e,t,i,n,r,a){let o=d=>{t(d),d.preventDefault()},l=d=>{i(d),d.preventDefault()},u=d=>{n(d),d.preventDefault()},c=d=>{r(d),d.preventDefault()},b=d=>{a(d),d.preventDefault()};return e.addEventListener("pointermove",o),e.addEventListener("pointerdown",l),e.addEventListener("pointerup",u),e.addEventListener("wheel",b),e.addEventListener("pointercancel",c),()=>{e.removeEventListener("pointerover",o),e.removeEventListener("pointerdown",l),e.removeEventListener("pointerup",u),e.removeEventListener("pointercancel",c),e.removeEventListener("wheel",b)}}static subscribeInputEvents(e,t){let i=n=>{t(n.value)&&n.preventDefault()};return e.addEventListener("input",i),()=>{e.removeEventListener("input",i)}}static subscribeDropEvents(e,t){let i=n=>{t(n)&&n.preventDefault()};return e.addEventListener("dragover",i),e.addEventListener("dragenter",i),e.addEventListener("dragleave",i),e.addEventListener("drop",i),()=>{e.removeEventListener("dragover",i),e.removeEventListener("dragenter",i),e.removeEventListener("dragleave",i),e.removeEventListener("drop",i)}}static getCoalescedEvents(e){return e.getCoalescedEvents()}static subscribeKeyboardGeometryChange(e,t){"virtualKeyboard"in navigator&&navigator.virtualKeyboard.addEventListener("geometrychange",i=>{let n=e.getBoundingClientRect(),r=i.target.boundingRect;t({x:r.x-n.x,y:r.y-n.y,width:r.width,height:r.height})})}static subscribeVisibilityChange(e){return document.addEventListener("visibilitychange",()=>{e(document.visibilityState==="visible")}),document.visibilityState==="visible"}static clearInput(e){e.value=""}static focusElement(e){e.focus()}static setCursor(e,t){t==="default"?e.style.removeProperty("cursor"):e.style.cursor=t}static setBounds(e,t,i,n,r,a){e.style.left=t.toFixed(0)+"px",e.style.top=i.toFixed(0)+"px";let{left:o,top:l}=g.getCaretCoordinates(e,a);e.style.left=(t-o).toFixed(0)+"px",e.style.top=(i-l).toFixed(0)+"px"}static hide(e){e.style.display="none"}static show(e){e.style.display="block"}static setSurroundingText(e,t,i,n){!e||(e.value=t,e.setSelectionRange(i,n),e.style.width="20px",e.style.width=`${e.scrollWidth}px`)}static getModifiers(e){let t=0;return e.ctrlKey&&(t|=2),e.altKey&&(t|=1),e.shiftKey&&(t|=4),e.metaKey&&(t|=8),t.toString()}static setPointerCapture(e,t){e.setPointerCapture(t)}static releasePointerCapture(e,t){e.hasPointerCapture(t)&&e.releasePointerCapture(t)}};f.clipboardState=0;var m=class{static addClass(e,t){e.classList.add(t)}static observeDarkMode(e){if(globalThis.matchMedia===void 0)return!1;let t=globalThis.matchMedia("(prefers-color-scheme: dark)"),i=globalThis.matchMedia("(prefers-contrast: more)");return t.addEventListener("change",n=>{e(n.matches,i.matches)}),i.addEventListener("change",n=>{e(t.matches,n.matches)}),{isDarkMode:t.matches,isHighContrast:i.matches}}static getFirstElementByClassName(e,t){let i=(t!=null?t:globalThis.document).getElementsByClassName(e);return i?i[0]:null}static createAvaloniaCanvas(e){var n;let t=(n=e.getAttribute("data-containerId"))!=null?n:"0000",i=document.createElement("canvas");return i.id=`canvas${t}`,i.classList.add("avalonia-canvas"),i.style.width="100%",i.style.height="100%",i.style.position="absolute",i}static attachCanvas(e,t){e.prepend(t)}static detachCanvas(e,t){e.removeChild(t)}static createAvaloniaHost(e){let t=Math.random().toString(36).replace(/[^a-z]+/g,"").substr(2,10);e.classList.add("avalonia-container"),e.tabIndex=0,e.setAttribute("data-containerId",t),e.oncontextmenu=function(){return!1},e.style.overflow="hidden",e.style.touchAction="none";let i=document.createElement("div");i.id=`nativeHost${t}`,i.classList.add("avalonia-native-host"),i.style.left="0px",i.style.top="0px",i.style.width="100%",i.style.height="100%",i.style.position="absolute";let n=document.createElement("input");return n.id=`inputElement${t}`,n.classList.add("avalonia-input-element"),n.autocapitalize="none",n.type="text",n.spellcheck=!1,n.style.padding="0",n.style.margin="0",n.style.borderWidth="0",n.style.position="absolute",n.style.overflow="hidden",n.style.borderStyle="hidden",n.style.outline="none",n.style.background="transparent",n.style.color="transparent",n.style.display="none",n.style.height="20px",n.style.zIndex="-1",n.onpaste=function(){return!1},n.oncopy=function(){return!1},n.oncut=function(){return!1},e.prepend(n),e.prepend(i),{host:e,nativeHost:i,inputElement:n}}static isFullscreen(){return document.fullscreenElement!=null}static async setFullscreen(e){e?await document.documentElement.requestFullscreen():await document.exitFullscreen()}static initSafeAreaPadding(){document.documentElement.style.setProperty("--av-sat","env(safe-area-inset-top)"),document.documentElement.style.setProperty("--av-sar","env(safe-area-inset-right)"),document.documentElement.style.setProperty("--av-sab","env(safe-area-inset-bottom)"),document.documentElement.style.setProperty("--av-sal","env(safe-area-inset-left)")}static getSafeAreaPadding(){let e=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--av-sat")),t=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--av-sab")),i=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--av-sal")),n=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--av-sar"));return[i,e,t,n]}};var S=class{static hasNativeFilePicker(){return"showSaveFilePicker"in globalThis}static isMobile(){var r;let e=(r=globalThis.navigator)==null?void 0:r.userAgentData;if(e)return e.mobile;let t=navigator.userAgent,i=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,n=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw(n|u)|c55\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i;return i.test(t)||n.test(t.substr(0,4))}static isTv(){return navigator.userAgent.includes("SmartTV")}};var I=typeof SharedArrayBuffer!="undefined";function T(s){return I&&s[Symbol.toStringTag]==="SharedArrayBuffer"}var L=class{static async seek(e,t){return await e.seek(t)}static async truncate(e,t){return await e.truncate(t)}static async close(e){return await e.close()}static async write(e,t,i,n){var o;let r=(o=globalThis.getDotnetRuntime(0))==null?void 0:o.localHeapViewU8(),a;if(t._pointer>0&&t._length>0&&r&&!T(r.buffer))a=new Uint8Array(r.buffer,t._pointer+i,n);else{let l=new Uint8Array(n);t.copyTo(l,i),a=t}return await e.write(a)}static byteLength(e){return e.size}static async sliceArrayBuffer(e,t,i){let n=await e.slice(t,t+i).arrayBuffer();return new Uint8Array(n)}static toMemoryView(e){return e}};var z=class{},H=class{static createDefaultChild(e){return document.createElement("div")}static createAttachment(){return new z}static initializeWithChildHandle(e,t){e._child=t,e._child.style.position="absolute"}static attachTo(e,t){e._host&&e._child&&e._host.removeChild(e._child),e._host=t,e._host&&e._child&&e._host.appendChild(e._child)}static showInBounds(e,t,i,n,r){e._child&&(e._child.style.top=`${i}px`,e._child.style.left=`${t}px`,e._child.style.width=`${n}px`,e._child.style.height=`${r}px`,e._child.style.display="block")}static hideWithSize(e,t,i){e._child&&(e._child.style.width=`${t}px`,e._child.style.height=`${i}px`,e._child.style.display="none")}static releaseChild(e){e._child&&(e._child=void 0)}};var k=class{static addBackHandler(e){history.pushState(null,"",window.location.href),window.onpopstate=()=>{e()?history.forward():history.back()}}};var P=class{static itemsArrayAt(e,t){let i=e[t];if(!i)return[];let n=[];for(let r=0;r(i[i.Software2D=1]="Software2D",i[i.WebGL1=2]="WebGL1",i[i.WebGL2=3]="WebGL2",i))(v||{}),y=class{constructor(e,t){this.context=e;this.mode=t}};var C=class{static observeSize(e,t){return this.resizeObserver||(this.resizeObserver=new ResizeObserver(this.onResize),this.resizeObserver.callbacks=new Map),this.resizeObserver.callbacks.set(e,t),this.resizeObserver.observe(e,{box:"content-box"}),()=>{var i,n;(i=this.resizeObserver)==null||i.callbacks.delete(e),(n=this.resizeObserver)==null||n.unobserve(e)}}static onResize(e,t){for(let i of e){let n=t.callbacks.get(i.target);if(!n)continue;let r=window.devicePixelRatio,a,o,l=r;i.devicePixelContentBoxSize?(a=i.devicePixelContentBoxSize[0].inlineSize,o=i.devicePixelContentBoxSize[0].blockSize,l=1):i.contentBoxSize?i.contentBoxSize[0]?(a=i.contentBoxSize[0].inlineSize,o=i.contentBoxSize[0].blockSize):(a=i.contentBoxSize.inlineSize,o=i.contentBoxSize.blockSize):(a=i.contentRect.width,o=i.contentRect.height);let u=Math.round(a*l),c=Math.round(o*l);n(u,c,r)}}};var h=class extends y{constructor(t,i,n){super(i,n);this.canvas=t;this.context=i;this.mode=n;C.observeSize(t,(r,a,o)=>{this.sizeParams=[r,a,o],this.sizeChangedCallback&&this.sizeChangedCallback(r,a,o)})}destroy(){delete this.sizeChangedCallback}onSizeChanged(t){if(this.sizeChangedCallback)throw new Error("For simplicity, we don't support multiple size changed callbacks per surface, not needed yet.");this.sizeChangedCallback=t}ensureSize(){this.sizeParams&&(this.canvas.width=this.sizeParams[0],this.canvas.height=this.sizeParams[1],delete this.sizeParams)}};var E=class extends h{constructor(t){let i=t.getContext("2d",{alpha:!0});if(!i)throw new Error("HTMLCanvasElement.getContext(2d) returned null.");super(t,i,1);this.canvas=t;this.runtime=globalThis.getDotnetRuntime(0)}putPixelData(t,i,n){var l;this.ensureSize();let r=(l=this.runtime)==null?void 0:l.localHeapViewU8(),a;if(t._pointer>0&&t._length>0&&r&&!T(r.buffer))a=new Uint8ClampedArray(r.buffer,t._pointer,t._length);else{let u=new Uint8Array(t.byteLength);t.copyTo(u),a=new Uint8ClampedArray(u.buffer)}let o=new ImageData(a,i,n);this.context.putImageData(o,0,0)}};function N(){var t,i,n,r;let s=globalThis,e=(i=s.Module)!=null?i:(t=s.getDotnetRuntime(0))==null?void 0:t.Module;return(r=(n=e==null?void 0:e.GL)!=null?n:s.AvaloniaGL)!=null?r:s.SkiaSharpGL}var x=class extends h{constructor(t,i){var u,c;let n=N();if(!n)throw new Error("Module.GL object wasn't initialized, WebGL can't be used.");let r=i===2?"webgl":"webgl2",a={alpha:!0,depth:!0,stencil:!0,antialias:!1,premultipliedAlpha:!0,preserveDrawingBuffer:!1,failIfMajorPerformanceCaveat:!0,majorVersion:i===2?1:2,minorVersion:0,enableExtensionsByDefault:1,explicitSwapControl:0},o=t.getContext(r,a);if(!o)throw new Error(`HTMLCanvasElement.getContext(${r}) returned null.`);let l=n.registerContext(o,a);n.makeContextCurrent(l),o.gl_handle=l;super(t,o,1);this.canvas=t;this.contextHandle=l,this.fboId=(c=(u=o.getParameter(o.FRAMEBUFFER_BINDING))==null?void 0:u.id)!=null?c:0,this.stencil=o.getParameter(o.STENCIL_BITS),this.sample=o.getParameter(o.SAMPLES),this.depth=o.getParameter(o.DEPTH_BITS)}};var M=class{static create(e,t){if(!e)throw new Error("No html container was provided.");let i=m.createAvaloniaCanvas(e);m.attachCanvas(e,i);try{if(t===1)return new E(i);if(t===2||t===3)return new x(i,t);throw new Error(`Unsupported rendering mode: ${v[t]}`)}catch(n){throw m.detachCanvas(e,i),n}}static destroy(e){e.destroy()}static onSizeChanged(e,t){e.onSizeChanged(t)}static ensureSize(e){e.ensureSize()}static putPixelData(e,t,i,n){e.putPixelData(t,i,n)}};async function Le(s,e){"serviceWorker"in navigator&&await globalThis.navigator.serviceWorker.register(s,e?{scope:e}:void 0)}export{m as AvaloniaDOM,S as Caniuse,M as CanvasFactory,P as GeneralHelpers,f as InputHelper,H as NativeControlHost,k as NavigationHelper,L as StreamHelper,A as TimerHelper,Le as registerServiceWorker}; //# sourceMappingURL=avalonia.js.map diff --git a/_framework/avalonia.js.br b/_framework/avalonia.js.br index bac5911..4d95717 100644 Binary files a/_framework/avalonia.js.br and b/_framework/avalonia.js.br differ diff --git a/_framework/avalonia.js.gz b/_framework/avalonia.js.gz index d6d4317..b817b35 100644 Binary files a/_framework/avalonia.js.gz and b/_framework/avalonia.js.gz differ diff --git a/_framework/avalonia.js.map b/_framework/avalonia.js.map index 7b3bcba..dc15a7c 100755 --- a/_framework/avalonia.js.map +++ b/_framework/avalonia.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../webapp/modules/avalonia/caretHelper.ts", "../webapp/modules/avalonia/jsExports.ts", "../webapp/modules/avalonia/input.ts", "../webapp/modules/avalonia/dom.ts", "../webapp/modules/avalonia/caniuse.ts", "../webapp/modules/avalonia/stream.ts", "../webapp/modules/avalonia/nativeControlHost.ts", "../webapp/modules/avalonia/navigationHelper.ts", "../webapp/modules/avalonia/generalHelpers.ts", "../webapp/modules/avalonia/timer.ts", "../webapp/modules/avalonia/rendering/resizeHandler.ts", "../webapp/modules/avalonia/rendering/webRenderTarget.ts", "../webapp/modules/avalonia/rendering/webGlRenderTarget.ts", "../webapp/modules/avalonia/rendering/softwareRenderTarget.ts", "../webapp/modules/avalonia/rendering/webRenderTargetRegistry.ts", "../webapp/modules/avalonia/rendering/canvasSurface.ts", "../webapp/modules/avalonia.ts"], - "sourcesContent": ["// Based on https://github.com/component/textarea-caret-position/blob/master/index.js\r\nexport class CaretHelper {\r\n public static getCaretCoordinates(\r\n element: HTMLInputElement | HTMLTextAreaElement,\r\n position: number,\r\n options?: { debug: boolean }\r\n ) {\r\n if (!isBrowser) {\r\n throw new Error(\r\n \"textarea-caret-position#getCaretCoordinates should only be called in a browser\"\r\n );\r\n }\r\n\r\n const debug = options?.debug ?? false;\r\n if (debug) {\r\n const el = document.querySelector(\r\n \"#input-textarea-caret-position-mirror-div\"\r\n );\r\n if (el) el.parentNode?.removeChild(el);\r\n }\r\n\r\n // The mirror div will replicate the textarea's style\r\n const div = document.createElement(\"div\");\r\n div.id = \"input-textarea-caret-position-mirror-div\";\r\n document.body.appendChild(div);\r\n\r\n const style = div.style;\r\n const computed = window.getComputedStyle\r\n ? window.getComputedStyle(element)\r\n : ((element as any).currentStyle as CSSStyleDeclaration); // currentStyle for IE < 9\r\n const isInput = element.nodeName === \"INPUT\";\r\n\r\n // Default textarea styles\r\n style.whiteSpace = \"pre-wrap\";\r\n if (!isInput) style.wordWrap = \"break-word\"; // only for textarea-s\r\n\r\n // Position off-screen\r\n style.position = \"absolute\"; // required to return coordinates properly\r\n if (!debug) style.visibility = \"hidden\"; // not 'display: none' because we want rendering\r\n\r\n // Transfer the element's properties to the div\r\n properties.forEach((prop: string) => {\r\n if (isInput && prop === \"lineHeight\") {\r\n // Special case for s because text is rendered centered and line height may be != height\r\n if (computed.boxSizing === \"border-box\") {\r\n const height = parseInt(computed.height);\r\n const outerHeight =\r\n parseInt(computed.paddingTop) +\r\n parseInt(computed.paddingBottom) +\r\n parseInt(computed.borderTopWidth) +\r\n parseInt(computed.borderBottomWidth);\r\n const targetHeight = outerHeight + parseInt(computed.lineHeight);\r\n if (height > targetHeight) {\r\n style.lineHeight = `${height - outerHeight}px`;\r\n } else if (height === targetHeight) {\r\n style.lineHeight = computed.lineHeight;\r\n } else {\r\n style.lineHeight = \"0\";\r\n }\r\n } else {\r\n style.lineHeight = computed.height;\r\n }\r\n } else {\r\n (style as any)[prop] = (computed as any)[prop];\r\n }\r\n });\r\n\r\n if (isFirefox) {\r\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\r\n if (element.scrollHeight > parseInt(computed.height)) {\r\n style.overflowY = \"scroll\";\r\n }\r\n } else {\r\n style.overflow = \"hidden\"; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\r\n }\r\n\r\n div.textContent = element.value.substring(0, position);\r\n // The second special handling for input type=\"text\" vs textarea:\r\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\r\n if (isInput) div.textContent = div.textContent.replace(/\\s/g, \"\\u00a0\");\r\n\r\n const span = document.createElement(\"span\");\r\n // Wrapping must be replicated *exactly*, including when a long word gets\r\n // onto the next line, with whitespace at the end of the line before (#7).\r\n // The *only* reliable way to do that is to copy the *entire* rest of the\r\n // textarea's content into the created at the caret position.\r\n // For inputs, just '.' would be enough, but no need to bother.\r\n span.textContent = element.value.substring(position) || \".\"; // || because a completely empty faux span doesn't render at all\r\n div.appendChild(span);\r\n\r\n const coordinates = {\r\n top: span.offsetTop + parseInt(computed.borderTopWidth),\r\n left: span.offsetLeft + parseInt(computed.borderLeftWidth),\r\n height: parseInt(computed.lineHeight)\r\n };\r\n\r\n if (debug) {\r\n span.style.backgroundColor = \"#aaa\";\r\n } else {\r\n document.body.removeChild(div);\r\n }\r\n\r\n return coordinates;\r\n }\r\n}\r\n\r\nconst properties = [\r\n \"direction\", // RTL support\r\n \"boxSizing\",\r\n \"width\", // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\r\n \"height\",\r\n \"overflowX\",\r\n \"overflowY\", // copy the scrollbar for IE\r\n\r\n \"borderTopWidth\",\r\n \"borderRightWidth\",\r\n \"borderBottomWidth\",\r\n \"borderLeftWidth\",\r\n \"borderStyle\",\r\n\r\n \"paddingTop\",\r\n \"paddingRight\",\r\n \"paddingBottom\",\r\n \"paddingLeft\",\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n \"fontStyle\",\r\n \"fontVariant\",\r\n \"fontWeight\",\r\n \"fontStretch\",\r\n \"fontSize\",\r\n \"fontSizeAdjust\",\r\n \"lineHeight\",\r\n \"fontFamily\",\r\n\r\n \"textAlign\",\r\n \"textTransform\",\r\n \"textIndent\",\r\n \"textDecoration\", // might not make a difference, but better be safe\r\n\r\n \"letterSpacing\",\r\n \"wordSpacing\",\r\n\r\n \"tabSize\",\r\n \"MozTabSize\"\r\n];\r\n\r\nconst isBrowser = typeof window !== \"undefined\";\r\nconst isFirefox = isBrowser && (window as any).mozInnerScreenX != null;\r\n", "export class JsExports {\r\n public static resolvedExports?: any;\r\n public static exportsPromise: Promise;\r\n\r\n public static get InputHelper(): any {\r\n return this.resolvedExports?.Avalonia.Browser.Interop.InputHelper;\r\n }\r\n\r\n public static get DomHelper(): any {\r\n return this.resolvedExports?.Avalonia.Browser.Interop.DomHelper;\r\n }\r\n\r\n public static get TimerHelper(): any {\r\n return this.resolvedExports?.Avalonia.Browser.Interop.TimerHelper;\r\n }\r\n\r\n public static get CanvasHelper(): any {\r\n return this.resolvedExports?.Avalonia.Browser.Interop.CanvasHelper;\r\n }\r\n}\r\nasync function resolveExports (): Promise {\r\n const runtimeApi = await globalThis.getDotnetRuntime(0);\r\n if (runtimeApi == null) { return; }\r\n JsExports.resolvedExports = await runtimeApi.getAssemblyExports(\"Avalonia.Browser.dll\");\r\n return JsExports.resolvedExports;\r\n}\r\n\r\nJsExports.exportsPromise = resolveExports();\r\n", "import { CaretHelper } from \"./caretHelper\";\r\nimport { JsExports } from \"./jsExports\";\r\n\r\nenum RawInputModifiers {\r\n None = 0,\r\n Alt = 1,\r\n Control = 2,\r\n Shift = 4,\r\n Meta = 8,\r\n\r\n LeftMouseButton = 16,\r\n RightMouseButton = 32,\r\n MiddleMouseButton = 64,\r\n XButton1MouseButton = 128,\r\n XButton2MouseButton = 256,\r\n KeyboardMask = Alt | Control | Shift | Meta,\r\n\r\n PenInverted = 512,\r\n PenEraser = 1024,\r\n PenBarrelButton = 2048\r\n}\r\n\r\n/*\r\n* This is a hack to handle Mozilla clipboard events in a more convinient way for framework users.\r\n* In the browser, events go in order KeyDown -> Paste -> KeyUp.\r\n* On KeyDown we trigger Avalonia handlers, which might execute readClipboardText.\r\n* When readClipboardText was executed, we mark ClipboardState as Pending and setup clipboard promise,\r\n* which will un-handle KeyDown event, basically allowing browser to pass a Paste event properly.\r\n* On actual Paste event we execute promise callbacks, resuming async operation, and returning pasted text to the app.\r\n* Note #1, on every KeyUp event we will reset all the state and reject pending promises if any, as this event it expected to come after Paste.\r\n* Note #2, whole this code will be executed only on legacy browsers like Mozilla, where clipboard.readText is not available.\r\n* Note #3, with all of these hacks Clipboard.ReadText will still work only on actual \"paste\" gesture initiated by user.\r\n* */\r\nenum ClipboardState {\r\n None,\r\n Ready,\r\n Pending\r\n}\r\n\r\nexport class InputHelper {\r\n static clipboardState: ClipboardState = ClipboardState.None;\r\n static resolveClipboard?: any;\r\n static rejectClipboard?: any;\r\n\r\n public static initializeBackgroundHandlers() {\r\n if (this.clipboardState !== ClipboardState.None) {\r\n return;\r\n }\r\n\r\n globalThis.addEventListener(\"paste\", (args: any) => {\r\n if (this.clipboardState === ClipboardState.Pending) {\r\n this.resolveClipboard(args.clipboardData.getData(\"text\"));\r\n }\r\n });\r\n this.clipboardState = ClipboardState.Ready;\r\n }\r\n\r\n public static async readClipboardText(globalThis: Window): Promise {\r\n if (globalThis.navigator.clipboard.readText) {\r\n return await globalThis.navigator.clipboard.readText();\r\n } else {\r\n try {\r\n return await new Promise((resolve, reject) => {\r\n this.clipboardState = ClipboardState.Pending;\r\n this.resolveClipboard = resolve;\r\n this.rejectClipboard = reject;\r\n });\r\n } finally {\r\n this.clipboardState = ClipboardState.Ready;\r\n this.resolveClipboard = null;\r\n this.rejectClipboard = null;\r\n }\r\n }\r\n }\r\n\r\n public static async writeClipboardText(globalThis: Window, text: string): Promise {\r\n return await globalThis.navigator.clipboard.writeText(text);\r\n }\r\n\r\n public static subscribeInputEvents(element: HTMLInputElement, topLevelId: number) {\r\n const keySub = this.subscribeKeyEvents(element, topLevelId);\r\n const pointerSub = this.subscribePointerEvents(element, topLevelId);\r\n const textSub = this.subscribeTextEvents(element, topLevelId);\r\n const dndSub = this.subscribeDropEvents(element, topLevelId);\r\n const paneSub = this.subscribeKeyboardGeometryChange(element, topLevelId);\r\n\r\n return () => {\r\n keySub();\r\n pointerSub();\r\n textSub();\r\n dndSub();\r\n paneSub();\r\n };\r\n }\r\n\r\n public static subscribeKeyEvents(element: HTMLInputElement, topLevelId: number) {\r\n const keyDownHandler = (args: KeyboardEvent) => {\r\n JsExports.InputHelper.OnKeyDown(topLevelId, args.code, args.key, this.getModifiers(args));\r\n if (this.clipboardState !== ClipboardState.Pending) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"keydown\", keyDownHandler);\r\n\r\n const keyUpHandler = (args: KeyboardEvent) => {\r\n JsExports.InputHelper.OnKeyUp(topLevelId, args.code, args.key, this.getModifiers(args));\r\n args.preventDefault();\r\n if (this.rejectClipboard) {\r\n this.rejectClipboard();\r\n }\r\n };\r\n\r\n element.addEventListener(\"keyup\", keyUpHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"keydown\", keyDownHandler);\r\n element.removeEventListener(\"keyup\", keyUpHandler);\r\n };\r\n }\r\n\r\n public static subscribeTextEvents(\r\n element: HTMLInputElement,\r\n topLevelId: number) {\r\n const compositionStartHandler = (args: CompositionEvent) => {\r\n JsExports.InputHelper.OnCompositionStart(topLevelId);\r\n };\r\n element.addEventListener(\"compositionstart\", compositionStartHandler);\r\n\r\n const beforeInputHandler = (args: InputEvent) => {\r\n const ranges = args.getTargetRanges();\r\n let start = -1;\r\n let end = -1;\r\n if (ranges.length > 0) {\r\n start = ranges[0].startOffset;\r\n end = ranges[0].endOffset;\r\n }\r\n\r\n if (args.inputType === \"insertCompositionText\") {\r\n start = 2;\r\n end = start + 2;\r\n }\r\n\r\n JsExports.InputHelper.OnBeforeInput(topLevelId, args.inputType, start, end);\r\n };\r\n element.addEventListener(\"beforeinput\", beforeInputHandler);\r\n\r\n const compositionUpdateHandler = (args: CompositionEvent) => {\r\n JsExports.InputHelper.OnCompositionUpdate(topLevelId, args.data);\r\n };\r\n element.addEventListener(\"compositionupdate\", compositionUpdateHandler);\r\n\r\n const compositionEndHandler = (args: CompositionEvent) => {\r\n JsExports.InputHelper.OnCompositionEnd(topLevelId, args.data);\r\n args.preventDefault();\r\n };\r\n element.addEventListener(\"compositionend\", compositionEndHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"compositionstart\", compositionStartHandler);\r\n element.removeEventListener(\"compositionupdate\", compositionUpdateHandler);\r\n element.removeEventListener(\"compositionend\", compositionEndHandler);\r\n };\r\n }\r\n\r\n public static subscribePointerEvents(\r\n element: HTMLInputElement,\r\n topLevelId: number\r\n ) {\r\n const pointerMoveHandler = (args: PointerEvent) => {\r\n JsExports.InputHelper.OnPointerMove(\r\n topLevelId, args.pointerType, args.pointerId, args.offsetX, args.offsetY,\r\n args.pressure, args.tiltX, args.tiltY, args.twist, this.getModifiers(args), args);\r\n args.preventDefault();\r\n };\r\n\r\n const pointerDownHandler = (args: PointerEvent) => {\r\n JsExports.InputHelper.OnPointerDown(\r\n topLevelId, args.pointerType, args.pointerId, args.button, args.offsetX, args.offsetY,\r\n args.pressure, args.tiltX, args.tiltY, args.twist, this.getModifiers(args));\r\n args.preventDefault();\r\n };\r\n\r\n const pointerUpHandler = (args: PointerEvent) => {\r\n JsExports.InputHelper.OnPointerUp(\r\n topLevelId, args.pointerType, args.pointerId, args.button, args.offsetX, args.offsetY,\r\n args.pressure, args.tiltX, args.tiltY, args.twist, this.getModifiers(args));\r\n args.preventDefault();\r\n };\r\n\r\n const pointerCancelHandler = (args: PointerEvent) => {\r\n JsExports.InputHelper.OnPointerCancel(\r\n topLevelId, args.pointerType, args.pointerId, args.offsetX, args.offsetY,\r\n args.pressure, args.tiltX, args.tiltY, args.twist, this.getModifiers(args));\r\n };\r\n\r\n const wheelHandler = (args: WheelEvent) => {\r\n JsExports.InputHelper.OnWheel(\r\n topLevelId, args.offsetX, args.offsetY, args.deltaX, args.deltaY, this.getModifiers(args));\r\n args.preventDefault();\r\n };\r\n\r\n element.addEventListener(\"pointermove\", pointerMoveHandler);\r\n element.addEventListener(\"pointerdown\", pointerDownHandler);\r\n element.addEventListener(\"pointerup\", pointerUpHandler);\r\n element.addEventListener(\"wheel\", wheelHandler);\r\n element.addEventListener(\"pointercancel\", pointerCancelHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"pointerover\", pointerMoveHandler);\r\n element.removeEventListener(\"pointerdown\", pointerDownHandler);\r\n element.removeEventListener(\"pointerup\", pointerUpHandler);\r\n element.removeEventListener(\"pointercancel\", pointerCancelHandler);\r\n element.removeEventListener(\"wheel\", wheelHandler);\r\n };\r\n }\r\n\r\n public static subscribeDropEvents(\r\n element: HTMLInputElement,\r\n topLevelId: number\r\n ) {\r\n const handler = (args: DragEvent) => {\r\n const dataObject = args.dataTransfer;\r\n JsExports.InputHelper.OnDragDrop(topLevelId, args.type, args.offsetX, args.offsetY, this.getModifiers(args), dataObject?.effectAllowed, dataObject);\r\n };\r\n const overAndDropHandler = (args: DragEvent) => {\r\n args.preventDefault();\r\n handler(args);\r\n };\r\n element.addEventListener(\"dragover\", overAndDropHandler);\r\n element.addEventListener(\"dragenter\", handler);\r\n element.addEventListener(\"dragleave\", handler);\r\n element.addEventListener(\"drop\", overAndDropHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"dragover\", overAndDropHandler);\r\n element.removeEventListener(\"dragenter\", handler);\r\n element.removeEventListener(\"dragleave\", handler);\r\n element.removeEventListener(\"drop\", overAndDropHandler);\r\n };\r\n }\r\n\r\n public static getCoalescedEvents(pointerEvent: PointerEvent): number[] {\r\n return pointerEvent.getCoalescedEvents()\r\n .flatMap(e => [e.offsetX, e.offsetY, e.pressure, e.tiltX, e.tiltY, e.twist]);\r\n }\r\n\r\n public static subscribeKeyboardGeometryChange(\r\n element: HTMLInputElement,\r\n topLevelId: number) {\r\n if (\"virtualKeyboard\" in navigator) {\r\n // (navigator as any).virtualKeyboard.overlaysContent = true;\r\n const listener = (event: any) => {\r\n const elementRect = element.getBoundingClientRect();\r\n const keyboardRect = event.target.boundingRect as DOMRect;\r\n\r\n JsExports.InputHelper.OnKeyboardGeometryChange(\r\n topLevelId,\r\n keyboardRect.x - elementRect.x,\r\n keyboardRect.y - elementRect.y,\r\n keyboardRect.width,\r\n keyboardRect.height);\r\n };\r\n (navigator as any).virtualKeyboard.addEventListener(\"geometrychange\", listener);\r\n return () => {\r\n (navigator as any).virtualKeyboard.removeEventListener(\"geometrychange\", listener);\r\n };\r\n }\r\n\r\n return () => {};\r\n }\r\n\r\n public static clearInput(inputElement: HTMLInputElement) {\r\n inputElement.value = \"\";\r\n }\r\n\r\n public static focusElement(inputElement: HTMLElement) {\r\n inputElement.focus();\r\n }\r\n\r\n public static setCursor(inputElement: HTMLInputElement, kind: string) {\r\n if (kind === \"default\") {\r\n inputElement.style.removeProperty(\"cursor\");\r\n } else {\r\n inputElement.style.cursor = kind;\r\n }\r\n }\r\n\r\n public static setBounds(inputElement: HTMLInputElement, x: number, y: number, caretWidth: number, caretHeight: number, caret: number) {\r\n inputElement.style.left = (x).toFixed(0) + \"px\";\r\n inputElement.style.top = (y).toFixed(0) + \"px\";\r\n\r\n const { left, top } = CaretHelper.getCaretCoordinates(inputElement, caret);\r\n\r\n inputElement.style.left = (x - left).toFixed(0) + \"px\";\r\n inputElement.style.top = (y - top).toFixed(0) + \"px\";\r\n }\r\n\r\n public static hide(inputElement: HTMLInputElement) {\r\n inputElement.style.display = \"none\";\r\n }\r\n\r\n public static show(inputElement: HTMLInputElement) {\r\n inputElement.style.display = \"block\";\r\n }\r\n\r\n public static setSurroundingText(inputElement: HTMLInputElement, text: string, start: number, end: number) {\r\n if (!inputElement) {\r\n return;\r\n }\r\n\r\n inputElement.value = text;\r\n inputElement.setSelectionRange(start, end);\r\n inputElement.style.width = \"20px\";\r\n inputElement.style.width = `${inputElement.scrollWidth}px`;\r\n }\r\n\r\n private static getModifiers(args: KeyboardEvent | PointerEvent | WheelEvent | DragEvent): number {\r\n let modifiers = RawInputModifiers.None;\r\n\r\n if (args.ctrlKey) { modifiers |= RawInputModifiers.Control; }\r\n if (args.altKey) { modifiers |= RawInputModifiers.Alt; }\r\n if (args.shiftKey) { modifiers |= RawInputModifiers.Shift; }\r\n if (args.metaKey) { modifiers |= RawInputModifiers.Meta; }\r\n\r\n const buttons = (args as PointerEvent).buttons;\r\n if (buttons) {\r\n if (buttons & 1) { modifiers |= RawInputModifiers.LeftMouseButton; }\r\n if (buttons & 2) { modifiers |= (args.type === \"pen\" ? RawInputModifiers.PenBarrelButton : RawInputModifiers.RightMouseButton); }\r\n if (buttons & 4) { modifiers |= RawInputModifiers.MiddleMouseButton; }\r\n if (buttons & 8) { modifiers |= RawInputModifiers.XButton1MouseButton; }\r\n if (buttons & 16) { modifiers |= RawInputModifiers.XButton2MouseButton; }\r\n if (buttons & 32) { modifiers |= RawInputModifiers.PenEraser; }\r\n }\r\n\r\n return modifiers;\r\n }\r\n\r\n public static setPointerCapture(containerElement: HTMLInputElement, pointerId: number): void {\r\n containerElement.setPointerCapture(pointerId);\r\n }\r\n\r\n public static releasePointerCapture(containerElement: HTMLInputElement, pointerId: number): void {\r\n if (containerElement.hasPointerCapture(pointerId)) {\r\n containerElement.releasePointerCapture(pointerId);\r\n }\r\n }\r\n}\r\n", "import { JsExports } from \"./jsExports\";\r\n\r\nexport class AvaloniaDOM {\r\n public static getGlobalThis() {\r\n return globalThis;\r\n }\r\n\r\n public static addClass(element: HTMLElement, className: string): void {\r\n element.classList.add(className);\r\n }\r\n\r\n static getFirstElementById(className: string, parent: HTMLElement | Window): Element | null {\r\n const parentNode = parent instanceof Window\r\n ? parent.document\r\n : parent.ownerDocument;\r\n\r\n return parentNode.getElementById(className);\r\n }\r\n\r\n static getFirstElementByClassName(className: string, parent: HTMLElement | Window): Element | null {\r\n const parentNode = parent instanceof Window\r\n ? parent.document\r\n : parent;\r\n\r\n const elements = parentNode.getElementsByClassName(className);\r\n return elements ? elements[0] : null;\r\n }\r\n\r\n static createAvaloniaCanvas(host: HTMLElement): HTMLCanvasElement {\r\n const containerId = host.getAttribute(\"data-containerId\") ?? \"0000\";\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.id = `canvas${containerId}`;\r\n canvas.classList.add(\"avalonia-canvas\");\r\n canvas.style.width = \"100%\";\r\n canvas.style.height = \"100%\";\r\n canvas.style.position = \"absolute\";\r\n\r\n return canvas;\r\n }\r\n\r\n static attachCanvas(host: HTMLElement, canvas: HTMLCanvasElement): void {\r\n host.prepend(canvas);\r\n }\r\n\r\n static detachCanvas(host: HTMLElement, canvas: HTMLCanvasElement): void {\r\n host.removeChild(canvas);\r\n }\r\n\r\n static createAvaloniaHost(host: HTMLElement) {\r\n const containerId = Math.random().toString(36).replace(/[^a-z]+/g, \"\").substr(2, 10);\r\n\r\n // Root element\r\n host.classList.add(\"avalonia-container\");\r\n host.tabIndex = 0;\r\n host.setAttribute(\"data-containerId\", containerId);\r\n host.oncontextmenu = function () { return false; };\r\n host.style.overflow = \"hidden\";\r\n host.style.touchAction = \"none\";\r\n\r\n // Canvas is lazily created depending on the rendering mode. See createAvaloniaCanvas usage.\r\n\r\n // Native controls host\r\n const nativeHost = document.createElement(\"div\");\r\n nativeHost.id = `nativeHost${containerId}`;\r\n nativeHost.classList.add(\"avalonia-native-host\");\r\n nativeHost.style.left = \"0px\";\r\n nativeHost.style.top = \"0px\";\r\n nativeHost.style.width = \"100%\";\r\n nativeHost.style.height = \"100%\";\r\n nativeHost.style.position = \"absolute\";\r\n\r\n // IME\r\n const inputElement = document.createElement(\"input\");\r\n inputElement.id = `inputElement${containerId}`;\r\n inputElement.classList.add(\"avalonia-input-element\");\r\n inputElement.autocapitalize = \"none\";\r\n inputElement.type = \"text\";\r\n inputElement.spellcheck = false;\r\n inputElement.style.padding = \"0\";\r\n inputElement.style.margin = \"0\";\r\n inputElement.style.borderWidth = \"0\";\r\n inputElement.style.position = \"absolute\";\r\n inputElement.style.overflow = \"hidden\";\r\n inputElement.style.borderStyle = \"hidden\";\r\n inputElement.style.outline = \"none\";\r\n inputElement.style.background = \"transparent\";\r\n inputElement.style.color = \"transparent\";\r\n inputElement.style.display = \"none\";\r\n inputElement.style.height = \"20px\";\r\n inputElement.style.zIndex = \"-1\";\r\n inputElement.onpaste = function () { return false; };\r\n inputElement.oncopy = function () { return false; };\r\n inputElement.oncut = function () { return false; };\r\n\r\n host.prepend(inputElement);\r\n host.prepend(nativeHost);\r\n\r\n return {\r\n host,\r\n nativeHost,\r\n inputElement\r\n };\r\n }\r\n\r\n public static isFullscreen(globalThis: Window): boolean {\r\n return globalThis.document.fullscreenElement != null;\r\n }\r\n\r\n public static async setFullscreen(globalThis: Window, isFullscreen: boolean) {\r\n if (isFullscreen) {\r\n const doc = globalThis.document.documentElement;\r\n await doc.requestFullscreen();\r\n } else {\r\n await globalThis.document.exitFullscreen();\r\n }\r\n }\r\n\r\n public static initGlobalDomEvents(globalThis: Window): void {\r\n // Init Safe Area properties.\r\n globalThis.document.documentElement.style.setProperty(\"--av-sat\", \"env(safe-area-inset-top)\");\r\n globalThis.document.documentElement.style.setProperty(\"--av-sar\", \"env(safe-area-inset-right)\");\r\n globalThis.document.documentElement.style.setProperty(\"--av-sab\", \"env(safe-area-inset-bottom)\");\r\n globalThis.document.documentElement.style.setProperty(\"--av-sal\", \"env(safe-area-inset-left)\");\r\n\r\n // Subscribe on DarkMode changes.\r\n if (globalThis.matchMedia !== undefined) {\r\n const colorSchemeMedia = globalThis.matchMedia(\"(prefers-color-scheme: dark)\");\r\n const prefersContrastMedia = globalThis.matchMedia(\"(prefers-contrast: more)\");\r\n\r\n colorSchemeMedia.addEventListener(\"change\", (args: MediaQueryListEvent) => {\r\n JsExports.DomHelper.DarkModeChanged(args.matches, prefersContrastMedia.matches);\r\n });\r\n prefersContrastMedia.addEventListener(\"change\", (args: MediaQueryListEvent) => {\r\n JsExports.DomHelper.DarkModeChanged(colorSchemeMedia.matches, args.matches);\r\n });\r\n }\r\n\r\n globalThis.document.addEventListener(\"visibilitychange\", () => {\r\n JsExports.DomHelper.DocumentVisibilityChanged(globalThis.document.visibilityState);\r\n });\r\n\r\n // Report initial value.\r\n if (globalThis.document.visibilityState === \"visible\") {\r\n globalThis.setTimeout(() => {\r\n JsExports.DomHelper.DocumentVisibilityChanged(globalThis.document.visibilityState);\r\n }, 10);\r\n }\r\n }\r\n\r\n public static getSafeAreaPadding(globalThis: Window): number[] {\r\n const top = parseFloat(getComputedStyle(globalThis.document.documentElement).getPropertyValue(\"--av-sat\"));\r\n const bottom = parseFloat(getComputedStyle(globalThis.document.documentElement).getPropertyValue(\"--av-sab\"));\r\n const left = parseFloat(getComputedStyle(globalThis.document.documentElement).getPropertyValue(\"--av-sal\"));\r\n const right = parseFloat(getComputedStyle(globalThis.document.documentElement).getPropertyValue(\"--av-sar\"));\r\n\r\n return [left, top, bottom, right];\r\n }\r\n\r\n public static getDarkMode(globalThis: Window): number[] {\r\n if (globalThis.matchMedia === undefined) return [0, 0];\r\n\r\n const colorSchemeMedia = globalThis.matchMedia(\"(prefers-color-scheme: dark)\");\r\n const prefersContrastMedia = globalThis.matchMedia(\"(prefers-contrast: more)\");\r\n return [\r\n colorSchemeMedia.matches ? 1 : 0,\r\n prefersContrastMedia.matches ? 1 : 0\r\n ];\r\n }\r\n}\r\n", "export class Caniuse {\r\n public static hasNativeFilePicker(): boolean {\r\n return \"showSaveFilePicker\" in globalThis;\r\n }\r\n\r\n public static isMobile(): boolean {\r\n const userAgentData = (globalThis.navigator as any)?.userAgentData;\r\n if (userAgentData) {\r\n return userAgentData.mobile;\r\n }\r\n\r\n const userAgent = navigator.userAgent;\r\n const regex1 = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i;\r\n const regex2 = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw(n|u)|c55\\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i;\r\n return regex1.test(userAgent) || regex2.test(userAgent.substr(0, 4));\r\n }\r\n\r\n public static isTv(): boolean {\r\n return navigator.userAgent.includes(\"SmartTV\");\r\n }\r\n}\r\n", "import FileSystemWritableFileStream from \"native-file-system-adapter/types/src/FileSystemWritableFileStream\";\r\n\r\nconst sharedArrayBufferDefined = typeof SharedArrayBuffer !== \"undefined\";\r\nexport function isSharedArrayBuffer(buffer: any): buffer is SharedArrayBuffer {\r\n // BEWARE: In some cases, `instanceof SharedArrayBuffer` returns false even though buffer is an SAB.\r\n // Patch adapted from https://github.com/emscripten-core/emscripten/pull/16994\r\n // See also https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag\r\n return sharedArrayBufferDefined && buffer[Symbol.toStringTag] === \"SharedArrayBuffer\";\r\n}\r\n\r\nexport class StreamHelper {\r\n public static async seek(stream: FileSystemWritableFileStream, position: number) {\r\n return await stream.seek(position);\r\n }\r\n\r\n public static async truncate(stream: FileSystemWritableFileStream, size: number) {\r\n return await stream.truncate(size);\r\n }\r\n\r\n public static async close(stream: FileSystemWritableFileStream) {\r\n return await stream.close();\r\n }\r\n\r\n public static async write(stream: FileSystemWritableFileStream, span: any, offset: number, count: number) {\r\n const heap8 = globalThis.getDotnetRuntime(0)?.localHeapViewU8();\r\n\r\n let buffer: Uint8Array;\r\n if (span._pointer > 0 && span._length > 0 && heap8 && !isSharedArrayBuffer(heap8.buffer)) {\r\n // Attempt to use undocumented access to the HEAP8 directly\r\n // Note, SharedArrayBuffer cannot be used with ImageData (when WasmEnableThreads = true).\r\n buffer = new Uint8Array(heap8.buffer, span._pointer as number + offset, count);\r\n } else {\r\n // Or fallback to the normal API that does multiple array copies.\r\n const copy = new Uint8Array(count);\r\n span.copyTo(copy, offset);\r\n buffer = span;\r\n }\r\n\r\n return await stream.write(buffer);\r\n }\r\n\r\n public static byteLength(stream: Blob) {\r\n return stream.size;\r\n }\r\n\r\n public static async sliceArrayBuffer(stream: Blob, offset: number, count: number) {\r\n const buffer = await stream.slice(offset, offset + count).arrayBuffer();\r\n return new Uint8Array(buffer);\r\n }\r\n\r\n public static toMemoryView(buffer: Uint8Array): Uint8Array {\r\n return buffer;\r\n }\r\n}\r\n", "class NativeControlHostTopLevelAttachment {\r\n _child?: HTMLElement;\r\n _host?: HTMLElement;\r\n}\r\n\r\nexport class NativeControlHost {\r\n public static createDefaultChild(parent?: HTMLElement): HTMLElement {\r\n return document.createElement(\"div\");\r\n }\r\n\r\n public static createAttachment(): NativeControlHostTopLevelAttachment {\r\n return new NativeControlHostTopLevelAttachment();\r\n }\r\n\r\n public static initializeWithChildHandle(element: NativeControlHostTopLevelAttachment, child: HTMLElement): void {\r\n element._child = child;\r\n element._child.style.position = \"absolute\";\r\n }\r\n\r\n public static attachTo(element: NativeControlHostTopLevelAttachment, host?: HTMLElement): void {\r\n if (element._host && element._child) {\r\n element._host.removeChild(element._child);\r\n }\r\n\r\n element._host = host;\r\n\r\n if (element._host && element._child) {\r\n element._host.appendChild(element._child);\r\n }\r\n }\r\n\r\n public static showInBounds(element: NativeControlHostTopLevelAttachment, x: number, y: number, width: number, height: number): void {\r\n if (element._child) {\r\n element._child.style.top = `${y}px`;\r\n element._child.style.left = `${x}px`;\r\n element._child.style.width = `${width}px`;\r\n element._child.style.height = `${height}px`;\r\n element._child.style.display = \"block\";\r\n }\r\n }\r\n\r\n public static hideWithSize(element: NativeControlHostTopLevelAttachment, width: number, height: number): void {\r\n if (element._child) {\r\n element._child.style.width = `${width}px`;\r\n element._child.style.height = `${height}px`;\r\n element._child.style.display = \"none\";\r\n }\r\n }\r\n\r\n public static releaseChild(element: NativeControlHostTopLevelAttachment): void {\r\n if (element._child) {\r\n element._child = undefined;\r\n }\r\n }\r\n}\r\n", "export class NavigationHelper {\r\n public static addBackHandler(backHandlerCallback: () => Boolean) {\r\n history.pushState(null, \"\", window.location.href);\r\n window.onpopstate = () => {\r\n const handled = backHandlerCallback();\r\n\r\n if (!handled) {\r\n history.back();\r\n } else {\r\n history.forward();\r\n }\r\n };\r\n }\r\n}\r\n", "export class GeneralHelpers {\r\n public static itemsArrayAt(instance: any, key: any): any[] {\r\n const items = instance[key];\r\n if (!items) {\r\n return [];\r\n }\r\n\r\n const retItems = [];\r\n for (let i = 0; i < items.length; i++) {\r\n retItems[i] = items[i];\r\n }\r\n return retItems;\r\n }\r\n\r\n public static itemAt(instance: any, key: any): any {\r\n const item = instance[key];\r\n return item;\r\n }\r\n\r\n public static callMethod(instance: any, name: string /*, args */): any {\r\n const args = Array.prototype.slice.call(arguments, 2);\r\n return instance[name].apply(instance, args);\r\n }\r\n}\r\n", "import { JsExports } from \"./jsExports\";\r\n\r\nexport class TimerHelper {\r\n public static runAnimationFrames(): void {\r\n function render(time: number) {\r\n JsExports.TimerHelper?.JsExportOnAnimationFrame();\r\n self.requestAnimationFrame(render);\r\n }\r\n self.requestAnimationFrame(render);\r\n }\r\n\r\n static onTimeout() {\r\n JsExports.TimerHelper?.JsExportOnTimeout();\r\n }\r\n\r\n static onInterval() {\r\n JsExports.TimerHelper?.JsExportOnInterval();\r\n }\r\n\r\n public static setTimeout(interval: number): number {\r\n return setTimeout(TimerHelper.onTimeout, interval);\r\n }\r\n\r\n public static setInterval(interval: number): number {\r\n return setInterval(TimerHelper.onInterval, interval);\r\n }\r\n}\r\n", "type ResizeObserverWithCallbacks = {\r\n callbacks: Map void)>;\r\n} & ResizeObserver;\r\n\r\nexport class ResizeHandler {\r\n private static resizeObserver?: ResizeObserverWithCallbacks;\r\n\r\n public static observeSize(element: HTMLElement, callback: (width: number, height: number, dpr: number) => void) : (() => void) {\r\n if (!this.resizeObserver) {\r\n this.resizeObserver = new ResizeObserver(this.onResize) as ResizeObserverWithCallbacks;\r\n this.resizeObserver.callbacks = new Map void)>();\r\n }\r\n\r\n this.resizeObserver.callbacks.set(element, callback);\r\n this.resizeObserver.observe(element, { box: \"content-box\" });\r\n\r\n return () => {\r\n this.resizeObserver?.callbacks.delete(element);\r\n this.resizeObserver?.unobserve(element);\r\n };\r\n }\r\n\r\n private static onResize(entries: ResizeObserverEntry[], observer: ResizeObserver) {\r\n for (const entry of entries) {\r\n const callback = (observer as ResizeObserverWithCallbacks).callbacks.get(entry.target);\r\n if (!callback) {\r\n continue;\r\n }\r\n\r\n const trueDpr = window.devicePixelRatio;\r\n let width;\r\n let height;\r\n let dpr = trueDpr;\r\n if (entry.devicePixelContentBoxSize) {\r\n // NOTE: Only this path gives the correct answer\r\n // The other paths are imperfect fallbacks\r\n // for browsers that don't provide anyway to do this\r\n width = entry.devicePixelContentBoxSize[0].inlineSize;\r\n height = entry.devicePixelContentBoxSize[0].blockSize;\r\n dpr = 1; // it's already in width and height\r\n } else if (entry.contentBoxSize) {\r\n if (entry.contentBoxSize[0]) {\r\n width = entry.contentBoxSize[0].inlineSize;\r\n height = entry.contentBoxSize[0].blockSize;\r\n } else {\r\n width = (entry.contentBoxSize as any).inlineSize;\r\n height = (entry.contentBoxSize as any).blockSize;\r\n }\r\n } else {\r\n width = entry.contentRect.width;\r\n height = entry.contentRect.height;\r\n }\r\n const displayWidth = Math.round(width * dpr);\r\n const displayHeight = Math.round(height * dpr);\r\n callback(displayWidth, displayHeight, trueDpr);\r\n }\r\n }\r\n}\r\n", "export class WebRenderTarget {\r\n renderTargetType: string;\r\n constructor(protected canvas: HTMLCanvasElement | OffscreenCanvas, type: string) {\r\n this.renderTargetType = type;\r\n }\r\n\r\n static setSize(target: WebRenderTarget, w: number, h: number) {\r\n target.canvas.width = w;\r\n target.canvas.height = h;\r\n }\r\n}\r\n", "import { BrowserRenderingMode } from \"./renderingMode\";\r\nimport { WebRenderTarget } from \"./webRenderTarget\";\r\ninterface EmscriptenGlContext {\r\n handle: number;\r\n}\r\n\r\ninterface EmscriptenGL {\r\n registerContext: (ctx: WebGLRenderingContext, attrs: WebGLContextAttributes) => number;\r\n currentContext?: EmscriptenGlContext;\r\n makeContextCurrent: (handle: number) => boolean;\r\n}\r\n\r\nfunction getGL(): EmscriptenGL {\r\n const self = globalThis as any;\r\n const module = self.Module ?? self.getDotnetRuntime(0)?.Module;\r\n return (module?.GL ?? self.AvaloniaGL ?? self.SkiaSharpGL) as EmscriptenGL;\r\n}\r\n\r\nexport class WebGlRenderTarget extends WebRenderTarget {\r\n public contextHandle?: number;\r\n public attrs: WebGLContextAttributes;\r\n public fboId?: number;\r\n public stencil?: number;\r\n public sample?: number;\r\n public depth?: number;\r\n private static _gl: EmscriptenGL | null = null;\r\n\r\n constructor(public canvas: HTMLCanvasElement | OffscreenCanvas, mode: BrowserRenderingMode) {\r\n // Skia only understands WebGL context wrapped in Emscripten.\r\n if (WebGlRenderTarget._gl == null) { WebGlRenderTarget._gl = getGL(); }\r\n if (!WebGlRenderTarget._gl) {\r\n throw new Error(\"Module.GL object wasn't initialized, WebGL can't be used.\");\r\n }\r\n\r\n const attrs: WebGLContextAttributes | any =\r\n {\r\n alpha: true,\r\n depth: true,\r\n stencil: true,\r\n antialias: false,\r\n premultipliedAlpha: true,\r\n preserveDrawingBuffer: false,\r\n // only supported on older browsers, which is perfect as we want to fallback to 2d there.\r\n failIfMajorPerformanceCaveat: true,\r\n // attrs used by Emscripten:\r\n majorVersion: mode === BrowserRenderingMode.WebGL1 ? 1 : 2,\r\n minorVersion: 0,\r\n enableExtensionsByDefault: 1,\r\n explicitSwapControl: 0\r\n };\r\n\r\n const context = (mode === BrowserRenderingMode.WebGL1\r\n ? canvas.getContext(\"webgl\", attrs)\r\n : canvas.getContext(\"webgl2\", attrs)) as WebGLRenderingContext;\r\n if (!context) {\r\n throw new Error(\"HTMLCanvasElement.getContext returned null.\");\r\n }\r\n\r\n const handle = WebGlRenderTarget._gl.registerContext(context, attrs);\r\n (context as any).gl_handle = handle;\r\n super(canvas, \"webgl\");\r\n\r\n this.contextHandle = handle;\r\n this.fboId = context.getParameter(context.FRAMEBUFFER_BINDING)?.id ?? 0;\r\n this.stencil = context.getParameter(context.STENCIL_BITS);\r\n this.sample = context.getParameter(context.SAMPLES);\r\n this.depth = context.getParameter(context.DEPTH_BITS);\r\n this.attrs = attrs;\r\n }\r\n\r\n public static getCurrentContext(): number {\r\n return WebGlRenderTarget._gl?.currentContext?.handle ?? 0;\r\n }\r\n\r\n public static makeContextCurrent(handle: number): boolean {\r\n if (WebGlRenderTarget._gl == null) { return false; }\r\n const ret = WebGlRenderTarget._gl.makeContextCurrent(handle);\r\n return handle === 0 || ret;\r\n }\r\n}\r\n", "import { RuntimeAPI } from \"../../../types/dotnet\";\r\nimport { WebRenderTarget } from \"./webRenderTarget\";\r\n\r\nexport class SoftwareRenderTarget extends WebRenderTarget {\r\n private readonly runtime: RuntimeAPI | undefined;\r\n private readonly context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;\r\n constructor(canvas: HTMLCanvasElement | OffscreenCanvas) {\r\n const context = canvas.getContext(\"2d\", {\r\n alpha: true\r\n });\r\n if (!context) {\r\n throw new Error(\"HTMLCanvasElement.getContext(2d) returned null.\");\r\n }\r\n\r\n super(canvas, \"software\");\r\n this.context = context;\r\n\r\n this.runtime = globalThis.getDotnetRuntime(0);\r\n }\r\n\r\n public putPixelData(pointer: number, length: number, width: number, height: number): void {\r\n const heap8 = this.runtime?.localHeapViewU8();\r\n\r\n let clampedBuffer: Uint8ClampedArray;\r\n if (heap8?.buffer) {\r\n clampedBuffer = new Uint8ClampedArray(heap8.buffer, pointer, length);\r\n\r\n // Need to make a copy if using MT, ImageData can't consume shared arrays\r\n if (this.canvas instanceof OffscreenCanvas) {\r\n const dstArrayBuffer = new ArrayBuffer(clampedBuffer.byteLength);\r\n const copy = new Uint8ClampedArray(dstArrayBuffer);\r\n copy.set(clampedBuffer);\r\n clampedBuffer = copy;\r\n }\r\n } else throw new Error(\"Unable to access .NET memory\");\r\n\r\n const imageData = new ImageData(clampedBuffer, width, height);\r\n (this.context).putImageData(imageData, 0, 0);\r\n }\r\n\r\n public static staticPutPixelData(target: SoftwareRenderTarget, pointer: number, length: number, width: number, height: number): void {\r\n target.putPixelData(pointer, length, width, height);\r\n }\r\n}\r\n", "import { BrowserRenderingMode } from \"./renderingMode\";\r\nimport { WebGlRenderTarget } from \"./webGlRenderTarget\";\r\nimport { WebRenderTarget } from \"./webRenderTarget\";\r\nimport { SoftwareRenderTarget } from \"./softwareRenderTarget\";\r\n\r\nexport class WebRenderTargetRegistry {\r\n private static targets: { [id: number]: (WebRenderTarget) } = {};\r\n private static registry: { [id: number]: ({\r\n canvas: HTMLCanvasElement;\r\n worker?: Worker;\r\n }); } = {};\r\n\r\n private static nextId = 1;\r\n\r\n static create(pthreadId: number, canvas: HTMLCanvasElement, preferredModes: BrowserRenderingMode[]): number {\r\n const id = WebRenderTargetRegistry.nextId++;\r\n if (pthreadId === 0) {\r\n WebRenderTargetRegistry.registry[id] = {\r\n canvas\r\n };\r\n WebRenderTargetRegistry.targets[id] = WebRenderTargetRegistry.createRenderTarget(canvas, preferredModes);\r\n } else {\r\n const self = globalThis as any;\r\n const module = self.Module ?? self.getDotnetRuntime(0)?.Module;\r\n const pthreads = module?.PThread;\r\n if (pthreads == null) { throw new Error(\"Unable to access emscripten PThread api\"); }\r\n const pthread = pthreads.pthreads[pthreadId];\r\n if (pthread == null) { throw new Error(`Unable get pthread with id ${pthreadId}`); }\r\n let worker: Worker | undefined;\r\n if (pthread.postMessage != null) { worker = pthread as Worker; } else { worker = pthread.worker; }\r\n\r\n if (worker == null) { throw new Error(`Unable get Worker for pthread ${pthreadId}`); }\r\n const offscreen = canvas.transferControlToOffscreen();\r\n worker.postMessage({\r\n avaloniaCmd: \"registerCanvas\",\r\n canvas: offscreen,\r\n modes: preferredModes,\r\n id\r\n }, [offscreen]);\r\n WebRenderTargetRegistry.registry[id] = {\r\n canvas,\r\n worker\r\n };\r\n }\r\n return id;\r\n }\r\n\r\n static initializeWorker() {\r\n const oldHandler = self.onmessage;\r\n self.onmessage = ev => {\r\n const msg = ev;\r\n if (msg.data.avaloniaCmd === \"registerCanvas\") {\r\n WebRenderTargetRegistry.targets[msg.data.id] = WebRenderTargetRegistry.createRenderTarget(msg.data.canvas, msg.data.modes);\r\n } else if (msg.data.avaloniaCmd === \"unregisterCanvas\") {\r\n /* eslint-disable */\r\n // Our keys are _always_ numbers and are safe to delete\r\n delete WebRenderTargetRegistry.targets[msg.data.id];\r\n /* eslint-enable */\r\n } else if (oldHandler != null) { oldHandler.call(self, ev); }\r\n };\r\n }\r\n\r\n static getRenderTarget(id: number): WebRenderTarget | undefined {\r\n return WebRenderTargetRegistry.targets[id];\r\n }\r\n\r\n private static createRenderTarget(canvas: HTMLCanvasElement | OffscreenCanvas, modes: BrowserRenderingMode[]): WebRenderTarget {\r\n for (const mode of modes) {\r\n try {\r\n if (mode === BrowserRenderingMode.Software2D) { return new SoftwareRenderTarget(canvas); }\r\n return new WebGlRenderTarget(canvas, mode);\r\n } catch (e) {\r\n let message = \"\";\r\n if (e instanceof Error) { message = \": \" + e.message; }\r\n console.error(`Failed to create render target for mode ${mode} ${message}`);\r\n }\r\n }\r\n // Still try software as a fallback\r\n return new SoftwareRenderTarget(canvas);\r\n }\r\n}\r\n", "import { ResizeHandler } from \"./resizeHandler\";\r\nimport { WebRenderTargetRegistry } from \"./webRenderTargetRegistry\";\r\nimport { AvaloniaDOM } from \"../dom\";\r\nimport { BrowserRenderingMode } from \"./renderingMode\";\r\nimport { JsExports } from \"../jsExports\";\r\n\r\nexport class CanvasSurface {\r\n public targetId: number;\r\n private sizeParams?: [number, number, number];\r\n\r\n constructor(public canvas: HTMLCanvasElement, modes: BrowserRenderingMode[], topLevelId: number, threadId: number) {\r\n this.targetId = WebRenderTargetRegistry.create(threadId, canvas, modes);\r\n ResizeHandler.observeSize(canvas, (width, height, dpr) => {\r\n this.sizeParams = [width, height, dpr];\r\n\r\n JsExports.CanvasHelper?.OnSizeChanged(topLevelId, width, height, dpr);\r\n });\r\n }\r\n\r\n public get width() {\r\n if (this.sizeParams) { return this.sizeParams[0]; }\r\n return 1;\r\n }\r\n\r\n public get height() {\r\n if (this.sizeParams) { return this.sizeParams[1]; }\r\n return 1;\r\n }\r\n\r\n public get scaling() {\r\n if (this.sizeParams) { return this.sizeParams[2]; }\r\n return 1;\r\n }\r\n\r\n public destroy(): void {\r\n }\r\n\r\n public static create(container: HTMLElement, modes: BrowserRenderingMode[], topLevelId: number, threadId: number): CanvasSurface {\r\n const canvas = AvaloniaDOM.createAvaloniaCanvas(container);\r\n AvaloniaDOM.attachCanvas(container, canvas);\r\n try {\r\n return new CanvasSurface(canvas, modes, topLevelId, threadId);\r\n } catch (ex) {\r\n AvaloniaDOM.detachCanvas(container, canvas);\r\n throw ex;\r\n }\r\n }\r\n\r\n public static destroy(surface: CanvasSurface) {\r\n surface.destroy();\r\n }\r\n}\r\n", "import { InputHelper } from \"./avalonia/input\";\r\nimport { AvaloniaDOM } from \"./avalonia/dom\";\r\nimport { Caniuse } from \"./avalonia/caniuse\";\r\nimport { StreamHelper } from \"./avalonia/stream\";\r\nimport { NativeControlHost } from \"./avalonia/nativeControlHost\";\r\nimport { NavigationHelper } from \"./avalonia/navigationHelper\";\r\nimport { GeneralHelpers } from \"./avalonia/generalHelpers\";\r\nimport { TimerHelper } from \"./avalonia/timer\";\r\nimport { CanvasSurface } from \"./avalonia/rendering/canvasSurface\";\r\nimport { WebRenderTargetRegistry } from \"./avalonia/rendering/webRenderTargetRegistry\";\r\nimport { WebRenderTarget } from \"./avalonia/rendering/webRenderTarget\";\r\nimport { SoftwareRenderTarget } from \"./avalonia/rendering/softwareRenderTarget\";\r\nimport { WebGlRenderTarget } from \"./avalonia/rendering/webGlRenderTarget\";\r\n\r\nasync function registerServiceWorker(path: string, scope: string | undefined) {\r\n if (\"serviceWorker\" in navigator) {\r\n await globalThis.navigator.serviceWorker.register(path, scope ? { scope } : undefined);\r\n }\r\n}\r\n\r\nexport {\r\n Caniuse,\r\n InputHelper,\r\n AvaloniaDOM,\r\n StreamHelper,\r\n NativeControlHost,\r\n NavigationHelper,\r\n GeneralHelpers,\r\n TimerHelper,\r\n WebRenderTarget,\r\n CanvasSurface,\r\n WebRenderTargetRegistry,\r\n SoftwareRenderTarget,\r\n WebGlRenderTarget,\r\n registerServiceWorker\r\n};\r\n"], - "mappings": "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", - "names": ["CaretHelper", "element", "position", "options", "_a", "_b", "isBrowser", "debug", "el", "div", "style", "computed", "isInput", "properties", "prop", "height", "outerHeight", "targetHeight", "isFirefox", "span", "coordinates", "JsExports", "_a", "resolveExports", "runtimeApi", "InputHelper", "args", "globalThis", "resolve", "reject", "text", "element", "topLevelId", "keySub", "pointerSub", "textSub", "dndSub", "paneSub", "keyDownHandler", "JsExports", "keyUpHandler", "compositionStartHandler", "beforeInputHandler", "ranges", "start", "end", "compositionUpdateHandler", "compositionEndHandler", "pointerMoveHandler", "pointerDownHandler", "pointerUpHandler", "pointerCancelHandler", "wheelHandler", "handler", "dataObject", "overAndDropHandler", "pointerEvent", "e", "listener", "event", "elementRect", "keyboardRect", "inputElement", "kind", "x", "y", "caretWidth", "caretHeight", "caret", "left", "top", "CaretHelper", "modifiers", "buttons", "containerElement", "pointerId", "AvaloniaDOM", "element", "className", "parent", "elements", "host", "_a", "containerId", "canvas", "nativeHost", "inputElement", "globalThis", "isFullscreen", "colorSchemeMedia", "prefersContrastMedia", "args", "JsExports", "top", "bottom", "left", "right", "Caniuse", "_a", "userAgentData", "userAgent", "regex1", "regex2", "sharedArrayBufferDefined", "isSharedArrayBuffer", "buffer", "StreamHelper", "stream", "position", "size", "span", "offset", "count", "_a", "heap8", "copy", "NativeControlHostTopLevelAttachment", "NativeControlHost", "parent", "element", "child", "host", "x", "y", "width", "height", "NavigationHelper", "backHandlerCallback", "GeneralHelpers", "instance", "key", "items", "retItems", "name", "args", "TimerHelper", "render", "time", "_a", "JsExports", "interval", "ResizeHandler", "element", "callback", "_a", "_b", "entries", "observer", "entry", "trueDpr", "width", "height", "dpr", "displayWidth", "displayHeight", "WebRenderTarget", "canvas", "type", "target", "w", "h", "getGL", "_a", "_b", "_c", "_d", "self", "module", "_WebGlRenderTarget", "WebRenderTarget", "canvas", "mode", "attrs", "context", "handle", "ret", "WebGlRenderTarget", "SoftwareRenderTarget", "WebRenderTarget", "canvas", "context", "pointer", "length", "width", "height", "_a", "heap8", "clampedBuffer", "dstArrayBuffer", "copy", "imageData", "target", "_WebRenderTargetRegistry", "pthreadId", "canvas", "preferredModes", "_a", "_b", "id", "self", "module", "pthreads", "pthread", "worker", "offscreen", "oldHandler", "ev", "msg", "modes", "mode", "SoftwareRenderTarget", "WebGlRenderTarget", "e", "message", "WebRenderTargetRegistry", "CanvasSurface", "canvas", "modes", "topLevelId", "threadId", "WebRenderTargetRegistry", "ResizeHandler", "width", "height", "dpr", "_a", "JsExports", "container", "AvaloniaDOM", "ex", "surface", "registerServiceWorker", "path", "scope"] + "sources": ["../webapp/modules/avalonia/caretHelper.ts", "../webapp/modules/avalonia/input.ts", "../webapp/modules/avalonia/dom.ts", "../webapp/modules/avalonia/caniuse.ts", "../webapp/modules/avalonia/stream.ts", "../webapp/modules/avalonia/nativeControlHost.ts", "../webapp/modules/avalonia/navigationHelper.ts", "../webapp/modules/avalonia/generalHelpers.ts", "../webapp/modules/avalonia/timer.ts", "../webapp/modules/avalonia/surfaces/surfaceBase.ts", "../webapp/modules/avalonia/surfaces/resizeHandler.ts", "../webapp/modules/avalonia/surfaces/htmlSurfaceBase.ts", "../webapp/modules/avalonia/surfaces/softwareSurface.ts", "../webapp/modules/avalonia/surfaces/webGlSurface.ts", "../webapp/modules/avalonia/surfaces/surfaceFactory.ts", "../webapp/modules/avalonia.ts"], + "sourcesContent": ["// Based on https://github.com/component/textarea-caret-position/blob/master/index.js\r\nexport class CaretHelper {\r\n public static getCaretCoordinates(\r\n element: HTMLInputElement | HTMLTextAreaElement,\r\n position: number,\r\n options?: { debug: boolean }\r\n ) {\r\n if (!isBrowser) {\r\n throw new Error(\r\n \"textarea-caret-position#getCaretCoordinates should only be called in a browser\"\r\n );\r\n }\r\n\r\n const debug = options?.debug ?? false;\r\n if (debug) {\r\n const el = document.querySelector(\r\n \"#input-textarea-caret-position-mirror-div\"\r\n );\r\n if (el) el.parentNode?.removeChild(el);\r\n }\r\n\r\n // The mirror div will replicate the textarea's style\r\n const div = document.createElement(\"div\");\r\n div.id = \"input-textarea-caret-position-mirror-div\";\r\n document.body.appendChild(div);\r\n\r\n const style = div.style;\r\n const computed = window.getComputedStyle\r\n ? window.getComputedStyle(element)\r\n : ((element as any).currentStyle as CSSStyleDeclaration); // currentStyle for IE < 9\r\n const isInput = element.nodeName === \"INPUT\";\r\n\r\n // Default textarea styles\r\n style.whiteSpace = \"pre-wrap\";\r\n if (!isInput) style.wordWrap = \"break-word\"; // only for textarea-s\r\n\r\n // Position off-screen\r\n style.position = \"absolute\"; // required to return coordinates properly\r\n if (!debug) style.visibility = \"hidden\"; // not 'display: none' because we want rendering\r\n\r\n // Transfer the element's properties to the div\r\n properties.forEach((prop: string) => {\r\n if (isInput && prop === \"lineHeight\") {\r\n // Special case for s because text is rendered centered and line height may be != height\r\n if (computed.boxSizing === \"border-box\") {\r\n const height = parseInt(computed.height);\r\n const outerHeight =\r\n parseInt(computed.paddingTop) +\r\n parseInt(computed.paddingBottom) +\r\n parseInt(computed.borderTopWidth) +\r\n parseInt(computed.borderBottomWidth);\r\n const targetHeight = outerHeight + parseInt(computed.lineHeight);\r\n if (height > targetHeight) {\r\n style.lineHeight = `${height - outerHeight}px`;\r\n } else if (height === targetHeight) {\r\n style.lineHeight = computed.lineHeight;\r\n } else {\r\n style.lineHeight = \"0\";\r\n }\r\n } else {\r\n style.lineHeight = computed.height;\r\n }\r\n } else {\r\n (style as any)[prop] = (computed as any)[prop];\r\n }\r\n });\r\n\r\n if (isFirefox) {\r\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\r\n if (element.scrollHeight > parseInt(computed.height)) {\r\n style.overflowY = \"scroll\";\r\n }\r\n } else {\r\n style.overflow = \"hidden\"; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\r\n }\r\n\r\n div.textContent = element.value.substring(0, position);\r\n // The second special handling for input type=\"text\" vs textarea:\r\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\r\n if (isInput) div.textContent = div.textContent.replace(/\\s/g, \"\\u00a0\");\r\n\r\n const span = document.createElement(\"span\");\r\n // Wrapping must be replicated *exactly*, including when a long word gets\r\n // onto the next line, with whitespace at the end of the line before (#7).\r\n // The *only* reliable way to do that is to copy the *entire* rest of the\r\n // textarea's content into the created at the caret position.\r\n // For inputs, just '.' would be enough, but no need to bother.\r\n span.textContent = element.value.substring(position) || \".\"; // || because a completely empty faux span doesn't render at all\r\n div.appendChild(span);\r\n\r\n const coordinates = {\r\n top: span.offsetTop + parseInt(computed.borderTopWidth),\r\n left: span.offsetLeft + parseInt(computed.borderLeftWidth),\r\n height: parseInt(computed.lineHeight)\r\n };\r\n\r\n if (debug) {\r\n span.style.backgroundColor = \"#aaa\";\r\n } else {\r\n document.body.removeChild(div);\r\n }\r\n\r\n return coordinates;\r\n }\r\n}\r\n\r\nconst properties = [\r\n \"direction\", // RTL support\r\n \"boxSizing\",\r\n \"width\", // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\r\n \"height\",\r\n \"overflowX\",\r\n \"overflowY\", // copy the scrollbar for IE\r\n\r\n \"borderTopWidth\",\r\n \"borderRightWidth\",\r\n \"borderBottomWidth\",\r\n \"borderLeftWidth\",\r\n \"borderStyle\",\r\n\r\n \"paddingTop\",\r\n \"paddingRight\",\r\n \"paddingBottom\",\r\n \"paddingLeft\",\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n \"fontStyle\",\r\n \"fontVariant\",\r\n \"fontWeight\",\r\n \"fontStretch\",\r\n \"fontSize\",\r\n \"fontSizeAdjust\",\r\n \"lineHeight\",\r\n \"fontFamily\",\r\n\r\n \"textAlign\",\r\n \"textTransform\",\r\n \"textIndent\",\r\n \"textDecoration\", // might not make a difference, but better be safe\r\n\r\n \"letterSpacing\",\r\n \"wordSpacing\",\r\n\r\n \"tabSize\",\r\n \"MozTabSize\"\r\n];\r\n\r\nconst isBrowser = typeof window !== \"undefined\";\r\nconst isFirefox = isBrowser && (window as any).mozInnerScreenX != null;\r\n", "import { CaretHelper } from \"./caretHelper\";\r\n\r\nenum RawInputModifiers {\r\n None = 0,\r\n Alt = 1,\r\n Control = 2,\r\n Shift = 4,\r\n Meta = 8,\r\n\r\n LeftMouseButton = 16,\r\n RightMouseButton = 32,\r\n MiddleMouseButton = 64,\r\n XButton1MouseButton = 128,\r\n XButton2MouseButton = 256,\r\n KeyboardMask = Alt | Control | Shift | Meta,\r\n\r\n PenInverted = 512,\r\n PenEraser = 1024,\r\n PenBarrelButton = 2048\r\n}\r\n\r\n/*\r\n* This is a hack to handle Mozilla clipboard events in a more convinient way for framework users.\r\n* In the browser, events go in order KeyDown -> Paste -> KeyUp.\r\n* On KeyDown we trigger Avalonia handlers, which might execute readClipboardText.\r\n* When readClipboardText was executed, we mark ClipboardState as Pending and setup clipboard promise,\r\n* which will un-handle KeyDown event, basically allowing browser to pass a Paste event properly.\r\n* On actual Paste event we execute promise callbacks, resuming async operation, and returning pasted text to the app.\r\n* Note #1, on every KeyUp event we will reset all the state and reject pending promises if any, as this event it expected to come after Paste.\r\n* Note #2, whole this code will be executed only on legacy browsers like Mozilla, where clipboard.readText is not available.\r\n* Note #3, with all of these hacks Clipboard.ReadText will still work only on actual \"paste\" gesture initiated by user.\r\n* */\r\nenum ClipboardState {\r\n None,\r\n Ready,\r\n Pending\r\n}\r\n\r\nexport class InputHelper {\r\n static clipboardState: ClipboardState = ClipboardState.None;\r\n static resolveClipboard?: any;\r\n static rejectClipboard?: any;\r\n\r\n public static initializeBackgroundHandlers() {\r\n if (this.clipboardState !== ClipboardState.None) {\r\n return;\r\n }\r\n\r\n globalThis.addEventListener(\"paste\", (args: any) => {\r\n if (this.clipboardState === ClipboardState.Pending) {\r\n this.resolveClipboard(args.clipboardData.getData(\"text\"));\r\n }\r\n });\r\n this.clipboardState = ClipboardState.Ready;\r\n }\r\n\r\n public static async readClipboardText(): Promise {\r\n if (globalThis.navigator.clipboard.readText) {\r\n return await globalThis.navigator.clipboard.readText();\r\n } else {\r\n try {\r\n return await new Promise((resolve, reject) => {\r\n this.clipboardState = ClipboardState.Pending;\r\n this.resolveClipboard = resolve;\r\n this.rejectClipboard = reject;\r\n });\r\n } finally {\r\n this.clipboardState = ClipboardState.Ready;\r\n this.resolveClipboard = null;\r\n this.rejectClipboard = null;\r\n }\r\n }\r\n }\r\n\r\n public static subscribeKeyEvents(\r\n element: HTMLInputElement,\r\n keyDownCallback: (code: string, key: string, modifiers: string) => boolean,\r\n keyUpCallback: (code: string, key: string, modifiers: string) => boolean) {\r\n const keyDownHandler = (args: KeyboardEvent) => {\r\n if (keyDownCallback(args.code, args.key, this.getModifiers(args))) {\r\n if (this.clipboardState !== ClipboardState.Pending) {\r\n args.preventDefault();\r\n }\r\n }\r\n };\r\n element.addEventListener(\"keydown\", keyDownHandler);\r\n\r\n const keyUpHandler = (args: KeyboardEvent) => {\r\n if (keyUpCallback(args.code, args.key, this.getModifiers(args))) {\r\n args.preventDefault();\r\n }\r\n if (this.rejectClipboard) {\r\n this.rejectClipboard();\r\n }\r\n };\r\n\r\n element.addEventListener(\"keyup\", keyUpHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"keydown\", keyDownHandler);\r\n element.removeEventListener(\"keyup\", keyUpHandler);\r\n };\r\n }\r\n\r\n public static subscribeTextEvents(\r\n element: HTMLInputElement,\r\n beforeInputCallback: (args: InputEvent, start: number, end: number) => boolean,\r\n compositionStartCallback: (args: CompositionEvent) => boolean,\r\n compositionUpdateCallback: (args: CompositionEvent) => boolean,\r\n compositionEndCallback: (args: CompositionEvent) => boolean) {\r\n const compositionStartHandler = (args: CompositionEvent) => {\r\n if (compositionStartCallback(args)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"compositionstart\", compositionStartHandler);\r\n\r\n const beforeInputHandler = (args: InputEvent) => {\r\n const ranges = args.getTargetRanges();\r\n let start = -1;\r\n let end = -1;\r\n if (ranges.length > 0) {\r\n start = ranges[0].startOffset;\r\n end = ranges[0].endOffset;\r\n }\r\n\r\n if (args.inputType === \"insertCompositionText\") {\r\n start = 2;\r\n end = start + 2;\r\n }\r\n if (beforeInputCallback(args, start, end)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"beforeinput\", beforeInputHandler);\r\n\r\n const compositionUpdateHandler = (args: CompositionEvent) => {\r\n if (compositionUpdateCallback(args)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"compositionupdate\", compositionUpdateHandler);\r\n\r\n const compositionEndHandler = (args: CompositionEvent) => {\r\n if (compositionEndCallback(args)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"compositionend\", compositionEndHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"compositionstart\", compositionStartHandler);\r\n element.removeEventListener(\"compositionupdate\", compositionUpdateHandler);\r\n element.removeEventListener(\"compositionend\", compositionEndHandler);\r\n };\r\n }\r\n\r\n public static subscribePointerEvents(\r\n element: HTMLInputElement,\r\n pointerMoveCallback: (args: PointerEvent) => boolean,\r\n pointerDownCallback: (args: PointerEvent) => boolean,\r\n pointerUpCallback: (args: PointerEvent) => boolean,\r\n pointerCancelCallback: (args: PointerEvent) => boolean,\r\n wheelCallback: (args: WheelEvent) => boolean\r\n ) {\r\n const pointerMoveHandler = (args: PointerEvent) => {\r\n pointerMoveCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const pointerDownHandler = (args: PointerEvent) => {\r\n pointerDownCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const pointerUpHandler = (args: PointerEvent) => {\r\n pointerUpCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const pointerCancelHandler = (args: PointerEvent) => {\r\n pointerCancelCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const wheelHandler = (args: WheelEvent) => {\r\n wheelCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n element.addEventListener(\"pointermove\", pointerMoveHandler);\r\n element.addEventListener(\"pointerdown\", pointerDownHandler);\r\n element.addEventListener(\"pointerup\", pointerUpHandler);\r\n element.addEventListener(\"wheel\", wheelHandler);\r\n element.addEventListener(\"pointercancel\", pointerCancelHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"pointerover\", pointerMoveHandler);\r\n element.removeEventListener(\"pointerdown\", pointerDownHandler);\r\n element.removeEventListener(\"pointerup\", pointerUpHandler);\r\n element.removeEventListener(\"pointercancel\", pointerCancelHandler);\r\n element.removeEventListener(\"wheel\", wheelHandler);\r\n };\r\n }\r\n\r\n public static subscribeInputEvents(\r\n element: HTMLInputElement,\r\n inputCallback: (value: string) => boolean\r\n ) {\r\n const inputHandler = (args: Event) => {\r\n if (inputCallback((args as any).value)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"input\", inputHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"input\", inputHandler);\r\n };\r\n }\r\n\r\n public static subscribeDropEvents(\r\n element: HTMLInputElement,\r\n dragEvent: (args: any) => boolean\r\n ) {\r\n const dragHandler = (args: Event) => {\r\n if (dragEvent(args as any)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"dragover\", dragHandler);\r\n element.addEventListener(\"dragenter\", dragHandler);\r\n element.addEventListener(\"dragleave\", dragHandler);\r\n element.addEventListener(\"drop\", dragHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"dragover\", dragHandler);\r\n element.removeEventListener(\"dragenter\", dragHandler);\r\n element.removeEventListener(\"dragleave\", dragHandler);\r\n element.removeEventListener(\"drop\", dragHandler);\r\n };\r\n }\r\n\r\n public static getCoalescedEvents(pointerEvent: PointerEvent): PointerEvent[] {\r\n return pointerEvent.getCoalescedEvents();\r\n }\r\n\r\n public static subscribeKeyboardGeometryChange(\r\n element: HTMLInputElement,\r\n handler: (args: any) => boolean) {\r\n if (\"virtualKeyboard\" in navigator) {\r\n // (navigator as any).virtualKeyboard.overlaysContent = true;\r\n (navigator as any).virtualKeyboard.addEventListener(\"geometrychange\", (event: any) => {\r\n const elementRect = element.getBoundingClientRect();\r\n const keyboardRect = event.target.boundingRect as DOMRect;\r\n handler({\r\n x: keyboardRect.x - elementRect.x,\r\n y: keyboardRect.y - elementRect.y,\r\n width: keyboardRect.width,\r\n height: keyboardRect.height\r\n });\r\n });\r\n }\r\n }\r\n\r\n public static subscribeVisibilityChange(\r\n handler: (state: boolean) => void): boolean {\r\n document.addEventListener(\"visibilitychange\", () => {\r\n handler(document.visibilityState === \"visible\");\r\n });\r\n return document.visibilityState === \"visible\";\r\n }\r\n\r\n public static clearInput(inputElement: HTMLInputElement) {\r\n inputElement.value = \"\";\r\n }\r\n\r\n public static focusElement(inputElement: HTMLElement) {\r\n inputElement.focus();\r\n }\r\n\r\n public static setCursor(inputElement: HTMLInputElement, kind: string) {\r\n if (kind === \"default\") {\r\n inputElement.style.removeProperty(\"cursor\");\r\n } else {\r\n inputElement.style.cursor = kind;\r\n }\r\n }\r\n\r\n public static setBounds(inputElement: HTMLInputElement, x: number, y: number, caretWidth: number, caretHeight: number, caret: number) {\r\n inputElement.style.left = (x).toFixed(0) + \"px\";\r\n inputElement.style.top = (y).toFixed(0) + \"px\";\r\n\r\n const { left, top } = CaretHelper.getCaretCoordinates(inputElement, caret);\r\n\r\n inputElement.style.left = (x - left).toFixed(0) + \"px\";\r\n inputElement.style.top = (y - top).toFixed(0) + \"px\";\r\n }\r\n\r\n public static hide(inputElement: HTMLInputElement) {\r\n inputElement.style.display = \"none\";\r\n }\r\n\r\n public static show(inputElement: HTMLInputElement) {\r\n inputElement.style.display = \"block\";\r\n }\r\n\r\n public static setSurroundingText(inputElement: HTMLInputElement, text: string, start: number, end: number) {\r\n if (!inputElement) {\r\n return;\r\n }\r\n\r\n inputElement.value = text;\r\n inputElement.setSelectionRange(start, end);\r\n inputElement.style.width = \"20px\";\r\n inputElement.style.width = `${inputElement.scrollWidth}px`;\r\n }\r\n\r\n private static getModifiers(args: KeyboardEvent): string {\r\n let modifiers = RawInputModifiers.None;\r\n\r\n if (args.ctrlKey) { modifiers |= RawInputModifiers.Control; }\r\n if (args.altKey) { modifiers |= RawInputModifiers.Alt; }\r\n if (args.shiftKey) { modifiers |= RawInputModifiers.Shift; }\r\n if (args.metaKey) { modifiers |= RawInputModifiers.Meta; }\r\n\r\n return modifiers.toString();\r\n }\r\n\r\n public static setPointerCapture(containerElement: HTMLInputElement, pointerId: number): void {\r\n containerElement.setPointerCapture(pointerId);\r\n }\r\n\r\n public static releasePointerCapture(containerElement: HTMLInputElement, pointerId: number): void {\r\n if (containerElement.hasPointerCapture(pointerId)) {\r\n containerElement.releasePointerCapture(pointerId);\r\n }\r\n }\r\n}\r\n", "\r\nexport class AvaloniaDOM {\r\n public static addClass(element: HTMLElement, className: string): void {\r\n element.classList.add(className);\r\n }\r\n\r\n static observeDarkMode(observer: (isDarkMode: boolean, isHighContrast: boolean) => boolean) {\r\n if (globalThis.matchMedia === undefined) {\r\n return false;\r\n }\r\n\r\n const colorShemeMedia = globalThis.matchMedia(\"(prefers-color-scheme: dark)\");\r\n const prefersContrastMedia = globalThis.matchMedia(\"(prefers-contrast: more)\");\r\n\r\n colorShemeMedia.addEventListener(\"change\", (args: MediaQueryListEvent) => {\r\n observer(args.matches, prefersContrastMedia.matches);\r\n });\r\n prefersContrastMedia.addEventListener(\"change\", (args: MediaQueryListEvent) => {\r\n observer(colorShemeMedia.matches, args.matches);\r\n });\r\n\r\n return {\r\n isDarkMode: colorShemeMedia.matches,\r\n isHighContrast: prefersContrastMedia.matches\r\n };\r\n }\r\n\r\n static getFirstElementByClassName(className: string, parent?: HTMLElement): Element | null {\r\n const elements = (parent ?? globalThis.document).getElementsByClassName(className);\r\n return elements ? elements[0] : null;\r\n }\r\n\r\n static createAvaloniaCanvas(host: HTMLElement): HTMLCanvasElement {\r\n const containerId = host.getAttribute(\"data-containerId\") ?? \"0000\";\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.id = `canvas${containerId}`;\r\n canvas.classList.add(\"avalonia-canvas\");\r\n canvas.style.width = \"100%\";\r\n canvas.style.height = \"100%\";\r\n canvas.style.position = \"absolute\";\r\n\r\n return canvas;\r\n }\r\n\r\n static attachCanvas(host: HTMLElement, canvas: HTMLCanvasElement): void {\r\n host.prepend(canvas);\r\n }\r\n\r\n static detachCanvas(host: HTMLElement, canvas: HTMLCanvasElement): void {\r\n host.removeChild(canvas);\r\n }\r\n\r\n static createAvaloniaHost(host: HTMLElement) {\r\n const containerId = Math.random().toString(36).replace(/[^a-z]+/g, \"\").substr(2, 10);\r\n\r\n // Root element\r\n host.classList.add(\"avalonia-container\");\r\n host.tabIndex = 0;\r\n host.setAttribute(\"data-containerId\", containerId);\r\n host.oncontextmenu = function () { return false; };\r\n host.style.overflow = \"hidden\";\r\n host.style.touchAction = \"none\";\r\n\r\n // Canvas is lazily created depending on the rendering mode. See createAvaloniaCanvas usage.\r\n\r\n // Native controls host\r\n const nativeHost = document.createElement(\"div\");\r\n nativeHost.id = `nativeHost${containerId}`;\r\n nativeHost.classList.add(\"avalonia-native-host\");\r\n nativeHost.style.left = \"0px\";\r\n nativeHost.style.top = \"0px\";\r\n nativeHost.style.width = \"100%\";\r\n nativeHost.style.height = \"100%\";\r\n nativeHost.style.position = \"absolute\";\r\n\r\n // IME\r\n const inputElement = document.createElement(\"input\");\r\n inputElement.id = `inputElement${containerId}`;\r\n inputElement.classList.add(\"avalonia-input-element\");\r\n inputElement.autocapitalize = \"none\";\r\n inputElement.type = \"text\";\r\n inputElement.spellcheck = false;\r\n inputElement.style.padding = \"0\";\r\n inputElement.style.margin = \"0\";\r\n inputElement.style.borderWidth = \"0\";\r\n inputElement.style.position = \"absolute\";\r\n inputElement.style.overflow = \"hidden\";\r\n inputElement.style.borderStyle = \"hidden\";\r\n inputElement.style.outline = \"none\";\r\n inputElement.style.background = \"transparent\";\r\n inputElement.style.color = \"transparent\";\r\n inputElement.style.display = \"none\";\r\n inputElement.style.height = \"20px\";\r\n inputElement.style.zIndex = \"-1\";\r\n inputElement.onpaste = function () { return false; };\r\n inputElement.oncopy = function () { return false; };\r\n inputElement.oncut = function () { return false; };\r\n\r\n host.prepend(inputElement);\r\n host.prepend(nativeHost);\r\n\r\n return {\r\n host,\r\n nativeHost,\r\n inputElement\r\n };\r\n }\r\n\r\n public static isFullscreen(): boolean {\r\n return document.fullscreenElement != null;\r\n }\r\n\r\n public static async setFullscreen(isFullscreen: boolean) {\r\n if (isFullscreen) {\r\n const doc = document.documentElement;\r\n await doc.requestFullscreen();\r\n } else {\r\n await document.exitFullscreen();\r\n }\r\n }\r\n\r\n public static initSafeAreaPadding(): void {\r\n document.documentElement.style.setProperty(\"--av-sat\", \"env(safe-area-inset-top)\");\r\n document.documentElement.style.setProperty(\"--av-sar\", \"env(safe-area-inset-right)\");\r\n document.documentElement.style.setProperty(\"--av-sab\", \"env(safe-area-inset-bottom)\");\r\n document.documentElement.style.setProperty(\"--av-sal\", \"env(safe-area-inset-left)\");\r\n }\r\n\r\n public static getSafeAreaPadding(): number[] {\r\n const top = parseFloat(getComputedStyle(document.documentElement).getPropertyValue(\"--av-sat\"));\r\n const bottom = parseFloat(getComputedStyle(document.documentElement).getPropertyValue(\"--av-sab\"));\r\n const left = parseFloat(getComputedStyle(document.documentElement).getPropertyValue(\"--av-sal\"));\r\n const right = parseFloat(getComputedStyle(document.documentElement).getPropertyValue(\"--av-sar\"));\r\n\r\n return [left, top, bottom, right];\r\n }\r\n}\r\n", "export class Caniuse {\r\n public static hasNativeFilePicker(): boolean {\r\n return \"showSaveFilePicker\" in globalThis;\r\n }\r\n\r\n public static isMobile(): boolean {\r\n const userAgentData = (globalThis.navigator as any)?.userAgentData;\r\n if (userAgentData) {\r\n return userAgentData.mobile;\r\n }\r\n\r\n const userAgent = navigator.userAgent;\r\n const regex1 = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i;\r\n const regex2 = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw(n|u)|c55\\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i;\r\n return regex1.test(userAgent) || regex2.test(userAgent.substr(0, 4));\r\n }\r\n\r\n public static isTv(): boolean {\r\n return navigator.userAgent.includes(\"SmartTV\");\r\n }\r\n}\r\n", "import FileSystemWritableFileStream from \"native-file-system-adapter/types/src/FileSystemWritableFileStream\";\r\n\r\nconst sharedArrayBufferDefined = typeof SharedArrayBuffer !== \"undefined\";\r\nexport function isSharedArrayBuffer(buffer: any): buffer is SharedArrayBuffer {\r\n // BEWARE: In some cases, `instanceof SharedArrayBuffer` returns false even though buffer is an SAB.\r\n // Patch adapted from https://github.com/emscripten-core/emscripten/pull/16994\r\n // See also https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag\r\n return sharedArrayBufferDefined && buffer[Symbol.toStringTag] === \"SharedArrayBuffer\";\r\n}\r\n\r\nexport class StreamHelper {\r\n public static async seek(stream: FileSystemWritableFileStream, position: number) {\r\n return await stream.seek(position);\r\n }\r\n\r\n public static async truncate(stream: FileSystemWritableFileStream, size: number) {\r\n return await stream.truncate(size);\r\n }\r\n\r\n public static async close(stream: FileSystemWritableFileStream) {\r\n return await stream.close();\r\n }\r\n\r\n public static async write(stream: FileSystemWritableFileStream, span: any, offset: number, count: number) {\r\n const heap8 = globalThis.getDotnetRuntime(0)?.localHeapViewU8();\r\n\r\n let buffer: Uint8Array;\r\n if (span._pointer > 0 && span._length > 0 && heap8 && !isSharedArrayBuffer(heap8.buffer)) {\r\n // Attempt to use undocumented access to the HEAP8 directly\r\n // Note, SharedArrayBuffer cannot be used with ImageData (when WasmEnableThreads = true).\r\n buffer = new Uint8Array(heap8.buffer, span._pointer as number + offset, count);\r\n } else {\r\n // Or fallback to the normal API that does multiple array copies.\r\n const copy = new Uint8Array(count);\r\n span.copyTo(copy, offset);\r\n buffer = span;\r\n }\r\n\r\n return await stream.write(buffer);\r\n }\r\n\r\n public static byteLength(stream: Blob) {\r\n return stream.size;\r\n }\r\n\r\n public static async sliceArrayBuffer(stream: Blob, offset: number, count: number) {\r\n const buffer = await stream.slice(offset, offset + count).arrayBuffer();\r\n return new Uint8Array(buffer);\r\n }\r\n\r\n public static toMemoryView(buffer: Uint8Array): Uint8Array {\r\n return buffer;\r\n }\r\n}\r\n", "class NativeControlHostTopLevelAttachment {\r\n _child?: HTMLElement;\r\n _host?: HTMLElement;\r\n}\r\n\r\nexport class NativeControlHost {\r\n public static createDefaultChild(parent?: HTMLElement): HTMLElement {\r\n return document.createElement(\"div\");\r\n }\r\n\r\n public static createAttachment(): NativeControlHostTopLevelAttachment {\r\n return new NativeControlHostTopLevelAttachment();\r\n }\r\n\r\n public static initializeWithChildHandle(element: NativeControlHostTopLevelAttachment, child: HTMLElement): void {\r\n element._child = child;\r\n element._child.style.position = \"absolute\";\r\n }\r\n\r\n public static attachTo(element: NativeControlHostTopLevelAttachment, host?: HTMLElement): void {\r\n if (element._host && element._child) {\r\n element._host.removeChild(element._child);\r\n }\r\n\r\n element._host = host;\r\n\r\n if (element._host && element._child) {\r\n element._host.appendChild(element._child);\r\n }\r\n }\r\n\r\n public static showInBounds(element: NativeControlHostTopLevelAttachment, x: number, y: number, width: number, height: number): void {\r\n if (element._child) {\r\n element._child.style.top = `${y}px`;\r\n element._child.style.left = `${x}px`;\r\n element._child.style.width = `${width}px`;\r\n element._child.style.height = `${height}px`;\r\n element._child.style.display = \"block\";\r\n }\r\n }\r\n\r\n public static hideWithSize(element: NativeControlHostTopLevelAttachment, width: number, height: number): void {\r\n if (element._child) {\r\n element._child.style.width = `${width}px`;\r\n element._child.style.height = `${height}px`;\r\n element._child.style.display = \"none\";\r\n }\r\n }\r\n\r\n public static releaseChild(element: NativeControlHostTopLevelAttachment): void {\r\n if (element._child) {\r\n element._child = undefined;\r\n }\r\n }\r\n}\r\n", "export class NavigationHelper {\r\n public static addBackHandler(backHandlerCallback: () => Boolean) {\r\n history.pushState(null, \"\", window.location.href);\r\n window.onpopstate = () => {\r\n const handled = backHandlerCallback();\r\n\r\n if (!handled) {\r\n history.back();\r\n } else {\r\n history.forward();\r\n }\r\n };\r\n }\r\n}\r\n", "export class GeneralHelpers {\r\n public static itemsArrayAt(instance: any, key: any): any[] {\r\n const items = instance[key];\r\n if (!items) {\r\n return [];\r\n }\r\n\r\n const retItems = [];\r\n for (let i = 0; i < items.length; i++) {\r\n retItems[i] = items[i];\r\n }\r\n return retItems;\r\n }\r\n\r\n public static itemAt(instance: any, key: any): any {\r\n const item = instance[key];\r\n return item;\r\n }\r\n\r\n public static callMethod(instance: any, name: string /*, args */): any {\r\n const args = Array.prototype.slice.call(arguments, 2);\r\n return instance[name].apply(instance, args);\r\n }\r\n}\r\n", "export class TimerHelper {\r\n public static runAnimationFrames(renderFrameCallback: (timestamp: number) => boolean): void {\r\n function render(time: number) {\r\n const next = renderFrameCallback(time);\r\n if (next) {\r\n window.requestAnimationFrame(render);\r\n }\r\n }\r\n\r\n window.requestAnimationFrame(render);\r\n }\r\n}\r\n", "export type AvaloniaRenderingContext = RenderingContext;\r\n\r\nexport enum BrowserRenderingMode {\r\n Software2D = 1,\r\n WebGL1,\r\n WebGL2\r\n}\r\n\r\nexport abstract class CanvasSurface {\r\n constructor(\r\n public context: AvaloniaRenderingContext,\r\n public mode: BrowserRenderingMode) {\r\n }\r\n\r\n abstract destroy(): void;\r\n abstract ensureSize(): void;\r\n abstract onSizeChanged(sizeChangedCallback: (width: number, height: number, dpr: number) => void): void;\r\n}\r\n", "type ResizeObserverWithCallbacks = {\r\n callbacks: Map void)>;\r\n} & ResizeObserver;\r\n\r\nexport class ResizeHandler {\r\n private static resizeObserver?: ResizeObserverWithCallbacks;\r\n\r\n public static observeSize(element: HTMLElement, callback: (width: number, height: number, dpr: number) => void) : (() => void) {\r\n if (!this.resizeObserver) {\r\n this.resizeObserver = new ResizeObserver(this.onResize) as ResizeObserverWithCallbacks;\r\n this.resizeObserver.callbacks = new Map void)>();\r\n }\r\n\r\n this.resizeObserver.callbacks.set(element, callback);\r\n this.resizeObserver.observe(element, { box: \"content-box\" });\r\n\r\n return () => {\r\n this.resizeObserver?.callbacks.delete(element);\r\n this.resizeObserver?.unobserve(element);\r\n };\r\n }\r\n\r\n private static onResize(entries: ResizeObserverEntry[], observer: ResizeObserver) {\r\n for (const entry of entries) {\r\n const callback = (observer as ResizeObserverWithCallbacks).callbacks.get(entry.target);\r\n if (!callback) {\r\n continue;\r\n }\r\n\r\n const trueDpr = window.devicePixelRatio;\r\n let width;\r\n let height;\r\n let dpr = trueDpr;\r\n if (entry.devicePixelContentBoxSize) {\r\n // NOTE: Only this path gives the correct answer\r\n // The other paths are imperfect fallbacks\r\n // for browsers that don't provide anyway to do this\r\n width = entry.devicePixelContentBoxSize[0].inlineSize;\r\n height = entry.devicePixelContentBoxSize[0].blockSize;\r\n dpr = 1; // it's already in width and height\r\n } else if (entry.contentBoxSize) {\r\n if (entry.contentBoxSize[0]) {\r\n width = entry.contentBoxSize[0].inlineSize;\r\n height = entry.contentBoxSize[0].blockSize;\r\n } else {\r\n width = (entry.contentBoxSize as any).inlineSize;\r\n height = (entry.contentBoxSize as any).blockSize;\r\n }\r\n } else {\r\n width = entry.contentRect.width;\r\n height = entry.contentRect.height;\r\n }\r\n const displayWidth = Math.round(width * dpr);\r\n const displayHeight = Math.round(height * dpr);\r\n callback(displayWidth, displayHeight, trueDpr);\r\n }\r\n }\r\n}\r\n", "import { ResizeHandler } from \"./resizeHandler\";\r\nimport { CanvasSurface, AvaloniaRenderingContext, BrowserRenderingMode } from \"./surfaceBase\";\r\n\r\nexport abstract class HtmlCanvasSurfaceBase extends CanvasSurface {\r\n private sizeParams?: [number, number, number];\r\n private sizeChangedCallback?: (width: number, height: number, dpr: number) => void;\r\n\r\n constructor(\r\n public canvas: HTMLCanvasElement,\r\n public context: AvaloniaRenderingContext,\r\n public mode: BrowserRenderingMode) {\r\n super(context, mode);\r\n\r\n // No need to ubsubsribe, canvas never leaves JS world, it should be GC'ed with all callbacks.\r\n ResizeHandler.observeSize(canvas, (width, height, dpr) => {\r\n this.sizeParams = [width, height, dpr];\r\n\r\n if (this.sizeChangedCallback) {\r\n this.sizeChangedCallback(width, height, dpr);\r\n }\r\n });\r\n }\r\n\r\n public destroy(): void {\r\n delete this.sizeChangedCallback;\r\n }\r\n\r\n public onSizeChanged(sizeChangedCallback: (width: number, height: number, dpr: number) => void) {\r\n if (this.sizeChangedCallback) { throw new Error(\"For simplicity, we don't support multiple size changed callbacks per surface, not needed yet.\"); }\r\n this.sizeChangedCallback = sizeChangedCallback;\r\n }\r\n\r\n public ensureSize() {\r\n if (this.sizeParams) {\r\n this.canvas.width = this.sizeParams[0];\r\n this.canvas.height = this.sizeParams[1];\r\n delete this.sizeParams;\r\n }\r\n }\r\n}\r\n", "import { BrowserRenderingMode } from \"./surfaceBase\";\r\nimport { HtmlCanvasSurfaceBase } from \"./htmlSurfaceBase\";\r\nimport { RuntimeAPI } from \"../../../types/dotnet\";\r\nimport { isSharedArrayBuffer } from \"../stream\";\r\n\r\nexport class SoftwareSurface extends HtmlCanvasSurfaceBase {\r\n private readonly runtime: RuntimeAPI | undefined;\r\n\r\n constructor(public canvas: HTMLCanvasElement) {\r\n const context = canvas.getContext(\"2d\", {\r\n alpha: true\r\n });\r\n if (!context) {\r\n throw new Error(\"HTMLCanvasElement.getContext(2d) returned null.\");\r\n }\r\n super(canvas, context, BrowserRenderingMode.Software2D);\r\n\r\n this.runtime = globalThis.getDotnetRuntime(0);\r\n }\r\n\r\n public putPixelData(span: any /* IMemoryView */, width: number, height: number): void {\r\n this.ensureSize();\r\n\r\n const heap8 = this.runtime?.localHeapViewU8();\r\n\r\n let clampedBuffer: Uint8ClampedArray;\r\n if (span._pointer > 0 && span._length > 0 && heap8 && !isSharedArrayBuffer(heap8.buffer)) {\r\n // Attempt to use undocumented access to the HEAP8 directly\r\n // Note, SharedArrayBuffer cannot be used with ImageData (when WasmEnableThreads = true).\r\n clampedBuffer = new Uint8ClampedArray(heap8.buffer, span._pointer, span._length);\r\n } else {\r\n // Or fallback to the normal API that does multiple array copies.\r\n const copy = new Uint8Array(span.byteLength);\r\n span.copyTo(copy);\r\n clampedBuffer = new Uint8ClampedArray(copy.buffer);\r\n }\r\n\r\n const imageData = new ImageData(clampedBuffer, width, height);\r\n (this.context as CanvasRenderingContext2D).putImageData(imageData, 0, 0);\r\n }\r\n}\r\n", "import { BrowserRenderingMode } from \"./surfaceBase\";\r\nimport { HtmlCanvasSurfaceBase } from \"./htmlSurfaceBase\";\r\n\r\nfunction getGL(): any {\r\n const self = globalThis as any;\r\n const module = self.Module ?? self.getDotnetRuntime(0)?.Module;\r\n return module?.GL ?? self.AvaloniaGL ?? self.SkiaSharpGL;\r\n}\r\n\r\nexport class WebGlSurface extends HtmlCanvasSurfaceBase {\r\n public contextHandle?: number;\r\n public fboId?: number;\r\n public stencil?: number;\r\n public sample?: number;\r\n public depth?: number;\r\n\r\n constructor(public canvas: HTMLCanvasElement, mode: BrowserRenderingMode.WebGL1 | BrowserRenderingMode.WebGL2) {\r\n // Skia only understands WebGL context wrapped in Emscripten.\r\n const gl = getGL();\r\n if (!gl) {\r\n throw new Error(\"Module.GL object wasn't initialized, WebGL can't be used.\");\r\n }\r\n\r\n const modeStr = mode === BrowserRenderingMode.WebGL1 ? \"webgl\" : \"webgl2\";\r\n const attrs: WebGLContextAttributes | any =\r\n {\r\n alpha: true,\r\n depth: true,\r\n stencil: true,\r\n antialias: false,\r\n premultipliedAlpha: true,\r\n preserveDrawingBuffer: false,\r\n // only supported on older browsers, which is perfect as we want to fallback to 2d there.\r\n failIfMajorPerformanceCaveat: true,\r\n // attrs used by Emscripten:\r\n majorVersion: mode === BrowserRenderingMode.WebGL1 ? 1 : 2,\r\n minorVersion: 0,\r\n enableExtensionsByDefault: 1,\r\n explicitSwapControl: 0\r\n };\r\n const context = canvas.getContext(modeStr, attrs) as WebGLRenderingContext;\r\n if (!context) {\r\n throw new Error(`HTMLCanvasElement.getContext(${modeStr}) returned null.`);\r\n }\r\n\r\n const handle = gl.registerContext(context, attrs);\r\n gl.makeContextCurrent(handle);\r\n (context as any).gl_handle = handle;\r\n\r\n super(canvas, context, BrowserRenderingMode.Software2D);\r\n\r\n this.contextHandle = handle;\r\n this.fboId = context.getParameter(context.FRAMEBUFFER_BINDING)?.id ?? 0;\r\n this.stencil = context.getParameter(context.STENCIL_BITS);\r\n this.sample = context.getParameter(context.SAMPLES);\r\n this.depth = context.getParameter(context.DEPTH_BITS);\r\n }\r\n}\r\n", "import { AvaloniaDOM } from \"../dom\";\r\nimport { SoftwareSurface } from \"./softwareSurface\";\r\nimport { BrowserRenderingMode, CanvasSurface } from \"./surfaceBase\";\r\nimport { WebGlSurface } from \"./webGlSurface\";\r\n\r\nexport class CanvasFactory {\r\n public static create(container: HTMLElement, mode: BrowserRenderingMode): CanvasSurface {\r\n if (!container) {\r\n throw new Error(\"No html container was provided.\");\r\n }\r\n\r\n const canvas = AvaloniaDOM.createAvaloniaCanvas(container);\r\n AvaloniaDOM.attachCanvas(container, canvas);\r\n\r\n try {\r\n if (mode === BrowserRenderingMode.Software2D) {\r\n return new SoftwareSurface(canvas);\r\n } else if (mode === BrowserRenderingMode.WebGL1 || mode === BrowserRenderingMode.WebGL2) {\r\n return new WebGlSurface(canvas, mode);\r\n } else {\r\n throw new Error(`Unsupported rendering mode: ${BrowserRenderingMode[mode]}`);\r\n }\r\n } catch (ex) {\r\n AvaloniaDOM.detachCanvas(container, canvas);\r\n throw ex;\r\n }\r\n }\r\n\r\n public static destroy(surface: CanvasSurface) {\r\n surface.destroy();\r\n }\r\n\r\n public static onSizeChanged(surface: CanvasSurface, sizeChangedCallback: (width: number, height: number, dpr: number) => void) {\r\n surface.onSizeChanged(sizeChangedCallback);\r\n }\r\n\r\n public static ensureSize(surface: CanvasSurface): void {\r\n surface.ensureSize();\r\n }\r\n\r\n public static putPixelData(surface: SoftwareSurface, span: any /* IMemoryView */, width: number, height: number): void {\r\n surface.putPixelData(span, width, height);\r\n }\r\n}\r\n", "import { InputHelper } from \"./avalonia/input\";\r\nimport { AvaloniaDOM } from \"./avalonia/dom\";\r\nimport { Caniuse } from \"./avalonia/caniuse\";\r\nimport { StreamHelper } from \"./avalonia/stream\";\r\nimport { NativeControlHost } from \"./avalonia/nativeControlHost\";\r\nimport { NavigationHelper } from \"./avalonia/navigationHelper\";\r\nimport { GeneralHelpers } from \"./avalonia/generalHelpers\";\r\nimport { TimerHelper } from \"./avalonia/timer\";\r\nimport { CanvasFactory } from \"./avalonia/surfaces/surfaceFactory\";\r\n\r\nasync function registerServiceWorker(path: string, scope: string | undefined) {\r\n if (\"serviceWorker\" in navigator) {\r\n await globalThis.navigator.serviceWorker.register(path, scope ? { scope } : undefined);\r\n }\r\n}\r\n\r\nexport {\r\n Caniuse,\r\n CanvasFactory,\r\n InputHelper,\r\n AvaloniaDOM,\r\n StreamHelper,\r\n NativeControlHost,\r\n NavigationHelper,\r\n GeneralHelpers,\r\n TimerHelper,\r\n registerServiceWorker\r\n};\r\n"], + "mappings": "AACO,IAAMA,EAAN,KAAkB,CACrB,OAAc,oBACVC,EACAC,EACAC,EACF,CANN,IAAAC,EAAAC,EAOQ,GAAI,CAACC,EACD,MAAM,IAAI,MACN,gFACJ,EAGJ,IAAMC,GAAQH,EAAAD,GAAA,YAAAA,EAAS,QAAT,KAAAC,EAAkB,GAChC,GAAIG,EAAO,CACP,IAAMC,EAAK,SAAS,cAChB,2CACJ,EACIA,KAAIH,EAAAG,EAAG,aAAH,MAAAH,EAAe,YAAYG,GACvC,CAGA,IAAMC,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,GAAK,2CACT,SAAS,KAAK,YAAYA,CAAG,EAE7B,IAAMC,EAAQD,EAAI,MACZE,EAAW,OAAO,iBAClB,OAAO,iBAAiBV,CAAO,EAC7BA,EAAgB,aAClBW,EAAUX,EAAQ,WAAa,QAGrCS,EAAM,WAAa,WACdE,IAASF,EAAM,SAAW,cAG/BA,EAAM,SAAW,WACZH,IAAOG,EAAM,WAAa,UAG/BG,EAAW,QAASC,GAAiB,CACjC,GAAIF,GAAWE,IAAS,aAEpB,GAAIH,EAAS,YAAc,aAAc,CACrC,IAAMI,EAAS,SAASJ,EAAS,MAAM,EACjCK,EACF,SAASL,EAAS,UAAU,EAC5B,SAASA,EAAS,aAAa,EAC/B,SAASA,EAAS,cAAc,EAChC,SAASA,EAAS,iBAAiB,EACjCM,EAAeD,EAAc,SAASL,EAAS,UAAU,EAC3DI,EAASE,EACTP,EAAM,WAAa,GAAGK,EAASC,MACxBD,IAAWE,EAClBP,EAAM,WAAaC,EAAS,WAE5BD,EAAM,WAAa,GAE3B,MACIA,EAAM,WAAaC,EAAS,YAG/BD,EAAcI,GAASH,EAAiBG,EAEjD,CAAC,EAEGI,EAEIjB,EAAQ,aAAe,SAASU,EAAS,MAAM,IAC/CD,EAAM,UAAY,UAGtBA,EAAM,SAAW,SAGrBD,EAAI,YAAcR,EAAQ,MAAM,UAAU,EAAGC,CAAQ,EAGjDU,IAASH,EAAI,YAAcA,EAAI,YAAY,QAAQ,MAAO,MAAQ,GAEtE,IAAMU,EAAO,SAAS,cAAc,MAAM,EAM1CA,EAAK,YAAclB,EAAQ,MAAM,UAAUC,CAAQ,GAAK,IACxDO,EAAI,YAAYU,CAAI,EAEpB,IAAMC,EAAc,CAChB,IAAKD,EAAK,UAAY,SAASR,EAAS,cAAc,EACtD,KAAMQ,EAAK,WAAa,SAASR,EAAS,eAAe,EACzD,OAAQ,SAASA,EAAS,UAAU,CACxC,EAEA,OAAIJ,EACAY,EAAK,MAAM,gBAAkB,OAE7B,SAAS,KAAK,YAAYV,CAAG,EAG1BW,CACX,CACJ,EAEMP,EAAa,CACf,YACA,YACA,QACA,SACA,YACA,YAEA,iBACA,mBACA,oBACA,kBACA,cAEA,aACA,eACA,gBACA,cAGA,YACA,cACA,aACA,cACA,WACA,iBACA,aACA,aAEA,YACA,gBACA,aACA,iBAEA,gBACA,cAEA,UACA,YACJ,EAEMP,EAAY,OAAO,QAAW,YAC9BY,EAAYZ,GAAc,OAAe,iBAAmB,KC9G3D,IAAMe,EAAN,KAAkB,CAKrB,OAAc,8BAA+B,CACrC,KAAK,iBAAmB,IAI5B,WAAW,iBAAiB,QAAUC,GAAc,CAC5C,KAAK,iBAAmB,GACxB,KAAK,iBAAiBA,EAAK,cAAc,QAAQ,MAAM,CAAC,CAEhE,CAAC,EACD,KAAK,eAAiB,EAC1B,CAEA,aAAoB,mBAAqC,CACrD,GAAI,WAAW,UAAU,UAAU,SAC/B,OAAO,MAAM,WAAW,UAAU,UAAU,SAAS,EAErD,GAAI,CACA,OAAO,MAAM,IAAI,QAAa,CAACC,EAASC,IAAW,CAC/C,KAAK,eAAiB,EACtB,KAAK,iBAAmBD,EACxB,KAAK,gBAAkBC,CAC3B,CAAC,CACL,QAAE,CACE,KAAK,eAAiB,EACtB,KAAK,iBAAmB,KACxB,KAAK,gBAAkB,IAC3B,CAER,CAEA,OAAc,mBACVC,EACAC,EACAC,EAA0E,CAC1E,IAAMC,EAAkBN,GAAwB,CACxCI,EAAgBJ,EAAK,KAAMA,EAAK,IAAK,KAAK,aAAaA,CAAI,CAAC,GACxD,KAAK,iBAAmB,GACxBA,EAAK,eAAe,CAGhC,EACAG,EAAQ,iBAAiB,UAAWG,CAAc,EAElD,IAAMC,EAAgBP,GAAwB,CACtCK,EAAcL,EAAK,KAAMA,EAAK,IAAK,KAAK,aAAaA,CAAI,CAAC,GAC1DA,EAAK,eAAe,EAEpB,KAAK,iBACL,KAAK,gBAAgB,CAE7B,EAEA,OAAAG,EAAQ,iBAAiB,QAASI,CAAY,EAEvC,IAAM,CACTJ,EAAQ,oBAAoB,UAAWG,CAAc,EACrDH,EAAQ,oBAAoB,QAASI,CAAY,CACrD,CACJ,CAEA,OAAc,oBACVJ,EACAK,EACAC,EACAC,EACAC,EAA6D,CAC7D,IAAMC,EAA2BZ,GAA2B,CACpDS,EAAyBT,CAAI,GAC7BA,EAAK,eAAe,CAE5B,EACAG,EAAQ,iBAAiB,mBAAoBS,CAAuB,EAEpE,IAAMC,EAAsBb,GAAqB,CAC7C,IAAMc,EAASd,EAAK,gBAAgB,EAChCe,EAAQ,GACRC,EAAM,GACNF,EAAO,OAAS,IAChBC,EAAQD,EAAO,GAAG,YAClBE,EAAMF,EAAO,GAAG,WAGhBd,EAAK,YAAc,0BACnBe,EAAQ,EACRC,EAAMD,EAAQ,GAEdP,EAAoBR,EAAMe,EAAOC,CAAG,GACpChB,EAAK,eAAe,CAE5B,EACAG,EAAQ,iBAAiB,cAAeU,CAAkB,EAE1D,IAAMI,EAA4BjB,GAA2B,CACrDU,EAA0BV,CAAI,GAC9BA,EAAK,eAAe,CAE5B,EACAG,EAAQ,iBAAiB,oBAAqBc,CAAwB,EAEtE,IAAMC,EAAyBlB,GAA2B,CAClDW,EAAuBX,CAAI,GAC3BA,EAAK,eAAe,CAE5B,EACA,OAAAG,EAAQ,iBAAiB,iBAAkBe,CAAqB,EAEzD,IAAM,CACTf,EAAQ,oBAAoB,mBAAoBS,CAAuB,EACvET,EAAQ,oBAAoB,oBAAqBc,CAAwB,EACzEd,EAAQ,oBAAoB,iBAAkBe,CAAqB,CACvE,CACJ,CAEA,OAAc,uBACVf,EACAgB,EACAC,EACAC,EACAC,EACAC,EACF,CACE,IAAMC,EAAsBxB,GAAuB,CAC/CmB,EAAoBnB,CAAI,EACxBA,EAAK,eAAe,CACxB,EAEMyB,EAAsBzB,GAAuB,CAC/CoB,EAAoBpB,CAAI,EACxBA,EAAK,eAAe,CACxB,EAEM0B,EAAoB1B,GAAuB,CAC7CqB,EAAkBrB,CAAI,EACtBA,EAAK,eAAe,CACxB,EAEM2B,EAAwB3B,GAAuB,CACjDsB,EAAsBtB,CAAI,EAC1BA,EAAK,eAAe,CACxB,EAEM4B,EAAgB5B,GAAqB,CACvCuB,EAAcvB,CAAI,EAClBA,EAAK,eAAe,CACxB,EAEA,OAAAG,EAAQ,iBAAiB,cAAeqB,CAAkB,EAC1DrB,EAAQ,iBAAiB,cAAesB,CAAkB,EAC1DtB,EAAQ,iBAAiB,YAAauB,CAAgB,EACtDvB,EAAQ,iBAAiB,QAASyB,CAAY,EAC9CzB,EAAQ,iBAAiB,gBAAiBwB,CAAoB,EAEvD,IAAM,CACTxB,EAAQ,oBAAoB,cAAeqB,CAAkB,EAC7DrB,EAAQ,oBAAoB,cAAesB,CAAkB,EAC7DtB,EAAQ,oBAAoB,YAAauB,CAAgB,EACzDvB,EAAQ,oBAAoB,gBAAiBwB,CAAoB,EACjExB,EAAQ,oBAAoB,QAASyB,CAAY,CACrD,CACJ,CAEA,OAAc,qBACVzB,EACA0B,EACF,CACE,IAAMC,EAAgB9B,GAAgB,CAC9B6B,EAAe7B,EAAa,KAAK,GACjCA,EAAK,eAAe,CAE5B,EACA,OAAAG,EAAQ,iBAAiB,QAAS2B,CAAY,EAEvC,IAAM,CACT3B,EAAQ,oBAAoB,QAAS2B,CAAY,CACrD,CACJ,CAEA,OAAc,oBACV3B,EACA4B,EACF,CACE,IAAMC,EAAehC,GAAgB,CAC7B+B,EAAU/B,CAAW,GACrBA,EAAK,eAAe,CAE5B,EACA,OAAAG,EAAQ,iBAAiB,WAAY6B,CAAW,EAChD7B,EAAQ,iBAAiB,YAAa6B,CAAW,EACjD7B,EAAQ,iBAAiB,YAAa6B,CAAW,EACjD7B,EAAQ,iBAAiB,OAAQ6B,CAAW,EAErC,IAAM,CACT7B,EAAQ,oBAAoB,WAAY6B,CAAW,EACnD7B,EAAQ,oBAAoB,YAAa6B,CAAW,EACpD7B,EAAQ,oBAAoB,YAAa6B,CAAW,EACpD7B,EAAQ,oBAAoB,OAAQ6B,CAAW,CACnD,CACJ,CAEA,OAAc,mBAAmBC,EAA4C,CACzE,OAAOA,EAAa,mBAAmB,CAC3C,CAEA,OAAc,gCACV9B,EACA+B,EAAiC,CAC7B,oBAAqB,WAEpB,UAAkB,gBAAgB,iBAAiB,iBAAmBC,GAAe,CAClF,IAAMC,EAAcjC,EAAQ,sBAAsB,EAC5CkC,EAAeF,EAAM,OAAO,aAClCD,EAAQ,CACJ,EAAGG,EAAa,EAAID,EAAY,EAChC,EAAGC,EAAa,EAAID,EAAY,EAChC,MAAOC,EAAa,MACpB,OAAQA,EAAa,MACzB,CAAC,CACL,CAAC,CAET,CAEA,OAAc,0BACVH,EAA4C,CAC5C,gBAAS,iBAAiB,mBAAoB,IAAM,CAChDA,EAAQ,SAAS,kBAAoB,SAAS,CAClD,CAAC,EACM,SAAS,kBAAoB,SACxC,CAEA,OAAc,WAAWI,EAAgC,CACrDA,EAAa,MAAQ,EACzB,CAEA,OAAc,aAAaA,EAA2B,CAClDA,EAAa,MAAM,CACvB,CAEA,OAAc,UAAUA,EAAgCC,EAAc,CAC9DA,IAAS,UACTD,EAAa,MAAM,eAAe,QAAQ,EAE1CA,EAAa,MAAM,OAASC,CAEpC,CAEA,OAAc,UAAUD,EAAgCE,EAAWC,EAAWC,EAAoBC,EAAqBC,EAAe,CAClIN,EAAa,MAAM,KAAQE,EAAG,QAAQ,CAAC,EAAI,KAC3CF,EAAa,MAAM,IAAOG,EAAG,QAAQ,CAAC,EAAI,KAE1C,GAAM,CAAE,KAAAI,EAAM,IAAAC,CAAI,EAAIC,EAAY,oBAAoBT,EAAcM,CAAK,EAEzEN,EAAa,MAAM,MAAQE,EAAIK,GAAM,QAAQ,CAAC,EAAI,KAClDP,EAAa,MAAM,KAAOG,EAAIK,GAAK,QAAQ,CAAC,EAAI,IACpD,CAEA,OAAc,KAAKR,EAAgC,CAC/CA,EAAa,MAAM,QAAU,MACjC,CAEA,OAAc,KAAKA,EAAgC,CAC/CA,EAAa,MAAM,QAAU,OACjC,CAEA,OAAc,mBAAmBA,EAAgCU,EAAcjC,EAAeC,EAAa,CACnG,CAACsB,IAILA,EAAa,MAAQU,EACrBV,EAAa,kBAAkBvB,EAAOC,CAAG,EACzCsB,EAAa,MAAM,MAAQ,OAC3BA,EAAa,MAAM,MAAQ,GAAGA,EAAa,gBAC/C,CAEA,OAAe,aAAatC,EAA6B,CACrD,IAAIiD,EAAY,EAEhB,OAAIjD,EAAK,UAAWiD,GAAa,GAC7BjD,EAAK,SAAUiD,GAAa,GAC5BjD,EAAK,WAAYiD,GAAa,GAC9BjD,EAAK,UAAWiD,GAAa,GAE1BA,EAAU,SAAS,CAC9B,CAEA,OAAc,kBAAkBC,EAAoCC,EAAyB,CACzFD,EAAiB,kBAAkBC,CAAS,CAChD,CAEA,OAAc,sBAAsBD,EAAoCC,EAAyB,CACzFD,EAAiB,kBAAkBC,CAAS,GAC5CD,EAAiB,sBAAsBC,CAAS,CAExD,CACJ,EA5SapD,EACF,eAAiC,ECtCrC,IAAMqD,EAAN,KAAkB,CACrB,OAAc,SAASC,EAAsBC,EAAyB,CAClED,EAAQ,UAAU,IAAIC,CAAS,CACnC,CAEA,OAAO,gBAAgBC,EAAqE,CACxF,GAAI,WAAW,aAAe,OAC1B,MAAO,GAGX,IAAMC,EAAkB,WAAW,WAAW,8BAA8B,EACtEC,EAAuB,WAAW,WAAW,0BAA0B,EAE7E,OAAAD,EAAgB,iBAAiB,SAAWE,GAA8B,CACtEH,EAASG,EAAK,QAASD,EAAqB,OAAO,CACvD,CAAC,EACDA,EAAqB,iBAAiB,SAAWC,GAA8B,CAC3EH,EAASC,EAAgB,QAASE,EAAK,OAAO,CAClD,CAAC,EAEM,CACH,WAAYF,EAAgB,QAC5B,eAAgBC,EAAqB,OACzC,CACJ,CAEA,OAAO,2BAA2BH,EAAmBK,EAAsC,CACvF,IAAMC,GAAYD,GAAA,KAAAA,EAAU,WAAW,UAAU,uBAAuBL,CAAS,EACjF,OAAOM,EAAWA,EAAS,GAAK,IACpC,CAEA,OAAO,qBAAqBC,EAAsC,CAhCtE,IAAAC,EAiCQ,IAAMC,GAAcD,EAAAD,EAAK,aAAa,kBAAkB,IAApC,KAAAC,EAAyC,OAEvDE,EAAS,SAAS,cAAc,QAAQ,EAC9C,OAAAA,EAAO,GAAK,SAASD,IACrBC,EAAO,UAAU,IAAI,iBAAiB,EACtCA,EAAO,MAAM,MAAQ,OACrBA,EAAO,MAAM,OAAS,OACtBA,EAAO,MAAM,SAAW,WAEjBA,CACX,CAEA,OAAO,aAAaH,EAAmBG,EAAiC,CACpEH,EAAK,QAAQG,CAAM,CACvB,CAEA,OAAO,aAAaH,EAAmBG,EAAiC,CACpEH,EAAK,YAAYG,CAAM,CAC3B,CAEA,OAAO,mBAAmBH,EAAmB,CACzC,IAAME,EAAc,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,QAAQ,WAAY,EAAE,EAAE,OAAO,EAAG,EAAE,EAGnFF,EAAK,UAAU,IAAI,oBAAoB,EACvCA,EAAK,SAAW,EAChBA,EAAK,aAAa,mBAAoBE,CAAW,EACjDF,EAAK,cAAgB,UAAY,CAAE,MAAO,EAAO,EACjDA,EAAK,MAAM,SAAW,SACtBA,EAAK,MAAM,YAAc,OAKzB,IAAMI,EAAa,SAAS,cAAc,KAAK,EAC/CA,EAAW,GAAK,aAAaF,IAC7BE,EAAW,UAAU,IAAI,sBAAsB,EAC/CA,EAAW,MAAM,KAAO,MACxBA,EAAW,MAAM,IAAM,MACvBA,EAAW,MAAM,MAAQ,OACzBA,EAAW,MAAM,OAAS,OAC1BA,EAAW,MAAM,SAAW,WAG5B,IAAMC,EAAe,SAAS,cAAc,OAAO,EACnD,OAAAA,EAAa,GAAK,eAAeH,IACjCG,EAAa,UAAU,IAAI,wBAAwB,EACnDA,EAAa,eAAiB,OAC9BA,EAAa,KAAO,OACpBA,EAAa,WAAa,GAC1BA,EAAa,MAAM,QAAU,IAC7BA,EAAa,MAAM,OAAS,IAC5BA,EAAa,MAAM,YAAc,IACjCA,EAAa,MAAM,SAAW,WAC9BA,EAAa,MAAM,SAAW,SAC9BA,EAAa,MAAM,YAAc,SACjCA,EAAa,MAAM,QAAU,OAC7BA,EAAa,MAAM,WAAa,cAChCA,EAAa,MAAM,MAAQ,cAC3BA,EAAa,MAAM,QAAU,OAC7BA,EAAa,MAAM,OAAS,OAC5BA,EAAa,MAAM,OAAS,KAC5BA,EAAa,QAAU,UAAY,CAAE,MAAO,EAAO,EACnDA,EAAa,OAAS,UAAY,CAAE,MAAO,EAAO,EAClDA,EAAa,MAAQ,UAAY,CAAE,MAAO,EAAO,EAEjDL,EAAK,QAAQK,CAAY,EACzBL,EAAK,QAAQI,CAAU,EAEhB,CACH,KAAAJ,EACA,WAAAI,EACA,aAAAC,CACJ,CACJ,CAEA,OAAc,cAAwB,CAClC,OAAO,SAAS,mBAAqB,IACzC,CAEA,aAAoB,cAAcC,EAAuB,CACjDA,EAEA,MADY,SAAS,gBACX,kBAAkB,EAE5B,MAAM,SAAS,eAAe,CAEtC,CAEA,OAAc,qBAA4B,CACtC,SAAS,gBAAgB,MAAM,YAAY,WAAY,0BAA0B,EACjF,SAAS,gBAAgB,MAAM,YAAY,WAAY,4BAA4B,EACnF,SAAS,gBAAgB,MAAM,YAAY,WAAY,6BAA6B,EACpF,SAAS,gBAAgB,MAAM,YAAY,WAAY,2BAA2B,CACtF,CAEA,OAAc,oBAA+B,CACzC,IAAMC,EAAM,WAAW,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,UAAU,CAAC,EACxFC,EAAS,WAAW,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,UAAU,CAAC,EAC3FC,EAAO,WAAW,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,UAAU,CAAC,EACzFC,EAAQ,WAAW,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,UAAU,CAAC,EAEhG,MAAO,CAACD,EAAMF,EAAKC,EAAQE,CAAK,CACpC,CACJ,ECzIO,IAAMC,EAAN,KAAc,CACjB,OAAc,qBAA+B,CACzC,MAAO,uBAAwB,UACnC,CAEA,OAAc,UAAoB,CALtC,IAAAC,EAMQ,IAAMC,GAAiBD,EAAA,WAAW,YAAX,YAAAA,EAA8B,cACrD,GAAIC,EACA,OAAOA,EAAc,OAGzB,IAAMC,EAAY,UAAU,UACtBC,EAAS,2TACTC,EAAS,8+CACf,OAAOD,EAAO,KAAKD,CAAS,GAAKE,EAAO,KAAKF,EAAU,OAAO,EAAG,CAAC,CAAC,CACvE,CAEA,OAAc,MAAgB,CAC1B,OAAO,UAAU,UAAU,SAAS,SAAS,CACjD,CACJ,EClBA,IAAMG,EAA2B,OAAO,mBAAsB,YACvD,SAASC,EAAoBC,EAA0C,CAI1E,OAAOF,GAA4BE,EAAO,OAAO,eAAiB,mBACtE,CAEO,IAAMC,EAAN,KAAmB,CACtB,aAAoB,KAAKC,EAAsCC,EAAkB,CAC7E,OAAO,MAAMD,EAAO,KAAKC,CAAQ,CACrC,CAEA,aAAoB,SAASD,EAAsCE,EAAc,CAC7E,OAAO,MAAMF,EAAO,SAASE,CAAI,CACrC,CAEA,aAAoB,MAAMF,EAAsC,CAC5D,OAAO,MAAMA,EAAO,MAAM,CAC9B,CAEA,aAAoB,MAAMA,EAAsCG,EAAWC,EAAgBC,EAAe,CAvB9G,IAAAC,EAwBQ,IAAMC,GAAQD,EAAA,WAAW,iBAAiB,CAAC,IAA7B,YAAAA,EAAgC,kBAE1CR,EACJ,GAAIK,EAAK,SAAW,GAAKA,EAAK,QAAU,GAAKI,GAAS,CAACV,EAAoBU,EAAM,MAAM,EAGnFT,EAAS,IAAI,WAAWS,EAAM,OAAQJ,EAAK,SAAqBC,EAAQC,CAAK,MAC1E,CAEH,IAAMG,EAAO,IAAI,WAAWH,CAAK,EACjCF,EAAK,OAAOK,EAAMJ,CAAM,EACxBN,EAASK,CACb,CAEA,OAAO,MAAMH,EAAO,MAAMF,CAAM,CACpC,CAEA,OAAc,WAAWE,EAAc,CACnC,OAAOA,EAAO,IAClB,CAEA,aAAoB,iBAAiBA,EAAcI,EAAgBC,EAAe,CAC9E,IAAMP,EAAS,MAAME,EAAO,MAAMI,EAAQA,EAASC,CAAK,EAAE,YAAY,EACtE,OAAO,IAAI,WAAWP,CAAM,CAChC,CAEA,OAAc,aAAaA,EAAgC,CACvD,OAAOA,CACX,CACJ,ECrDA,IAAMW,EAAN,KAA0C,CAG1C,EAEaC,EAAN,KAAwB,CAC3B,OAAc,mBAAmBC,EAAmC,CAChE,OAAO,SAAS,cAAc,KAAK,CACvC,CAEA,OAAc,kBAAwD,CAClE,OAAO,IAAIF,CACf,CAEA,OAAc,0BAA0BG,EAA8CC,EAA0B,CAC5GD,EAAQ,OAASC,EACjBD,EAAQ,OAAO,MAAM,SAAW,UACpC,CAEA,OAAc,SAASA,EAA8CE,EAA0B,CACvFF,EAAQ,OAASA,EAAQ,QACzBA,EAAQ,MAAM,YAAYA,EAAQ,MAAM,EAG5CA,EAAQ,MAAQE,EAEZF,EAAQ,OAASA,EAAQ,QACzBA,EAAQ,MAAM,YAAYA,EAAQ,MAAM,CAEhD,CAEA,OAAc,aAAaA,EAA8CG,EAAWC,EAAWC,EAAeC,EAAsB,CAC5HN,EAAQ,SACRA,EAAQ,OAAO,MAAM,IAAM,GAAGI,MAC9BJ,EAAQ,OAAO,MAAM,KAAO,GAAGG,MAC/BH,EAAQ,OAAO,MAAM,MAAQ,GAAGK,MAChCL,EAAQ,OAAO,MAAM,OAAS,GAAGM,MACjCN,EAAQ,OAAO,MAAM,QAAU,QAEvC,CAEA,OAAc,aAAaA,EAA8CK,EAAeC,EAAsB,CACtGN,EAAQ,SACRA,EAAQ,OAAO,MAAM,MAAQ,GAAGK,MAChCL,EAAQ,OAAO,MAAM,OAAS,GAAGM,MACjCN,EAAQ,OAAO,MAAM,QAAU,OAEvC,CAEA,OAAc,aAAaA,EAAoD,CACvEA,EAAQ,SACRA,EAAQ,OAAS,OAEzB,CACJ,ECtDO,IAAMO,EAAN,KAAuB,CAC1B,OAAc,eAAeC,EAAoC,CAC7D,QAAQ,UAAU,KAAM,GAAI,OAAO,SAAS,IAAI,EAChD,OAAO,WAAa,IAAM,CACNA,EAAoB,EAKhC,QAAQ,QAAQ,EAFhB,QAAQ,KAAK,CAIrB,CACJ,CACJ,ECbO,IAAMC,EAAN,KAAqB,CACxB,OAAc,aAAaC,EAAeC,EAAiB,CACvD,IAAMC,EAAQF,EAASC,GACvB,GAAI,CAACC,EACD,MAAO,CAAC,EAGZ,IAAMC,EAAW,CAAC,EAClB,QAASC,EAAI,EAAGA,EAAIF,EAAM,OAAQE,IAC9BD,EAASC,GAAKF,EAAME,GAExB,OAAOD,CACX,CAEA,OAAc,OAAOH,EAAeC,EAAe,CAE/C,OADaD,EAASC,EAE1B,CAEA,OAAc,WAAWD,EAAeK,EAA+B,CACnE,IAAMC,EAAO,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,EACpD,OAAON,EAASK,GAAM,MAAML,EAAUM,CAAI,CAC9C,CACJ,ECvBO,IAAMC,EAAN,KAAkB,CACrB,OAAc,mBAAmBC,EAA2D,CACxF,SAASC,EAAOC,EAAc,CACbF,EAAoBE,CAAI,GAEjC,OAAO,sBAAsBD,CAAM,CAE3C,CAEA,OAAO,sBAAsBA,CAAM,CACvC,CACJ,ECTO,IAAKE,OACRA,IAAA,WAAa,GAAb,aACAA,IAAA,mBACAA,IAAA,mBAHQA,OAAA,IAMUC,EAAf,KAA6B,CAChC,YACWC,EACAC,EAA4B,CAD5B,aAAAD,EACA,UAAAC,CACX,CAKJ,ECbO,IAAMC,EAAN,KAAoB,CAGvB,OAAc,YAAYC,EAAsBC,EAA+E,CAC3H,OAAK,KAAK,iBACN,KAAK,eAAiB,IAAI,eAAe,KAAK,QAAQ,EACtD,KAAK,eAAe,UAAY,IAAI,KAGxC,KAAK,eAAe,UAAU,IAAID,EAASC,CAAQ,EACnD,KAAK,eAAe,QAAQD,EAAS,CAAE,IAAK,aAAc,CAAC,EAEpD,IAAM,CAhBrB,IAAAE,EAAAC,GAiBYD,EAAA,KAAK,iBAAL,MAAAA,EAAqB,UAAU,OAAOF,IACtCG,EAAA,KAAK,iBAAL,MAAAA,EAAqB,UAAUH,EACnC,CACJ,CAEA,OAAe,SAASI,EAAgCC,EAA0B,CAC9E,QAAWC,KAASF,EAAS,CACzB,IAAMH,EAAYI,EAAyC,UAAU,IAAIC,EAAM,MAAM,EACrF,GAAI,CAACL,EACD,SAGJ,IAAMM,EAAU,OAAO,iBACnBC,EACAC,EACAC,EAAMH,EACND,EAAM,2BAINE,EAAQF,EAAM,0BAA0B,GAAG,WAC3CG,EAASH,EAAM,0BAA0B,GAAG,UAC5CI,EAAM,GACCJ,EAAM,eACTA,EAAM,eAAe,IACrBE,EAAQF,EAAM,eAAe,GAAG,WAChCG,EAASH,EAAM,eAAe,GAAG,YAEjCE,EAASF,EAAM,eAAuB,WACtCG,EAAUH,EAAM,eAAuB,YAG3CE,EAAQF,EAAM,YAAY,MAC1BG,EAASH,EAAM,YAAY,QAE/B,IAAMK,EAAe,KAAK,MAAMH,EAAQE,CAAG,EACrCE,EAAgB,KAAK,MAAMH,EAASC,CAAG,EAC7CT,EAASU,EAAcC,EAAeL,CAAO,CACjD,CACJ,CACJ,ECtDO,IAAeM,EAAf,cAA6CC,CAAc,CAI9D,YACWC,EACAC,EACAC,EAA4B,CACnC,MAAMD,EAASC,CAAI,EAHZ,YAAAF,EACA,aAAAC,EACA,UAAAC,EAIPC,EAAc,YAAYH,EAAQ,CAACI,EAAOC,EAAQC,IAAQ,CACtD,KAAK,WAAa,CAACF,EAAOC,EAAQC,CAAG,EAEjC,KAAK,qBACL,KAAK,oBAAoBF,EAAOC,EAAQC,CAAG,CAEnD,CAAC,CACL,CAEO,SAAgB,CACnB,OAAO,KAAK,mBAChB,CAEO,cAAcC,EAA2E,CAC5F,GAAI,KAAK,oBAAuB,MAAM,IAAI,MAAM,+FAA+F,EAC/I,KAAK,oBAAsBA,CAC/B,CAEO,YAAa,CACZ,KAAK,aACL,KAAK,OAAO,MAAQ,KAAK,WAAW,GACpC,KAAK,OAAO,OAAS,KAAK,WAAW,GACrC,OAAO,KAAK,WAEpB,CACJ,EClCO,IAAMC,EAAN,cAA8BC,CAAsB,CAGvD,YAAmBC,EAA2B,CAC1C,IAAMC,EAAUD,EAAO,WAAW,KAAM,CACpC,MAAO,EACX,CAAC,EACD,GAAI,CAACC,EACD,MAAM,IAAI,MAAM,iDAAiD,EAErE,MAAMD,EAAQC,GAAwC,EAPvC,YAAAD,EASf,KAAK,QAAU,WAAW,iBAAiB,CAAC,CAChD,CAEO,aAAaE,EAA6BC,EAAeC,EAAsB,CApB1F,IAAAC,EAqBQ,KAAK,WAAW,EAEhB,IAAMC,GAAQD,EAAA,KAAK,UAAL,YAAAA,EAAc,kBAExBE,EACJ,GAAIL,EAAK,SAAW,GAAKA,EAAK,QAAU,GAAKI,GAAS,CAACE,EAAoBF,EAAM,MAAM,EAGnFC,EAAgB,IAAI,kBAAkBD,EAAM,OAAQJ,EAAK,SAAUA,EAAK,OAAO,MAC5E,CAEH,IAAMO,EAAO,IAAI,WAAWP,EAAK,UAAU,EAC3CA,EAAK,OAAOO,CAAI,EAChBF,EAAgB,IAAI,kBAAkBE,EAAK,MAAM,CACrD,CAEA,IAAMC,EAAY,IAAI,UAAUH,EAAeJ,EAAOC,CAAM,EAC3D,KAAK,QAAqC,aAAaM,EAAW,EAAG,CAAC,CAC3E,CACJ,ECrCA,SAASC,GAAa,CAHtB,IAAAC,EAAAC,EAAAC,EAAAC,EAII,IAAMC,EAAO,WACPC,GAASJ,EAAAG,EAAK,SAAL,KAAAH,GAAeD,EAAAI,EAAK,iBAAiB,CAAC,IAAvB,YAAAJ,EAA0B,OACxD,OAAOG,GAAAD,EAAAG,GAAA,YAAAA,EAAQ,KAAR,KAAAH,EAAcE,EAAK,aAAnB,KAAAD,EAAiCC,EAAK,WACjD,CAEO,IAAME,EAAN,cAA2BC,CAAsB,CAOpD,YAAmBC,EAA2BC,EAAiE,CAhBnH,IAAAT,EAAAC,EAkBQ,IAAMS,EAAKX,EAAM,EACjB,GAAI,CAACW,EACD,MAAM,IAAI,MAAM,2DAA2D,EAG/E,IAAMC,EAAUF,IAAS,EAA8B,QAAU,SAC3DG,EACN,CACI,MAAO,GACP,MAAO,GACP,QAAS,GACT,UAAW,GACX,mBAAoB,GACpB,sBAAuB,GAEvB,6BAA8B,GAE9B,aAAcH,IAAS,EAA8B,EAAI,EACzD,aAAc,EACd,0BAA2B,EAC3B,oBAAqB,CACzB,EACMI,EAAUL,EAAO,WAAWG,EAASC,CAAK,EAChD,GAAI,CAACC,EACD,MAAM,IAAI,MAAM,gCAAgCF,mBAAyB,EAG7E,IAAMG,EAASJ,EAAG,gBAAgBG,EAASD,CAAK,EAChDF,EAAG,mBAAmBI,CAAM,EAC3BD,EAAgB,UAAYC,EAE7B,MAAMN,EAAQK,GAAwC,EAjCvC,YAAAL,EAmCf,KAAK,cAAgBM,EACrB,KAAK,OAAQb,GAAAD,EAAAa,EAAQ,aAAaA,EAAQ,mBAAmB,IAAhD,YAAAb,EAAmD,KAAnD,KAAAC,EAAyD,EACtE,KAAK,QAAUY,EAAQ,aAAaA,EAAQ,YAAY,EACxD,KAAK,OAASA,EAAQ,aAAaA,EAAQ,OAAO,EAClD,KAAK,MAAQA,EAAQ,aAAaA,EAAQ,UAAU,CACxD,CACJ,ECpDO,IAAME,EAAN,KAAoB,CACvB,OAAc,OAAOC,EAAwBC,EAA2C,CACpF,GAAI,CAACD,EACD,MAAM,IAAI,MAAM,iCAAiC,EAGrD,IAAME,EAASC,EAAY,qBAAqBH,CAAS,EACzDG,EAAY,aAAaH,EAAWE,CAAM,EAE1C,GAAI,CACA,GAAID,IAAS,EACT,OAAO,IAAIG,EAAgBF,CAAM,EAC9B,GAAID,IAAS,GAA+BA,IAAS,EACxD,OAAO,IAAII,EAAaH,EAAQD,CAAI,EAEpC,MAAM,IAAI,MAAM,+BAA+BK,EAAqBL,IAAO,CAEnF,OAASM,EAAP,CACE,MAAAJ,EAAY,aAAaH,EAAWE,CAAM,EACpCK,CACV,CACJ,CAEA,OAAc,QAAQC,EAAwB,CAC1CA,EAAQ,QAAQ,CACpB,CAEA,OAAc,cAAcA,EAAwBC,EAA2E,CAC3HD,EAAQ,cAAcC,CAAmB,CAC7C,CAEA,OAAc,WAAWD,EAA8B,CACnDA,EAAQ,WAAW,CACvB,CAEA,OAAc,aAAaA,EAA0BE,EAA6BC,EAAeC,EAAsB,CACnHJ,EAAQ,aAAaE,EAAMC,EAAOC,CAAM,CAC5C,CACJ,ECjCA,eAAeC,GAAsBC,EAAcC,EAA2B,CACtE,kBAAmB,WACnB,MAAM,WAAW,UAAU,cAAc,SAASD,EAAMC,EAAQ,CAAE,MAAAA,CAAM,EAAI,MAAS,CAE7F", + "names": ["CaretHelper", "element", "position", "options", "_a", "_b", "isBrowser", "debug", "el", "div", "style", "computed", "isInput", "properties", "prop", "height", "outerHeight", "targetHeight", "isFirefox", "span", "coordinates", "InputHelper", "args", "resolve", "reject", "element", "keyDownCallback", "keyUpCallback", "keyDownHandler", "keyUpHandler", "beforeInputCallback", "compositionStartCallback", "compositionUpdateCallback", "compositionEndCallback", "compositionStartHandler", "beforeInputHandler", "ranges", "start", "end", "compositionUpdateHandler", "compositionEndHandler", "pointerMoveCallback", "pointerDownCallback", "pointerUpCallback", "pointerCancelCallback", "wheelCallback", "pointerMoveHandler", "pointerDownHandler", "pointerUpHandler", "pointerCancelHandler", "wheelHandler", "inputCallback", "inputHandler", "dragEvent", "dragHandler", "pointerEvent", "handler", "event", "elementRect", "keyboardRect", "inputElement", "kind", "x", "y", "caretWidth", "caretHeight", "caret", "left", "top", "CaretHelper", "text", "modifiers", "containerElement", "pointerId", "AvaloniaDOM", "element", "className", "observer", "colorShemeMedia", "prefersContrastMedia", "args", "parent", "elements", "host", "_a", "containerId", "canvas", "nativeHost", "inputElement", "isFullscreen", "top", "bottom", "left", "right", "Caniuse", "_a", "userAgentData", "userAgent", "regex1", "regex2", "sharedArrayBufferDefined", "isSharedArrayBuffer", "buffer", "StreamHelper", "stream", "position", "size", "span", "offset", "count", "_a", "heap8", "copy", "NativeControlHostTopLevelAttachment", "NativeControlHost", "parent", "element", "child", "host", "x", "y", "width", "height", "NavigationHelper", "backHandlerCallback", "GeneralHelpers", "instance", "key", "items", "retItems", "i", "name", "args", "TimerHelper", "renderFrameCallback", "render", "time", "BrowserRenderingMode", "CanvasSurface", "context", "mode", "ResizeHandler", "element", "callback", "_a", "_b", "entries", "observer", "entry", "trueDpr", "width", "height", "dpr", "displayWidth", "displayHeight", "HtmlCanvasSurfaceBase", "CanvasSurface", "canvas", "context", "mode", "ResizeHandler", "width", "height", "dpr", "sizeChangedCallback", "SoftwareSurface", "HtmlCanvasSurfaceBase", "canvas", "context", "span", "width", "height", "_a", "heap8", "clampedBuffer", "isSharedArrayBuffer", "copy", "imageData", "getGL", "_a", "_b", "_c", "_d", "self", "module", "WebGlSurface", "HtmlCanvasSurfaceBase", "canvas", "mode", "gl", "modeStr", "attrs", "context", "handle", "CanvasFactory", "container", "mode", "canvas", "AvaloniaDOM", "SoftwareSurface", "WebGlSurface", "BrowserRenderingMode", "ex", "surface", "sizeChangedCallback", "span", "width", "height", "registerServiceWorker", "path", "scope"] } diff --git a/_framework/avalonia.js.map.br b/_framework/avalonia.js.map.br index f15cb53..fc7ca33 100644 Binary files a/_framework/avalonia.js.map.br and b/_framework/avalonia.js.map.br differ diff --git a/_framework/avalonia.js.map.gz b/_framework/avalonia.js.map.gz index bcb6365..9ed3cc6 100644 Binary files a/_framework/avalonia.js.map.gz and b/_framework/avalonia.js.map.gz differ diff --git a/_framework/blazor.boot.json b/_framework/blazor.boot.json index edffcdd..7821580 100644 --- a/_framework/blazor.boot.json +++ b/_framework/blazor.boot.json @@ -1,7 +1,7 @@ { "mainAssemblyName": "Semi.Avalonia.Demo.Web", "resources": { - "hash": "sha256-Mr677VuOWhaES7hbiO6TLQ25GqHD3YLwSghDQwnkpQI=", + "hash": "sha256-ThkBGDij01qp76kBtLpRRm73rlr5cxPsnlhy7xFvKos=", "jsModuleNative": { "dotnet.native.8.0.7.o8z0k8deif.js": "sha256-mhHKxdH8yx5ZDUsh3dRleqVaFL/MwNyp7N8pQgG7QcA=" }, @@ -9,7 +9,7 @@ "dotnet.runtime.8.0.7.3dp1i72u0p.js": "sha256-soZyw6XWXOLKhA26AOyzSpCP5cAsw1wvhdPHSYNTMfQ=" }, "wasmNative": { - "dotnet.native.wasm": "sha256-9v5ppOr2aaP7jgATZvah5vtyae43PASn/Q17qNJzkGE=" + "dotnet.native.wasm": "sha256-gu32v6kIF8xM/R4PeghX7a1Xi+m+CalIhF/JMl1IJKw=" }, "icu": { "icudt_CJK.dat": "sha256-SZLtQnRc0JkwqHab0VUVP7T3uBPSeYzxzDnpxPpUnHk=", @@ -17,32 +17,32 @@ "icudt_no_CJK.dat": "sha256-L7sV7NEYP37/Qr2FPCePo5cJqRgTXRwGHuwF5Q+0Nfs=" }, "assembly": { - "Avalonia.Base.wasm": "sha256-AuY2B6lkRyZvn1IyZz76lMcla3X5EzVJFnY9JbblDJM=", - "Avalonia.Browser.wasm": "sha256-7enZg/aB7QP3twLhVtUUA71AoTZoLO7xa5RiKxmG+OQ=", - "Avalonia.Controls.ColorPicker.wasm": "sha256-V76Wl6lzKOhlmPC8px+R/8PAmtBiln/zBM6etSeX7+Y=", - "Avalonia.Controls.DataGrid.wasm": "sha256-LHRGUUUBY+URffrYPwT+mn2XiPHcmkQdNcB1RTS4iHA=", - "Avalonia.Controls.wasm": "sha256-m9H2TbHu47v57cfqk5qAaFQiGcsBY2LB7GlDbv8yJts=", - "Avalonia.DesignerSupport.wasm": "sha256-1ugLpbEAbtzvnWijtvZKU+igonmB8fFYpSRX4SOYh6A=", - "Avalonia.Dialogs.wasm": "sha256-6Jv6KlgYGB+ko1V6ThpN9EQbvn61ifeoTrF9U9Qpdz0=", - "Avalonia.Markup.wasm": "sha256-KUxtwkdUFaQMMsr2MOlU+y2J1yzmiqFfZJnPicJNr8E=", - "Avalonia.Markup.Xaml.wasm": "sha256-Eb1/H51FWYLAbZoOYwKmEuxNbO1pFtFSaqJfaVcOONU=", - "Avalonia.Metal.wasm": "sha256-YsYaF3k+fZkY90OZ20Mx7TCjA3vhiP4NNznac+KLy/c=", - "Avalonia.MicroCom.wasm": "sha256-Xp+mJgOed8zCet1GuXWU5Uf35ZLs/YjVdx9lwEykLK8=", - "Avalonia.OpenGL.wasm": "sha256-LI7r8v+MKtlf8rcVRYibKi9ghlHosxp21jGCU/FqJLo=", - "Avalonia.Remote.Protocol.wasm": "sha256-Ten5rbWHVz8itulZZ1I2u01BAz+N8b+IJg6+fdKdumI=", - "Avalonia.Skia.wasm": "sha256-HHIqQJg07PwSY28JGsLos/3J/hJJKSrWaosVB5ySYdU=", - "Avalonia.Vulkan.wasm": "sha256-vImIEdb0MtzkaoFRrGJ8mzv1svNL953v7SS/eNND1lw=", - "Avalonia.wasm": "sha256-xD4D+oaF4BgTPz85mIBQ9Qr/z6fw++PVPu49bkUzKLU=", + "Avalonia.Base.wasm": "sha256-cKeJvq9SIFb5QwWfho7/rWp/NnNJAztVlv7MNI9U02A=", + "Avalonia.Browser.wasm": "sha256-ZuQwtP/M8tZSE0EH1RaOZm7gOVtaY54CSAXtxvEeAsY=", + "Avalonia.Controls.ColorPicker.wasm": "sha256-IoWaSC9+9cqckTS/332gMg24fqeqhnPWUUltqcfDfM4=", + "Avalonia.Controls.DataGrid.wasm": "sha256-lOh4LRUHm7rm0FyWbaPvAoXAU1M96c8qAgD4psHVE5Y=", + "Avalonia.Controls.wasm": "sha256-HiO7RORwbaEPiBksq3MHvDrubTohWs2/UgHu2uYO7oI=", + "Avalonia.DesignerSupport.wasm": "sha256-4MbIf5Cob8gsZGo/mhUy54kdRQAUlERkzL3zWuo3j+I=", + "Avalonia.Dialogs.wasm": "sha256-MFBGBq9RF2Zo/32iPxRIGjY7HDAaPByEai9R3W4t9jM=", + "Avalonia.Markup.wasm": "sha256-/8R0PyQoQ2ZV9vBWEqqF71Cr8Zjpn98GWBFHZLvNJLw=", + "Avalonia.Markup.Xaml.wasm": "sha256-5OFFI0/6Fxx2DQ1Axb5pn89udUTk4JIX4NHEmYPeJTY=", + "Avalonia.Metal.wasm": "sha256-tUNlrUy8cAkfbLK5grhk0Wxj5RCiivHfh8bWbpR1h1M=", + "Avalonia.MicroCom.wasm": "sha256-c4DCmHIxmm4dzNwKBw0pX19vF3yTR473onfTSyYCM90=", + "Avalonia.OpenGL.wasm": "sha256-Y4B8eKw5BCPrw9g3LnLpyuMEGjWsbyqtxkdDp2LMS2E=", + "Avalonia.Remote.Protocol.wasm": "sha256-+Nu3IzoXmJaFwsVBP32jRZNQHKDhWNqF6Q+doUyeJGo=", + "Avalonia.Skia.wasm": "sha256-l/PO08yoh1ckG7KltEwh5gNuWKAmGDVQvAD1V8UZF1A=", + "Avalonia.Vulkan.wasm": "sha256-pM/LxQ09HJXzRKdPo8M+zallfmDxs5qiLp71rDT7Tbk=", + "Avalonia.wasm": "sha256-qJyD0WxF+zkxwXly2UGp9pPPuDotI84+Tu/G2kvdWaY=", "CommunityToolkit.Mvvm.wasm": "sha256-DtLC0+f/uVS74bu13VnUEp0wbkhyWDEiESYjEWcJkoE=", "HarfBuzzSharp.wasm": "sha256-lJ+uf/j5QdDNq+rbyKQp03mCxPazObS+na/TKFd0+MU=", "MicroCom.Runtime.wasm": "sha256-dI22KS20yc+ziyg4tSUpmSjG0ebPXDL5QTSZf+ehjwI=", - "netstandard.wasm": "sha256-y+d3zV+VDIBc71lc/BNrYis0/y1ehJRVPG/EfnT8eiU=", - "Semi.Avalonia.ColorPicker.wasm": "sha256-pD/aB8b5DXRukiVgbY/1q2YwL8eTsySh7VazLduVUOk=", - "Semi.Avalonia.DataGrid.wasm": "sha256-xnxleoE2uq95kpwm1I0eCwwPgKS2DQtTa2Q80kUTEq0=", - "Semi.Avalonia.Demo.wasm": "sha256-vpZsvURwWvCr9e5/V0UUVR3YdUx25CDHns5wUCH60BM=", - "Semi.Avalonia.Demo.Web.wasm": "sha256-ZltPGTum88UnelaDlo/n+um6dL89En60W/sZI0n79wI=", - "Semi.Avalonia.wasm": "sha256-MTTEcKluvvY7XASoNBjAxP/Pyidbc+KWxJJ0Vdhuj8M=", - "SkiaSharp.wasm": "sha256-8FUFOEQmiEh/D71BODesXEuJNNP9zEFJ2/Hb/GoyFG8=", + "netstandard.wasm": "sha256-Tqh2jST6NbpeIZVx2Cqn0OUCIWhNh6Oe8Q1kJxmJgMs=", + "Semi.Avalonia.ColorPicker.wasm": "sha256-t7uC5Bpjwjk2Fawu+sPhMcHYoNRl+Stumm60oQmfXtM=", + "Semi.Avalonia.DataGrid.wasm": "sha256-EunUY9huJhb5+8PZLvrgBk0k8uO2Fx7y6I+f2F4hpFQ=", + "Semi.Avalonia.Demo.wasm": "sha256-/yuqR2Ut4UMv1Bb/f01Me/OM3KrrCGPezrjQHY+EhH0=", + "Semi.Avalonia.Demo.Web.wasm": "sha256-bX2TtqdzlPNMOJ2AgEJFUxty21o2iMa10WQyMPKdK/w=", + "Semi.Avalonia.wasm": "sha256-Z99ifG0vRLuoVMeaCoiGGDv7fysYsrc1JdTuYEzve+Q=", + "SkiaSharp.wasm": "sha256-xgSclqCZDzOz9K5Ip3BIjhR1BdnS27uRV2Kk4Xgc5P8=", "System.Collections.Concurrent.wasm": "sha256-TNVxUC5AFQuE8xsH7qbkAnX3MEII97X6luchAssYPNM=", "System.Collections.NonGeneric.wasm": "sha256-wrqgh11JGOhXibp7AbMuvCqpNT+K+uD9EWUvdbsUbpc=", "System.Collections.Specialized.wasm": "sha256-Q9R4DVitLe7O1B1qY7noikaQEZ9rVrSILOwwS6dKv24=", @@ -54,16 +54,16 @@ "System.Console.wasm": "sha256-ZjDGs6/TEhKbXfbJld3zkg89GE1DUd61ohzCl9GlJEs=", "System.IO.Compression.wasm": "sha256-uQ+ZR0uRy3II2XtpRnq2vGZfQsAF5IMQdtqlKlWlO7Y=", "System.Linq.Expressions.wasm": "sha256-NnSbMKkKI+RDqIkb+8BOzSwKlEPWwzk92wGzuc2S3OA=", - "System.Linq.wasm": "sha256-bJYLLpgIdUVeC8Z9j4sHPD/zIZSzNEgK9JNHZbjieiM=", + "System.Linq.wasm": "sha256-HOicdR9qaXm9+33c3YBlcTMDN4MIj+e3D3NepUTibYU=", "System.Net.Primitives.wasm": "sha256-p2RBrSbVpEuD4xZsVyORbEJnm6NmfT+OaHN4Al6QPiA=", "System.Net.Sockets.wasm": "sha256-/0m/67rkMYfl+9NajgaaBqiz1hBc1C1xBojN6kbaEc0=", "System.ObjectModel.wasm": "sha256-BMCc7UAbGRPVbfxmwgFpepOtaKhycRFl5S5ZLB9YZIM=", - "System.Private.CoreLib.wasm": "sha256-jadNuxMmK56DlBjxMT7KYsSgkWH4ZpnBefSuXn+Ah1Y=", + "System.Private.CoreLib.wasm": "sha256-cRcwUTC9gFEjYJIn20UHdwdaDnIxh/Zf5tsFOMjGzMg=", "System.Private.Uri.wasm": "sha256-/z2lgEQfzxBOpEYZWijw4Oh+QGL0PrmlqOIDH2svYZw=", "System.Private.Xml.wasm": "sha256-zRmsI/X4a0lKruBUbVlGWBrHPUvSTUQ7vOxmpPhN4PY=", - "System.Runtime.InteropServices.JavaScript.wasm": "sha256-j/+FCbKoSX0oparjYkdqKggNJQHN7vaF+0PdjELpcHg=", + "System.Runtime.InteropServices.JavaScript.wasm": "sha256-FIrjtA1/KBhvaLfYEVUXVJnRPGYwWfOSOOKuAJc5alg=", "System.Runtime.InteropServices.wasm": "sha256-jbfgzvWcDa3cABhe1dD5XlrTVmk69jhaZ1FN04OOyRQ=", - "System.Runtime.wasm": "sha256-I+TRmPMOoZVBrRdJD6JE2akhbMqTsKAu7IBk/Ng2Ajs=", + "System.Runtime.wasm": "sha256-qaoQgXIa0sW5ogHOxrAhiZVE2facIed8QHi/KfLmm2A=", "System.Security.Cryptography.wasm": "sha256-3b+KW48T0hcKNrlx55ohFhRHdPLVoLzFqDFUovxQI6U=", "System.Text.RegularExpressions.wasm": "sha256-vZNfESLIiSnvejLv8yDXJxoXjvIuujXq8MqlK3+UoU0=", "System.Threading.Thread.wasm": "sha256-sGwEpN+RbpwoIfnrQwVK9d72S5cMruwsm6t4Cv0ZSK4=", diff --git a/_framework/blazor.boot.json.br b/_framework/blazor.boot.json.br index 854036f..b566752 100644 Binary files a/_framework/blazor.boot.json.br and b/_framework/blazor.boot.json.br differ diff --git a/_framework/blazor.boot.json.gz b/_framework/blazor.boot.json.gz index 95a4615..fad39c6 100644 Binary files a/_framework/blazor.boot.json.gz and b/_framework/blazor.boot.json.gz differ diff --git a/_framework/dotnet.native.wasm b/_framework/dotnet.native.wasm index 6ebbd4c..7a4203e 100755 Binary files a/_framework/dotnet.native.wasm and b/_framework/dotnet.native.wasm differ diff --git a/_framework/dotnet.native.wasm.br b/_framework/dotnet.native.wasm.br index accb6be..9b4fd7e 100644 Binary files a/_framework/dotnet.native.wasm.br and b/_framework/dotnet.native.wasm.br differ diff --git a/_framework/dotnet.native.wasm.gz b/_framework/dotnet.native.wasm.gz index dfb1e01..32a814c 100644 Binary files a/_framework/dotnet.native.wasm.gz and b/_framework/dotnet.native.wasm.gz differ diff --git a/_framework/netstandard.wasm b/_framework/netstandard.wasm index ee959fd..a687385 100644 Binary files a/_framework/netstandard.wasm and b/_framework/netstandard.wasm differ diff --git a/_framework/netstandard.wasm.br b/_framework/netstandard.wasm.br index 7efe965..8224539 100644 Binary files a/_framework/netstandard.wasm.br and b/_framework/netstandard.wasm.br differ diff --git a/_framework/netstandard.wasm.gz b/_framework/netstandard.wasm.gz index bc0f952..2eaf6bf 100644 Binary files a/_framework/netstandard.wasm.gz and b/_framework/netstandard.wasm.gz differ diff --git a/_framework/storage.js b/_framework/storage.js index df5c4ed..5ddc5cd 100755 --- a/_framework/storage.js +++ b/_framework/storage.js @@ -1,2 +1,2 @@ -var Pe=Object.defineProperty;var _e=(s,e,t)=>e in s?Pe(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var g=(s,e)=>()=>(s&&(e=s(s=0)),e);var z=(s,e)=>{for(var t in e)Pe(s,t,{get:e[t],enumerable:!0})};var E=(s,e,t)=>(_e(s,typeof e!="symbol"?e+"":e,t),t);var qe,W,Z=g(()=>{qe={ReadableStream:globalThis.ReadableStream,WritableStream:globalThis.WritableStream,TransformStream:globalThis.TransformStream,DOMException:globalThis.DOMException,Blob:globalThis.Blob,File:globalThis.File},W=qe});var te={};z(te,{FileHandle:()=>R,FolderHandle:()=>N,Sink:()=>ee,default:()=>$e});var O,Ke,m,Ge,S,He,Xe,de,Hr,Ve,ee,R,N,Ye,$e,re=g(()=>{U();Z();({File:O,Blob:Ke,DOMException:m}=W),{INVALID:Ge,GONE:S,MISMATCH:He,MOD_ERR:Xe,SYNTAX:de,SECURITY:Hr,DISALLOWED:Ve}=D,ee=class{constructor(e,t){this.fileHandle=e,this.file=t,this.size=t.size,this.position=0}write(e){let t=this.file;if(typeof e=="object"){if(e.type==="write"){if(Number.isInteger(e.position)&&e.position>=0&&(this.position=e.position,this.size=0){if(this.size=0){t=e.sizet.size&&(this.position=t.size),this.file=t;return}else throw new m(...de("truncate requires a size argument"))}e=new Ke([e]);let r=this.file,i=r.slice(0,this.position),n=r.slice(this.position+e.size),a=this.position-i.size;a<0&&(a=0),r=new O([i,new Uint8Array(a),e,n],r.name),this.size=r.size,this.position+=e.size,this.file=r}close(){if(this.fileHandle._deleted)throw new m(...S);this.fileHandle._file=this.file,this.file=this.position=this.size=null,this.fileHandle.onclose&&this.fileHandle.onclose(this.fileHandle)}},R=class{constructor(e="",t=new O([],e),r=!0){this._file=t,this.name=e,this.kind="file",this._deleted=!1,this.writable=r,this.readable=!0}async getFile(){if(this._deleted)throw new m(...S);return this._file}async createWritable(e){if(!this.writable)throw new m(...Ve);if(this._deleted)throw new m(...S);let t=e.keepExistingData?await this.getFile():new O([],this.name);return new ee(this,t)}async isSameEntry(e){return this===e}async _destroy(){this._deleted=!0,this._file=null}},N=class{constructor(e,t=!0){this.name=e,this.kind="directory",this._deleted=!1,this._entries={},this.writable=t,this.readable=!0}async*entries(){if(this._deleted)throw new m(...S);yield*Object.entries(this._entries)}async isSameEntry(e){return this===e}async getDirectoryHandle(e,t){if(this._deleted)throw new m(...S);let r=this._entries[e];if(r){if(r instanceof R)throw new m(...He);return r}else{if(t.create)return this._entries[e]=new N(e);throw new m(...S)}}async getFileHandle(e,t){let r=this._entries[e],i=r instanceof R;if(r&&i)return r;if(r&&!i)throw new m(...He);if(!r&&!t.create)throw new m(...S);if(!r&&t.create)return this._entries[e]=new R(e)}async removeEntry(e,t){let r=this._entries[e];if(!r)throw new m(...S);await r._destroy(t.recursive),delete this._entries[e]}async _destroy(e){for(let t of Object.values(this._entries)){if(!e)throw new m(...Xe);await t._destroy(e)}this._entries={},this._deleted=!0}},Ye=new N(""),$e=()=>Ye});var ue={};z(ue,{FileHandle:()=>X,FolderHandle:()=>x,default:()=>Qe});var Je,ie,X,x,Qe,pe=g(()=>{U();({DISALLOWED:Je}=D),ie=class{constructor(e,t){this.writer=e,this.fileEntry=t}async write(e){if(typeof e=="object"){if(e.type==="write"){if(Number.isInteger(e.position)&&e.position>=0&&(this.writer.seek(e.position),this.writer.position!==e.position&&(await new Promise((t,r)=>{this.writer.onwriteend=t,this.writer.onerror=r,this.writer.truncate(e.position)}),this.writer.seek(e.position))),!("data"in e))throw new DOMException("Failed to execute 'write' on 'UnderlyingSinkBase': Invalid params passed. write requires a data argument","SyntaxError");e=e.data}else if(e.type==="seek")if(Number.isInteger(e.position)&&e.position>=0){if(this.writer.seek(e.position),this.writer.position!==e.position)throw new DOMException("seeking position failed","InvalidStateError");return}else throw new DOMException("Failed to execute 'write' on 'UnderlyingSinkBase': Invalid params passed. seek requires a position argument","SyntaxError");else if(e.type==="truncate")return new Promise(t=>{if(Number.isInteger(e.size)&&e.size>=0)this.writer.onwriteend=r=>t(),this.writer.truncate(e.size);else throw new DOMException("Failed to execute 'write' on 'UnderlyingSinkBase': Invalid params passed. truncate requires a size argument","SyntaxError")})}await new Promise((t,r)=>{this.writer.onwriteend=t,this.writer.onerror=r,this.writer.write(new Blob([e]))})}close(){return new Promise(this.fileEntry.file.bind(this.fileEntry))}},X=class{constructor(e,t=!0){this.file=e,this.kind="file",this.writable=t,this.readable=!0}get name(){return this.file.name}isSameEntry(e){return this.file.toURL()===e.file.toURL()}getFile(){return new Promise(this.file.file.bind(this.file))}createWritable(e){if(!this.writable)throw new DOMException(...Je);return new Promise((t,r)=>this.file.createWriter(i=>{e.keepExistingData===!1?(i.onwriteend=n=>t(new ie(i,this.file)),i.truncate(0)):t(new ie(i,this.file))},r))}},x=class{constructor(e,t=!0){this.dir=e,this.writable=t,this.readable=!0,this.kind="directory",this.name=e.name}isSameEntry(e){return this.dir.fullPath===e.dir.fullPath}async*entries(){let e=this.dir.createReader(),t=await new Promise(e.readEntries.bind(e));for(let r of t)yield[r.name,r.isFile?new X(r,this.writable):new x(r,this.writable)]}getDirectoryHandle(e,t){return new Promise((r,i)=>{this.dir.getDirectory(e,t,n=>{r(new x(n))},i)})}getFileHandle(e,t){return new Promise((r,i)=>this.dir.getFile(e,t,n=>r(new X(n)),i))}async removeEntry(e,t){let r=await this.getDirectoryHandle(e,{create:!1}).catch(i=>i.name==="TypeMismatchError"?this.getFileHandle(e,{create:!1}):i);if(r instanceof Error)throw r;return new Promise((i,n)=>{r instanceof x?t.recursive?r.dir.removeRecursively(()=>i(),n):r.dir.remove(()=>i(),n):r.file&&r.file.remove(()=>i(),n)})}},Qe=(s={})=>new Promise((e,t)=>window.webkitRequestFileSystem(s._persistent,0,r=>e(new x(r.root)),t))});var P,Ze,ne,V,oe=g(()=>{P=Symbol("adapter"),ne=class{constructor(e){E(this,Ze);E(this,"name");E(this,"kind");this.kind=e.kind,this.name=e.name,this[P]=e}async queryPermission({mode:e="read"}={}){let t=this[P];if(t.queryPermission)return t.queryPermission({mode:e});if(e==="read")return"granted";if(e==="readwrite")return t.writable?"granted":"denied";throw new TypeError(`Mode ${e} must be 'read' or 'readwrite'`)}async requestPermission({mode:e="read"}={}){let t=this[P];if(t.requestPermission)return t.requestPermission({mode:e});if(e==="read")return"granted";if(e==="readwrite")return t.writable?"granted":"denied";throw new TypeError(`Mode ${e} must be 'read' or 'readwrite'`)}async remove(e={}){await this[P].remove(e)}async isSameEntry(e){return this===e?!0:!e||typeof e!="object"||this.kind!==e.kind||!e[P]?!1:this[P].isSameEntry(e[P])}};Ze=P;Object.defineProperty(ne.prototype,Symbol.toStringTag,{value:"FileSystemHandle",writable:!1,enumerable:!1,configurable:!0});V=ne});var et,L,me,fe=g(()=>{Z();({WritableStream:et}=W),L=class extends et{constructor(...e){super(...e),Object.setPrototypeOf(this,L.prototype),this._closed=!1}close(){this._closed=!0;let e=this.getWriter(),t=e.close();return e.releaseLock(),t}seek(e){return this.write({type:"seek",position:e})}truncate(e){return this.write({type:"truncate",size:e})}write(e){if(this._closed)return Promise.reject(new TypeError("Cannot write to a CLOSED writable stream"));let t=this.getWriter(),r=t.write(e);return t.releaseLock(),r}};Object.defineProperty(L.prototype,Symbol.toStringTag,{value:"FileSystemWritableFileStream",writable:!1,enumerable:!1,configurable:!0});Object.defineProperties(L.prototype,{close:{enumerable:!0},seek:{enumerable:!0},truncate:{enumerable:!0},write:{enumerable:!0}});me=L});var M={};z(M,{FileSystemFileHandle:()=>j,default:()=>Ce});var ae,tt,j,Ce,T=g(()=>{oe();fe();ae=Symbol("adapter"),j=class extends V{constructor(t){super(t);E(this,tt);this[ae]=t}async createWritable(t={}){return new me(await this[ae].createWritable(t))}async getFile(){return this[ae].getFile()}};tt=ae;Object.defineProperty(j.prototype,Symbol.toStringTag,{value:"FileSystemFileHandle",writable:!1,enumerable:!1,configurable:!0});Object.defineProperties(j.prototype,{createWritable:{enumerable:!0},getFile:{enumerable:!0}});Ce=j});var se={};z(se,{FileSystemDirectoryHandle:()=>w,default:()=>Fe});var H,rt,w,Fe,Y=g(()=>{oe();H=Symbol("adapter"),w=class extends V{constructor(t){super(t);E(this,rt);this[H]=t}async getDirectoryHandle(t,r={}){if(t==="")throw new TypeError("Name can't be an empty string.");if(t==="."||t===".."||t.includes("/"))throw new TypeError("Name contains invalid characters.");r.create=!!r.create;let i=await this[H].getDirectoryHandle(t,r);return new w(i)}async*entries(){let{FileSystemFileHandle:t}=await Promise.resolve().then(()=>(T(),M));for await(let[r,i]of this[H].entries())yield[i.name,i.kind==="file"?new t(i):new w(i)]}async*getEntries(){let{FileSystemFileHandle:t}=await Promise.resolve().then(()=>(T(),M));console.warn("deprecated, use .entries() instead");for await(let r of this[H].entries())yield r.kind==="file"?new t(r):new w(r)}async getFileHandle(t,r={}){let{FileSystemFileHandle:i}=await Promise.resolve().then(()=>(T(),M));if(t==="")throw new TypeError("Name can't be an empty string.");if(t==="."||t===".."||t.includes("/"))throw new TypeError("Name contains invalid characters.");r.create=!!r.create;let n=await this[H].getFileHandle(t,r);return new i(n)}async removeEntry(t,r={}){if(t==="")throw new TypeError("Name can't be an empty string.");if(t==="."||t===".."||t.includes("/"))throw new TypeError("Name contains invalid characters.");return r.recursive=!!r.recursive,this[H].removeEntry(t,r)}async resolve(t){if(await t.isSameEntry(this))return[];let r=[{handle:this,path:[]}];for(;r.length;){let{handle:i,path:n}=r.pop();for await(let a of i.values()){if(await a.isSameEntry(t))return[...n,a.name];a.kind==="directory"&&r.push({handle:a,path:[...n,a.name]})}}return null}async*keys(){for await(let[t]of this[H].entries())yield t}async*values(){for await(let[t,r]of this)yield r}[(rt=H,Symbol.asyncIterator)](){return this.entries()}};Object.defineProperty(w.prototype,Symbol.toStringTag,{value:"FileSystemDirectoryHandle",writable:!1,enumerable:!1,configurable:!0});Object.defineProperties(w.prototype,{getDirectoryHandle:{enumerable:!0},entries:{enumerable:!0},getFileHandle:{enumerable:!0},removeEntry:{enumerable:!0}});Fe=w});var he={};z(he,{config:()=>it,errors:()=>D,fromDataTransfer:()=>nt,getDirHandlesFromInput:()=>ot,getFileHandlesFromInput:()=>at});async function nt(s){console.warn("deprecated fromDataTransfer - use `dt.items[0].getAsFileSystemHandle()` instead");let[e,t,r]=await Promise.all([Promise.resolve().then(()=>(re(),te)),Promise.resolve().then(()=>(pe(),ue)),Promise.resolve().then(()=>(Y(),se))]),i=new e.FolderHandle("",!1);return i._entries=s.map(n=>n.isFile?new t.FileHandle(n,!1):new t.FolderHandle(n,!1)),new r.FileSystemDirectoryHandle(i)}async function ot(s){let{FolderHandle:e,FileHandle:t}=await Promise.resolve().then(()=>(re(),te)),{FileSystemDirectoryHandle:r}=await Promise.resolve().then(()=>(Y(),se)),i=Array.from(s.files),n=i[0].webkitRelativePath.split("/",1)[0],a=new e(n,!1);return i.forEach(l=>{let o=l.webkitRelativePath.split("/");o.shift();let c=o.pop(),u=o.reduce((p,f)=>(p._entries[f]||(p._entries[f]=new e(f,!1)),p._entries[f]),a);u._entries[c]=new t(l.name,l,!1)}),new r(a)}async function at(s){let{FileHandle:e}=await Promise.resolve().then(()=>(re(),te)),{FileSystemFileHandle:t}=await Promise.resolve().then(()=>(T(),M));return Array.from(s.files).map(r=>new t(new e(r.name,r,!1)))}var D,it,U=g(()=>{D={INVALID:["seeking position failed.","InvalidStateError"],GONE:["A requested file or directory could not be found at the time an operation was processed.","NotFoundError"],MISMATCH:["The path supplied exists, but was not an entry of requested type.","TypeMismatchError"],MOD_ERR:["The object can not be modified in this way.","InvalidModificationError"],SYNTAX:s=>[`Failed to execute 'write' on 'UnderlyingSinkBase': Invalid params passed. ${s}`,"SyntaxError"],SECURITY:["It was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources.","SecurityError"],DISALLOWED:["The request is not allowed by the user agent or the platform in the current context.","NotAllowedError"]},it={writable:globalThis.WritableStream}});var ze={};z(ze,{FileHandle:()=>we});var Le,Me,dt,Ie,ut,pt,we,mt,ft,ht,bt,yt,ge,ve,Ae=g(()=>{U();Z();({WritableStream:Le,TransformStream:Me,DOMException:dt,Blob:Ie}=W),{GONE:ut}=D,pt=/constructor/i.test(window.HTMLElement)||window.safari||window.WebKitPoint,we=class{constructor(e="unkown"){this.name=e,this.kind="file"}async getFile(){throw new dt(...ut)}async isSameEntry(e){return this===e}async createWritable(e={}){var a;let t=await((a=navigator.serviceWorker)==null?void 0:a.getRegistration()),r=document.createElement("a"),i=new Me,n=i.writable;if(r.download=this.name,pt||!t){let l=[];i.readable.pipeTo(new Le({write(o){l.push(new Ie([o]))},close(){let o=new Ie(l,{type:"application/octet-stream; charset=utf-8"});l=[],r.href=URL.createObjectURL(o),r.click(),setTimeout(()=>URL.revokeObjectURL(r.href),1e4)}}))}else{let{writable:l,readablePort:o}=new ve(Le),c=encodeURIComponent(this.name).replace(/['()]/g,escape).replace(/\*/g,"%2A"),u={"content-disposition":"attachment; filename*=UTF-8''"+c,"content-type":"application/octet-stream; charset=utf-8",...e.size?{"content-length":e.size}:{}},p=setTimeout(()=>t.active.postMessage(0),1e4);i.readable.pipeThrough(new Me({transform(b,I){if(b instanceof Uint8Array)return I.enqueue(b);let $=new Response(b).body.getReader(),q=gt=>$.read().then(xe=>xe.done?0:q(I.enqueue(xe.value)));return q()}})).pipeTo(l).finally(()=>{clearInterval(p)}),t.active.postMessage({url:t.scope+c,headers:u,readablePort:o},[o]);let f=document.createElement("iframe");f.hidden=!0,f.src=t.scope+c,document.body.appendChild(f)}return n.getWriter()}},mt=0,ft=0,ht=1,bt=1,yt=2,ge=class{constructor(e){e.onmessage=t=>this._onMessage(t.data),this._port=e,this._resetReady()}start(e){return this._controller=e,this._readyPromise}write(e){let t={type:mt,chunk:e};return this._port.postMessage(t,[e.buffer]),this._resetReady(),this._readyPromise}close(){this._port.postMessage({type:yt}),this._port.close()}abort(e){this._port.postMessage({type:bt,reason:e}),this._port.close()}_onMessage(e){e.type===ft&&this._resolveReady(),e.type===ht&&this._onError(e.reason)}_onError(e){this._controller.error(e),this._rejectReady(e),this._port.close()}_resetReady(){this._readyPromise=new Promise((e,t)=>{this._readyResolve=e,this._readyReject=t}),this._readyPending=!0}_resolveReady(){this._readyResolve(),this._readyPending=!1}_rejectReady(e){this._readyPending||this._resetReady(),this._readyPromise.catch(()=>{}),this._readyReject(e),this._readyPending=!1}},ve=class{constructor(e){let t=new MessageChannel;this.readablePort=t.port1,this.writable=new e(new ge(t.port2))}}});var le=class{constructor(e){this.database=e}openStore(e,t){return this.database.transaction(e,t).objectStore(e)}async put(e,t,r){let i=this.openStore(e,"readwrite");return await new Promise((n,a)=>{let l=i.put(t,r);l.onsuccess=()=>{n(l.result)},l.onerror=()=>{a(l.error)}})}get(e,t){let r=this.openStore(e,"readonly");return new Promise((i,n)=>{let a=r.get(t);a.onsuccess=()=>{i(a.result)},a.onerror=()=>{n(a.error)}})}async delete(e,t){let r=this.openStore(e,"readwrite");return await new Promise((i,n)=>{let a=r.delete(t);a.onsuccess=()=>{i()},a.onerror=()=>{n(a.error)}})}close(){this.database.close()}},ce=class{constructor(e,t){this.databaseName=e;this.objectStores=t}async connect(){let e=window.indexedDB.open(this.databaseName,1);return e.onupgradeneeded=t=>{let r=t.target.result;this.objectStores.forEach(i=>{r.createObjectStore(i)})},await new Promise((t,r)=>{e.onsuccess=i=>{t(new le(i.target.result))},e.onerror=i=>{r(i.target.error)}})}},A="fileBookmarks",K=new ce("AvaloniaDb",[A]);var J=class{static getCaretCoordinates(e,t,r){var p,f;if(!Te)throw new Error("textarea-caret-position#getCaretCoordinates should only be called in a browser");let i=(p=r==null?void 0:r.debug)!=null?p:!1;if(i){let b=document.querySelector("#input-textarea-caret-position-mirror-div");b&&((f=b.parentNode)==null||f.removeChild(b))}let n=document.createElement("div");n.id="input-textarea-caret-position-mirror-div",document.body.appendChild(n);let a=n.style,l=window.getComputedStyle?window.getComputedStyle(e):e.currentStyle,o=e.nodeName==="INPUT";a.whiteSpace="pre-wrap",o||(a.wordWrap="break-word"),a.position="absolute",i||(a.visibility="hidden"),We.forEach(b=>{if(o&&b==="lineHeight")if(l.boxSizing==="border-box"){let I=parseInt(l.height),$=parseInt(l.paddingTop)+parseInt(l.paddingBottom)+parseInt(l.borderTopWidth)+parseInt(l.borderBottomWidth),q=$+parseInt(l.lineHeight);I>q?a.lineHeight=`${I-$}px`:I===q?a.lineHeight=l.lineHeight:a.lineHeight="0"}else a.lineHeight=l.height;else a[b]=l[b]}),Oe?e.scrollHeight>parseInt(l.height)&&(a.overflowY="scroll"):a.overflow="hidden",n.textContent=e.value.substring(0,t),o&&(n.textContent=n.textContent.replace(/\s/g,"\xA0"));let c=document.createElement("span");c.textContent=e.value.substring(t)||".",n.appendChild(c);let u={top:c.offsetTop+parseInt(l.borderTopWidth),left:c.offsetLeft+parseInt(l.borderLeftWidth),height:parseInt(l.lineHeight)};return i?c.style.backgroundColor="#aaa":document.body.removeChild(n),u}},We=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],Te=typeof window!="undefined",Oe=Te&&window.mozInnerScreenX!=null;var d=class{static get InputHelper(){var e;return(e=this.resolvedExports)==null?void 0:e.Avalonia.Browser.Interop.InputHelper}static get DomHelper(){var e;return(e=this.resolvedExports)==null?void 0:e.Avalonia.Browser.Interop.DomHelper}static get TimerHelper(){var e;return(e=this.resolvedExports)==null?void 0:e.Avalonia.Browser.Interop.TimerHelper}static get CanvasHelper(){var e;return(e=this.resolvedExports)==null?void 0:e.Avalonia.Browser.Interop.CanvasHelper}};async function Re(){let s=await globalThis.getDotnetRuntime(0);if(s!=null)return d.resolvedExports=await s.getAssemblyExports("Avalonia.Browser.dll"),d.resolvedExports}d.exportsPromise=Re();var Q=class{static initializeBackgroundHandlers(){this.clipboardState===0&&(globalThis.addEventListener("paste",e=>{this.clipboardState===2&&this.resolveClipboard(e.clipboardData.getData("text"))}),this.clipboardState=1)}static async readClipboardText(e){if(e.navigator.clipboard.readText)return await e.navigator.clipboard.readText();try{return await new Promise((t,r)=>{this.clipboardState=2,this.resolveClipboard=t,this.rejectClipboard=r})}finally{this.clipboardState=1,this.resolveClipboard=null,this.rejectClipboard=null}}static async writeClipboardText(e,t){return await e.navigator.clipboard.writeText(t)}static subscribeInputEvents(e,t){let r=this.subscribeKeyEvents(e,t),i=this.subscribePointerEvents(e,t),n=this.subscribeTextEvents(e,t),a=this.subscribeDropEvents(e,t),l=this.subscribeKeyboardGeometryChange(e,t);return()=>{r(),i(),n(),a(),l()}}static subscribeKeyEvents(e,t){let r=n=>{d.InputHelper.OnKeyDown(t,n.code,n.key,this.getModifiers(n)),this.clipboardState!==2&&n.preventDefault()};e.addEventListener("keydown",r);let i=n=>{d.InputHelper.OnKeyUp(t,n.code,n.key,this.getModifiers(n)),n.preventDefault(),this.rejectClipboard&&this.rejectClipboard()};return e.addEventListener("keyup",i),()=>{e.removeEventListener("keydown",r),e.removeEventListener("keyup",i)}}static subscribeTextEvents(e,t){let r=l=>{d.InputHelper.OnCompositionStart(t)};e.addEventListener("compositionstart",r);let i=l=>{let o=l.getTargetRanges(),c=-1,u=-1;o.length>0&&(c=o[0].startOffset,u=o[0].endOffset),l.inputType==="insertCompositionText"&&(c=2,u=c+2),d.InputHelper.OnBeforeInput(t,l.inputType,c,u)};e.addEventListener("beforeinput",i);let n=l=>{d.InputHelper.OnCompositionUpdate(t,l.data)};e.addEventListener("compositionupdate",n);let a=l=>{d.InputHelper.OnCompositionEnd(t,l.data),l.preventDefault()};return e.addEventListener("compositionend",a),()=>{e.removeEventListener("compositionstart",r),e.removeEventListener("compositionupdate",n),e.removeEventListener("compositionend",a)}}static subscribePointerEvents(e,t){let r=o=>{d.InputHelper.OnPointerMove(t,o.pointerType,o.pointerId,o.offsetX,o.offsetY,o.pressure,o.tiltX,o.tiltY,o.twist,this.getModifiers(o),o),o.preventDefault()},i=o=>{d.InputHelper.OnPointerDown(t,o.pointerType,o.pointerId,o.button,o.offsetX,o.offsetY,o.pressure,o.tiltX,o.tiltY,o.twist,this.getModifiers(o)),o.preventDefault()},n=o=>{d.InputHelper.OnPointerUp(t,o.pointerType,o.pointerId,o.button,o.offsetX,o.offsetY,o.pressure,o.tiltX,o.tiltY,o.twist,this.getModifiers(o)),o.preventDefault()},a=o=>{d.InputHelper.OnPointerCancel(t,o.pointerType,o.pointerId,o.offsetX,o.offsetY,o.pressure,o.tiltX,o.tiltY,o.twist,this.getModifiers(o))},l=o=>{d.InputHelper.OnWheel(t,o.offsetX,o.offsetY,o.deltaX,o.deltaY,this.getModifiers(o)),o.preventDefault()};return e.addEventListener("pointermove",r),e.addEventListener("pointerdown",i),e.addEventListener("pointerup",n),e.addEventListener("wheel",l),e.addEventListener("pointercancel",a),()=>{e.removeEventListener("pointerover",r),e.removeEventListener("pointerdown",i),e.removeEventListener("pointerup",n),e.removeEventListener("pointercancel",a),e.removeEventListener("wheel",l)}}static subscribeDropEvents(e,t){let r=n=>{let a=n.dataTransfer;d.InputHelper.OnDragDrop(t,n.type,n.offsetX,n.offsetY,this.getModifiers(n),a==null?void 0:a.effectAllowed,a)},i=n=>{n.preventDefault(),r(n)};return e.addEventListener("dragover",i),e.addEventListener("dragenter",r),e.addEventListener("dragleave",r),e.addEventListener("drop",i),()=>{e.removeEventListener("dragover",i),e.removeEventListener("dragenter",r),e.removeEventListener("dragleave",r),e.removeEventListener("drop",i)}}static getCoalescedEvents(e){return e.getCoalescedEvents().flatMap(t=>[t.offsetX,t.offsetY,t.pressure,t.tiltX,t.tiltY,t.twist])}static subscribeKeyboardGeometryChange(e,t){if("virtualKeyboard"in navigator){let r=i=>{let n=e.getBoundingClientRect(),a=i.target.boundingRect;d.InputHelper.OnKeyboardGeometryChange(t,a.x-n.x,a.y-n.y,a.width,a.height)};return navigator.virtualKeyboard.addEventListener("geometrychange",r),()=>{navigator.virtualKeyboard.removeEventListener("geometrychange",r)}}return()=>{}}static clearInput(e){e.value=""}static focusElement(e){e.focus()}static setCursor(e,t){t==="default"?e.style.removeProperty("cursor"):e.style.cursor=t}static setBounds(e,t,r,i,n,a){e.style.left=t.toFixed(0)+"px",e.style.top=r.toFixed(0)+"px";let{left:l,top:o}=J.getCaretCoordinates(e,a);e.style.left=(t-l).toFixed(0)+"px",e.style.top=(r-o).toFixed(0)+"px"}static hide(e){e.style.display="none"}static show(e){e.style.display="block"}static setSurroundingText(e,t,r,i){!e||(e.value=t,e.setSelectionRange(r,i),e.style.width="20px",e.style.width=`${e.scrollWidth}px`)}static getModifiers(e){let t=0;e.ctrlKey&&(t|=2),e.altKey&&(t|=1),e.shiftKey&&(t|=4),e.metaKey&&(t|=8);let r=e.buttons;return r&&(r&1&&(t|=16),r&2&&(t|=e.type==="pen"?2048:32),r&4&&(t|=64),r&8&&(t|=128),r&16&&(t|=256),r&32&&(t|=1024)),t}static setPointerCapture(e,t){e.setPointerCapture(t)}static releasePointerCapture(e,t){e.hasPointerCapture(t)&&e.releasePointerCapture(t)}};Q.clipboardState=0;var C=class{static hasNativeFilePicker(){return"showSaveFilePicker"in globalThis}static isMobile(){var n;let e=(n=globalThis.navigator)==null?void 0:n.userAgentData;if(e)return e.mobile;let t=navigator.userAgent,r=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,i=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw(n|u)|c55\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i;return r.test(t)||i.test(t.substr(0,4))}static isTv(){return navigator.userAgent.includes("SmartTV")}};var F=class{constructor(e,t){this.canvas=e;this.renderTargetType=t}static setSize(e,t,r){e.canvas.width=t,e.canvas.height=r}};function Ue(){var t,r,i,n;let s=globalThis,e=(r=s.Module)!=null?r:(t=s.getDotnetRuntime(0))==null?void 0:t.Module;return(n=(i=e==null?void 0:e.GL)!=null?i:s.AvaloniaGL)!=null?n:s.SkiaSharpGL}var v=class extends F{constructor(t,r){var l,o;if(v._gl==null&&(v._gl=Ue()),!v._gl)throw new Error("Module.GL object wasn't initialized, WebGL can't be used.");let i={alpha:!0,depth:!0,stencil:!0,antialias:!1,premultipliedAlpha:!0,preserveDrawingBuffer:!1,failIfMajorPerformanceCaveat:!0,majorVersion:r===2?1:2,minorVersion:0,enableExtensionsByDefault:1,explicitSwapControl:0},n=r===2?t.getContext("webgl",i):t.getContext("webgl2",i);if(!n)throw new Error("HTMLCanvasElement.getContext returned null.");let a=v._gl.registerContext(n,i);n.gl_handle=a;super(t,"webgl");this.canvas=t;this.contextHandle=a,this.fboId=(o=(l=n.getParameter(n.FRAMEBUFFER_BINDING))==null?void 0:l.id)!=null?o:0,this.stencil=n.getParameter(n.STENCIL_BITS),this.sample=n.getParameter(n.SAMPLES),this.depth=n.getParameter(n.DEPTH_BITS),this.attrs=i}static getCurrentContext(){var t,r,i;return(i=(r=(t=v._gl)==null?void 0:t.currentContext)==null?void 0:r.handle)!=null?i:0}static makeContextCurrent(t){if(v._gl==null)return!1;let r=v._gl.makeContextCurrent(t);return t===0||r}},B=v;B._gl=null;var _=class extends F{constructor(t){let r=t.getContext("2d",{alpha:!0});if(!r)throw new Error("HTMLCanvasElement.getContext(2d) returned null.");super(t,"software");this.context=r,this.runtime=globalThis.getDotnetRuntime(0)}putPixelData(t,r,i,n){var c;let a=(c=this.runtime)==null?void 0:c.localHeapViewU8(),l;if(a!=null&&a.buffer){if(l=new Uint8ClampedArray(a.buffer,t,r),this.canvas instanceof OffscreenCanvas){let u=new ArrayBuffer(l.byteLength),p=new Uint8ClampedArray(u);p.set(l),l=p}}else throw new Error("Unable to access .NET memory");let o=new ImageData(l,i,n);this.context.putImageData(o,0,0)}static staticPutPixelData(t,r,i,n,a){t.putPixelData(r,i,n,a)}};var y=class{static create(e,t,r){var n,a;let i=y.nextId++;if(e===0)y.registry[i]={canvas:t},y.targets[i]=y.createRenderTarget(t,r);else{let l=globalThis,o=(a=l.Module)!=null?a:(n=l.getDotnetRuntime(0))==null?void 0:n.Module,c=o==null?void 0:o.PThread;if(c==null)throw new Error("Unable to access emscripten PThread api");let u=c.pthreads[e];if(u==null)throw new Error(`Unable get pthread with id ${e}`);let p;if(u.postMessage!=null?p=u:p=u.worker,p==null)throw new Error(`Unable get Worker for pthread ${e}`);let f=t.transferControlToOffscreen();p.postMessage({avaloniaCmd:"registerCanvas",canvas:f,modes:r,id:i},[f]),y.registry[i]={canvas:t,worker:p}}return i}static initializeWorker(){let e=self.onmessage;self.onmessage=t=>{let r=t;r.data.avaloniaCmd==="registerCanvas"?y.targets[r.data.id]=y.createRenderTarget(r.data.canvas,r.data.modes):r.data.avaloniaCmd==="unregisterCanvas"?delete y.targets[r.data.id]:e!=null&&e.call(self,t)}}static getRenderTarget(e){return y.targets[e]}static createRenderTarget(e,t){for(let r of t)try{return r===1?new _(e):new B(e,r)}catch(i){let n="";i instanceof Error&&(n=": "+i.message),console.error(`Failed to create render target for mode ${r} ${n}`)}return new _(e)}},k=y;k.targets={},k.registry={},k.nextId=1;var h=class{constructor(e,t,r,i){this.handle=e;this.file=t;this.bookmarkId=r;this.wellKnownType=i}get name(){var e;return this.handle?this.handle.name:this.file?this.file.name:(e=this.wellKnownType)!=null?e:""}get kind(){return this.handle?this.handle.kind:this.file?"file":"directory"}static createFromHandle(e,t){return new h(e,void 0,t,void 0)}static createFromFile(e){return new h(void 0,e,void 0,void 0)}static createWellKnownDirectory(e){return new h(void 0,void 0,void 0,e)}static async openRead(e){if(e.file)return e.file;if(!e.handle||e.kind!=="file")throw new Error("StorageItem is not a file");return await e.verityPermissions("read"),await e.handle.getFile()}static async openWrite(e){if(!e.handle||e.kind!=="file")throw new Error("StorageItem is not a writeable file");return await e.verityPermissions("readwrite"),await e.handle.createWritable({keepExistingData:!0})}static async getProperties(e){try{let t=e.handle&&"getFile"in e.handle?await e.handle.getFile():e.file;return t?{Size:t.size,LastModified:t.lastModified,Type:t.type}:null}catch{return null}}static getItemsIterator(e){return e.kind!=="directory"||!e.handle?null:e.handle.entries()}static async createFile(e,t){if(e.kind!=="directory"||!e.handle)throw new TypeError("Unable to create item in the requested directory");return await e.verityPermissions("readwrite"),await e.handle.getFileHandle(t,{create:!0})}static async createFolder(e,t){if(e.kind!=="directory"||!e.handle)throw new TypeError("Unable to create item in the requested directory");return await e.verityPermissions("readwrite"),await e.handle.getDirectoryHandle(t,{create:!0})}static async deleteAsync(e){return e.handle?(await e.verityPermissions("readwrite"),await e.handle.remove({recursive:!0})):null}static async moveAsync(e,t){if(!e.handle)return null;if(t.kind!=="directory"||!t.handle)throw new TypeError("Unable to move item to the requested directory");return await e.verityPermissions("readwrite"),await e.handle.move(t)}async verityPermissions(e){if(!!this.handle&&!!C.hasNativeFilePicker()&&await this.handle.queryPermission({mode:e})!=="granted"&&await this.handle.requestPermission({mode:e})==="denied")throw new Error("Permissions denied")}static async saveBookmark(e){if(e.bookmarkId)return e.bookmarkId;if(!e.handle||!C.hasNativeFilePicker())return null;let t=await K.connect();try{return await t.put(A,e.handle,e.generateBookmarkId())}finally{t.close()}}static async deleteBookmark(e){if(!e.bookmarkId||!C.hasNativeFilePicker())return;let t=await K.connect();try{await t.delete(A,e.bookmarkId)}finally{t.close()}}generateBookmarkId(){return Date.now().toString(36)+Math.random().toString(36).substring(2)}},G=class{constructor(e){this.items=e}static itemsArray(e){return e.items}static filesToItemsArray(e){if(!e)return[];let t=[];for(let r=0;r(U(),he));return await new Promise(r=>{e.addEventListener("change",r),e.click()}),t.then(r=>r.getDirHandlesFromInput(e))}var be=st;var lt={accepts:[]},De=globalThis.showOpenFilePicker;async function ct(s={}){let e={...lt,...s};if(De&&!s._preferPolyfill)return De(e);let t=document.createElement("input");t.type="file",t.multiple=e.multiple,t.accept=(e.accepts||[]).map(i=>[...(i.extensions||[]).map(n=>"."+n),...i.mimeTypes||[]]).flat().join(","),t.style.position="fixed",t.style.top="-100000px",t.style.left="-100000px",document.body.appendChild(t);let r=Promise.resolve().then(()=>(U(),he));return await new Promise(i=>{t.addEventListener("change",i),t.click()}),r.then(i=>i.getFileHandlesFromInput(t))}var ye=ct;var Be=globalThis.showSaveFilePicker;async function wt(s={}){if(Be&&!s._preferPolyfill)return Be(s);s._name&&(console.warn("deprecated _name, spec now have `suggestedName`"),s.suggestedName=s._name);let{FileSystemFileHandle:e}=await Promise.resolve().then(()=>(T(),M)),{FileHandle:t}=await Promise.resolve().then(()=>(Ae(),ze));return new e(new t(s.suggestedName))}var Ee=wt;globalThis.DataTransferItem&&!DataTransferItem.prototype.getAsFileSystemHandle&&(DataTransferItem.prototype.getAsFileSystemHandle=async function(){let s=this.webkitGetAsEntry(),[{FileHandle:e,FolderHandle:t},{FileSystemDirectoryHandle:r},{FileSystemFileHandle:i}]=await Promise.all([Promise.resolve().then(()=>(pe(),ue)),Promise.resolve().then(()=>(Y(),se)),Promise.resolve().then(()=>(T(),M))]);return s.isFile?new i(new e(s,!1)):new r(new t(s,!1))});Y();T();oe();fe();var Se=class{static async selectFolderDialog(e,t){var n,a;let r={startIn:(a=(n=e==null?void 0:e.wellKnownType)!=null?n:e==null?void 0:e.handle)!=null?a:void 0,_preferPolyfill:t},i=await be(r);return h.createFromHandle(i)}static async openFileDialog(e,t,r,i,n){var o,c;let a={startIn:(c=(o=e==null?void 0:e.wellKnownType)!=null?o:e==null?void 0:e.handle)!=null?c:void 0,multiple:t,excludeAcceptAllOption:i,types:r!=null?r:void 0,_preferPolyfill:n},l=await ye(a);return new G(l.map(u=>h.createFromHandle(u)))}static async saveFileDialog(e,t,r,i,n){var o,c;let a={startIn:(c=(o=e==null?void 0:e.wellKnownType)!=null?o:e==null?void 0:e.handle)!=null?c:void 0,suggestedName:t!=null?t:void 0,excludeAcceptAllOption:i,types:r!=null?r:void 0,_preferPolyfill:n},l=await Ee(a);return h.createFromHandle(l)}static async openBookmark(e){let t=await K.connect();try{let r=await t.get(A,e);return r&&h.createFromHandle(r,e)}finally{t.close()}}static createAcceptType(e,t,r){let i={};return t.forEach(n=>{i[n]=r!=null?r:[]}),{description:e,accept:i}}};export{h as StorageItem,G as StorageItems,Se as StorageProvider}; +var ye=Object.defineProperty;var De=(o,e,t)=>e in o?ye(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var y=(o,e)=>()=>(o&&(e=o(o=0)),e);var H=(o,e)=>{for(var t in e)ye(o,t,{get:e[t],enumerable:!0})};var w=(o,e,t)=>(De(o,typeof e!="symbol"?e+"":e,t),t);var Ie,D,G=y(()=>{Ie={ReadableStream:globalThis.ReadableStream,WritableStream:globalThis.WritableStream,TransformStream:globalThis.TransformStream,DOMException:globalThis.DOMException,Blob:globalThis.Blob,File:globalThis.File},D=Ie});var $={};H($,{FileHandle:()=>_,FolderHandle:()=>A,Sink:()=>V,default:()=>je});var z,Be,p,We,g,ve,Re,ie,yr,Oe,V,_,A,Ne,je,X=y(()=>{M();G();({File:z,Blob:Be,DOMException:p}=D),{INVALID:We,GONE:g,MISMATCH:ve,MOD_ERR:Re,SYNTAX:ie,SECURITY:yr,DISALLOWED:Oe}=T,V=class{constructor(e,t){this.fileHandle=e,this.file=t,this.size=t.size,this.position=0}write(e){let t=this.file;if(typeof e=="object"){if(e.type==="write"){if(Number.isInteger(e.position)&&e.position>=0&&(this.position=e.position,this.size=0){if(this.size=0){t=e.sizet.size&&(this.position=t.size),this.file=t;return}else throw new p(...ie("truncate requires a size argument"))}e=new Be([e]);let r=this.file,i=r.slice(0,this.position),n=r.slice(this.position+e.size),a=this.position-i.size;a<0&&(a=0),r=new z([i,new Uint8Array(a),e,n],r.name),this.size=r.size,this.position+=e.size,this.file=r}close(){if(this.fileHandle._deleted)throw new p(...g);this.fileHandle._file=this.file,this.file=this.position=this.size=null,this.fileHandle.onclose&&this.fileHandle.onclose(this.fileHandle)}},_=class{constructor(e="",t=new z([],e),r=!0){this._file=t,this.name=e,this.kind="file",this._deleted=!1,this.writable=r,this.readable=!0}async getFile(){if(this._deleted)throw new p(...g);return this._file}async createWritable(e){if(!this.writable)throw new p(...Oe);if(this._deleted)throw new p(...g);let t=e.keepExistingData?await this.getFile():new z([],this.name);return new V(this,t)}async isSameEntry(e){return this===e}async _destroy(){this._deleted=!0,this._file=null}},A=class{constructor(e,t=!0){this.name=e,this.kind="directory",this._deleted=!1,this._entries={},this.writable=t,this.readable=!0}async*entries(){if(this._deleted)throw new p(...g);yield*Object.entries(this._entries)}async isSameEntry(e){return this===e}async getDirectoryHandle(e,t){if(this._deleted)throw new p(...g);let r=this._entries[e];if(r){if(r instanceof _)throw new p(...ve);return r}else{if(t.create)return this._entries[e]=new A(e);throw new p(...g)}}async getFileHandle(e,t){let r=this._entries[e],i=r instanceof _;if(r&&i)return r;if(r&&!i)throw new p(...ve);if(!r&&!t.create)throw new p(...g);if(!r&&t.create)return this._entries[e]=new _(e)}async removeEntry(e,t){let r=this._entries[e];if(!r)throw new p(...g);await r._destroy(t.recursive),delete this._entries[e]}async _destroy(e){for(let t of Object.values(this._entries)){if(!e)throw new p(...Re);await t._destroy(e)}this._entries={},this._deleted=!0}},Ne=new A(""),je=()=>Ne});var ne={};H(ne,{FileHandle:()=>O,FolderHandle:()=>v,default:()=>qe});var Ue,Y,O,v,qe,ae=y(()=>{M();({DISALLOWED:Ue}=T),Y=class{constructor(e,t){this.writer=e,this.fileEntry=t}async write(e){if(typeof e=="object"){if(e.type==="write"){if(Number.isInteger(e.position)&&e.position>=0&&(this.writer.seek(e.position),this.writer.position!==e.position&&(await new Promise((t,r)=>{this.writer.onwriteend=t,this.writer.onerror=r,this.writer.truncate(e.position)}),this.writer.seek(e.position))),!("data"in e))throw new DOMException("Failed to execute 'write' on 'UnderlyingSinkBase': Invalid params passed. write requires a data argument","SyntaxError");e=e.data}else if(e.type==="seek")if(Number.isInteger(e.position)&&e.position>=0){if(this.writer.seek(e.position),this.writer.position!==e.position)throw new DOMException("seeking position failed","InvalidStateError");return}else throw new DOMException("Failed to execute 'write' on 'UnderlyingSinkBase': Invalid params passed. seek requires a position argument","SyntaxError");else if(e.type==="truncate")return new Promise(t=>{if(Number.isInteger(e.size)&&e.size>=0)this.writer.onwriteend=r=>t(),this.writer.truncate(e.size);else throw new DOMException("Failed to execute 'write' on 'UnderlyingSinkBase': Invalid params passed. truncate requires a size argument","SyntaxError")})}await new Promise((t,r)=>{this.writer.onwriteend=t,this.writer.onerror=r,this.writer.write(new Blob([e]))})}close(){return new Promise(this.fileEntry.file.bind(this.fileEntry))}},O=class{constructor(e,t=!0){this.file=e,this.kind="file",this.writable=t,this.readable=!0}get name(){return this.file.name}isSameEntry(e){return this.file.toURL()===e.file.toURL()}getFile(){return new Promise(this.file.file.bind(this.file))}createWritable(e){if(!this.writable)throw new DOMException(...Ue);return new Promise((t,r)=>this.file.createWriter(i=>{e.keepExistingData===!1?(i.onwriteend=n=>t(new Y(i,this.file)),i.truncate(0)):t(new Y(i,this.file))},r))}},v=class{constructor(e,t=!0){this.dir=e,this.writable=t,this.readable=!0,this.kind="directory",this.name=e.name}isSameEntry(e){return this.dir.fullPath===e.dir.fullPath}async*entries(){let e=this.dir.createReader(),t=await new Promise(e.readEntries.bind(e));for(let r of t)yield[r.name,r.isFile?new O(r,this.writable):new v(r,this.writable)]}getDirectoryHandle(e,t){return new Promise((r,i)=>{this.dir.getDirectory(e,t,n=>{r(new v(n))},i)})}getFileHandle(e,t){return new Promise((r,i)=>this.dir.getFile(e,t,n=>r(new O(n)),i))}async removeEntry(e,t){let r=await this.getDirectoryHandle(e,{create:!1}).catch(i=>i.name==="TypeMismatchError"?this.getFileHandle(e,{create:!1}):i);if(r instanceof Error)throw r;return new Promise((i,n)=>{r instanceof v?t.recursive?r.dir.removeRecursively(()=>i(),n):r.dir.remove(()=>i(),n):r.file&&r.file.remove(()=>i(),n)})}},qe=(o={})=>new Promise((e,t)=>window.webkitRequestFileSystem(o._persistent,0,r=>e(new v(r.root)),t))});var S,Ke,Q,N,J=y(()=>{S=Symbol("adapter"),Q=class{constructor(e){w(this,Ke);w(this,"name");w(this,"kind");this.kind=e.kind,this.name=e.name,this[S]=e}async queryPermission({mode:e="read"}={}){let t=this[S];if(t.queryPermission)return t.queryPermission({mode:e});if(e==="read")return"granted";if(e==="readwrite")return t.writable?"granted":"denied";throw new TypeError(`Mode ${e} must be 'read' or 'readwrite'`)}async requestPermission({mode:e="read"}={}){let t=this[S];if(t.requestPermission)return t.requestPermission({mode:e});if(e==="read")return"granted";if(e==="readwrite")return t.writable?"granted":"denied";throw new TypeError(`Mode ${e} must be 'read' or 'readwrite'`)}async remove(e={}){await this[S].remove(e)}async isSameEntry(e){return this===e?!0:!e||typeof e!="object"||this.kind!==e.kind||!e[S]?!1:this[S].isSameEntry(e[S])}};Ke=S;Object.defineProperty(Q.prototype,Symbol.toStringTag,{value:"FileSystemHandle",writable:!1,enumerable:!1,configurable:!0});N=Q});var Ge,C,oe,se=y(()=>{G();({WritableStream:Ge}=D),C=class extends Ge{constructor(...e){super(...e),Object.setPrototypeOf(this,C.prototype),this._closed=!1}close(){this._closed=!0;let e=this.getWriter(),t=e.close();return e.releaseLock(),t}seek(e){return this.write({type:"seek",position:e})}truncate(e){return this.write({type:"truncate",size:e})}write(e){if(this._closed)return Promise.reject(new TypeError("Cannot write to a CLOSED writable stream"));let t=this.getWriter(),r=t.write(e);return t.releaseLock(),r}};Object.defineProperty(C.prototype,Symbol.toStringTag,{value:"FileSystemWritableFileStream",writable:!1,enumerable:!1,configurable:!0});Object.defineProperties(C.prototype,{close:{enumerable:!0},seek:{enumerable:!0},truncate:{enumerable:!0},write:{enumerable:!0}});oe=C});var F={};H(F,{FileSystemFileHandle:()=>I,default:()=>Se});var Z,Ve,I,Se,E=y(()=>{J();se();Z=Symbol("adapter"),I=class extends N{constructor(t){super(t);w(this,Ve);this[Z]=t}async createWritable(t={}){return new oe(await this[Z].createWritable(t))}async getFile(){return this[Z].getFile()}};Ve=Z;Object.defineProperty(I.prototype,Symbol.toStringTag,{value:"FileSystemFileHandle",writable:!1,enumerable:!1,configurable:!0});Object.defineProperties(I.prototype,{createWritable:{enumerable:!0},getFile:{enumerable:!0}});Se=I});var ee={};H(ee,{FileSystemDirectoryHandle:()=>f,default:()=>Ee});var x,$e,f,Ee,j=y(()=>{J();x=Symbol("adapter"),f=class extends N{constructor(t){super(t);w(this,$e);this[x]=t}async getDirectoryHandle(t,r={}){if(t==="")throw new TypeError("Name can't be an empty string.");if(t==="."||t===".."||t.includes("/"))throw new TypeError("Name contains invalid characters.");r.create=!!r.create;let i=await this[x].getDirectoryHandle(t,r);return new f(i)}async*entries(){let{FileSystemFileHandle:t}=await Promise.resolve().then(()=>(E(),F));for await(let[r,i]of this[x].entries())yield[i.name,i.kind==="file"?new t(i):new f(i)]}async*getEntries(){let{FileSystemFileHandle:t}=await Promise.resolve().then(()=>(E(),F));console.warn("deprecated, use .entries() instead");for await(let r of this[x].entries())yield r.kind==="file"?new t(r):new f(r)}async getFileHandle(t,r={}){let{FileSystemFileHandle:i}=await Promise.resolve().then(()=>(E(),F));if(t==="")throw new TypeError("Name can't be an empty string.");if(t==="."||t===".."||t.includes("/"))throw new TypeError("Name contains invalid characters.");r.create=!!r.create;let n=await this[x].getFileHandle(t,r);return new i(n)}async removeEntry(t,r={}){if(t==="")throw new TypeError("Name can't be an empty string.");if(t==="."||t===".."||t.includes("/"))throw new TypeError("Name contains invalid characters.");return r.recursive=!!r.recursive,this[x].removeEntry(t,r)}async resolve(t){if(await t.isSameEntry(this))return[];let r=[{handle:this,path:[]}];for(;r.length;){let{handle:i,path:n}=r.pop();for await(let a of i.values()){if(await a.isSameEntry(t))return[...n,a.name];a.kind==="directory"&&r.push({handle:a,path:[...n,a.name]})}}return null}async*keys(){for await(let[t]of this[x].entries())yield t}async*values(){for await(let[t,r]of this)yield r}[($e=x,Symbol.asyncIterator)](){return this.entries()}};Object.defineProperty(f.prototype,Symbol.toStringTag,{value:"FileSystemDirectoryHandle",writable:!1,enumerable:!1,configurable:!0});Object.defineProperties(f.prototype,{getDirectoryHandle:{enumerable:!0},entries:{enumerable:!0},getFileHandle:{enumerable:!0},removeEntry:{enumerable:!0}});Ee=f});var le={};H(le,{config:()=>Xe,errors:()=>T,fromDataTransfer:()=>Ye,getDirHandlesFromInput:()=>Qe,getFileHandlesFromInput:()=>Je});async function Ye(o){console.warn("deprecated fromDataTransfer - use `dt.items[0].getAsFileSystemHandle()` instead");let[e,t,r]=await Promise.all([Promise.resolve().then(()=>(X(),$)),Promise.resolve().then(()=>(ae(),ne)),Promise.resolve().then(()=>(j(),ee))]),i=new e.FolderHandle("",!1);return i._entries=o.map(n=>n.isFile?new t.FileHandle(n,!1):new t.FolderHandle(n,!1)),new r.FileSystemDirectoryHandle(i)}async function Qe(o){let{FolderHandle:e,FileHandle:t}=await Promise.resolve().then(()=>(X(),$)),{FileSystemDirectoryHandle:r}=await Promise.resolve().then(()=>(j(),ee)),i=Array.from(o.files),n=i[0].webkitRelativePath.split("/",1)[0],a=new e(n,!1);return i.forEach(s=>{let c=s.webkitRelativePath.split("/");c.shift();let u=c.pop(),d=c.reduce((m,l)=>(m._entries[l]||(m._entries[l]=new e(l,!1)),m._entries[l]),a);d._entries[u]=new t(s.name,s,!1)}),new r(a)}async function Je(o){let{FileHandle:e}=await Promise.resolve().then(()=>(X(),$)),{FileSystemFileHandle:t}=await Promise.resolve().then(()=>(E(),F));return Array.from(o.files).map(r=>new t(new e(r.name,r,!1)))}var T,Xe,M=y(()=>{T={INVALID:["seeking position failed.","InvalidStateError"],GONE:["A requested file or directory could not be found at the time an operation was processed.","NotFoundError"],MISMATCH:["The path supplied exists, but was not an entry of requested type.","TypeMismatchError"],MOD_ERR:["The object can not be modified in this way.","InvalidModificationError"],SYNTAX:o=>[`Failed to execute 'write' on 'UnderlyingSinkBase': Invalid params passed. ${o}`,"SyntaxError"],SECURITY:["It was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources.","SecurityError"],DISALLOWED:["The request is not allowed by the user agent or the platform in the current context.","NotAllowedError"]},Xe={writable:globalThis.WritableStream}});var ke={};H(ke,{FileHandle:()=>ue});var Te,Ce,rt,Fe,it,nt,ue,at,ot,st,lt,ct,pe,me,He=y(()=>{M();G();({WritableStream:Te,TransformStream:Ce,DOMException:rt,Blob:Fe}=D),{GONE:it}=T,nt=/constructor/i.test(window.HTMLElement)||window.safari||window.WebKitPoint,ue=class{constructor(e="unkown"){this.name=e,this.kind="file"}async getFile(){throw new rt(...it)}async isSameEntry(e){return this===e}async createWritable(e={}){var a;let t=await((a=navigator.serviceWorker)==null?void 0:a.getRegistration()),r=document.createElement("a"),i=new Ce,n=i.writable;if(r.download=this.name,nt||!t){let s=[];i.readable.pipeTo(new Te({write(c){s.push(new Fe([c]))},close(){let c=new Fe(s,{type:"application/octet-stream; charset=utf-8"});s=[],r.href=URL.createObjectURL(c),r.click(),setTimeout(()=>URL.revokeObjectURL(r.href),1e4)}}))}else{let{writable:s,readablePort:c}=new me(Te),u=encodeURIComponent(this.name).replace(/['()]/g,escape).replace(/\*/g,"%2A"),d={"content-disposition":"attachment; filename*=UTF-8''"+u,"content-type":"application/octet-stream; charset=utf-8",...e.size?{"content-length":e.size}:{}},m=setTimeout(()=>t.active.postMessage(0),1e4);i.readable.pipeThrough(new Ce({transform(h,k){if(h instanceof Uint8Array)return k.enqueue(h);let U=new Response(h).body.getReader(),B=ut=>U.read().then(fe=>fe.done?0:B(k.enqueue(fe.value)));return B()}})).pipeTo(s).finally(()=>{clearInterval(m)}),t.active.postMessage({url:t.scope+u,headers:d,readablePort:c},[c]);let l=document.createElement("iframe");l.hidden=!0,l.src=t.scope+u,document.body.appendChild(l)}return n.getWriter()}},at=0,ot=0,st=1,lt=1,ct=2,pe=class{constructor(e){e.onmessage=t=>this._onMessage(t.data),this._port=e,this._resetReady()}start(e){return this._controller=e,this._readyPromise}write(e){let t={type:at,chunk:e};return this._port.postMessage(t,[e.buffer]),this._resetReady(),this._readyPromise}close(){this._port.postMessage({type:ct}),this._port.close()}abort(e){this._port.postMessage({type:lt,reason:e}),this._port.close()}_onMessage(e){e.type===ot&&this._resolveReady(),e.type===st&&this._onError(e.reason)}_onError(e){this._controller.error(e),this._rejectReady(e),this._port.close()}_resetReady(){this._readyPromise=new Promise((e,t)=>{this._readyResolve=e,this._readyReject=t}),this._readyPending=!0}_resolveReady(){this._readyResolve(),this._readyPending=!1}_rejectReady(e){this._readyPending||this._resetReady(),this._readyPromise.catch(()=>{}),this._readyReject(e),this._readyPending=!1}},me=class{constructor(e){let t=new MessageChannel;this.readablePort=t.port1,this.writable=new e(new pe(t.port2))}}});var te=class{constructor(e){this.database=e}openStore(e,t){return this.database.transaction(e,t).objectStore(e)}async put(e,t,r){let i=this.openStore(e,"readwrite");return await new Promise((n,a)=>{let s=i.put(t,r);s.onsuccess=()=>{n(s.result)},s.onerror=()=>{a(s.error)}})}get(e,t){let r=this.openStore(e,"readonly");return new Promise((i,n)=>{let a=r.get(t);a.onsuccess=()=>{i(a.result)},a.onerror=()=>{n(a.error)}})}async delete(e,t){let r=this.openStore(e,"readwrite");return await new Promise((i,n)=>{let a=r.delete(t);a.onsuccess=()=>{i()},a.onerror=()=>{n(a.error)}})}close(){this.database.close()}},re=class{constructor(e,t){this.databaseName=e;this.objectStores=t}async connect(){let e=window.indexedDB.open(this.databaseName,1);return e.onupgradeneeded=t=>{let r=t.target.result;this.objectStores.forEach(i=>{r.createObjectStore(i)})},await new Promise((t,r)=>{e.onsuccess=i=>{t(new te(i.target.result))},e.onerror=i=>{r(i.target.error)}})}},L="fileBookmarks",W=new re("AvaloniaDb",[L]);var q=class{static getCaretCoordinates(e,t,r){var m,l;if(!we)throw new Error("textarea-caret-position#getCaretCoordinates should only be called in a browser");let i=(m=r==null?void 0:r.debug)!=null?m:!1;if(i){let h=document.querySelector("#input-textarea-caret-position-mirror-div");h&&((l=h.parentNode)==null||l.removeChild(h))}let n=document.createElement("div");n.id="input-textarea-caret-position-mirror-div",document.body.appendChild(n);let a=n.style,s=window.getComputedStyle?window.getComputedStyle(e):e.currentStyle,c=e.nodeName==="INPUT";a.whiteSpace="pre-wrap",c||(a.wordWrap="break-word"),a.position="absolute",i||(a.visibility="hidden"),ze.forEach(h=>{if(c&&h==="lineHeight")if(s.boxSizing==="border-box"){let k=parseInt(s.height),U=parseInt(s.paddingTop)+parseInt(s.paddingBottom)+parseInt(s.borderTopWidth)+parseInt(s.borderBottomWidth),B=U+parseInt(s.lineHeight);k>B?a.lineHeight=`${k-U}px`:k===B?a.lineHeight=s.lineHeight:a.lineHeight="0"}else a.lineHeight=s.height;else a[h]=s[h]}),_e?e.scrollHeight>parseInt(s.height)&&(a.overflowY="scroll"):a.overflow="hidden",n.textContent=e.value.substring(0,t),c&&(n.textContent=n.textContent.replace(/\s/g,"\xA0"));let u=document.createElement("span");u.textContent=e.value.substring(t)||".",n.appendChild(u);let d={top:u.offsetTop+parseInt(s.borderTopWidth),left:u.offsetLeft+parseInt(s.borderLeftWidth),height:parseInt(s.lineHeight)};return i?u.style.backgroundColor="#aaa":document.body.removeChild(n),d}},ze=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],we=typeof window!="undefined",_e=we&&window.mozInnerScreenX!=null;var K=class{static initializeBackgroundHandlers(){this.clipboardState===0&&(globalThis.addEventListener("paste",e=>{this.clipboardState===2&&this.resolveClipboard(e.clipboardData.getData("text"))}),this.clipboardState=1)}static async readClipboardText(){if(globalThis.navigator.clipboard.readText)return await globalThis.navigator.clipboard.readText();try{return await new Promise((e,t)=>{this.clipboardState=2,this.resolveClipboard=e,this.rejectClipboard=t})}finally{this.clipboardState=1,this.resolveClipboard=null,this.rejectClipboard=null}}static subscribeKeyEvents(e,t,r){let i=a=>{t(a.code,a.key,this.getModifiers(a))&&this.clipboardState!==2&&a.preventDefault()};e.addEventListener("keydown",i);let n=a=>{r(a.code,a.key,this.getModifiers(a))&&a.preventDefault(),this.rejectClipboard&&this.rejectClipboard()};return e.addEventListener("keyup",n),()=>{e.removeEventListener("keydown",i),e.removeEventListener("keyup",n)}}static subscribeTextEvents(e,t,r,i,n){let a=d=>{r(d)&&d.preventDefault()};e.addEventListener("compositionstart",a);let s=d=>{let m=d.getTargetRanges(),l=-1,h=-1;m.length>0&&(l=m[0].startOffset,h=m[0].endOffset),d.inputType==="insertCompositionText"&&(l=2,h=l+2),t(d,l,h)&&d.preventDefault()};e.addEventListener("beforeinput",s);let c=d=>{i(d)&&d.preventDefault()};e.addEventListener("compositionupdate",c);let u=d=>{n(d)&&d.preventDefault()};return e.addEventListener("compositionend",u),()=>{e.removeEventListener("compositionstart",a),e.removeEventListener("compositionupdate",c),e.removeEventListener("compositionend",u)}}static subscribePointerEvents(e,t,r,i,n,a){let s=l=>{t(l),l.preventDefault()},c=l=>{r(l),l.preventDefault()},u=l=>{i(l),l.preventDefault()},d=l=>{n(l),l.preventDefault()},m=l=>{a(l),l.preventDefault()};return e.addEventListener("pointermove",s),e.addEventListener("pointerdown",c),e.addEventListener("pointerup",u),e.addEventListener("wheel",m),e.addEventListener("pointercancel",d),()=>{e.removeEventListener("pointerover",s),e.removeEventListener("pointerdown",c),e.removeEventListener("pointerup",u),e.removeEventListener("pointercancel",d),e.removeEventListener("wheel",m)}}static subscribeInputEvents(e,t){let r=i=>{t(i.value)&&i.preventDefault()};return e.addEventListener("input",r),()=>{e.removeEventListener("input",r)}}static subscribeDropEvents(e,t){let r=i=>{t(i)&&i.preventDefault()};return e.addEventListener("dragover",r),e.addEventListener("dragenter",r),e.addEventListener("dragleave",r),e.addEventListener("drop",r),()=>{e.removeEventListener("dragover",r),e.removeEventListener("dragenter",r),e.removeEventListener("dragleave",r),e.removeEventListener("drop",r)}}static getCoalescedEvents(e){return e.getCoalescedEvents()}static subscribeKeyboardGeometryChange(e,t){"virtualKeyboard"in navigator&&navigator.virtualKeyboard.addEventListener("geometrychange",r=>{let i=e.getBoundingClientRect(),n=r.target.boundingRect;t({x:n.x-i.x,y:n.y-i.y,width:n.width,height:n.height})})}static subscribeVisibilityChange(e){return document.addEventListener("visibilitychange",()=>{e(document.visibilityState==="visible")}),document.visibilityState==="visible"}static clearInput(e){e.value=""}static focusElement(e){e.focus()}static setCursor(e,t){t==="default"?e.style.removeProperty("cursor"):e.style.cursor=t}static setBounds(e,t,r,i,n,a){e.style.left=t.toFixed(0)+"px",e.style.top=r.toFixed(0)+"px";let{left:s,top:c}=q.getCaretCoordinates(e,a);e.style.left=(t-s).toFixed(0)+"px",e.style.top=(r-c).toFixed(0)+"px"}static hide(e){e.style.display="none"}static show(e){e.style.display="block"}static setSurroundingText(e,t,r,i){!e||(e.value=t,e.setSelectionRange(r,i),e.style.width="20px",e.style.width=`${e.scrollWidth}px`)}static getModifiers(e){let t=0;return e.ctrlKey&&(t|=2),e.altKey&&(t|=1),e.shiftKey&&(t|=4),e.metaKey&&(t|=8),t.toString()}static setPointerCapture(e,t){e.setPointerCapture(t)}static releasePointerCapture(e,t){e.hasPointerCapture(t)&&e.releasePointerCapture(t)}};K.clipboardState=0;var P=class{static hasNativeFilePicker(){return"showSaveFilePicker"in globalThis}static isMobile(){var n;let e=(n=globalThis.navigator)==null?void 0:n.userAgentData;if(e)return e.mobile;let t=navigator.userAgent,r=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,i=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw(n|u)|c55\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i;return r.test(t)||i.test(t.substr(0,4))}static isTv(){return navigator.userAgent.includes("SmartTV")}};var b=class{constructor(e,t,r,i){this.handle=e;this.file=t;this.bookmarkId=r;this.wellKnownType=i}get name(){var e;return this.handle?this.handle.name:this.file?this.file.name:(e=this.wellKnownType)!=null?e:""}get kind(){return this.handle?this.handle.kind:this.file?"file":"directory"}static createFromHandle(e,t){return new b(e,void 0,t,void 0)}static createFromFile(e){return new b(void 0,e,void 0,void 0)}static createWellKnownDirectory(e){return new b(void 0,void 0,void 0,e)}static async openRead(e){if(e.file)return e.file;if(!e.handle||e.kind!=="file")throw new Error("StorageItem is not a file");return await e.verityPermissions("read"),await e.handle.getFile()}static async openWrite(e){if(!e.handle||e.kind!=="file")throw new Error("StorageItem is not a writeable file");return await e.verityPermissions("readwrite"),await e.handle.createWritable({keepExistingData:!0})}static async getProperties(e){try{let t=e.handle&&"getFile"in e.handle?await e.handle.getFile():e.file;return t?{Size:t.size,LastModified:t.lastModified,Type:t.type}:null}catch(t){return null}}static getItemsIterator(e){return e.kind!=="directory"||!e.handle?null:e.handle.entries()}static async createFile(e,t){if(e.kind!=="directory"||!e.handle)throw new TypeError("Unable to create item in the requested directory");return await e.verityPermissions("readwrite"),await e.handle.getFileHandle(t,{create:!0})}static async createFolder(e,t){if(e.kind!=="directory"||!e.handle)throw new TypeError("Unable to create item in the requested directory");return await e.verityPermissions("readwrite"),await e.handle.getDirectoryHandle(t,{create:!0})}static async deleteAsync(e){return e.handle?(await e.verityPermissions("readwrite"),await e.handle.remove({recursive:!0})):null}static async moveAsync(e,t){if(!e.handle)return null;if(t.kind!=="directory"||!t.handle)throw new TypeError("Unable to move item to the requested directory");return await e.verityPermissions("readwrite"),await e.handle.move(t)}async verityPermissions(e){if(!!this.handle&&!!P.hasNativeFilePicker()&&await this.handle.queryPermission({mode:e})!=="granted"&&await this.handle.requestPermission({mode:e})==="denied")throw new Error("Permissions denied")}static async saveBookmark(e){if(e.bookmarkId)return e.bookmarkId;if(!e.handle||!P.hasNativeFilePicker())return null;let t=await W.connect();try{return await t.put(L,e.handle,e.generateBookmarkId())}finally{t.close()}}static async deleteBookmark(e){if(!e.bookmarkId||!P.hasNativeFilePicker())return;let t=await W.connect();try{await t.delete(L,e.bookmarkId)}finally{t.close()}}generateBookmarkId(){return Date.now().toString(36)+Math.random().toString(36).substring(2)}},R=class{constructor(e){this.items=e}static itemsArray(e){return e.items}static filesToItemsArray(e){if(!e)return[];let t=[];for(let r=0;r(M(),le));return await new Promise(r=>{e.addEventListener("change",r),e.click()}),t.then(r=>r.getDirHandlesFromInput(e))}var ce=Ze;var et={accepts:[]},Pe=globalThis.showOpenFilePicker;async function tt(o={}){let e={...et,...o};if(Pe&&!o._preferPolyfill)return Pe(e);let t=document.createElement("input");t.type="file",t.multiple=e.multiple,t.accept=(e.accepts||[]).map(i=>[...(i.extensions||[]).map(n=>"."+n),...i.mimeTypes||[]]).flat().join(","),t.style.position="fixed",t.style.top="-100000px",t.style.left="-100000px",document.body.appendChild(t);let r=Promise.resolve().then(()=>(M(),le));return await new Promise(i=>{t.addEventListener("change",i),t.click()}),r.then(i=>i.getFileHandlesFromInput(t))}var de=tt;var Le=globalThis.showSaveFilePicker;async function dt(o={}){if(Le&&!o._preferPolyfill)return Le(o);o._name&&(console.warn("deprecated _name, spec now have `suggestedName`"),o.suggestedName=o._name);let{FileSystemFileHandle:e}=await Promise.resolve().then(()=>(E(),F)),{FileHandle:t}=await Promise.resolve().then(()=>(He(),ke));return new e(new t(o.suggestedName))}var he=dt;globalThis.DataTransferItem&&!DataTransferItem.prototype.getAsFileSystemHandle&&(DataTransferItem.prototype.getAsFileSystemHandle=async function(){let o=this.webkitGetAsEntry(),[{FileHandle:e,FolderHandle:t},{FileSystemDirectoryHandle:r},{FileSystemFileHandle:i}]=await Promise.all([Promise.resolve().then(()=>(ae(),ne)),Promise.resolve().then(()=>(j(),ee)),Promise.resolve().then(()=>(E(),F))]);return o.isFile?new i(new e(o,!1)):new r(new t(o,!1))});j();E();J();se();var be=class{static async selectFolderDialog(e,t){var n,a;let r={startIn:(a=(n=e==null?void 0:e.wellKnownType)!=null?n:e==null?void 0:e.handle)!=null?a:void 0,_preferPolyfill:t},i=await ce(r);return b.createFromHandle(i)}static async openFileDialog(e,t,r,i,n){var c,u;let a={startIn:(u=(c=e==null?void 0:e.wellKnownType)!=null?c:e==null?void 0:e.handle)!=null?u:void 0,multiple:t,excludeAcceptAllOption:i,types:r!=null?r:void 0,_preferPolyfill:n},s=await de(a);return new R(s.map(d=>b.createFromHandle(d)))}static async saveFileDialog(e,t,r,i,n){var c,u;let a={startIn:(u=(c=e==null?void 0:e.wellKnownType)!=null?c:e==null?void 0:e.handle)!=null?u:void 0,suggestedName:t!=null?t:void 0,excludeAcceptAllOption:i,types:r!=null?r:void 0,_preferPolyfill:n},s=await he(a);return b.createFromHandle(s)}static async openBookmark(e){let t=await W.connect();try{let r=await t.get(L,e);return r&&b.createFromHandle(r,e)}finally{t.close()}}static createAcceptType(e,t,r){let i={};return t.forEach(n=>{i[n]=r!=null?r:[]}),{description:e,accept:i}}};export{b as StorageItem,R as StorageItems,be as StorageProvider}; //# sourceMappingURL=storage.js.map diff --git a/_framework/storage.js.br b/_framework/storage.js.br index 5dfe1ad..75d8c58 100644 Binary files a/_framework/storage.js.br and b/_framework/storage.js.br differ diff --git a/_framework/storage.js.gz b/_framework/storage.js.gz index 11a55b6..9aaa38a 100644 Binary files a/_framework/storage.js.gz and b/_framework/storage.js.gz differ diff --git a/_framework/storage.js.map b/_framework/storage.js.map index 94c9b5e..fbfac65 100755 --- a/_framework/storage.js.map +++ b/_framework/storage.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../webapp/node_modules/native-file-system-adapter/src/config.js", "../webapp/node_modules/native-file-system-adapter/src/adapters/memory.js", "../webapp/node_modules/native-file-system-adapter/src/adapters/sandbox.js", "../webapp/node_modules/native-file-system-adapter/src/FileSystemHandle.js", "../webapp/node_modules/native-file-system-adapter/src/FileSystemWritableFileStream.js", "../webapp/node_modules/native-file-system-adapter/src/FileSystemFileHandle.js", "../webapp/node_modules/native-file-system-adapter/src/FileSystemDirectoryHandle.js", "../webapp/node_modules/native-file-system-adapter/src/util.js", "../webapp/node_modules/native-file-system-adapter/src/adapters/downloader.js", "../webapp/modules/storage/indexedDb.ts", "../webapp/modules/avalonia/caretHelper.ts", "../webapp/modules/avalonia/jsExports.ts", "../webapp/modules/avalonia/input.ts", "../webapp/modules/avalonia/caniuse.ts", "../webapp/modules/avalonia/rendering/webRenderTarget.ts", "../webapp/modules/avalonia/rendering/webGlRenderTarget.ts", "../webapp/modules/avalonia/rendering/softwareRenderTarget.ts", "../webapp/modules/avalonia/rendering/webRenderTargetRegistry.ts", "../webapp/modules/storage/storageItem.ts", "../webapp/node_modules/native-file-system-adapter/src/showDirectoryPicker.js", "../webapp/node_modules/native-file-system-adapter/src/showOpenFilePicker.js", "../webapp/node_modules/native-file-system-adapter/src/showSaveFilePicker.js", "../webapp/node_modules/native-file-system-adapter/src/getOriginPrivateDirectory.js", "../webapp/node_modules/native-file-system-adapter/src/es6.js", "../webapp/modules/storage/storageProvider.ts"], - "sourcesContent": ["const config = {\n ReadableStream: globalThis.ReadableStream,\n WritableStream: globalThis.WritableStream,\n TransformStream: globalThis.TransformStream,\n DOMException: globalThis.DOMException,\n Blob: globalThis.Blob,\n File: globalThis.File,\n}\n\nexport default config\n", "import { errors } from '../util.js'\nimport config from '../config.js'\n\nconst { File, Blob, DOMException } = config\nconst { INVALID, GONE, MISMATCH, MOD_ERR, SYNTAX, SECURITY, DISALLOWED } = errors\n\nexport class Sink {\n\n /**\n * @param {FileHandle} fileHandle\n * @param {File} file\n */\n constructor (fileHandle, file) {\n this.fileHandle = fileHandle\n this.file = file\n this.size = file.size\n this.position = 0\n }\n\n write (chunk) {\n let file = this.file\n\n if (typeof chunk === 'object') {\n if (chunk.type === 'write') {\n if (Number.isInteger(chunk.position) && chunk.position >= 0) {\n this.position = chunk.position\n if (this.size < chunk.position) {\n this.file = new File(\n [this.file, new ArrayBuffer(chunk.position - this.size)],\n this.file.name,\n this.file\n )\n }\n }\n if (!('data' in chunk)) {\n throw new DOMException(...SYNTAX('write requires a data argument'))\n }\n chunk = chunk.data\n } else if (chunk.type === 'seek') {\n if (Number.isInteger(chunk.position) && chunk.position >= 0) {\n if (this.size < chunk.position) {\n throw new DOMException(...INVALID)\n }\n this.position = chunk.position\n return\n } else {\n throw new DOMException(...SYNTAX('seek requires a position argument'))\n }\n } else if (chunk.type === 'truncate') {\n if (Number.isInteger(chunk.size) && chunk.size >= 0) {\n file = chunk.size < this.size\n ? new File([file.slice(0, chunk.size)], file.name, file)\n : new File([file, new Uint8Array(chunk.size - this.size)], file.name)\n\n this.size = file.size\n if (this.position > file.size) {\n this.position = file.size\n }\n this.file = file\n return\n } else {\n throw new DOMException(...SYNTAX('truncate requires a size argument'))\n }\n }\n }\n\n chunk = new Blob([chunk])\n\n let blob = this.file\n // Calc the head and tail fragments\n const head = blob.slice(0, this.position)\n const tail = blob.slice(this.position + chunk.size)\n\n // Calc the padding\n let padding = this.position - head.size\n if (padding < 0) {\n padding = 0\n }\n blob = new File([\n head,\n new Uint8Array(padding),\n chunk,\n tail\n ], blob.name)\n\n this.size = blob.size\n this.position += chunk.size\n\n this.file = blob\n }\n close () {\n if (this.fileHandle._deleted) throw new DOMException(...GONE)\n this.fileHandle._file = this.file\n this.file =\n this.position =\n this.size = null\n if (this.fileHandle.onclose) {\n this.fileHandle.onclose(this.fileHandle)\n }\n }\n}\n\nexport class FileHandle {\n constructor (name = '', file = new File([], name), writable = true) {\n this._file = file\n this.name = name\n this.kind = 'file'\n this._deleted = false\n this.writable = writable\n this.readable = true\n }\n\n async getFile () {\n if (this._deleted) throw new DOMException(...GONE)\n return this._file\n }\n\n async createWritable (opts) {\n if (!this.writable) throw new DOMException(...DISALLOWED)\n if (this._deleted) throw new DOMException(...GONE)\n\n const file = opts.keepExistingData\n ? await this.getFile()\n : new File([], this.name)\n\n return new Sink(this, file)\n }\n\n async isSameEntry (other) {\n return this === other\n }\n\n async _destroy () {\n this._deleted = true\n this._file = null\n }\n}\n\nexport class FolderHandle {\n\n /** @param {string} name */\n constructor (name, writable = true) {\n this.name = name\n this.kind = 'directory'\n this._deleted = false\n /** @type {Object.} */\n this._entries = {}\n this.writable = writable\n this.readable = true\n }\n\n /** @returns {AsyncGenerator<[string, FileHandle | FolderHandle]>} */\n async * entries () {\n if (this._deleted) throw new DOMException(...GONE)\n yield* Object.entries(this._entries)\n }\n\n async isSameEntry (other) {\n return this === other\n }\n\n /**\n * @param {string} name\n * @param {{ create: boolean; }} opts\n */\n async getDirectoryHandle (name, opts) {\n if (this._deleted) throw new DOMException(...GONE)\n const entry = this._entries[name]\n if (entry) { // entry exist\n if (entry instanceof FileHandle) {\n throw new DOMException(...MISMATCH)\n } else {\n return entry\n }\n } else {\n if (opts.create) {\n return (this._entries[name] = new FolderHandle(name))\n } else {\n throw new DOMException(...GONE)\n }\n }\n }\n\n /**\n * @param {string} name\n * @param {{ create: boolean; }} opts\n */\n async getFileHandle (name, opts) {\n const entry = this._entries[name]\n const isFile = entry instanceof FileHandle\n if (entry && isFile) return entry\n if (entry && !isFile) throw new DOMException(...MISMATCH)\n if (!entry && !opts.create) throw new DOMException(...GONE)\n if (!entry && opts.create) {\n return (this._entries[name] = new FileHandle(name))\n }\n }\n\n async removeEntry (name, opts) {\n const entry = this._entries[name]\n if (!entry) throw new DOMException(...GONE)\n await entry._destroy(opts.recursive)\n delete this._entries[name]\n }\n\n async _destroy (recursive) {\n for (let x of Object.values(this._entries)) {\n if (!recursive) throw new DOMException(...MOD_ERR)\n await x._destroy(recursive)\n }\n this._entries = {}\n this._deleted = true\n }\n}\n\nconst fs = new FolderHandle('')\n\nexport default () => fs\n", "/* global Blob, DOMException */\n\nimport { errors } from '../util.js'\n\nconst { DISALLOWED } = errors\n\nclass Sink {\n /**\n * @param {FileWriter} writer\n * @param {FileEntry} fileEntry\n */\n constructor (writer, fileEntry) {\n this.writer = writer\n this.fileEntry = fileEntry\n }\n\n /**\n * @param {BlobPart | Object} chunk\n */\n async write (chunk) {\n if (typeof chunk === 'object') {\n if (chunk.type === 'write') {\n if (Number.isInteger(chunk.position) && chunk.position >= 0) {\n this.writer.seek(chunk.position)\n if (this.writer.position !== chunk.position) {\n await new Promise((resolve, reject) => {\n this.writer.onwriteend = resolve\n this.writer.onerror = reject\n this.writer.truncate(chunk.position)\n })\n this.writer.seek(chunk.position)\n }\n }\n if (!('data' in chunk)) {\n throw new DOMException('Failed to execute \\'write\\' on \\'UnderlyingSinkBase\\': Invalid params passed. write requires a data argument', 'SyntaxError')\n }\n chunk = chunk.data\n } else if (chunk.type === 'seek') {\n if (Number.isInteger(chunk.position) && chunk.position >= 0) {\n this.writer.seek(chunk.position)\n if (this.writer.position !== chunk.position) {\n throw new DOMException('seeking position failed', 'InvalidStateError')\n }\n return\n } else {\n throw new DOMException('Failed to execute \\'write\\' on \\'UnderlyingSinkBase\\': Invalid params passed. seek requires a position argument', 'SyntaxError')\n }\n } else if (chunk.type === 'truncate') {\n return new Promise(resolve => {\n if (Number.isInteger(chunk.size) && chunk.size >= 0) {\n this.writer.onwriteend = evt => resolve()\n this.writer.truncate(chunk.size)\n } else {\n throw new DOMException('Failed to execute \\'write\\' on \\'UnderlyingSinkBase\\': Invalid params passed. truncate requires a size argument', 'SyntaxError')\n }\n })\n }\n }\n await new Promise((resolve, reject) => {\n this.writer.onwriteend = resolve\n this.writer.onerror = reject\n this.writer.write(new Blob([chunk]))\n })\n }\n\n close () {\n return new Promise(this.fileEntry.file.bind(this.fileEntry))\n }\n}\n\nexport class FileHandle {\n /** @param {FileEntry} file */\n constructor (file, writable = true) {\n this.file = file\n this.kind = 'file'\n this.writable = writable\n this.readable = true\n }\n\n get name () {\n return this.file.name\n }\n\n /**\n * @param {{ file: { toURL: () => string; }; }} other\n */\n isSameEntry (other) {\n return this.file.toURL() === other.file.toURL()\n }\n\n /** @return {Promise} */\n getFile () {\n return new Promise(this.file.file.bind(this.file))\n }\n\n /** @return {Promise} */\n createWritable (opts) {\n if (!this.writable) throw new DOMException(...DISALLOWED)\n\n return new Promise((resolve, reject) =>\n this.file.createWriter(fileWriter => {\n if (opts.keepExistingData === false) {\n fileWriter.onwriteend = evt => resolve(new Sink(fileWriter, this.file))\n fileWriter.truncate(0)\n } else {\n resolve(new Sink(fileWriter, this.file))\n }\n }, reject)\n )\n }\n}\n\nexport class FolderHandle {\n /** @param {DirectoryEntry} dir */\n constructor (dir, writable = true) {\n this.dir = dir\n this.writable = writable\n this.readable = true\n this.kind = 'directory'\n this.name = dir.name\n }\n\n /** @param {FolderHandle} other */\n isSameEntry (other) {\n return this.dir.fullPath === other.dir.fullPath\n }\n\n /** @returns {AsyncGenerator<[string, FileHandle | FolderHandle]>} */\n async * entries () {\n const reader = this.dir.createReader()\n const entries = await new Promise(reader.readEntries.bind(reader))\n for (const x of entries) {\n yield [x.name, x.isFile ? new FileHandle(x, this.writable) : new FolderHandle(x, this.writable)]\n }\n }\n\n /**\n * @param {string} name\n * @param {{ create: boolean; }} opts\n * @returns {Promise}\n */\n getDirectoryHandle (name, opts) {\n return new Promise((resolve, reject) => {\n this.dir.getDirectory(name, opts, dir => {\n resolve(new FolderHandle(dir))\n }, reject)\n })\n }\n\n /**\n * @param {string} name\n * @param {{ create: boolean; }} opts\n * @returns {Promise}\n */\n getFileHandle (name, opts) {\n return new Promise((resolve, reject) =>\n this.dir.getFile(name, opts, file => resolve(new FileHandle(file)), reject)\n )\n }\n\n /**\n * @param {string} name\n * @param {{ recursive: boolean; }} opts\n */\n async removeEntry (name, opts) {\n /** @type {Error|FolderHandle|FileHandle} */\n const entry = await this.getDirectoryHandle(name, { create: false }).catch(err =>\n err.name === 'TypeMismatchError' ? this.getFileHandle(name, { create: false }) : err\n )\n\n if (entry instanceof Error) throw entry\n\n return new Promise((resolve, reject) => {\n if (entry instanceof FolderHandle) {\n opts.recursive\n ? entry.dir.removeRecursively(() => resolve(), reject)\n : entry.dir.remove(() => resolve(), reject)\n } else if (entry.file) {\n entry.file.remove(() => resolve(), reject)\n }\n })\n }\n}\n\nexport default (opts = {}) => new Promise((resolve, reject) =>\n window.webkitRequestFileSystem(\n opts._persistent, 0,\n e => resolve(new FolderHandle(e.root)),\n reject\n )\n)\n", "const kAdapter = Symbol('adapter')\n\nclass FileSystemHandle {\n /** @type {FileSystemHandle} */\n [kAdapter]\n\n /** @type {string} */\n name\n /** @type {('file'|'directory')} */\n kind\n\n /** @param {FileSystemHandle & {writable}} adapter */\n constructor (adapter) {\n this.kind = adapter.kind\n this.name = adapter.name\n this[kAdapter] = adapter\n }\n\n async queryPermission ({mode = 'read'} = {}) {\n const handle = this[kAdapter]\n\n if (handle.queryPermission) {\n return handle.queryPermission({mode})\n }\n\n if (mode === 'read') {\n return 'granted'\n } else if (mode === 'readwrite') {\n return handle.writable ? 'granted' : 'denied'\n } else {\n throw new TypeError(`Mode ${mode} must be 'read' or 'readwrite'`)\n }\n }\n\n async requestPermission ({mode = 'read'} = {}) {\n const handle = this[kAdapter]\n if (handle.requestPermission) {\n return handle.requestPermission({mode})\n }\n\n if (mode === 'read') {\n return 'granted'\n } else if (mode === 'readwrite') {\n return handle.writable ? 'granted' : 'denied'\n } else {\n throw new TypeError(`Mode ${mode} must be 'read' or 'readwrite'`)\n }\n }\n\n /**\n * Attempts to remove the entry represented by handle from the underlying file system.\n *\n * @param {object} options\n * @param {boolean} [options.recursive=false]\n */\n async remove (options = {}) {\n await this[kAdapter].remove(options)\n }\n\n /**\n * @param {FileSystemHandle} other\n */\n async isSameEntry (other) {\n if (this === other) return true\n if (\n (!other) ||\n (typeof other !== 'object') ||\n (this.kind !== other.kind) ||\n (!other[kAdapter])\n ) return false\n return this[kAdapter].isSameEntry(other[kAdapter])\n }\n}\n\nObject.defineProperty(FileSystemHandle.prototype, Symbol.toStringTag, {\n value: 'FileSystemHandle',\n writable: false,\n enumerable: false,\n configurable: true\n})\n\nexport default FileSystemHandle\nexport { FileSystemHandle }\n", "import config from './config.js'\n\nconst { WritableStream } = config\n\nclass FileSystemWritableFileStream extends WritableStream {\n constructor (...args) {\n super(...args)\n\n // Stupid Safari hack to extend native classes\n // https://bugs.webkit.org/show_bug.cgi?id=226201\n Object.setPrototypeOf(this, FileSystemWritableFileStream.prototype)\n\n /** @private */\n this._closed = false\n }\n\n close () {\n this._closed = true\n const w = this.getWriter()\n const p = w.close()\n w.releaseLock()\n return p\n // return super.close ? super.close() : this.getWriter().close()\n }\n\n /** @param {number} position */\n seek (position) {\n return this.write({ type: 'seek', position })\n }\n\n /** @param {number} size */\n truncate (size) {\n return this.write({ type: 'truncate', size })\n }\n\n write (data) {\n if (this._closed) {\n return Promise.reject(new TypeError('Cannot write to a CLOSED writable stream'))\n }\n\n const writer = this.getWriter()\n const p = writer.write(data)\n writer.releaseLock()\n return p\n }\n}\n\nObject.defineProperty(FileSystemWritableFileStream.prototype, Symbol.toStringTag, {\n value: 'FileSystemWritableFileStream',\n writable: false,\n enumerable: false,\n configurable: true\n})\n\nObject.defineProperties(FileSystemWritableFileStream.prototype, {\n close: { enumerable: true },\n seek: { enumerable: true },\n truncate: { enumerable: true },\n write: { enumerable: true }\n})\n\nexport default FileSystemWritableFileStream\nexport { FileSystemWritableFileStream }\n", "import FileSystemHandle from './FileSystemHandle.js'\nimport FileSystemWritableFileStream from './FileSystemWritableFileStream.js'\n\nconst kAdapter = Symbol('adapter')\n\nclass FileSystemFileHandle extends FileSystemHandle {\n /** @type {FileSystemFileHandle} */\n [kAdapter]\n\n constructor (adapter) {\n super(adapter)\n this[kAdapter] = adapter\n }\n\n /**\n * @param {Object} [options={}]\n * @param {boolean} [options.keepExistingData]\n * @returns {Promise}\n */\n async createWritable (options = {}) {\n return new FileSystemWritableFileStream(\n await this[kAdapter].createWritable(options)\n )\n }\n\n /**\n * @returns {Promise}\n */\n async getFile () {\n return this[kAdapter].getFile()\n }\n}\n\nObject.defineProperty(FileSystemFileHandle.prototype, Symbol.toStringTag, {\n value: 'FileSystemFileHandle',\n writable: false,\n enumerable: false,\n configurable: true\n})\n\nObject.defineProperties(FileSystemFileHandle.prototype, {\n createWritable: { enumerable: true },\n getFile: { enumerable: true }\n})\n\nexport default FileSystemFileHandle\nexport { FileSystemFileHandle }\n", "import FileSystemHandle from './FileSystemHandle.js'\n\nconst kAdapter = Symbol('adapter')\n\nclass FileSystemDirectoryHandle extends FileSystemHandle {\n /** @type {FileSystemDirectoryHandle} */\n [kAdapter]\n\n constructor (adapter) {\n super(adapter)\n this[kAdapter] = adapter\n }\n\n /**\n * @param {string} name Name of the directory\n * @param {object} [options]\n * @param {boolean} [options.create] create the directory if don't exist\n * @returns {Promise}\n */\n async getDirectoryHandle (name, options = {}) {\n if (name === '') {\n throw new TypeError(`Name can't be an empty string.`)\n }\n if (name === '.' || name === '..' || name.includes('/')) {\n throw new TypeError(`Name contains invalid characters.`)\n }\n options.create = !!options.create\n const handle = await this[kAdapter].getDirectoryHandle(name, options)\n return new FileSystemDirectoryHandle(handle)\n }\n\n /** @returns {AsyncGenerator<[string, FileSystemHandle | FileSystemDirectoryHandle]>} */\n async * entries () {\n const {FileSystemFileHandle} = await import('./FileSystemFileHandle.js')\n\n for await (const [_, entry] of this[kAdapter].entries())\n yield [entry.name, entry.kind === 'file'\n ? new FileSystemFileHandle(entry)\n : new FileSystemDirectoryHandle(entry)]\n }\n\n /** @deprecated use .entries() instead */\n async * getEntries() {\n const {FileSystemFileHandle} = await import('./FileSystemFileHandle.js')\n console.warn('deprecated, use .entries() instead')\n for await (let entry of this[kAdapter].entries())\n yield entry.kind === 'file'\n ? new FileSystemFileHandle(entry)\n : new FileSystemDirectoryHandle(entry)\n }\n\n /**\n * @param {string} name Name of the file\n * @param {object} [options]\n * @param {boolean} [options.create] create the file if don't exist\n */\n async getFileHandle (name, options = {}) {\n const {FileSystemFileHandle} = await import('./FileSystemFileHandle.js')\n if (name === '') throw new TypeError(`Name can't be an empty string.`)\n if (name === '.' || name === '..' || name.includes('/')) {\n throw new TypeError(`Name contains invalid characters.`)\n }\n options.create = !!options.create\n const handle = await this[kAdapter].getFileHandle(name, options)\n return new FileSystemFileHandle(handle)\n }\n\n /**\n * @param {string} name\n * @param {object} [options]\n * @param {boolean} [options.recursive]\n */\n async removeEntry (name, options = {}) {\n if (name === '') {\n throw new TypeError(`Name can't be an empty string.`)\n }\n if (name === '.' || name === '..' || name.includes('/')) {\n throw new TypeError(`Name contains invalid characters.`)\n }\n options.recursive = !!options.recursive // cuz node's fs.rm require boolean\n return this[kAdapter].removeEntry(name, options)\n }\n\n async resolve (possibleDescendant) {\n if (await possibleDescendant.isSameEntry(this)) {\n return []\n }\n\n const openSet = [{ handle: this, path: [] }]\n\n while (openSet.length) {\n let { handle: current, path } = openSet.pop()\n for await (const entry of current.values()) {\n if (await entry.isSameEntry(possibleDescendant)) {\n return [...path, entry.name]\n }\n if (entry.kind === 'directory') {\n openSet.push({ handle: entry, path: [...path, entry.name] })\n }\n }\n }\n\n return null\n }\n\n async * keys () {\n for await (const [name] of this[kAdapter].entries())\n yield name\n }\n\n async * values () {\n for await (const [_, entry] of this)\n yield entry\n }\n\n [Symbol.asyncIterator]() {\n return this.entries()\n }\n}\n\nObject.defineProperty(FileSystemDirectoryHandle.prototype, Symbol.toStringTag, {\n\tvalue: 'FileSystemDirectoryHandle',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n})\n\nObject.defineProperties(FileSystemDirectoryHandle.prototype, {\n\tgetDirectoryHandle: { enumerable: true },\n\tentries: { enumerable: true },\n\tgetFileHandle: { enumerable: true },\n\tremoveEntry: { enumerable: true }\n})\n\nexport default FileSystemDirectoryHandle\nexport { FileSystemDirectoryHandle }\n", "export const errors = {\n INVALID: ['seeking position failed.', 'InvalidStateError'],\n GONE: ['A requested file or directory could not be found at the time an operation was processed.', 'NotFoundError'],\n MISMATCH: ['The path supplied exists, but was not an entry of requested type.', 'TypeMismatchError'],\n MOD_ERR: ['The object can not be modified in this way.', 'InvalidModificationError'],\n SYNTAX: m => [`Failed to execute 'write' on 'UnderlyingSinkBase': Invalid params passed. ${m}`, 'SyntaxError'],\n SECURITY: ['It was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources.', 'SecurityError'],\n DISALLOWED: ['The request is not allowed by the user agent or the platform in the current context.', 'NotAllowedError']\n}\n\nexport const config = {\n writable: globalThis.WritableStream\n}\n\nexport async function fromDataTransfer (entries) {\n console.warn('deprecated fromDataTransfer - use `dt.items[0].getAsFileSystemHandle()` instead')\n const [memory, sandbox, fs] = await Promise.all([\n import('./adapters/memory.js'),\n import('./adapters/sandbox.js'),\n import('./FileSystemDirectoryHandle.js')\n ])\n\n const folder = new memory.FolderHandle('', false)\n folder._entries = entries.map(entry => entry.isFile\n ? new sandbox.FileHandle(entry, false)\n : new sandbox.FolderHandle(entry, false)\n )\n\n return new fs.FileSystemDirectoryHandle(folder)\n}\n\nexport async function getDirHandlesFromInput (input) {\n const { FolderHandle, FileHandle } = await import('./adapters/memory.js')\n const { FileSystemDirectoryHandle } = await import('./FileSystemDirectoryHandle.js')\n\n const files = Array.from(input.files)\n const rootName = files[0].webkitRelativePath.split('/', 1)[0]\n const root = new FolderHandle(rootName, false)\n\n files.forEach(file => {\n const path = file.webkitRelativePath.split('/')\n path.shift()\n const name = path.pop()\n\n const dir = path.reduce((dir, path) => {\n if (!dir._entries[path]) dir._entries[path] = new FolderHandle(path, false)\n return dir._entries[path]\n }, root)\n\n dir._entries[name] = new FileHandle(file.name, file, false)\n })\n\n return new FileSystemDirectoryHandle(root)\n}\n\nexport async function getFileHandlesFromInput (input) {\n const { FileHandle } = await import('./adapters/memory.js')\n const { FileSystemFileHandle } = await import('./FileSystemFileHandle.js')\n\n return Array.from(input.files).map(file =>\n new FileSystemFileHandle(new FileHandle(file.name, file, false))\n )\n}\n", "import { errors } from '../util.js'\nimport config from '../config.js'\n\nconst {\n WritableStream,\n TransformStream,\n DOMException,\n Blob\n} = config\n\nconst { GONE } = errors\n// @ts-ignore\nconst isSafari = /constructor/i.test(window.HTMLElement) || window.safari || window.WebKitPoint\n\nexport class FileHandle {\n constructor (name = 'unkown') {\n this.name = name\n this.kind = 'file'\n }\n\n async getFile () {\n throw new DOMException(...GONE)\n }\n\n async isSameEntry(other) {\n return this === other\n }\n\n /**\n * @param {object} [options={}]\n */\n async createWritable (options = {}) {\n const sw = await navigator.serviceWorker?.getRegistration()\n const link = document.createElement('a')\n const ts = new TransformStream()\n const sink = ts.writable\n\n link.download = this.name\n\n if (isSafari || !sw) {\n /** @type {Blob[]} */\n let chunks = []\n ts.readable.pipeTo(new WritableStream({\n write (chunk) {\n chunks.push(new Blob([chunk]))\n },\n close () {\n const blob = new Blob(chunks, { type: 'application/octet-stream; charset=utf-8' })\n chunks = []\n link.href = URL.createObjectURL(blob)\n link.click()\n setTimeout(() => URL.revokeObjectURL(link.href), 10000)\n }\n }))\n } else {\n const { writable, readablePort } = new RemoteWritableStream(WritableStream)\n // Make filename RFC5987 compatible\n const fileName = encodeURIComponent(this.name).replace(/['()]/g, escape).replace(/\\*/g, '%2A')\n const headers = {\n 'content-disposition': \"attachment; filename*=UTF-8''\" + fileName,\n 'content-type': 'application/octet-stream; charset=utf-8',\n ...(options.size ? { 'content-length': options.size } : {})\n }\n\n const keepAlive = setTimeout(() => sw.active.postMessage(0), 10000)\n\n ts.readable.pipeThrough(new TransformStream({\n transform (chunk, ctrl) {\n if (chunk instanceof Uint8Array) return ctrl.enqueue(chunk)\n const reader = new Response(chunk).body.getReader()\n const pump = _ => reader.read().then(e => e.done ? 0 : pump(ctrl.enqueue(e.value)))\n return pump()\n }\n })).pipeTo(writable).finally(() => {\n clearInterval(keepAlive)\n })\n\n // Transfer the stream to service worker\n sw.active.postMessage({\n url: sw.scope + fileName,\n headers,\n readablePort\n }, [readablePort])\n\n // Trigger the download with a hidden iframe\n const iframe = document.createElement('iframe')\n iframe.hidden = true\n iframe.src = sw.scope + fileName\n document.body.appendChild(iframe)\n }\n\n return sink.getWriter()\n }\n}\n\nconst WRITE = 0\nconst PULL = 0\nconst ERROR = 1\nconst ABORT = 1\nconst CLOSE = 2\n\nclass MessagePortSink {\n /** @param {MessagePort} port */\n constructor (port) {\n port.onmessage = event => this._onMessage(event.data)\n this._port = port\n this._resetReady()\n }\n\n start (controller) {\n this._controller = controller\n // Apply initial backpressure\n return this._readyPromise\n }\n\n write (chunk) {\n const message = { type: WRITE, chunk }\n\n // Send chunk\n this._port.postMessage(message, [chunk.buffer])\n\n // Assume backpressure after every write, until sender pulls\n this._resetReady()\n\n // Apply backpressure\n return this._readyPromise\n }\n\n close () {\n this._port.postMessage({ type: CLOSE })\n this._port.close()\n }\n\n abort (reason) {\n this._port.postMessage({ type: ABORT, reason })\n this._port.close()\n }\n\n _onMessage (message) {\n if (message.type === PULL) this._resolveReady()\n if (message.type === ERROR) this._onError(message.reason)\n }\n\n _onError (reason) {\n this._controller.error(reason)\n this._rejectReady(reason)\n this._port.close()\n }\n\n _resetReady () {\n this._readyPromise = new Promise((resolve, reject) => {\n this._readyResolve = resolve\n this._readyReject = reject\n })\n this._readyPending = true\n }\n\n _resolveReady () {\n this._readyResolve()\n this._readyPending = false\n }\n\n _rejectReady (reason) {\n if (!this._readyPending) this._resetReady()\n this._readyPromise.catch(() => {})\n this._readyReject(reason)\n this._readyPending = false\n }\n}\n\nclass RemoteWritableStream {\n constructor (WritableStream) {\n const channel = new MessageChannel()\n this.readablePort = channel.port1\n this.writable = new WritableStream(\n new MessagePortSink(channel.port2)\n )\n }\n}\n", "class InnerDbConnection {\r\n constructor(private readonly database: IDBDatabase) { }\r\n\r\n private openStore(store: string, mode: IDBTransactionMode): IDBObjectStore {\r\n const tx = this.database.transaction(store, mode);\r\n return tx.objectStore(store);\r\n }\r\n\r\n public async put(store: string, obj: any, key?: IDBValidKey): Promise {\r\n const os = this.openStore(store, \"readwrite\");\r\n\r\n return await new Promise((resolve, reject) => {\r\n const response = os.put(obj, key);\r\n response.onsuccess = () => {\r\n resolve(response.result);\r\n };\r\n response.onerror = () => {\r\n reject(response.error);\r\n };\r\n });\r\n }\r\n\r\n public get(store: string, key: IDBValidKey): any {\r\n const os = this.openStore(store, \"readonly\");\r\n\r\n return new Promise((resolve, reject) => {\r\n const response = os.get(key);\r\n response.onsuccess = () => {\r\n resolve(response.result);\r\n };\r\n response.onerror = () => {\r\n reject(response.error);\r\n };\r\n });\r\n }\r\n\r\n public async delete(store: string, key: IDBValidKey): Promise {\r\n const os = this.openStore(store, \"readwrite\");\r\n\r\n return await new Promise((resolve, reject) => {\r\n const response = os.delete(key);\r\n response.onsuccess = () => {\r\n resolve();\r\n };\r\n response.onerror = () => {\r\n reject(response.error);\r\n };\r\n });\r\n }\r\n\r\n public close() {\r\n this.database.close();\r\n }\r\n}\r\n\r\nclass IndexedDbWrapper {\r\n constructor(private readonly databaseName: string, private readonly objectStores: [string]) {\r\n }\r\n\r\n public async connect(): Promise {\r\n const conn = window.indexedDB.open(this.databaseName, 1);\r\n\r\n conn.onupgradeneeded = event => {\r\n const db = (event.target as IDBRequest).result;\r\n this.objectStores.forEach(store => {\r\n db.createObjectStore(store);\r\n });\r\n };\r\n\r\n return await new Promise((resolve, reject) => {\r\n conn.onsuccess = event => {\r\n resolve(new InnerDbConnection((event.target as IDBRequest).result));\r\n };\r\n conn.onerror = event => {\r\n reject((event.target as IDBRequest).error);\r\n };\r\n });\r\n }\r\n}\r\n\r\nexport const fileBookmarksStore: string = \"fileBookmarks\";\r\nexport const avaloniaDb = new IndexedDbWrapper(\"AvaloniaDb\", [\r\n fileBookmarksStore\r\n]);\r\n", "// Based on https://github.com/component/textarea-caret-position/blob/master/index.js\r\nexport class CaretHelper {\r\n public static getCaretCoordinates(\r\n element: HTMLInputElement | HTMLTextAreaElement,\r\n position: number,\r\n options?: { debug: boolean }\r\n ) {\r\n if (!isBrowser) {\r\n throw new Error(\r\n \"textarea-caret-position#getCaretCoordinates should only be called in a browser\"\r\n );\r\n }\r\n\r\n const debug = options?.debug ?? false;\r\n if (debug) {\r\n const el = document.querySelector(\r\n \"#input-textarea-caret-position-mirror-div\"\r\n );\r\n if (el) el.parentNode?.removeChild(el);\r\n }\r\n\r\n // The mirror div will replicate the textarea's style\r\n const div = document.createElement(\"div\");\r\n div.id = \"input-textarea-caret-position-mirror-div\";\r\n document.body.appendChild(div);\r\n\r\n const style = div.style;\r\n const computed = window.getComputedStyle\r\n ? window.getComputedStyle(element)\r\n : ((element as any).currentStyle as CSSStyleDeclaration); // currentStyle for IE < 9\r\n const isInput = element.nodeName === \"INPUT\";\r\n\r\n // Default textarea styles\r\n style.whiteSpace = \"pre-wrap\";\r\n if (!isInput) style.wordWrap = \"break-word\"; // only for textarea-s\r\n\r\n // Position off-screen\r\n style.position = \"absolute\"; // required to return coordinates properly\r\n if (!debug) style.visibility = \"hidden\"; // not 'display: none' because we want rendering\r\n\r\n // Transfer the element's properties to the div\r\n properties.forEach((prop: string) => {\r\n if (isInput && prop === \"lineHeight\") {\r\n // Special case for s because text is rendered centered and line height may be != height\r\n if (computed.boxSizing === \"border-box\") {\r\n const height = parseInt(computed.height);\r\n const outerHeight =\r\n parseInt(computed.paddingTop) +\r\n parseInt(computed.paddingBottom) +\r\n parseInt(computed.borderTopWidth) +\r\n parseInt(computed.borderBottomWidth);\r\n const targetHeight = outerHeight + parseInt(computed.lineHeight);\r\n if (height > targetHeight) {\r\n style.lineHeight = `${height - outerHeight}px`;\r\n } else if (height === targetHeight) {\r\n style.lineHeight = computed.lineHeight;\r\n } else {\r\n style.lineHeight = \"0\";\r\n }\r\n } else {\r\n style.lineHeight = computed.height;\r\n }\r\n } else {\r\n (style as any)[prop] = (computed as any)[prop];\r\n }\r\n });\r\n\r\n if (isFirefox) {\r\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\r\n if (element.scrollHeight > parseInt(computed.height)) {\r\n style.overflowY = \"scroll\";\r\n }\r\n } else {\r\n style.overflow = \"hidden\"; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\r\n }\r\n\r\n div.textContent = element.value.substring(0, position);\r\n // The second special handling for input type=\"text\" vs textarea:\r\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\r\n if (isInput) div.textContent = div.textContent.replace(/\\s/g, \"\\u00a0\");\r\n\r\n const span = document.createElement(\"span\");\r\n // Wrapping must be replicated *exactly*, including when a long word gets\r\n // onto the next line, with whitespace at the end of the line before (#7).\r\n // The *only* reliable way to do that is to copy the *entire* rest of the\r\n // textarea's content into the created at the caret position.\r\n // For inputs, just '.' would be enough, but no need to bother.\r\n span.textContent = element.value.substring(position) || \".\"; // || because a completely empty faux span doesn't render at all\r\n div.appendChild(span);\r\n\r\n const coordinates = {\r\n top: span.offsetTop + parseInt(computed.borderTopWidth),\r\n left: span.offsetLeft + parseInt(computed.borderLeftWidth),\r\n height: parseInt(computed.lineHeight)\r\n };\r\n\r\n if (debug) {\r\n span.style.backgroundColor = \"#aaa\";\r\n } else {\r\n document.body.removeChild(div);\r\n }\r\n\r\n return coordinates;\r\n }\r\n}\r\n\r\nconst properties = [\r\n \"direction\", // RTL support\r\n \"boxSizing\",\r\n \"width\", // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\r\n \"height\",\r\n \"overflowX\",\r\n \"overflowY\", // copy the scrollbar for IE\r\n\r\n \"borderTopWidth\",\r\n \"borderRightWidth\",\r\n \"borderBottomWidth\",\r\n \"borderLeftWidth\",\r\n \"borderStyle\",\r\n\r\n \"paddingTop\",\r\n \"paddingRight\",\r\n \"paddingBottom\",\r\n \"paddingLeft\",\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n \"fontStyle\",\r\n \"fontVariant\",\r\n \"fontWeight\",\r\n \"fontStretch\",\r\n \"fontSize\",\r\n \"fontSizeAdjust\",\r\n \"lineHeight\",\r\n \"fontFamily\",\r\n\r\n \"textAlign\",\r\n \"textTransform\",\r\n \"textIndent\",\r\n \"textDecoration\", // might not make a difference, but better be safe\r\n\r\n \"letterSpacing\",\r\n \"wordSpacing\",\r\n\r\n \"tabSize\",\r\n \"MozTabSize\"\r\n];\r\n\r\nconst isBrowser = typeof window !== \"undefined\";\r\nconst isFirefox = isBrowser && (window as any).mozInnerScreenX != null;\r\n", "export class JsExports {\r\n public static resolvedExports?: any;\r\n public static exportsPromise: Promise;\r\n\r\n public static get InputHelper(): any {\r\n return this.resolvedExports?.Avalonia.Browser.Interop.InputHelper;\r\n }\r\n\r\n public static get DomHelper(): any {\r\n return this.resolvedExports?.Avalonia.Browser.Interop.DomHelper;\r\n }\r\n\r\n public static get TimerHelper(): any {\r\n return this.resolvedExports?.Avalonia.Browser.Interop.TimerHelper;\r\n }\r\n\r\n public static get CanvasHelper(): any {\r\n return this.resolvedExports?.Avalonia.Browser.Interop.CanvasHelper;\r\n }\r\n}\r\nasync function resolveExports (): Promise {\r\n const runtimeApi = await globalThis.getDotnetRuntime(0);\r\n if (runtimeApi == null) { return; }\r\n JsExports.resolvedExports = await runtimeApi.getAssemblyExports(\"Avalonia.Browser.dll\");\r\n return JsExports.resolvedExports;\r\n}\r\n\r\nJsExports.exportsPromise = resolveExports();\r\n", "import { CaretHelper } from \"./caretHelper\";\r\nimport { JsExports } from \"./jsExports\";\r\n\r\nenum RawInputModifiers {\r\n None = 0,\r\n Alt = 1,\r\n Control = 2,\r\n Shift = 4,\r\n Meta = 8,\r\n\r\n LeftMouseButton = 16,\r\n RightMouseButton = 32,\r\n MiddleMouseButton = 64,\r\n XButton1MouseButton = 128,\r\n XButton2MouseButton = 256,\r\n KeyboardMask = Alt | Control | Shift | Meta,\r\n\r\n PenInverted = 512,\r\n PenEraser = 1024,\r\n PenBarrelButton = 2048\r\n}\r\n\r\n/*\r\n* This is a hack to handle Mozilla clipboard events in a more convinient way for framework users.\r\n* In the browser, events go in order KeyDown -> Paste -> KeyUp.\r\n* On KeyDown we trigger Avalonia handlers, which might execute readClipboardText.\r\n* When readClipboardText was executed, we mark ClipboardState as Pending and setup clipboard promise,\r\n* which will un-handle KeyDown event, basically allowing browser to pass a Paste event properly.\r\n* On actual Paste event we execute promise callbacks, resuming async operation, and returning pasted text to the app.\r\n* Note #1, on every KeyUp event we will reset all the state and reject pending promises if any, as this event it expected to come after Paste.\r\n* Note #2, whole this code will be executed only on legacy browsers like Mozilla, where clipboard.readText is not available.\r\n* Note #3, with all of these hacks Clipboard.ReadText will still work only on actual \"paste\" gesture initiated by user.\r\n* */\r\nenum ClipboardState {\r\n None,\r\n Ready,\r\n Pending\r\n}\r\n\r\nexport class InputHelper {\r\n static clipboardState: ClipboardState = ClipboardState.None;\r\n static resolveClipboard?: any;\r\n static rejectClipboard?: any;\r\n\r\n public static initializeBackgroundHandlers() {\r\n if (this.clipboardState !== ClipboardState.None) {\r\n return;\r\n }\r\n\r\n globalThis.addEventListener(\"paste\", (args: any) => {\r\n if (this.clipboardState === ClipboardState.Pending) {\r\n this.resolveClipboard(args.clipboardData.getData(\"text\"));\r\n }\r\n });\r\n this.clipboardState = ClipboardState.Ready;\r\n }\r\n\r\n public static async readClipboardText(globalThis: Window): Promise {\r\n if (globalThis.navigator.clipboard.readText) {\r\n return await globalThis.navigator.clipboard.readText();\r\n } else {\r\n try {\r\n return await new Promise((resolve, reject) => {\r\n this.clipboardState = ClipboardState.Pending;\r\n this.resolveClipboard = resolve;\r\n this.rejectClipboard = reject;\r\n });\r\n } finally {\r\n this.clipboardState = ClipboardState.Ready;\r\n this.resolveClipboard = null;\r\n this.rejectClipboard = null;\r\n }\r\n }\r\n }\r\n\r\n public static async writeClipboardText(globalThis: Window, text: string): Promise {\r\n return await globalThis.navigator.clipboard.writeText(text);\r\n }\r\n\r\n public static subscribeInputEvents(element: HTMLInputElement, topLevelId: number) {\r\n const keySub = this.subscribeKeyEvents(element, topLevelId);\r\n const pointerSub = this.subscribePointerEvents(element, topLevelId);\r\n const textSub = this.subscribeTextEvents(element, topLevelId);\r\n const dndSub = this.subscribeDropEvents(element, topLevelId);\r\n const paneSub = this.subscribeKeyboardGeometryChange(element, topLevelId);\r\n\r\n return () => {\r\n keySub();\r\n pointerSub();\r\n textSub();\r\n dndSub();\r\n paneSub();\r\n };\r\n }\r\n\r\n public static subscribeKeyEvents(element: HTMLInputElement, topLevelId: number) {\r\n const keyDownHandler = (args: KeyboardEvent) => {\r\n JsExports.InputHelper.OnKeyDown(topLevelId, args.code, args.key, this.getModifiers(args));\r\n if (this.clipboardState !== ClipboardState.Pending) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"keydown\", keyDownHandler);\r\n\r\n const keyUpHandler = (args: KeyboardEvent) => {\r\n JsExports.InputHelper.OnKeyUp(topLevelId, args.code, args.key, this.getModifiers(args));\r\n args.preventDefault();\r\n if (this.rejectClipboard) {\r\n this.rejectClipboard();\r\n }\r\n };\r\n\r\n element.addEventListener(\"keyup\", keyUpHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"keydown\", keyDownHandler);\r\n element.removeEventListener(\"keyup\", keyUpHandler);\r\n };\r\n }\r\n\r\n public static subscribeTextEvents(\r\n element: HTMLInputElement,\r\n topLevelId: number) {\r\n const compositionStartHandler = (args: CompositionEvent) => {\r\n JsExports.InputHelper.OnCompositionStart(topLevelId);\r\n };\r\n element.addEventListener(\"compositionstart\", compositionStartHandler);\r\n\r\n const beforeInputHandler = (args: InputEvent) => {\r\n const ranges = args.getTargetRanges();\r\n let start = -1;\r\n let end = -1;\r\n if (ranges.length > 0) {\r\n start = ranges[0].startOffset;\r\n end = ranges[0].endOffset;\r\n }\r\n\r\n if (args.inputType === \"insertCompositionText\") {\r\n start = 2;\r\n end = start + 2;\r\n }\r\n\r\n JsExports.InputHelper.OnBeforeInput(topLevelId, args.inputType, start, end);\r\n };\r\n element.addEventListener(\"beforeinput\", beforeInputHandler);\r\n\r\n const compositionUpdateHandler = (args: CompositionEvent) => {\r\n JsExports.InputHelper.OnCompositionUpdate(topLevelId, args.data);\r\n };\r\n element.addEventListener(\"compositionupdate\", compositionUpdateHandler);\r\n\r\n const compositionEndHandler = (args: CompositionEvent) => {\r\n JsExports.InputHelper.OnCompositionEnd(topLevelId, args.data);\r\n args.preventDefault();\r\n };\r\n element.addEventListener(\"compositionend\", compositionEndHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"compositionstart\", compositionStartHandler);\r\n element.removeEventListener(\"compositionupdate\", compositionUpdateHandler);\r\n element.removeEventListener(\"compositionend\", compositionEndHandler);\r\n };\r\n }\r\n\r\n public static subscribePointerEvents(\r\n element: HTMLInputElement,\r\n topLevelId: number\r\n ) {\r\n const pointerMoveHandler = (args: PointerEvent) => {\r\n JsExports.InputHelper.OnPointerMove(\r\n topLevelId, args.pointerType, args.pointerId, args.offsetX, args.offsetY,\r\n args.pressure, args.tiltX, args.tiltY, args.twist, this.getModifiers(args), args);\r\n args.preventDefault();\r\n };\r\n\r\n const pointerDownHandler = (args: PointerEvent) => {\r\n JsExports.InputHelper.OnPointerDown(\r\n topLevelId, args.pointerType, args.pointerId, args.button, args.offsetX, args.offsetY,\r\n args.pressure, args.tiltX, args.tiltY, args.twist, this.getModifiers(args));\r\n args.preventDefault();\r\n };\r\n\r\n const pointerUpHandler = (args: PointerEvent) => {\r\n JsExports.InputHelper.OnPointerUp(\r\n topLevelId, args.pointerType, args.pointerId, args.button, args.offsetX, args.offsetY,\r\n args.pressure, args.tiltX, args.tiltY, args.twist, this.getModifiers(args));\r\n args.preventDefault();\r\n };\r\n\r\n const pointerCancelHandler = (args: PointerEvent) => {\r\n JsExports.InputHelper.OnPointerCancel(\r\n topLevelId, args.pointerType, args.pointerId, args.offsetX, args.offsetY,\r\n args.pressure, args.tiltX, args.tiltY, args.twist, this.getModifiers(args));\r\n };\r\n\r\n const wheelHandler = (args: WheelEvent) => {\r\n JsExports.InputHelper.OnWheel(\r\n topLevelId, args.offsetX, args.offsetY, args.deltaX, args.deltaY, this.getModifiers(args));\r\n args.preventDefault();\r\n };\r\n\r\n element.addEventListener(\"pointermove\", pointerMoveHandler);\r\n element.addEventListener(\"pointerdown\", pointerDownHandler);\r\n element.addEventListener(\"pointerup\", pointerUpHandler);\r\n element.addEventListener(\"wheel\", wheelHandler);\r\n element.addEventListener(\"pointercancel\", pointerCancelHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"pointerover\", pointerMoveHandler);\r\n element.removeEventListener(\"pointerdown\", pointerDownHandler);\r\n element.removeEventListener(\"pointerup\", pointerUpHandler);\r\n element.removeEventListener(\"pointercancel\", pointerCancelHandler);\r\n element.removeEventListener(\"wheel\", wheelHandler);\r\n };\r\n }\r\n\r\n public static subscribeDropEvents(\r\n element: HTMLInputElement,\r\n topLevelId: number\r\n ) {\r\n const handler = (args: DragEvent) => {\r\n const dataObject = args.dataTransfer;\r\n JsExports.InputHelper.OnDragDrop(topLevelId, args.type, args.offsetX, args.offsetY, this.getModifiers(args), dataObject?.effectAllowed, dataObject);\r\n };\r\n const overAndDropHandler = (args: DragEvent) => {\r\n args.preventDefault();\r\n handler(args);\r\n };\r\n element.addEventListener(\"dragover\", overAndDropHandler);\r\n element.addEventListener(\"dragenter\", handler);\r\n element.addEventListener(\"dragleave\", handler);\r\n element.addEventListener(\"drop\", overAndDropHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"dragover\", overAndDropHandler);\r\n element.removeEventListener(\"dragenter\", handler);\r\n element.removeEventListener(\"dragleave\", handler);\r\n element.removeEventListener(\"drop\", overAndDropHandler);\r\n };\r\n }\r\n\r\n public static getCoalescedEvents(pointerEvent: PointerEvent): number[] {\r\n return pointerEvent.getCoalescedEvents()\r\n .flatMap(e => [e.offsetX, e.offsetY, e.pressure, e.tiltX, e.tiltY, e.twist]);\r\n }\r\n\r\n public static subscribeKeyboardGeometryChange(\r\n element: HTMLInputElement,\r\n topLevelId: number) {\r\n if (\"virtualKeyboard\" in navigator) {\r\n // (navigator as any).virtualKeyboard.overlaysContent = true;\r\n const listener = (event: any) => {\r\n const elementRect = element.getBoundingClientRect();\r\n const keyboardRect = event.target.boundingRect as DOMRect;\r\n\r\n JsExports.InputHelper.OnKeyboardGeometryChange(\r\n topLevelId,\r\n keyboardRect.x - elementRect.x,\r\n keyboardRect.y - elementRect.y,\r\n keyboardRect.width,\r\n keyboardRect.height);\r\n };\r\n (navigator as any).virtualKeyboard.addEventListener(\"geometrychange\", listener);\r\n return () => {\r\n (navigator as any).virtualKeyboard.removeEventListener(\"geometrychange\", listener);\r\n };\r\n }\r\n\r\n return () => {};\r\n }\r\n\r\n public static clearInput(inputElement: HTMLInputElement) {\r\n inputElement.value = \"\";\r\n }\r\n\r\n public static focusElement(inputElement: HTMLElement) {\r\n inputElement.focus();\r\n }\r\n\r\n public static setCursor(inputElement: HTMLInputElement, kind: string) {\r\n if (kind === \"default\") {\r\n inputElement.style.removeProperty(\"cursor\");\r\n } else {\r\n inputElement.style.cursor = kind;\r\n }\r\n }\r\n\r\n public static setBounds(inputElement: HTMLInputElement, x: number, y: number, caretWidth: number, caretHeight: number, caret: number) {\r\n inputElement.style.left = (x).toFixed(0) + \"px\";\r\n inputElement.style.top = (y).toFixed(0) + \"px\";\r\n\r\n const { left, top } = CaretHelper.getCaretCoordinates(inputElement, caret);\r\n\r\n inputElement.style.left = (x - left).toFixed(0) + \"px\";\r\n inputElement.style.top = (y - top).toFixed(0) + \"px\";\r\n }\r\n\r\n public static hide(inputElement: HTMLInputElement) {\r\n inputElement.style.display = \"none\";\r\n }\r\n\r\n public static show(inputElement: HTMLInputElement) {\r\n inputElement.style.display = \"block\";\r\n }\r\n\r\n public static setSurroundingText(inputElement: HTMLInputElement, text: string, start: number, end: number) {\r\n if (!inputElement) {\r\n return;\r\n }\r\n\r\n inputElement.value = text;\r\n inputElement.setSelectionRange(start, end);\r\n inputElement.style.width = \"20px\";\r\n inputElement.style.width = `${inputElement.scrollWidth}px`;\r\n }\r\n\r\n private static getModifiers(args: KeyboardEvent | PointerEvent | WheelEvent | DragEvent): number {\r\n let modifiers = RawInputModifiers.None;\r\n\r\n if (args.ctrlKey) { modifiers |= RawInputModifiers.Control; }\r\n if (args.altKey) { modifiers |= RawInputModifiers.Alt; }\r\n if (args.shiftKey) { modifiers |= RawInputModifiers.Shift; }\r\n if (args.metaKey) { modifiers |= RawInputModifiers.Meta; }\r\n\r\n const buttons = (args as PointerEvent).buttons;\r\n if (buttons) {\r\n if (buttons & 1) { modifiers |= RawInputModifiers.LeftMouseButton; }\r\n if (buttons & 2) { modifiers |= (args.type === \"pen\" ? RawInputModifiers.PenBarrelButton : RawInputModifiers.RightMouseButton); }\r\n if (buttons & 4) { modifiers |= RawInputModifiers.MiddleMouseButton; }\r\n if (buttons & 8) { modifiers |= RawInputModifiers.XButton1MouseButton; }\r\n if (buttons & 16) { modifiers |= RawInputModifiers.XButton2MouseButton; }\r\n if (buttons & 32) { modifiers |= RawInputModifiers.PenEraser; }\r\n }\r\n\r\n return modifiers;\r\n }\r\n\r\n public static setPointerCapture(containerElement: HTMLInputElement, pointerId: number): void {\r\n containerElement.setPointerCapture(pointerId);\r\n }\r\n\r\n public static releasePointerCapture(containerElement: HTMLInputElement, pointerId: number): void {\r\n if (containerElement.hasPointerCapture(pointerId)) {\r\n containerElement.releasePointerCapture(pointerId);\r\n }\r\n }\r\n}\r\n", "export class Caniuse {\r\n public static hasNativeFilePicker(): boolean {\r\n return \"showSaveFilePicker\" in globalThis;\r\n }\r\n\r\n public static isMobile(): boolean {\r\n const userAgentData = (globalThis.navigator as any)?.userAgentData;\r\n if (userAgentData) {\r\n return userAgentData.mobile;\r\n }\r\n\r\n const userAgent = navigator.userAgent;\r\n const regex1 = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i;\r\n const regex2 = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw(n|u)|c55\\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i;\r\n return regex1.test(userAgent) || regex2.test(userAgent.substr(0, 4));\r\n }\r\n\r\n public static isTv(): boolean {\r\n return navigator.userAgent.includes(\"SmartTV\");\r\n }\r\n}\r\n", "export class WebRenderTarget {\r\n renderTargetType: string;\r\n constructor(protected canvas: HTMLCanvasElement | OffscreenCanvas, type: string) {\r\n this.renderTargetType = type;\r\n }\r\n\r\n static setSize(target: WebRenderTarget, w: number, h: number) {\r\n target.canvas.width = w;\r\n target.canvas.height = h;\r\n }\r\n}\r\n", "import { BrowserRenderingMode } from \"./renderingMode\";\r\nimport { WebRenderTarget } from \"./webRenderTarget\";\r\ninterface EmscriptenGlContext {\r\n handle: number;\r\n}\r\n\r\ninterface EmscriptenGL {\r\n registerContext: (ctx: WebGLRenderingContext, attrs: WebGLContextAttributes) => number;\r\n currentContext?: EmscriptenGlContext;\r\n makeContextCurrent: (handle: number) => boolean;\r\n}\r\n\r\nfunction getGL(): EmscriptenGL {\r\n const self = globalThis as any;\r\n const module = self.Module ?? self.getDotnetRuntime(0)?.Module;\r\n return (module?.GL ?? self.AvaloniaGL ?? self.SkiaSharpGL) as EmscriptenGL;\r\n}\r\n\r\nexport class WebGlRenderTarget extends WebRenderTarget {\r\n public contextHandle?: number;\r\n public attrs: WebGLContextAttributes;\r\n public fboId?: number;\r\n public stencil?: number;\r\n public sample?: number;\r\n public depth?: number;\r\n private static _gl: EmscriptenGL | null = null;\r\n\r\n constructor(public canvas: HTMLCanvasElement | OffscreenCanvas, mode: BrowserRenderingMode) {\r\n // Skia only understands WebGL context wrapped in Emscripten.\r\n if (WebGlRenderTarget._gl == null) { WebGlRenderTarget._gl = getGL(); }\r\n if (!WebGlRenderTarget._gl) {\r\n throw new Error(\"Module.GL object wasn't initialized, WebGL can't be used.\");\r\n }\r\n\r\n const attrs: WebGLContextAttributes | any =\r\n {\r\n alpha: true,\r\n depth: true,\r\n stencil: true,\r\n antialias: false,\r\n premultipliedAlpha: true,\r\n preserveDrawingBuffer: false,\r\n // only supported on older browsers, which is perfect as we want to fallback to 2d there.\r\n failIfMajorPerformanceCaveat: true,\r\n // attrs used by Emscripten:\r\n majorVersion: mode === BrowserRenderingMode.WebGL1 ? 1 : 2,\r\n minorVersion: 0,\r\n enableExtensionsByDefault: 1,\r\n explicitSwapControl: 0\r\n };\r\n\r\n const context = (mode === BrowserRenderingMode.WebGL1\r\n ? canvas.getContext(\"webgl\", attrs)\r\n : canvas.getContext(\"webgl2\", attrs)) as WebGLRenderingContext;\r\n if (!context) {\r\n throw new Error(\"HTMLCanvasElement.getContext returned null.\");\r\n }\r\n\r\n const handle = WebGlRenderTarget._gl.registerContext(context, attrs);\r\n (context as any).gl_handle = handle;\r\n super(canvas, \"webgl\");\r\n\r\n this.contextHandle = handle;\r\n this.fboId = context.getParameter(context.FRAMEBUFFER_BINDING)?.id ?? 0;\r\n this.stencil = context.getParameter(context.STENCIL_BITS);\r\n this.sample = context.getParameter(context.SAMPLES);\r\n this.depth = context.getParameter(context.DEPTH_BITS);\r\n this.attrs = attrs;\r\n }\r\n\r\n public static getCurrentContext(): number {\r\n return WebGlRenderTarget._gl?.currentContext?.handle ?? 0;\r\n }\r\n\r\n public static makeContextCurrent(handle: number): boolean {\r\n if (WebGlRenderTarget._gl == null) { return false; }\r\n const ret = WebGlRenderTarget._gl.makeContextCurrent(handle);\r\n return handle === 0 || ret;\r\n }\r\n}\r\n", "import { RuntimeAPI } from \"../../../types/dotnet\";\r\nimport { WebRenderTarget } from \"./webRenderTarget\";\r\n\r\nexport class SoftwareRenderTarget extends WebRenderTarget {\r\n private readonly runtime: RuntimeAPI | undefined;\r\n private readonly context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;\r\n constructor(canvas: HTMLCanvasElement | OffscreenCanvas) {\r\n const context = canvas.getContext(\"2d\", {\r\n alpha: true\r\n });\r\n if (!context) {\r\n throw new Error(\"HTMLCanvasElement.getContext(2d) returned null.\");\r\n }\r\n\r\n super(canvas, \"software\");\r\n this.context = context;\r\n\r\n this.runtime = globalThis.getDotnetRuntime(0);\r\n }\r\n\r\n public putPixelData(pointer: number, length: number, width: number, height: number): void {\r\n const heap8 = this.runtime?.localHeapViewU8();\r\n\r\n let clampedBuffer: Uint8ClampedArray;\r\n if (heap8?.buffer) {\r\n clampedBuffer = new Uint8ClampedArray(heap8.buffer, pointer, length);\r\n\r\n // Need to make a copy if using MT, ImageData can't consume shared arrays\r\n if (this.canvas instanceof OffscreenCanvas) {\r\n const dstArrayBuffer = new ArrayBuffer(clampedBuffer.byteLength);\r\n const copy = new Uint8ClampedArray(dstArrayBuffer);\r\n copy.set(clampedBuffer);\r\n clampedBuffer = copy;\r\n }\r\n } else throw new Error(\"Unable to access .NET memory\");\r\n\r\n const imageData = new ImageData(clampedBuffer, width, height);\r\n (this.context).putImageData(imageData, 0, 0);\r\n }\r\n\r\n public static staticPutPixelData(target: SoftwareRenderTarget, pointer: number, length: number, width: number, height: number): void {\r\n target.putPixelData(pointer, length, width, height);\r\n }\r\n}\r\n", "import { BrowserRenderingMode } from \"./renderingMode\";\r\nimport { WebGlRenderTarget } from \"./webGlRenderTarget\";\r\nimport { WebRenderTarget } from \"./webRenderTarget\";\r\nimport { SoftwareRenderTarget } from \"./softwareRenderTarget\";\r\n\r\nexport class WebRenderTargetRegistry {\r\n private static targets: { [id: number]: (WebRenderTarget) } = {};\r\n private static registry: { [id: number]: ({\r\n canvas: HTMLCanvasElement;\r\n worker?: Worker;\r\n }); } = {};\r\n\r\n private static nextId = 1;\r\n\r\n static create(pthreadId: number, canvas: HTMLCanvasElement, preferredModes: BrowserRenderingMode[]): number {\r\n const id = WebRenderTargetRegistry.nextId++;\r\n if (pthreadId === 0) {\r\n WebRenderTargetRegistry.registry[id] = {\r\n canvas\r\n };\r\n WebRenderTargetRegistry.targets[id] = WebRenderTargetRegistry.createRenderTarget(canvas, preferredModes);\r\n } else {\r\n const self = globalThis as any;\r\n const module = self.Module ?? self.getDotnetRuntime(0)?.Module;\r\n const pthreads = module?.PThread;\r\n if (pthreads == null) { throw new Error(\"Unable to access emscripten PThread api\"); }\r\n const pthread = pthreads.pthreads[pthreadId];\r\n if (pthread == null) { throw new Error(`Unable get pthread with id ${pthreadId}`); }\r\n let worker: Worker | undefined;\r\n if (pthread.postMessage != null) { worker = pthread as Worker; } else { worker = pthread.worker; }\r\n\r\n if (worker == null) { throw new Error(`Unable get Worker for pthread ${pthreadId}`); }\r\n const offscreen = canvas.transferControlToOffscreen();\r\n worker.postMessage({\r\n avaloniaCmd: \"registerCanvas\",\r\n canvas: offscreen,\r\n modes: preferredModes,\r\n id\r\n }, [offscreen]);\r\n WebRenderTargetRegistry.registry[id] = {\r\n canvas,\r\n worker\r\n };\r\n }\r\n return id;\r\n }\r\n\r\n static initializeWorker() {\r\n const oldHandler = self.onmessage;\r\n self.onmessage = ev => {\r\n const msg = ev;\r\n if (msg.data.avaloniaCmd === \"registerCanvas\") {\r\n WebRenderTargetRegistry.targets[msg.data.id] = WebRenderTargetRegistry.createRenderTarget(msg.data.canvas, msg.data.modes);\r\n } else if (msg.data.avaloniaCmd === \"unregisterCanvas\") {\r\n /* eslint-disable */\r\n // Our keys are _always_ numbers and are safe to delete\r\n delete WebRenderTargetRegistry.targets[msg.data.id];\r\n /* eslint-enable */\r\n } else if (oldHandler != null) { oldHandler.call(self, ev); }\r\n };\r\n }\r\n\r\n static getRenderTarget(id: number): WebRenderTarget | undefined {\r\n return WebRenderTargetRegistry.targets[id];\r\n }\r\n\r\n private static createRenderTarget(canvas: HTMLCanvasElement | OffscreenCanvas, modes: BrowserRenderingMode[]): WebRenderTarget {\r\n for (const mode of modes) {\r\n try {\r\n if (mode === BrowserRenderingMode.Software2D) { return new SoftwareRenderTarget(canvas); }\r\n return new WebGlRenderTarget(canvas, mode);\r\n } catch (e) {\r\n let message = \"\";\r\n if (e instanceof Error) { message = \": \" + e.message; }\r\n console.error(`Failed to create render target for mode ${mode} ${message}`);\r\n }\r\n }\r\n // Still try software as a fallback\r\n return new SoftwareRenderTarget(canvas);\r\n }\r\n}\r\n", "import { avaloniaDb, fileBookmarksStore } from \"./indexedDb\";\r\nimport { FileSystemFileHandle, FileSystemDirectoryHandle, FileSystemWritableFileStream } from \"native-file-system-adapter\";\r\nimport { Caniuse } from \"../avalonia\";\r\n\r\nexport class StorageItem {\r\n private constructor(\r\n public handle?: FileSystemFileHandle | FileSystemDirectoryHandle,\r\n private readonly file?: File,\r\n private readonly bookmarkId?: string,\r\n public wellKnownType?: WellKnownDirectory\r\n ) {\r\n }\r\n\r\n public get name(): string {\r\n if (this.handle) {\r\n return this.handle.name;\r\n }\r\n if (this.file) {\r\n return this.file.name;\r\n }\r\n return this.wellKnownType ?? \"\";\r\n }\r\n\r\n public get kind(): \"file\" | \"directory\" {\r\n if (this.handle) {\r\n return this.handle.kind;\r\n }\r\n if (this.file) {\r\n return \"file\";\r\n }\r\n return \"directory\";\r\n }\r\n\r\n public static createFromHandle(handle: FileSystemFileHandle | FileSystemDirectoryHandle, bookmarkId?: string) {\r\n return new StorageItem(handle, undefined, bookmarkId, undefined);\r\n }\r\n\r\n public static createFromFile(file: File) {\r\n return new StorageItem(undefined, file, undefined, undefined);\r\n }\r\n\r\n public static createWellKnownDirectory(type: WellKnownDirectory) {\r\n return new StorageItem(undefined, undefined, undefined, type);\r\n }\r\n\r\n public static async openRead(item: StorageItem): Promise {\r\n if (item.file) {\r\n return item.file;\r\n }\r\n\r\n if (!item.handle || item.kind !== \"file\") {\r\n throw new Error(\"StorageItem is not a file\");\r\n }\r\n\r\n await item.verityPermissions(\"read\");\r\n\r\n const file = await (item.handle as FileSystemFileHandle).getFile();\r\n return file;\r\n }\r\n\r\n public static async openWrite(item: StorageItem): Promise {\r\n if (!item.handle || item.kind !== \"file\") {\r\n throw new Error(\"StorageItem is not a writeable file\");\r\n }\r\n\r\n await item.verityPermissions(\"readwrite\");\r\n\r\n return await (item.handle as FileSystemFileHandle).createWritable({ keepExistingData: true });\r\n }\r\n\r\n public static async getProperties(item: StorageItem): Promise<{ Size: number; LastModified: number; Type: string } | null> {\r\n // getFile can fail with an exception depending if we use polyfill with a save file dialog or not.\r\n try {\r\n const file = item.handle && \"getFile\" in item.handle\r\n ? await item.handle.getFile()\r\n : item.file;\r\n\r\n if (!file) {\r\n return null;\r\n }\r\n\r\n return {\r\n Size: file.size,\r\n LastModified: file.lastModified,\r\n Type: file.type\r\n };\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n public static getItemsIterator(item: StorageItem): any | null {\r\n if (item.kind !== \"directory\" || !item.handle) {\r\n return null;\r\n }\r\n\r\n return (item.handle as any).entries();\r\n }\r\n\r\n public static async createFile(item: StorageItem, name: string): Promise {\r\n if (item.kind !== \"directory\" || !item.handle) {\r\n throw new TypeError(\"Unable to create item in the requested directory\");\r\n }\r\n\r\n await item.verityPermissions(\"readwrite\");\r\n\r\n return await ((item.handle as any).getFileHandle(name, { create: true }) as Promise);\r\n }\r\n\r\n public static async createFolder(item: StorageItem, name: string): Promise {\r\n if (item.kind !== \"directory\" || !item.handle) {\r\n throw new TypeError(\"Unable to create item in the requested directory\");\r\n }\r\n\r\n await item.verityPermissions(\"readwrite\");\r\n\r\n return await ((item.handle as any).getDirectoryHandle(name, { create: true }) as Promise);\r\n }\r\n\r\n public static async deleteAsync(item: StorageItem): Promise {\r\n if (!item.handle) {\r\n return null;\r\n }\r\n\r\n await item.verityPermissions(\"readwrite\");\r\n\r\n return await ((item.handle as any).remove({ recursive: true }) as Promise);\r\n }\r\n\r\n public static async moveAsync(item: StorageItem, destination: StorageItem): Promise {\r\n if (!item.handle) {\r\n return null;\r\n }\r\n if (destination.kind !== \"directory\" || !destination.handle) {\r\n throw new TypeError(\"Unable to move item to the requested directory\");\r\n }\r\n\r\n await item.verityPermissions(\"readwrite\");\r\n\r\n return await ((item.handle as any).move(destination /*, newName */) as Promise);\r\n }\r\n\r\n private async verityPermissions(mode: \"read\" | \"readwrite\"): Promise {\r\n if (!this.handle) {\r\n return;\r\n }\r\n\r\n // If we are using polyfill, let it decide permissions by itself, we can't request anything in this case.\r\n if (!Caniuse.hasNativeFilePicker()) {\r\n return;\r\n }\r\n\r\n if (await this.handle.queryPermission({ mode }) === \"granted\") {\r\n return;\r\n }\r\n\r\n if (await this.handle.requestPermission({ mode }) === \"denied\") {\r\n throw new Error(\"Permissions denied\");\r\n }\r\n }\r\n\r\n public static async saveBookmark(item: StorageItem): Promise {\r\n // If file was previously bookmarked, just return old one.\r\n if (item.bookmarkId) {\r\n return item.bookmarkId;\r\n }\r\n\r\n // Bookmarks are not supported with polyfill.\r\n if (!item.handle || !Caniuse.hasNativeFilePicker()) {\r\n return null;\r\n }\r\n\r\n const connection = await avaloniaDb.connect();\r\n try {\r\n const key = await connection.put(fileBookmarksStore, item.handle, item.generateBookmarkId());\r\n return key as string;\r\n } finally {\r\n connection.close();\r\n }\r\n }\r\n\r\n public static async deleteBookmark(item: StorageItem): Promise {\r\n if (!item.bookmarkId || !Caniuse.hasNativeFilePicker()) {\r\n return;\r\n }\r\n\r\n const connection = await avaloniaDb.connect();\r\n try {\r\n await connection.delete(fileBookmarksStore, item.bookmarkId);\r\n } finally {\r\n connection.close();\r\n }\r\n }\r\n\r\n private generateBookmarkId(): string {\r\n return Date.now().toString(36) + Math.random().toString(36).substring(2);\r\n }\r\n}\r\n\r\nexport class StorageItems {\r\n constructor(private readonly items: StorageItem[]) { }\r\n\r\n public static itemsArray(instance: StorageItems): StorageItem[] {\r\n return instance.items;\r\n }\r\n\r\n public static filesToItemsArray(files: File[]): StorageItem[] {\r\n if (!files) {\r\n return [];\r\n }\r\n\r\n const retItems = [];\r\n for (let i = 0; i < files.length; i++) {\r\n retItems[i] = StorageItem.createFromFile(files[i]);\r\n }\r\n return retItems;\r\n }\r\n}\r\n", "/** @typedef {import('./FileSystemDirectoryHandle.js').default} FileSystemDirectoryHandle */\n\nconst native = globalThis.showDirectoryPicker\n\n/**\n * @param {Object} [options]\n * @param {boolean} [options._preferPolyfill] If you rather want to use the polyfill instead of the native\n * @returns {Promise}\n */\nasync function showDirectoryPicker (options = {}) {\n if (native && !options._preferPolyfill) {\n return native(options)\n }\n\n const input = document.createElement('input')\n input.type = 'file'\n\n // Even with this check, the browser may support the attribute, but not the functionality (e.g. iOS Safari)\n if (!('webkitdirectory' in input)) {\n throw new Error(`HTMLInputElement.webkitdirectory is not supported`)\n }\n\n // See https://stackoverflow.com/questions/47664777/javascript-file-input-onchange-not-working-ios-safari-only\n input.style.position = 'fixed'\n input.style.top = '-100000px'\n input.style.left = '-100000px'\n document.body.appendChild(input)\n\n input.webkitdirectory = true\n\n // Lazy load while the user is choosing the directory\n const p = import('./util.js')\n\n await new Promise(resolve => {\n input.addEventListener('change', resolve)\n input.click()\n })\n\n return p.then(mod => mod.getDirHandlesFromInput(input))\n}\n\nexport default showDirectoryPicker\nexport { showDirectoryPicker }\n", "/** @typedef {import('./FileSystemFileHandle.js').default} FileSystemFileHandle */\n\nconst def = { accepts: [] }\nconst native = globalThis.showOpenFilePicker\n\n/**\n * @param {Object} [options]\n * @param {boolean} [options.multiple] If you want to allow more than one file\n * @param {boolean} [options.excludeAcceptAllOption=false] Prevent user for selecting any\n * @param {Object[]} [options.accepts] Files you want to accept\n * @param {boolean} [options._preferPolyfill] If you rather want to use the polyfill instead of the native\n * @returns {Promise}\n */\nasync function showOpenFilePicker (options = {}) {\n const opts = { ...def, ...options }\n\n if (native && !options._preferPolyfill) {\n return native(opts)\n }\n\n const input = document.createElement('input')\n input.type = 'file'\n input.multiple = opts.multiple\n input.accept = (opts.accepts || [])\n .map(e => [\n ...(e.extensions || []).map(e => '.' + e),\n ...e.mimeTypes || []]\n )\n .flat()\n .join(',')\n\n // See https://stackoverflow.com/questions/47664777/javascript-file-input-onchange-not-working-ios-safari-only\n input.style.position = 'fixed'\n input.style.top = '-100000px'\n input.style.left = '-100000px'\n document.body.appendChild(input)\n\n // Lazy load while the user is choosing the directory\n const p = import('./util.js')\n\n await new Promise(resolve => {\n input.addEventListener('change', resolve)\n input.click()\n })\n\n return p.then(m => m.getFileHandlesFromInput(input))\n}\n\nexport default showOpenFilePicker\nexport { showOpenFilePicker }\n", "/** @typedef {import('./FileSystemFileHandle.js').default} FileSystemFileHandle */\n\nconst native = globalThis.showSaveFilePicker\n\n/**\n * @param {Object} [options]\n * @param {boolean} [options.excludeAcceptAllOption=false] Prevent user for selecting any\n * @param {Object[]} [options.types] Files you want to accept\n * @param {string} [options.suggestedName] the name to fall back to when using polyfill\n * @param {string} [options._name] the name to fall back to when using polyfill\n * @param {boolean} [options._preferPolyfill] If you rather want to use the polyfill instead of the native\n * @return {Promise}\n */\nasync function showSaveFilePicker (options = {}) {\n if (native && !options._preferPolyfill) {\n return native(options)\n }\n\n if (options._name) {\n console.warn('deprecated _name, spec now have `suggestedName`')\n options.suggestedName = options._name\n }\n\n const { FileSystemFileHandle } = await import('./FileSystemFileHandle.js')\n const { FileHandle } = await import('./adapters/downloader.js')\n return new FileSystemFileHandle(new FileHandle(options.suggestedName))\n}\n\nexport default showSaveFilePicker\nexport { showSaveFilePicker }\n", "/** @typedef {import('./FileSystemDirectoryHandle.js').default} FileSystemDirectoryHandle */\n\nif (globalThis.DataTransferItem && !DataTransferItem.prototype.getAsFileSystemHandle) {\n DataTransferItem.prototype.getAsFileSystemHandle = async function () {\n const entry = this.webkitGetAsEntry()\n const [\n { FileHandle, FolderHandle },\n { FileSystemDirectoryHandle },\n { FileSystemFileHandle }\n ] = await Promise.all([\n import('./adapters/sandbox.js'),\n import('./FileSystemDirectoryHandle.js'),\n import('./FileSystemFileHandle.js')\n ])\n\n return entry.isFile\n ? new FileSystemFileHandle(new FileHandle(entry, false))\n : new FileSystemDirectoryHandle(new FolderHandle(entry, false))\n }\n}\n\n/**\n * @param {object=} driver\n * @return {Promise}\n */\nasync function getOriginPrivateDirectory (driver, options = {}) {\n if (!driver) {\n return globalThis.navigator?.storage?.getDirectory() || globalThis.getOriginPrivateDirectory()\n }\n const {FileSystemDirectoryHandle} = await import('./FileSystemDirectoryHandle.js')\n const module = await driver\n const sandbox = await (module.default\n ? module.default(options)\n : module(options)\n )\n return new FileSystemDirectoryHandle(sandbox)\n}\n\nexport default getOriginPrivateDirectory\n", "import showDirectoryPicker from './showDirectoryPicker.js'\nimport showOpenFilePicker from './showOpenFilePicker.js'\nimport showSaveFilePicker from './showSaveFilePicker.js'\nimport getOriginPrivateDirectory from './getOriginPrivateDirectory.js'\nimport FileSystemDirectoryHandle from './FileSystemDirectoryHandle.js'\nimport FileSystemFileHandle from './FileSystemFileHandle.js'\nimport FileSystemHandle from './FileSystemHandle.js'\nimport FileSystemWritableFileStream from './FileSystemWritableFileStream.js'\n\nexport {\n FileSystemDirectoryHandle,\n FileSystemFileHandle,\n FileSystemHandle,\n FileSystemWritableFileStream,\n getOriginPrivateDirectory,\n showDirectoryPicker,\n showOpenFilePicker,\n showSaveFilePicker\n}\n", "import { avaloniaDb, fileBookmarksStore } from \"./indexedDb\";\r\nimport { StorageItem, StorageItems } from \"./storageItem\";\r\nimport { showOpenFilePicker, showDirectoryPicker, showSaveFilePicker, FileSystemFileHandle } from \"native-file-system-adapter\";\r\n\r\ndeclare global {\r\n type WellKnownDirectory = \"desktop\" | \"documents\" | \"downloads\" | \"music\" | \"pictures\" | \"videos\";\r\n interface FilePickerAcceptType {\r\n description?: string | undefined;\r\n accept: Record;\r\n }\r\n}\r\n\r\nexport class StorageProvider {\r\n public static async selectFolderDialog(\r\n startIn: StorageItem | null,\r\n preferPolyfill: boolean): Promise {\r\n // 'Picker' API doesn't accept \"null\" as a parameter, so it should be set to undefined.\r\n const options = {\r\n startIn: (startIn?.wellKnownType ?? startIn?.handle ?? undefined),\r\n _preferPolyfill: preferPolyfill\r\n };\r\n\r\n const handle = await showDirectoryPicker(options as any);\r\n return StorageItem.createFromHandle(handle);\r\n }\r\n\r\n public static async openFileDialog(\r\n startIn: StorageItem | null, multiple: boolean,\r\n types: FilePickerAcceptType[] | null, excludeAcceptAllOption: boolean,\r\n preferPolyfill: boolean): Promise {\r\n const options = {\r\n startIn: (startIn?.wellKnownType ?? startIn?.handle ?? undefined),\r\n multiple,\r\n excludeAcceptAllOption,\r\n types: (types ?? undefined),\r\n _preferPolyfill: preferPolyfill\r\n };\r\n\r\n const handles = await showOpenFilePicker(options);\r\n return new StorageItems(handles.map((handle: FileSystemFileHandle) => StorageItem.createFromHandle(handle)));\r\n }\r\n\r\n public static async saveFileDialog(\r\n startIn: StorageItem | null, suggestedName: string | null,\r\n types: FilePickerAcceptType[] | null, excludeAcceptAllOption: boolean,\r\n preferPolyfill: boolean): Promise {\r\n const options = {\r\n startIn: (startIn?.wellKnownType ?? startIn?.handle ?? undefined),\r\n suggestedName: (suggestedName ?? undefined),\r\n excludeAcceptAllOption,\r\n types: (types ?? undefined),\r\n _preferPolyfill: preferPolyfill\r\n };\r\n\r\n const handle = await showSaveFilePicker(options);\r\n return StorageItem.createFromHandle(handle);\r\n }\r\n\r\n public static async openBookmark(key: string): Promise {\r\n const connection = await avaloniaDb.connect();\r\n try {\r\n const handle = await connection.get(fileBookmarksStore, key);\r\n return handle && StorageItem.createFromHandle(handle, key);\r\n } finally {\r\n connection.close();\r\n }\r\n }\r\n\r\n public static createAcceptType(description: string, mimeTypes: string[], extensions: string[] | undefined): FilePickerAcceptType {\r\n const accept: Record = {};\r\n mimeTypes.forEach(a => { accept[a] = extensions ?? []; });\r\n return { description, accept };\r\n }\r\n}\r\n"], - "mappings": "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", - "names": ["config", "config_default", "init_config", "__esmMin", "memory_exports", "__export", "FileHandle", "FolderHandle", "Sink", "memory_default", "File", "Blob", "DOMException", "INVALID", "GONE", "MISMATCH", "MOD_ERR", "SYNTAX", "SECURITY", "DISALLOWED", "fs", "init_memory", "__esmMin", "init_util", "init_config", "config_default", "errors", "fileHandle", "file", "chunk", "blob", "head", "tail", "padding", "name", "writable", "opts", "other", "entry", "isFile", "recursive", "x", "sandbox_exports", "__export", "FileHandle", "FolderHandle", "sandbox_default", "DISALLOWED", "Sink", "init_sandbox", "__esmMin", "init_util", "errors", "writer", "fileEntry", "chunk", "resolve", "reject", "evt", "file", "writable", "other", "opts", "fileWriter", "dir", "reader", "entries", "x", "name", "entry", "err", "e", "kAdapter", "_a", "FileSystemHandle", "FileSystemHandle_default", "init_FileSystemHandle", "__esmMin", "adapter", "__publicField", "mode", "handle", "options", "other", "WritableStream", "FileSystemWritableFileStream", "FileSystemWritableFileStream_default", "init_FileSystemWritableFileStream", "__esmMin", "init_config", "config_default", "args", "w", "p", "position", "size", "data", "writer", "FileSystemFileHandle_exports", "__export", "FileSystemFileHandle", "FileSystemFileHandle_default", "kAdapter", "_a", "init_FileSystemFileHandle", "__esmMin", "init_FileSystemHandle", "init_FileSystemWritableFileStream", "FileSystemHandle_default", "adapter", "__publicField", "options", "FileSystemWritableFileStream_default", "FileSystemDirectoryHandle_exports", "__export", "FileSystemDirectoryHandle", "FileSystemDirectoryHandle_default", "kAdapter", "_a", "init_FileSystemDirectoryHandle", "__esmMin", "init_FileSystemHandle", "FileSystemHandle_default", "adapter", "__publicField", "name", "options", "handle", "FileSystemFileHandle", "_", "entry", "possibleDescendant", "openSet", "current", "path", "util_exports", "__export", "config", "errors", "fromDataTransfer", "getDirHandlesFromInput", "getFileHandlesFromInput", "entries", "memory", "sandbox", "fs", "folder", "entry", "input", "FolderHandle", "FileHandle", "FileSystemDirectoryHandle", "files", "rootName", "root", "file", "path", "name", "dir", "FileSystemFileHandle", "init_util", "__esmMin", "m", "downloader_exports", "__export", "FileHandle", "WritableStream", "TransformStream", "DOMException", "Blob", "GONE", "isSafari", "WRITE", "PULL", "ERROR", "ABORT", "CLOSE", "MessagePortSink", "RemoteWritableStream", "init_downloader", "__esmMin", "init_util", "init_config", "config_default", "errors", "name", "other", "options", "_a", "sw", "link", "ts", "sink", "chunks", "chunk", "blob", "writable", "readablePort", "fileName", "headers", "keepAlive", "ctrl", "reader", "pump", "_", "e", "iframe", "port", "event", "controller", "message", "reason", "resolve", "reject", "channel", "InnerDbConnection", "database", "store", "mode", "obj", "key", "os", "resolve", "reject", "response", "IndexedDbWrapper", "databaseName", "objectStores", "conn", "event", "db", "fileBookmarksStore", "avaloniaDb", "CaretHelper", "element", "position", "options", "_a", "_b", "isBrowser", "debug", "el", "div", "style", "computed", "isInput", "properties", "prop", "height", "outerHeight", "targetHeight", "isFirefox", "span", "coordinates", "JsExports", "_a", "resolveExports", "runtimeApi", "InputHelper", "args", "globalThis", "resolve", "reject", "text", "element", "topLevelId", "keySub", "pointerSub", "textSub", "dndSub", "paneSub", "keyDownHandler", "JsExports", "keyUpHandler", "compositionStartHandler", "beforeInputHandler", "ranges", "start", "end", "compositionUpdateHandler", "compositionEndHandler", "pointerMoveHandler", "pointerDownHandler", "pointerUpHandler", "pointerCancelHandler", "wheelHandler", "handler", "dataObject", "overAndDropHandler", "pointerEvent", "e", "listener", "event", "elementRect", "keyboardRect", "inputElement", "kind", "x", "y", "caretWidth", "caretHeight", "caret", "left", "top", "CaretHelper", "modifiers", "buttons", "containerElement", "pointerId", "Caniuse", "_a", "userAgentData", "userAgent", "regex1", "regex2", "WebRenderTarget", "canvas", "type", "target", "w", "h", "getGL", "_a", "_b", "_c", "_d", "self", "module", "_WebGlRenderTarget", "WebRenderTarget", "canvas", "mode", "attrs", "context", "handle", "ret", "WebGlRenderTarget", "SoftwareRenderTarget", "WebRenderTarget", "canvas", "context", "pointer", "length", "width", "height", "_a", "heap8", "clampedBuffer", "dstArrayBuffer", "copy", "imageData", "target", "_WebRenderTargetRegistry", "pthreadId", "canvas", "preferredModes", "_a", "_b", "id", "self", "module", "pthreads", "pthread", "worker", "offscreen", "oldHandler", "ev", "msg", "modes", "mode", "SoftwareRenderTarget", "WebGlRenderTarget", "e", "message", "WebRenderTargetRegistry", "StorageItem", "handle", "file", "bookmarkId", "wellKnownType", "_a", "type", "item", "name", "destination", "mode", "Caniuse", "connection", "avaloniaDb", "fileBookmarksStore", "StorageItems", "items", "instance", "files", "retItems", "i", "native", "showDirectoryPicker", "options", "input", "p", "resolve", "mod", "showDirectoryPicker_default", "def", "native", "showOpenFilePicker", "options", "opts", "input", "e", "p", "resolve", "m", "showOpenFilePicker_default", "native", "showSaveFilePicker", "options", "FileSystemFileHandle", "FileHandle", "showSaveFilePicker_default", "entry", "FileHandle", "FolderHandle", "FileSystemDirectoryHandle", "FileSystemFileHandle", "init_FileSystemDirectoryHandle", "init_FileSystemFileHandle", "init_FileSystemHandle", "init_FileSystemWritableFileStream", "StorageProvider", "startIn", "preferPolyfill", "_a", "_b", "options", "handle", "showDirectoryPicker_default", "StorageItem", "multiple", "types", "excludeAcceptAllOption", "handles", "showOpenFilePicker_default", "StorageItems", "suggestedName", "showSaveFilePicker_default", "key", "connection", "avaloniaDb", "fileBookmarksStore", "description", "mimeTypes", "extensions", "accept", "a"] + "sources": ["../webapp/node_modules/native-file-system-adapter/src/config.js", "../webapp/node_modules/native-file-system-adapter/src/adapters/memory.js", "../webapp/node_modules/native-file-system-adapter/src/adapters/sandbox.js", "../webapp/node_modules/native-file-system-adapter/src/FileSystemHandle.js", "../webapp/node_modules/native-file-system-adapter/src/FileSystemWritableFileStream.js", "../webapp/node_modules/native-file-system-adapter/src/FileSystemFileHandle.js", "../webapp/node_modules/native-file-system-adapter/src/FileSystemDirectoryHandle.js", "../webapp/node_modules/native-file-system-adapter/src/util.js", "../webapp/node_modules/native-file-system-adapter/src/adapters/downloader.js", "../webapp/modules/storage/indexedDb.ts", "../webapp/modules/avalonia/caretHelper.ts", "../webapp/modules/avalonia/input.ts", "../webapp/modules/avalonia/caniuse.ts", "../webapp/modules/storage/storageItem.ts", "../webapp/node_modules/native-file-system-adapter/src/showDirectoryPicker.js", "../webapp/node_modules/native-file-system-adapter/src/showOpenFilePicker.js", "../webapp/node_modules/native-file-system-adapter/src/showSaveFilePicker.js", "../webapp/node_modules/native-file-system-adapter/src/getOriginPrivateDirectory.js", "../webapp/node_modules/native-file-system-adapter/src/es6.js", "../webapp/modules/storage/storageProvider.ts"], + "sourcesContent": ["const config = {\n ReadableStream: globalThis.ReadableStream,\n WritableStream: globalThis.WritableStream,\n TransformStream: globalThis.TransformStream,\n DOMException: globalThis.DOMException,\n Blob: globalThis.Blob,\n File: globalThis.File,\n}\n\nexport default config\n", "import { errors } from '../util.js'\nimport config from '../config.js'\n\nconst { File, Blob, DOMException } = config\nconst { INVALID, GONE, MISMATCH, MOD_ERR, SYNTAX, SECURITY, DISALLOWED } = errors\n\nexport class Sink {\n\n /**\n * @param {FileHandle} fileHandle\n * @param {File} file\n */\n constructor (fileHandle, file) {\n this.fileHandle = fileHandle\n this.file = file\n this.size = file.size\n this.position = 0\n }\n\n write (chunk) {\n let file = this.file\n\n if (typeof chunk === 'object') {\n if (chunk.type === 'write') {\n if (Number.isInteger(chunk.position) && chunk.position >= 0) {\n this.position = chunk.position\n if (this.size < chunk.position) {\n this.file = new File(\n [this.file, new ArrayBuffer(chunk.position - this.size)],\n this.file.name,\n this.file\n )\n }\n }\n if (!('data' in chunk)) {\n throw new DOMException(...SYNTAX('write requires a data argument'))\n }\n chunk = chunk.data\n } else if (chunk.type === 'seek') {\n if (Number.isInteger(chunk.position) && chunk.position >= 0) {\n if (this.size < chunk.position) {\n throw new DOMException(...INVALID)\n }\n this.position = chunk.position\n return\n } else {\n throw new DOMException(...SYNTAX('seek requires a position argument'))\n }\n } else if (chunk.type === 'truncate') {\n if (Number.isInteger(chunk.size) && chunk.size >= 0) {\n file = chunk.size < this.size\n ? new File([file.slice(0, chunk.size)], file.name, file)\n : new File([file, new Uint8Array(chunk.size - this.size)], file.name)\n\n this.size = file.size\n if (this.position > file.size) {\n this.position = file.size\n }\n this.file = file\n return\n } else {\n throw new DOMException(...SYNTAX('truncate requires a size argument'))\n }\n }\n }\n\n chunk = new Blob([chunk])\n\n let blob = this.file\n // Calc the head and tail fragments\n const head = blob.slice(0, this.position)\n const tail = blob.slice(this.position + chunk.size)\n\n // Calc the padding\n let padding = this.position - head.size\n if (padding < 0) {\n padding = 0\n }\n blob = new File([\n head,\n new Uint8Array(padding),\n chunk,\n tail\n ], blob.name)\n\n this.size = blob.size\n this.position += chunk.size\n\n this.file = blob\n }\n close () {\n if (this.fileHandle._deleted) throw new DOMException(...GONE)\n this.fileHandle._file = this.file\n this.file =\n this.position =\n this.size = null\n if (this.fileHandle.onclose) {\n this.fileHandle.onclose(this.fileHandle)\n }\n }\n}\n\nexport class FileHandle {\n constructor (name = '', file = new File([], name), writable = true) {\n this._file = file\n this.name = name\n this.kind = 'file'\n this._deleted = false\n this.writable = writable\n this.readable = true\n }\n\n async getFile () {\n if (this._deleted) throw new DOMException(...GONE)\n return this._file\n }\n\n async createWritable (opts) {\n if (!this.writable) throw new DOMException(...DISALLOWED)\n if (this._deleted) throw new DOMException(...GONE)\n\n const file = opts.keepExistingData\n ? await this.getFile()\n : new File([], this.name)\n\n return new Sink(this, file)\n }\n\n async isSameEntry (other) {\n return this === other\n }\n\n async _destroy () {\n this._deleted = true\n this._file = null\n }\n}\n\nexport class FolderHandle {\n\n /** @param {string} name */\n constructor (name, writable = true) {\n this.name = name\n this.kind = 'directory'\n this._deleted = false\n /** @type {Object.} */\n this._entries = {}\n this.writable = writable\n this.readable = true\n }\n\n /** @returns {AsyncGenerator<[string, FileHandle | FolderHandle]>} */\n async * entries () {\n if (this._deleted) throw new DOMException(...GONE)\n yield* Object.entries(this._entries)\n }\n\n async isSameEntry (other) {\n return this === other\n }\n\n /**\n * @param {string} name\n * @param {{ create: boolean; }} opts\n */\n async getDirectoryHandle (name, opts) {\n if (this._deleted) throw new DOMException(...GONE)\n const entry = this._entries[name]\n if (entry) { // entry exist\n if (entry instanceof FileHandle) {\n throw new DOMException(...MISMATCH)\n } else {\n return entry\n }\n } else {\n if (opts.create) {\n return (this._entries[name] = new FolderHandle(name))\n } else {\n throw new DOMException(...GONE)\n }\n }\n }\n\n /**\n * @param {string} name\n * @param {{ create: boolean; }} opts\n */\n async getFileHandle (name, opts) {\n const entry = this._entries[name]\n const isFile = entry instanceof FileHandle\n if (entry && isFile) return entry\n if (entry && !isFile) throw new DOMException(...MISMATCH)\n if (!entry && !opts.create) throw new DOMException(...GONE)\n if (!entry && opts.create) {\n return (this._entries[name] = new FileHandle(name))\n }\n }\n\n async removeEntry (name, opts) {\n const entry = this._entries[name]\n if (!entry) throw new DOMException(...GONE)\n await entry._destroy(opts.recursive)\n delete this._entries[name]\n }\n\n async _destroy (recursive) {\n for (let x of Object.values(this._entries)) {\n if (!recursive) throw new DOMException(...MOD_ERR)\n await x._destroy(recursive)\n }\n this._entries = {}\n this._deleted = true\n }\n}\n\nconst fs = new FolderHandle('')\n\nexport default () => fs\n", "/* global Blob, DOMException */\n\nimport { errors } from '../util.js'\n\nconst { DISALLOWED } = errors\n\nclass Sink {\n /**\n * @param {FileWriter} writer\n * @param {FileEntry} fileEntry\n */\n constructor (writer, fileEntry) {\n this.writer = writer\n this.fileEntry = fileEntry\n }\n\n /**\n * @param {BlobPart | Object} chunk\n */\n async write (chunk) {\n if (typeof chunk === 'object') {\n if (chunk.type === 'write') {\n if (Number.isInteger(chunk.position) && chunk.position >= 0) {\n this.writer.seek(chunk.position)\n if (this.writer.position !== chunk.position) {\n await new Promise((resolve, reject) => {\n this.writer.onwriteend = resolve\n this.writer.onerror = reject\n this.writer.truncate(chunk.position)\n })\n this.writer.seek(chunk.position)\n }\n }\n if (!('data' in chunk)) {\n throw new DOMException('Failed to execute \\'write\\' on \\'UnderlyingSinkBase\\': Invalid params passed. write requires a data argument', 'SyntaxError')\n }\n chunk = chunk.data\n } else if (chunk.type === 'seek') {\n if (Number.isInteger(chunk.position) && chunk.position >= 0) {\n this.writer.seek(chunk.position)\n if (this.writer.position !== chunk.position) {\n throw new DOMException('seeking position failed', 'InvalidStateError')\n }\n return\n } else {\n throw new DOMException('Failed to execute \\'write\\' on \\'UnderlyingSinkBase\\': Invalid params passed. seek requires a position argument', 'SyntaxError')\n }\n } else if (chunk.type === 'truncate') {\n return new Promise(resolve => {\n if (Number.isInteger(chunk.size) && chunk.size >= 0) {\n this.writer.onwriteend = evt => resolve()\n this.writer.truncate(chunk.size)\n } else {\n throw new DOMException('Failed to execute \\'write\\' on \\'UnderlyingSinkBase\\': Invalid params passed. truncate requires a size argument', 'SyntaxError')\n }\n })\n }\n }\n await new Promise((resolve, reject) => {\n this.writer.onwriteend = resolve\n this.writer.onerror = reject\n this.writer.write(new Blob([chunk]))\n })\n }\n\n close () {\n return new Promise(this.fileEntry.file.bind(this.fileEntry))\n }\n}\n\nexport class FileHandle {\n /** @param {FileEntry} file */\n constructor (file, writable = true) {\n this.file = file\n this.kind = 'file'\n this.writable = writable\n this.readable = true\n }\n\n get name () {\n return this.file.name\n }\n\n /**\n * @param {{ file: { toURL: () => string; }; }} other\n */\n isSameEntry (other) {\n return this.file.toURL() === other.file.toURL()\n }\n\n /** @return {Promise} */\n getFile () {\n return new Promise(this.file.file.bind(this.file))\n }\n\n /** @return {Promise} */\n createWritable (opts) {\n if (!this.writable) throw new DOMException(...DISALLOWED)\n\n return new Promise((resolve, reject) =>\n this.file.createWriter(fileWriter => {\n if (opts.keepExistingData === false) {\n fileWriter.onwriteend = evt => resolve(new Sink(fileWriter, this.file))\n fileWriter.truncate(0)\n } else {\n resolve(new Sink(fileWriter, this.file))\n }\n }, reject)\n )\n }\n}\n\nexport class FolderHandle {\n /** @param {DirectoryEntry} dir */\n constructor (dir, writable = true) {\n this.dir = dir\n this.writable = writable\n this.readable = true\n this.kind = 'directory'\n this.name = dir.name\n }\n\n /** @param {FolderHandle} other */\n isSameEntry (other) {\n return this.dir.fullPath === other.dir.fullPath\n }\n\n /** @returns {AsyncGenerator<[string, FileHandle | FolderHandle]>} */\n async * entries () {\n const reader = this.dir.createReader()\n const entries = await new Promise(reader.readEntries.bind(reader))\n for (const x of entries) {\n yield [x.name, x.isFile ? new FileHandle(x, this.writable) : new FolderHandle(x, this.writable)]\n }\n }\n\n /**\n * @param {string} name\n * @param {{ create: boolean; }} opts\n * @returns {Promise}\n */\n getDirectoryHandle (name, opts) {\n return new Promise((resolve, reject) => {\n this.dir.getDirectory(name, opts, dir => {\n resolve(new FolderHandle(dir))\n }, reject)\n })\n }\n\n /**\n * @param {string} name\n * @param {{ create: boolean; }} opts\n * @returns {Promise}\n */\n getFileHandle (name, opts) {\n return new Promise((resolve, reject) =>\n this.dir.getFile(name, opts, file => resolve(new FileHandle(file)), reject)\n )\n }\n\n /**\n * @param {string} name\n * @param {{ recursive: boolean; }} opts\n */\n async removeEntry (name, opts) {\n /** @type {Error|FolderHandle|FileHandle} */\n const entry = await this.getDirectoryHandle(name, { create: false }).catch(err =>\n err.name === 'TypeMismatchError' ? this.getFileHandle(name, { create: false }) : err\n )\n\n if (entry instanceof Error) throw entry\n\n return new Promise((resolve, reject) => {\n if (entry instanceof FolderHandle) {\n opts.recursive\n ? entry.dir.removeRecursively(() => resolve(), reject)\n : entry.dir.remove(() => resolve(), reject)\n } else if (entry.file) {\n entry.file.remove(() => resolve(), reject)\n }\n })\n }\n}\n\nexport default (opts = {}) => new Promise((resolve, reject) =>\n window.webkitRequestFileSystem(\n opts._persistent, 0,\n e => resolve(new FolderHandle(e.root)),\n reject\n )\n)\n", "const kAdapter = Symbol('adapter')\n\nclass FileSystemHandle {\n /** @type {FileSystemHandle} */\n [kAdapter]\n\n /** @type {string} */\n name\n /** @type {('file'|'directory')} */\n kind\n\n /** @param {FileSystemHandle & {writable}} adapter */\n constructor (adapter) {\n this.kind = adapter.kind\n this.name = adapter.name\n this[kAdapter] = adapter\n }\n\n async queryPermission ({mode = 'read'} = {}) {\n const handle = this[kAdapter]\n\n if (handle.queryPermission) {\n return handle.queryPermission({mode})\n }\n\n if (mode === 'read') {\n return 'granted'\n } else if (mode === 'readwrite') {\n return handle.writable ? 'granted' : 'denied'\n } else {\n throw new TypeError(`Mode ${mode} must be 'read' or 'readwrite'`)\n }\n }\n\n async requestPermission ({mode = 'read'} = {}) {\n const handle = this[kAdapter]\n if (handle.requestPermission) {\n return handle.requestPermission({mode})\n }\n\n if (mode === 'read') {\n return 'granted'\n } else if (mode === 'readwrite') {\n return handle.writable ? 'granted' : 'denied'\n } else {\n throw new TypeError(`Mode ${mode} must be 'read' or 'readwrite'`)\n }\n }\n\n /**\n * Attempts to remove the entry represented by handle from the underlying file system.\n *\n * @param {object} options\n * @param {boolean} [options.recursive=false]\n */\n async remove (options = {}) {\n await this[kAdapter].remove(options)\n }\n\n /**\n * @param {FileSystemHandle} other\n */\n async isSameEntry (other) {\n if (this === other) return true\n if (\n (!other) ||\n (typeof other !== 'object') ||\n (this.kind !== other.kind) ||\n (!other[kAdapter])\n ) return false\n return this[kAdapter].isSameEntry(other[kAdapter])\n }\n}\n\nObject.defineProperty(FileSystemHandle.prototype, Symbol.toStringTag, {\n value: 'FileSystemHandle',\n writable: false,\n enumerable: false,\n configurable: true\n})\n\nexport default FileSystemHandle\nexport { FileSystemHandle }\n", "import config from './config.js'\n\nconst { WritableStream } = config\n\nclass FileSystemWritableFileStream extends WritableStream {\n constructor (...args) {\n super(...args)\n\n // Stupid Safari hack to extend native classes\n // https://bugs.webkit.org/show_bug.cgi?id=226201\n Object.setPrototypeOf(this, FileSystemWritableFileStream.prototype)\n\n /** @private */\n this._closed = false\n }\n\n close () {\n this._closed = true\n const w = this.getWriter()\n const p = w.close()\n w.releaseLock()\n return p\n // return super.close ? super.close() : this.getWriter().close()\n }\n\n /** @param {number} position */\n seek (position) {\n return this.write({ type: 'seek', position })\n }\n\n /** @param {number} size */\n truncate (size) {\n return this.write({ type: 'truncate', size })\n }\n\n write (data) {\n if (this._closed) {\n return Promise.reject(new TypeError('Cannot write to a CLOSED writable stream'))\n }\n\n const writer = this.getWriter()\n const p = writer.write(data)\n writer.releaseLock()\n return p\n }\n}\n\nObject.defineProperty(FileSystemWritableFileStream.prototype, Symbol.toStringTag, {\n value: 'FileSystemWritableFileStream',\n writable: false,\n enumerable: false,\n configurable: true\n})\n\nObject.defineProperties(FileSystemWritableFileStream.prototype, {\n close: { enumerable: true },\n seek: { enumerable: true },\n truncate: { enumerable: true },\n write: { enumerable: true }\n})\n\nexport default FileSystemWritableFileStream\nexport { FileSystemWritableFileStream }\n", "import FileSystemHandle from './FileSystemHandle.js'\nimport FileSystemWritableFileStream from './FileSystemWritableFileStream.js'\n\nconst kAdapter = Symbol('adapter')\n\nclass FileSystemFileHandle extends FileSystemHandle {\n /** @type {FileSystemFileHandle} */\n [kAdapter]\n\n constructor (adapter) {\n super(adapter)\n this[kAdapter] = adapter\n }\n\n /**\n * @param {Object} [options={}]\n * @param {boolean} [options.keepExistingData]\n * @returns {Promise}\n */\n async createWritable (options = {}) {\n return new FileSystemWritableFileStream(\n await this[kAdapter].createWritable(options)\n )\n }\n\n /**\n * @returns {Promise}\n */\n async getFile () {\n return this[kAdapter].getFile()\n }\n}\n\nObject.defineProperty(FileSystemFileHandle.prototype, Symbol.toStringTag, {\n value: 'FileSystemFileHandle',\n writable: false,\n enumerable: false,\n configurable: true\n})\n\nObject.defineProperties(FileSystemFileHandle.prototype, {\n createWritable: { enumerable: true },\n getFile: { enumerable: true }\n})\n\nexport default FileSystemFileHandle\nexport { FileSystemFileHandle }\n", "import FileSystemHandle from './FileSystemHandle.js'\n\nconst kAdapter = Symbol('adapter')\n\nclass FileSystemDirectoryHandle extends FileSystemHandle {\n /** @type {FileSystemDirectoryHandle} */\n [kAdapter]\n\n constructor (adapter) {\n super(adapter)\n this[kAdapter] = adapter\n }\n\n /**\n * @param {string} name Name of the directory\n * @param {object} [options]\n * @param {boolean} [options.create] create the directory if don't exist\n * @returns {Promise}\n */\n async getDirectoryHandle (name, options = {}) {\n if (name === '') {\n throw new TypeError(`Name can't be an empty string.`)\n }\n if (name === '.' || name === '..' || name.includes('/')) {\n throw new TypeError(`Name contains invalid characters.`)\n }\n options.create = !!options.create\n const handle = await this[kAdapter].getDirectoryHandle(name, options)\n return new FileSystemDirectoryHandle(handle)\n }\n\n /** @returns {AsyncGenerator<[string, FileSystemHandle | FileSystemDirectoryHandle]>} */\n async * entries () {\n const {FileSystemFileHandle} = await import('./FileSystemFileHandle.js')\n\n for await (const [_, entry] of this[kAdapter].entries())\n yield [entry.name, entry.kind === 'file'\n ? new FileSystemFileHandle(entry)\n : new FileSystemDirectoryHandle(entry)]\n }\n\n /** @deprecated use .entries() instead */\n async * getEntries() {\n const {FileSystemFileHandle} = await import('./FileSystemFileHandle.js')\n console.warn('deprecated, use .entries() instead')\n for await (let entry of this[kAdapter].entries())\n yield entry.kind === 'file'\n ? new FileSystemFileHandle(entry)\n : new FileSystemDirectoryHandle(entry)\n }\n\n /**\n * @param {string} name Name of the file\n * @param {object} [options]\n * @param {boolean} [options.create] create the file if don't exist\n */\n async getFileHandle (name, options = {}) {\n const {FileSystemFileHandle} = await import('./FileSystemFileHandle.js')\n if (name === '') throw new TypeError(`Name can't be an empty string.`)\n if (name === '.' || name === '..' || name.includes('/')) {\n throw new TypeError(`Name contains invalid characters.`)\n }\n options.create = !!options.create\n const handle = await this[kAdapter].getFileHandle(name, options)\n return new FileSystemFileHandle(handle)\n }\n\n /**\n * @param {string} name\n * @param {object} [options]\n * @param {boolean} [options.recursive]\n */\n async removeEntry (name, options = {}) {\n if (name === '') {\n throw new TypeError(`Name can't be an empty string.`)\n }\n if (name === '.' || name === '..' || name.includes('/')) {\n throw new TypeError(`Name contains invalid characters.`)\n }\n options.recursive = !!options.recursive // cuz node's fs.rm require boolean\n return this[kAdapter].removeEntry(name, options)\n }\n\n async resolve (possibleDescendant) {\n if (await possibleDescendant.isSameEntry(this)) {\n return []\n }\n\n const openSet = [{ handle: this, path: [] }]\n\n while (openSet.length) {\n let { handle: current, path } = openSet.pop()\n for await (const entry of current.values()) {\n if (await entry.isSameEntry(possibleDescendant)) {\n return [...path, entry.name]\n }\n if (entry.kind === 'directory') {\n openSet.push({ handle: entry, path: [...path, entry.name] })\n }\n }\n }\n\n return null\n }\n\n async * keys () {\n for await (const [name] of this[kAdapter].entries())\n yield name\n }\n\n async * values () {\n for await (const [_, entry] of this)\n yield entry\n }\n\n [Symbol.asyncIterator]() {\n return this.entries()\n }\n}\n\nObject.defineProperty(FileSystemDirectoryHandle.prototype, Symbol.toStringTag, {\n\tvalue: 'FileSystemDirectoryHandle',\n\twritable: false,\n\tenumerable: false,\n\tconfigurable: true\n})\n\nObject.defineProperties(FileSystemDirectoryHandle.prototype, {\n\tgetDirectoryHandle: { enumerable: true },\n\tentries: { enumerable: true },\n\tgetFileHandle: { enumerable: true },\n\tremoveEntry: { enumerable: true }\n})\n\nexport default FileSystemDirectoryHandle\nexport { FileSystemDirectoryHandle }\n", "export const errors = {\n INVALID: ['seeking position failed.', 'InvalidStateError'],\n GONE: ['A requested file or directory could not be found at the time an operation was processed.', 'NotFoundError'],\n MISMATCH: ['The path supplied exists, but was not an entry of requested type.', 'TypeMismatchError'],\n MOD_ERR: ['The object can not be modified in this way.', 'InvalidModificationError'],\n SYNTAX: m => [`Failed to execute 'write' on 'UnderlyingSinkBase': Invalid params passed. ${m}`, 'SyntaxError'],\n SECURITY: ['It was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources.', 'SecurityError'],\n DISALLOWED: ['The request is not allowed by the user agent or the platform in the current context.', 'NotAllowedError']\n}\n\nexport const config = {\n writable: globalThis.WritableStream\n}\n\nexport async function fromDataTransfer (entries) {\n console.warn('deprecated fromDataTransfer - use `dt.items[0].getAsFileSystemHandle()` instead')\n const [memory, sandbox, fs] = await Promise.all([\n import('./adapters/memory.js'),\n import('./adapters/sandbox.js'),\n import('./FileSystemDirectoryHandle.js')\n ])\n\n const folder = new memory.FolderHandle('', false)\n folder._entries = entries.map(entry => entry.isFile\n ? new sandbox.FileHandle(entry, false)\n : new sandbox.FolderHandle(entry, false)\n )\n\n return new fs.FileSystemDirectoryHandle(folder)\n}\n\nexport async function getDirHandlesFromInput (input) {\n const { FolderHandle, FileHandle } = await import('./adapters/memory.js')\n const { FileSystemDirectoryHandle } = await import('./FileSystemDirectoryHandle.js')\n\n const files = Array.from(input.files)\n const rootName = files[0].webkitRelativePath.split('/', 1)[0]\n const root = new FolderHandle(rootName, false)\n\n files.forEach(file => {\n const path = file.webkitRelativePath.split('/')\n path.shift()\n const name = path.pop()\n\n const dir = path.reduce((dir, path) => {\n if (!dir._entries[path]) dir._entries[path] = new FolderHandle(path, false)\n return dir._entries[path]\n }, root)\n\n dir._entries[name] = new FileHandle(file.name, file, false)\n })\n\n return new FileSystemDirectoryHandle(root)\n}\n\nexport async function getFileHandlesFromInput (input) {\n const { FileHandle } = await import('./adapters/memory.js')\n const { FileSystemFileHandle } = await import('./FileSystemFileHandle.js')\n\n return Array.from(input.files).map(file =>\n new FileSystemFileHandle(new FileHandle(file.name, file, false))\n )\n}\n", "import { errors } from '../util.js'\nimport config from '../config.js'\n\nconst {\n WritableStream,\n TransformStream,\n DOMException,\n Blob\n} = config\n\nconst { GONE } = errors\n// @ts-ignore\nconst isSafari = /constructor/i.test(window.HTMLElement) || window.safari || window.WebKitPoint\n\nexport class FileHandle {\n constructor (name = 'unkown') {\n this.name = name\n this.kind = 'file'\n }\n\n async getFile () {\n throw new DOMException(...GONE)\n }\n\n async isSameEntry(other) {\n return this === other\n }\n\n /**\n * @param {object} [options={}]\n */\n async createWritable (options = {}) {\n const sw = await navigator.serviceWorker?.getRegistration()\n const link = document.createElement('a')\n const ts = new TransformStream()\n const sink = ts.writable\n\n link.download = this.name\n\n if (isSafari || !sw) {\n /** @type {Blob[]} */\n let chunks = []\n ts.readable.pipeTo(new WritableStream({\n write (chunk) {\n chunks.push(new Blob([chunk]))\n },\n close () {\n const blob = new Blob(chunks, { type: 'application/octet-stream; charset=utf-8' })\n chunks = []\n link.href = URL.createObjectURL(blob)\n link.click()\n setTimeout(() => URL.revokeObjectURL(link.href), 10000)\n }\n }))\n } else {\n const { writable, readablePort } = new RemoteWritableStream(WritableStream)\n // Make filename RFC5987 compatible\n const fileName = encodeURIComponent(this.name).replace(/['()]/g, escape).replace(/\\*/g, '%2A')\n const headers = {\n 'content-disposition': \"attachment; filename*=UTF-8''\" + fileName,\n 'content-type': 'application/octet-stream; charset=utf-8',\n ...(options.size ? { 'content-length': options.size } : {})\n }\n\n const keepAlive = setTimeout(() => sw.active.postMessage(0), 10000)\n\n ts.readable.pipeThrough(new TransformStream({\n transform (chunk, ctrl) {\n if (chunk instanceof Uint8Array) return ctrl.enqueue(chunk)\n const reader = new Response(chunk).body.getReader()\n const pump = _ => reader.read().then(e => e.done ? 0 : pump(ctrl.enqueue(e.value)))\n return pump()\n }\n })).pipeTo(writable).finally(() => {\n clearInterval(keepAlive)\n })\n\n // Transfer the stream to service worker\n sw.active.postMessage({\n url: sw.scope + fileName,\n headers,\n readablePort\n }, [readablePort])\n\n // Trigger the download with a hidden iframe\n const iframe = document.createElement('iframe')\n iframe.hidden = true\n iframe.src = sw.scope + fileName\n document.body.appendChild(iframe)\n }\n\n return sink.getWriter()\n }\n}\n\nconst WRITE = 0\nconst PULL = 0\nconst ERROR = 1\nconst ABORT = 1\nconst CLOSE = 2\n\nclass MessagePortSink {\n /** @param {MessagePort} port */\n constructor (port) {\n port.onmessage = event => this._onMessage(event.data)\n this._port = port\n this._resetReady()\n }\n\n start (controller) {\n this._controller = controller\n // Apply initial backpressure\n return this._readyPromise\n }\n\n write (chunk) {\n const message = { type: WRITE, chunk }\n\n // Send chunk\n this._port.postMessage(message, [chunk.buffer])\n\n // Assume backpressure after every write, until sender pulls\n this._resetReady()\n\n // Apply backpressure\n return this._readyPromise\n }\n\n close () {\n this._port.postMessage({ type: CLOSE })\n this._port.close()\n }\n\n abort (reason) {\n this._port.postMessage({ type: ABORT, reason })\n this._port.close()\n }\n\n _onMessage (message) {\n if (message.type === PULL) this._resolveReady()\n if (message.type === ERROR) this._onError(message.reason)\n }\n\n _onError (reason) {\n this._controller.error(reason)\n this._rejectReady(reason)\n this._port.close()\n }\n\n _resetReady () {\n this._readyPromise = new Promise((resolve, reject) => {\n this._readyResolve = resolve\n this._readyReject = reject\n })\n this._readyPending = true\n }\n\n _resolveReady () {\n this._readyResolve()\n this._readyPending = false\n }\n\n _rejectReady (reason) {\n if (!this._readyPending) this._resetReady()\n this._readyPromise.catch(() => {})\n this._readyReject(reason)\n this._readyPending = false\n }\n}\n\nclass RemoteWritableStream {\n constructor (WritableStream) {\n const channel = new MessageChannel()\n this.readablePort = channel.port1\n this.writable = new WritableStream(\n new MessagePortSink(channel.port2)\n )\n }\n}\n", "class InnerDbConnection {\r\n constructor(private readonly database: IDBDatabase) { }\r\n\r\n private openStore(store: string, mode: IDBTransactionMode): IDBObjectStore {\r\n const tx = this.database.transaction(store, mode);\r\n return tx.objectStore(store);\r\n }\r\n\r\n public async put(store: string, obj: any, key?: IDBValidKey): Promise {\r\n const os = this.openStore(store, \"readwrite\");\r\n\r\n return await new Promise((resolve, reject) => {\r\n const response = os.put(obj, key);\r\n response.onsuccess = () => {\r\n resolve(response.result);\r\n };\r\n response.onerror = () => {\r\n reject(response.error);\r\n };\r\n });\r\n }\r\n\r\n public get(store: string, key: IDBValidKey): any {\r\n const os = this.openStore(store, \"readonly\");\r\n\r\n return new Promise((resolve, reject) => {\r\n const response = os.get(key);\r\n response.onsuccess = () => {\r\n resolve(response.result);\r\n };\r\n response.onerror = () => {\r\n reject(response.error);\r\n };\r\n });\r\n }\r\n\r\n public async delete(store: string, key: IDBValidKey): Promise {\r\n const os = this.openStore(store, \"readwrite\");\r\n\r\n return await new Promise((resolve, reject) => {\r\n const response = os.delete(key);\r\n response.onsuccess = () => {\r\n resolve();\r\n };\r\n response.onerror = () => {\r\n reject(response.error);\r\n };\r\n });\r\n }\r\n\r\n public close() {\r\n this.database.close();\r\n }\r\n}\r\n\r\nclass IndexedDbWrapper {\r\n constructor(private readonly databaseName: string, private readonly objectStores: [string]) {\r\n }\r\n\r\n public async connect(): Promise {\r\n const conn = window.indexedDB.open(this.databaseName, 1);\r\n\r\n conn.onupgradeneeded = event => {\r\n const db = (event.target as IDBRequest).result;\r\n this.objectStores.forEach(store => {\r\n db.createObjectStore(store);\r\n });\r\n };\r\n\r\n return await new Promise((resolve, reject) => {\r\n conn.onsuccess = event => {\r\n resolve(new InnerDbConnection((event.target as IDBRequest).result));\r\n };\r\n conn.onerror = event => {\r\n reject((event.target as IDBRequest).error);\r\n };\r\n });\r\n }\r\n}\r\n\r\nexport const fileBookmarksStore: string = \"fileBookmarks\";\r\nexport const avaloniaDb = new IndexedDbWrapper(\"AvaloniaDb\", [\r\n fileBookmarksStore\r\n]);\r\n", "// Based on https://github.com/component/textarea-caret-position/blob/master/index.js\r\nexport class CaretHelper {\r\n public static getCaretCoordinates(\r\n element: HTMLInputElement | HTMLTextAreaElement,\r\n position: number,\r\n options?: { debug: boolean }\r\n ) {\r\n if (!isBrowser) {\r\n throw new Error(\r\n \"textarea-caret-position#getCaretCoordinates should only be called in a browser\"\r\n );\r\n }\r\n\r\n const debug = options?.debug ?? false;\r\n if (debug) {\r\n const el = document.querySelector(\r\n \"#input-textarea-caret-position-mirror-div\"\r\n );\r\n if (el) el.parentNode?.removeChild(el);\r\n }\r\n\r\n // The mirror div will replicate the textarea's style\r\n const div = document.createElement(\"div\");\r\n div.id = \"input-textarea-caret-position-mirror-div\";\r\n document.body.appendChild(div);\r\n\r\n const style = div.style;\r\n const computed = window.getComputedStyle\r\n ? window.getComputedStyle(element)\r\n : ((element as any).currentStyle as CSSStyleDeclaration); // currentStyle for IE < 9\r\n const isInput = element.nodeName === \"INPUT\";\r\n\r\n // Default textarea styles\r\n style.whiteSpace = \"pre-wrap\";\r\n if (!isInput) style.wordWrap = \"break-word\"; // only for textarea-s\r\n\r\n // Position off-screen\r\n style.position = \"absolute\"; // required to return coordinates properly\r\n if (!debug) style.visibility = \"hidden\"; // not 'display: none' because we want rendering\r\n\r\n // Transfer the element's properties to the div\r\n properties.forEach((prop: string) => {\r\n if (isInput && prop === \"lineHeight\") {\r\n // Special case for s because text is rendered centered and line height may be != height\r\n if (computed.boxSizing === \"border-box\") {\r\n const height = parseInt(computed.height);\r\n const outerHeight =\r\n parseInt(computed.paddingTop) +\r\n parseInt(computed.paddingBottom) +\r\n parseInt(computed.borderTopWidth) +\r\n parseInt(computed.borderBottomWidth);\r\n const targetHeight = outerHeight + parseInt(computed.lineHeight);\r\n if (height > targetHeight) {\r\n style.lineHeight = `${height - outerHeight}px`;\r\n } else if (height === targetHeight) {\r\n style.lineHeight = computed.lineHeight;\r\n } else {\r\n style.lineHeight = \"0\";\r\n }\r\n } else {\r\n style.lineHeight = computed.height;\r\n }\r\n } else {\r\n (style as any)[prop] = (computed as any)[prop];\r\n }\r\n });\r\n\r\n if (isFirefox) {\r\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\r\n if (element.scrollHeight > parseInt(computed.height)) {\r\n style.overflowY = \"scroll\";\r\n }\r\n } else {\r\n style.overflow = \"hidden\"; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\r\n }\r\n\r\n div.textContent = element.value.substring(0, position);\r\n // The second special handling for input type=\"text\" vs textarea:\r\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\r\n if (isInput) div.textContent = div.textContent.replace(/\\s/g, \"\\u00a0\");\r\n\r\n const span = document.createElement(\"span\");\r\n // Wrapping must be replicated *exactly*, including when a long word gets\r\n // onto the next line, with whitespace at the end of the line before (#7).\r\n // The *only* reliable way to do that is to copy the *entire* rest of the\r\n // textarea's content into the created at the caret position.\r\n // For inputs, just '.' would be enough, but no need to bother.\r\n span.textContent = element.value.substring(position) || \".\"; // || because a completely empty faux span doesn't render at all\r\n div.appendChild(span);\r\n\r\n const coordinates = {\r\n top: span.offsetTop + parseInt(computed.borderTopWidth),\r\n left: span.offsetLeft + parseInt(computed.borderLeftWidth),\r\n height: parseInt(computed.lineHeight)\r\n };\r\n\r\n if (debug) {\r\n span.style.backgroundColor = \"#aaa\";\r\n } else {\r\n document.body.removeChild(div);\r\n }\r\n\r\n return coordinates;\r\n }\r\n}\r\n\r\nconst properties = [\r\n \"direction\", // RTL support\r\n \"boxSizing\",\r\n \"width\", // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\r\n \"height\",\r\n \"overflowX\",\r\n \"overflowY\", // copy the scrollbar for IE\r\n\r\n \"borderTopWidth\",\r\n \"borderRightWidth\",\r\n \"borderBottomWidth\",\r\n \"borderLeftWidth\",\r\n \"borderStyle\",\r\n\r\n \"paddingTop\",\r\n \"paddingRight\",\r\n \"paddingBottom\",\r\n \"paddingLeft\",\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n \"fontStyle\",\r\n \"fontVariant\",\r\n \"fontWeight\",\r\n \"fontStretch\",\r\n \"fontSize\",\r\n \"fontSizeAdjust\",\r\n \"lineHeight\",\r\n \"fontFamily\",\r\n\r\n \"textAlign\",\r\n \"textTransform\",\r\n \"textIndent\",\r\n \"textDecoration\", // might not make a difference, but better be safe\r\n\r\n \"letterSpacing\",\r\n \"wordSpacing\",\r\n\r\n \"tabSize\",\r\n \"MozTabSize\"\r\n];\r\n\r\nconst isBrowser = typeof window !== \"undefined\";\r\nconst isFirefox = isBrowser && (window as any).mozInnerScreenX != null;\r\n", "import { CaretHelper } from \"./caretHelper\";\r\n\r\nenum RawInputModifiers {\r\n None = 0,\r\n Alt = 1,\r\n Control = 2,\r\n Shift = 4,\r\n Meta = 8,\r\n\r\n LeftMouseButton = 16,\r\n RightMouseButton = 32,\r\n MiddleMouseButton = 64,\r\n XButton1MouseButton = 128,\r\n XButton2MouseButton = 256,\r\n KeyboardMask = Alt | Control | Shift | Meta,\r\n\r\n PenInverted = 512,\r\n PenEraser = 1024,\r\n PenBarrelButton = 2048\r\n}\r\n\r\n/*\r\n* This is a hack to handle Mozilla clipboard events in a more convinient way for framework users.\r\n* In the browser, events go in order KeyDown -> Paste -> KeyUp.\r\n* On KeyDown we trigger Avalonia handlers, which might execute readClipboardText.\r\n* When readClipboardText was executed, we mark ClipboardState as Pending and setup clipboard promise,\r\n* which will un-handle KeyDown event, basically allowing browser to pass a Paste event properly.\r\n* On actual Paste event we execute promise callbacks, resuming async operation, and returning pasted text to the app.\r\n* Note #1, on every KeyUp event we will reset all the state and reject pending promises if any, as this event it expected to come after Paste.\r\n* Note #2, whole this code will be executed only on legacy browsers like Mozilla, where clipboard.readText is not available.\r\n* Note #3, with all of these hacks Clipboard.ReadText will still work only on actual \"paste\" gesture initiated by user.\r\n* */\r\nenum ClipboardState {\r\n None,\r\n Ready,\r\n Pending\r\n}\r\n\r\nexport class InputHelper {\r\n static clipboardState: ClipboardState = ClipboardState.None;\r\n static resolveClipboard?: any;\r\n static rejectClipboard?: any;\r\n\r\n public static initializeBackgroundHandlers() {\r\n if (this.clipboardState !== ClipboardState.None) {\r\n return;\r\n }\r\n\r\n globalThis.addEventListener(\"paste\", (args: any) => {\r\n if (this.clipboardState === ClipboardState.Pending) {\r\n this.resolveClipboard(args.clipboardData.getData(\"text\"));\r\n }\r\n });\r\n this.clipboardState = ClipboardState.Ready;\r\n }\r\n\r\n public static async readClipboardText(): Promise {\r\n if (globalThis.navigator.clipboard.readText) {\r\n return await globalThis.navigator.clipboard.readText();\r\n } else {\r\n try {\r\n return await new Promise((resolve, reject) => {\r\n this.clipboardState = ClipboardState.Pending;\r\n this.resolveClipboard = resolve;\r\n this.rejectClipboard = reject;\r\n });\r\n } finally {\r\n this.clipboardState = ClipboardState.Ready;\r\n this.resolveClipboard = null;\r\n this.rejectClipboard = null;\r\n }\r\n }\r\n }\r\n\r\n public static subscribeKeyEvents(\r\n element: HTMLInputElement,\r\n keyDownCallback: (code: string, key: string, modifiers: string) => boolean,\r\n keyUpCallback: (code: string, key: string, modifiers: string) => boolean) {\r\n const keyDownHandler = (args: KeyboardEvent) => {\r\n if (keyDownCallback(args.code, args.key, this.getModifiers(args))) {\r\n if (this.clipboardState !== ClipboardState.Pending) {\r\n args.preventDefault();\r\n }\r\n }\r\n };\r\n element.addEventListener(\"keydown\", keyDownHandler);\r\n\r\n const keyUpHandler = (args: KeyboardEvent) => {\r\n if (keyUpCallback(args.code, args.key, this.getModifiers(args))) {\r\n args.preventDefault();\r\n }\r\n if (this.rejectClipboard) {\r\n this.rejectClipboard();\r\n }\r\n };\r\n\r\n element.addEventListener(\"keyup\", keyUpHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"keydown\", keyDownHandler);\r\n element.removeEventListener(\"keyup\", keyUpHandler);\r\n };\r\n }\r\n\r\n public static subscribeTextEvents(\r\n element: HTMLInputElement,\r\n beforeInputCallback: (args: InputEvent, start: number, end: number) => boolean,\r\n compositionStartCallback: (args: CompositionEvent) => boolean,\r\n compositionUpdateCallback: (args: CompositionEvent) => boolean,\r\n compositionEndCallback: (args: CompositionEvent) => boolean) {\r\n const compositionStartHandler = (args: CompositionEvent) => {\r\n if (compositionStartCallback(args)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"compositionstart\", compositionStartHandler);\r\n\r\n const beforeInputHandler = (args: InputEvent) => {\r\n const ranges = args.getTargetRanges();\r\n let start = -1;\r\n let end = -1;\r\n if (ranges.length > 0) {\r\n start = ranges[0].startOffset;\r\n end = ranges[0].endOffset;\r\n }\r\n\r\n if (args.inputType === \"insertCompositionText\") {\r\n start = 2;\r\n end = start + 2;\r\n }\r\n if (beforeInputCallback(args, start, end)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"beforeinput\", beforeInputHandler);\r\n\r\n const compositionUpdateHandler = (args: CompositionEvent) => {\r\n if (compositionUpdateCallback(args)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"compositionupdate\", compositionUpdateHandler);\r\n\r\n const compositionEndHandler = (args: CompositionEvent) => {\r\n if (compositionEndCallback(args)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"compositionend\", compositionEndHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"compositionstart\", compositionStartHandler);\r\n element.removeEventListener(\"compositionupdate\", compositionUpdateHandler);\r\n element.removeEventListener(\"compositionend\", compositionEndHandler);\r\n };\r\n }\r\n\r\n public static subscribePointerEvents(\r\n element: HTMLInputElement,\r\n pointerMoveCallback: (args: PointerEvent) => boolean,\r\n pointerDownCallback: (args: PointerEvent) => boolean,\r\n pointerUpCallback: (args: PointerEvent) => boolean,\r\n pointerCancelCallback: (args: PointerEvent) => boolean,\r\n wheelCallback: (args: WheelEvent) => boolean\r\n ) {\r\n const pointerMoveHandler = (args: PointerEvent) => {\r\n pointerMoveCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const pointerDownHandler = (args: PointerEvent) => {\r\n pointerDownCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const pointerUpHandler = (args: PointerEvent) => {\r\n pointerUpCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const pointerCancelHandler = (args: PointerEvent) => {\r\n pointerCancelCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const wheelHandler = (args: WheelEvent) => {\r\n wheelCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n element.addEventListener(\"pointermove\", pointerMoveHandler);\r\n element.addEventListener(\"pointerdown\", pointerDownHandler);\r\n element.addEventListener(\"pointerup\", pointerUpHandler);\r\n element.addEventListener(\"wheel\", wheelHandler);\r\n element.addEventListener(\"pointercancel\", pointerCancelHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"pointerover\", pointerMoveHandler);\r\n element.removeEventListener(\"pointerdown\", pointerDownHandler);\r\n element.removeEventListener(\"pointerup\", pointerUpHandler);\r\n element.removeEventListener(\"pointercancel\", pointerCancelHandler);\r\n element.removeEventListener(\"wheel\", wheelHandler);\r\n };\r\n }\r\n\r\n public static subscribeInputEvents(\r\n element: HTMLInputElement,\r\n inputCallback: (value: string) => boolean\r\n ) {\r\n const inputHandler = (args: Event) => {\r\n if (inputCallback((args as any).value)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"input\", inputHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"input\", inputHandler);\r\n };\r\n }\r\n\r\n public static subscribeDropEvents(\r\n element: HTMLInputElement,\r\n dragEvent: (args: any) => boolean\r\n ) {\r\n const dragHandler = (args: Event) => {\r\n if (dragEvent(args as any)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"dragover\", dragHandler);\r\n element.addEventListener(\"dragenter\", dragHandler);\r\n element.addEventListener(\"dragleave\", dragHandler);\r\n element.addEventListener(\"drop\", dragHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"dragover\", dragHandler);\r\n element.removeEventListener(\"dragenter\", dragHandler);\r\n element.removeEventListener(\"dragleave\", dragHandler);\r\n element.removeEventListener(\"drop\", dragHandler);\r\n };\r\n }\r\n\r\n public static getCoalescedEvents(pointerEvent: PointerEvent): PointerEvent[] {\r\n return pointerEvent.getCoalescedEvents();\r\n }\r\n\r\n public static subscribeKeyboardGeometryChange(\r\n element: HTMLInputElement,\r\n handler: (args: any) => boolean) {\r\n if (\"virtualKeyboard\" in navigator) {\r\n // (navigator as any).virtualKeyboard.overlaysContent = true;\r\n (navigator as any).virtualKeyboard.addEventListener(\"geometrychange\", (event: any) => {\r\n const elementRect = element.getBoundingClientRect();\r\n const keyboardRect = event.target.boundingRect as DOMRect;\r\n handler({\r\n x: keyboardRect.x - elementRect.x,\r\n y: keyboardRect.y - elementRect.y,\r\n width: keyboardRect.width,\r\n height: keyboardRect.height\r\n });\r\n });\r\n }\r\n }\r\n\r\n public static subscribeVisibilityChange(\r\n handler: (state: boolean) => void): boolean {\r\n document.addEventListener(\"visibilitychange\", () => {\r\n handler(document.visibilityState === \"visible\");\r\n });\r\n return document.visibilityState === \"visible\";\r\n }\r\n\r\n public static clearInput(inputElement: HTMLInputElement) {\r\n inputElement.value = \"\";\r\n }\r\n\r\n public static focusElement(inputElement: HTMLElement) {\r\n inputElement.focus();\r\n }\r\n\r\n public static setCursor(inputElement: HTMLInputElement, kind: string) {\r\n if (kind === \"default\") {\r\n inputElement.style.removeProperty(\"cursor\");\r\n } else {\r\n inputElement.style.cursor = kind;\r\n }\r\n }\r\n\r\n public static setBounds(inputElement: HTMLInputElement, x: number, y: number, caretWidth: number, caretHeight: number, caret: number) {\r\n inputElement.style.left = (x).toFixed(0) + \"px\";\r\n inputElement.style.top = (y).toFixed(0) + \"px\";\r\n\r\n const { left, top } = CaretHelper.getCaretCoordinates(inputElement, caret);\r\n\r\n inputElement.style.left = (x - left).toFixed(0) + \"px\";\r\n inputElement.style.top = (y - top).toFixed(0) + \"px\";\r\n }\r\n\r\n public static hide(inputElement: HTMLInputElement) {\r\n inputElement.style.display = \"none\";\r\n }\r\n\r\n public static show(inputElement: HTMLInputElement) {\r\n inputElement.style.display = \"block\";\r\n }\r\n\r\n public static setSurroundingText(inputElement: HTMLInputElement, text: string, start: number, end: number) {\r\n if (!inputElement) {\r\n return;\r\n }\r\n\r\n inputElement.value = text;\r\n inputElement.setSelectionRange(start, end);\r\n inputElement.style.width = \"20px\";\r\n inputElement.style.width = `${inputElement.scrollWidth}px`;\r\n }\r\n\r\n private static getModifiers(args: KeyboardEvent): string {\r\n let modifiers = RawInputModifiers.None;\r\n\r\n if (args.ctrlKey) { modifiers |= RawInputModifiers.Control; }\r\n if (args.altKey) { modifiers |= RawInputModifiers.Alt; }\r\n if (args.shiftKey) { modifiers |= RawInputModifiers.Shift; }\r\n if (args.metaKey) { modifiers |= RawInputModifiers.Meta; }\r\n\r\n return modifiers.toString();\r\n }\r\n\r\n public static setPointerCapture(containerElement: HTMLInputElement, pointerId: number): void {\r\n containerElement.setPointerCapture(pointerId);\r\n }\r\n\r\n public static releasePointerCapture(containerElement: HTMLInputElement, pointerId: number): void {\r\n if (containerElement.hasPointerCapture(pointerId)) {\r\n containerElement.releasePointerCapture(pointerId);\r\n }\r\n }\r\n}\r\n", "export class Caniuse {\r\n public static hasNativeFilePicker(): boolean {\r\n return \"showSaveFilePicker\" in globalThis;\r\n }\r\n\r\n public static isMobile(): boolean {\r\n const userAgentData = (globalThis.navigator as any)?.userAgentData;\r\n if (userAgentData) {\r\n return userAgentData.mobile;\r\n }\r\n\r\n const userAgent = navigator.userAgent;\r\n const regex1 = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i;\r\n const regex2 = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw(n|u)|c55\\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i;\r\n return regex1.test(userAgent) || regex2.test(userAgent.substr(0, 4));\r\n }\r\n\r\n public static isTv(): boolean {\r\n return navigator.userAgent.includes(\"SmartTV\");\r\n }\r\n}\r\n", "import { avaloniaDb, fileBookmarksStore } from \"./indexedDb\";\r\nimport { FileSystemFileHandle, FileSystemDirectoryHandle, FileSystemWritableFileStream } from \"native-file-system-adapter\";\r\nimport { Caniuse } from \"../avalonia\";\r\n\r\nexport class StorageItem {\r\n private constructor(\r\n public handle?: FileSystemFileHandle | FileSystemDirectoryHandle,\r\n private readonly file?: File,\r\n private readonly bookmarkId?: string,\r\n public wellKnownType?: WellKnownDirectory\r\n ) {\r\n }\r\n\r\n public get name(): string {\r\n if (this.handle) {\r\n return this.handle.name;\r\n }\r\n if (this.file) {\r\n return this.file.name;\r\n }\r\n return this.wellKnownType ?? \"\";\r\n }\r\n\r\n public get kind(): \"file\" | \"directory\" {\r\n if (this.handle) {\r\n return this.handle.kind;\r\n }\r\n if (this.file) {\r\n return \"file\";\r\n }\r\n return \"directory\";\r\n }\r\n\r\n public static createFromHandle(handle: FileSystemFileHandle | FileSystemDirectoryHandle, bookmarkId?: string) {\r\n return new StorageItem(handle, undefined, bookmarkId, undefined);\r\n }\r\n\r\n public static createFromFile(file: File) {\r\n return new StorageItem(undefined, file, undefined, undefined);\r\n }\r\n\r\n public static createWellKnownDirectory(type: WellKnownDirectory) {\r\n return new StorageItem(undefined, undefined, undefined, type);\r\n }\r\n\r\n public static async openRead(item: StorageItem): Promise {\r\n if (item.file) {\r\n return item.file;\r\n }\r\n\r\n if (!item.handle || item.kind !== \"file\") {\r\n throw new Error(\"StorageItem is not a file\");\r\n }\r\n\r\n await item.verityPermissions(\"read\");\r\n\r\n const file = await (item.handle as FileSystemFileHandle).getFile();\r\n return file;\r\n }\r\n\r\n public static async openWrite(item: StorageItem): Promise {\r\n if (!item.handle || item.kind !== \"file\") {\r\n throw new Error(\"StorageItem is not a writeable file\");\r\n }\r\n\r\n await item.verityPermissions(\"readwrite\");\r\n\r\n return await (item.handle as FileSystemFileHandle).createWritable({ keepExistingData: true });\r\n }\r\n\r\n public static async getProperties(item: StorageItem): Promise<{ Size: number; LastModified: number; Type: string } | null> {\r\n // getFile can fail with an exception depending if we use polyfill with a save file dialog or not.\r\n try {\r\n const file = item.handle && \"getFile\" in item.handle\r\n ? await item.handle.getFile()\r\n : item.file;\r\n\r\n if (!file) {\r\n return null;\r\n }\r\n\r\n return {\r\n Size: file.size,\r\n LastModified: file.lastModified,\r\n Type: file.type\r\n };\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n public static getItemsIterator(item: StorageItem): any | null {\r\n if (item.kind !== \"directory\" || !item.handle) {\r\n return null;\r\n }\r\n\r\n return (item.handle as any).entries();\r\n }\r\n\r\n public static async createFile(item: StorageItem, name: string): Promise {\r\n if (item.kind !== \"directory\" || !item.handle) {\r\n throw new TypeError(\"Unable to create item in the requested directory\");\r\n }\r\n\r\n await item.verityPermissions(\"readwrite\");\r\n\r\n return await ((item.handle as any).getFileHandle(name, { create: true }) as Promise);\r\n }\r\n\r\n public static async createFolder(item: StorageItem, name: string): Promise {\r\n if (item.kind !== \"directory\" || !item.handle) {\r\n throw new TypeError(\"Unable to create item in the requested directory\");\r\n }\r\n\r\n await item.verityPermissions(\"readwrite\");\r\n\r\n return await ((item.handle as any).getDirectoryHandle(name, { create: true }) as Promise);\r\n }\r\n\r\n public static async deleteAsync(item: StorageItem): Promise {\r\n if (!item.handle) {\r\n return null;\r\n }\r\n\r\n await item.verityPermissions(\"readwrite\");\r\n\r\n return await ((item.handle as any).remove({ recursive: true }) as Promise);\r\n }\r\n\r\n public static async moveAsync(item: StorageItem, destination: StorageItem): Promise {\r\n if (!item.handle) {\r\n return null;\r\n }\r\n if (destination.kind !== \"directory\" || !destination.handle) {\r\n throw new TypeError(\"Unable to move item to the requested directory\");\r\n }\r\n\r\n await item.verityPermissions(\"readwrite\");\r\n\r\n return await ((item.handle as any).move(destination /*, newName */) as Promise);\r\n }\r\n\r\n private async verityPermissions(mode: \"read\" | \"readwrite\"): Promise {\r\n if (!this.handle) {\r\n return;\r\n }\r\n\r\n // If we are using polyfill, let it decide permissions by itself, we can't request anything in this case.\r\n if (!Caniuse.hasNativeFilePicker()) {\r\n return;\r\n }\r\n\r\n if (await this.handle.queryPermission({ mode }) === \"granted\") {\r\n return;\r\n }\r\n\r\n if (await this.handle.requestPermission({ mode }) === \"denied\") {\r\n throw new Error(\"Permissions denied\");\r\n }\r\n }\r\n\r\n public static async saveBookmark(item: StorageItem): Promise {\r\n // If file was previously bookmarked, just return old one.\r\n if (item.bookmarkId) {\r\n return item.bookmarkId;\r\n }\r\n\r\n // Bookmarks are not supported with polyfill.\r\n if (!item.handle || !Caniuse.hasNativeFilePicker()) {\r\n return null;\r\n }\r\n\r\n const connection = await avaloniaDb.connect();\r\n try {\r\n const key = await connection.put(fileBookmarksStore, item.handle, item.generateBookmarkId());\r\n return key as string;\r\n } finally {\r\n connection.close();\r\n }\r\n }\r\n\r\n public static async deleteBookmark(item: StorageItem): Promise {\r\n if (!item.bookmarkId || !Caniuse.hasNativeFilePicker()) {\r\n return;\r\n }\r\n\r\n const connection = await avaloniaDb.connect();\r\n try {\r\n await connection.delete(fileBookmarksStore, item.bookmarkId);\r\n } finally {\r\n connection.close();\r\n }\r\n }\r\n\r\n private generateBookmarkId(): string {\r\n return Date.now().toString(36) + Math.random().toString(36).substring(2);\r\n }\r\n}\r\n\r\nexport class StorageItems {\r\n constructor(private readonly items: StorageItem[]) { }\r\n\r\n public static itemsArray(instance: StorageItems): StorageItem[] {\r\n return instance.items;\r\n }\r\n\r\n public static filesToItemsArray(files: File[]): StorageItem[] {\r\n if (!files) {\r\n return [];\r\n }\r\n\r\n const retItems = [];\r\n for (let i = 0; i < files.length; i++) {\r\n retItems[i] = StorageItem.createFromFile(files[i]);\r\n }\r\n return retItems;\r\n }\r\n}\r\n", "/** @typedef {import('./FileSystemDirectoryHandle.js').default} FileSystemDirectoryHandle */\n\nconst native = globalThis.showDirectoryPicker\n\n/**\n * @param {Object} [options]\n * @param {boolean} [options._preferPolyfill] If you rather want to use the polyfill instead of the native\n * @returns {Promise}\n */\nasync function showDirectoryPicker (options = {}) {\n if (native && !options._preferPolyfill) {\n return native(options)\n }\n\n const input = document.createElement('input')\n input.type = 'file'\n\n // Even with this check, the browser may support the attribute, but not the functionality (e.g. iOS Safari)\n if (!('webkitdirectory' in input)) {\n throw new Error(`HTMLInputElement.webkitdirectory is not supported`)\n }\n\n // See https://stackoverflow.com/questions/47664777/javascript-file-input-onchange-not-working-ios-safari-only\n input.style.position = 'fixed'\n input.style.top = '-100000px'\n input.style.left = '-100000px'\n document.body.appendChild(input)\n\n input.webkitdirectory = true\n\n // Lazy load while the user is choosing the directory\n const p = import('./util.js')\n\n await new Promise(resolve => {\n input.addEventListener('change', resolve)\n input.click()\n })\n\n return p.then(mod => mod.getDirHandlesFromInput(input))\n}\n\nexport default showDirectoryPicker\nexport { showDirectoryPicker }\n", "/** @typedef {import('./FileSystemFileHandle.js').default} FileSystemFileHandle */\n\nconst def = { accepts: [] }\nconst native = globalThis.showOpenFilePicker\n\n/**\n * @param {Object} [options]\n * @param {boolean} [options.multiple] If you want to allow more than one file\n * @param {boolean} [options.excludeAcceptAllOption=false] Prevent user for selecting any\n * @param {Object[]} [options.accepts] Files you want to accept\n * @param {boolean} [options._preferPolyfill] If you rather want to use the polyfill instead of the native\n * @returns {Promise}\n */\nasync function showOpenFilePicker (options = {}) {\n const opts = { ...def, ...options }\n\n if (native && !options._preferPolyfill) {\n return native(opts)\n }\n\n const input = document.createElement('input')\n input.type = 'file'\n input.multiple = opts.multiple\n input.accept = (opts.accepts || [])\n .map(e => [\n ...(e.extensions || []).map(e => '.' + e),\n ...e.mimeTypes || []]\n )\n .flat()\n .join(',')\n\n // See https://stackoverflow.com/questions/47664777/javascript-file-input-onchange-not-working-ios-safari-only\n input.style.position = 'fixed'\n input.style.top = '-100000px'\n input.style.left = '-100000px'\n document.body.appendChild(input)\n\n // Lazy load while the user is choosing the directory\n const p = import('./util.js')\n\n await new Promise(resolve => {\n input.addEventListener('change', resolve)\n input.click()\n })\n\n return p.then(m => m.getFileHandlesFromInput(input))\n}\n\nexport default showOpenFilePicker\nexport { showOpenFilePicker }\n", "/** @typedef {import('./FileSystemFileHandle.js').default} FileSystemFileHandle */\n\nconst native = globalThis.showSaveFilePicker\n\n/**\n * @param {Object} [options]\n * @param {boolean} [options.excludeAcceptAllOption=false] Prevent user for selecting any\n * @param {Object[]} [options.types] Files you want to accept\n * @param {string} [options.suggestedName] the name to fall back to when using polyfill\n * @param {string} [options._name] the name to fall back to when using polyfill\n * @param {boolean} [options._preferPolyfill] If you rather want to use the polyfill instead of the native\n * @return {Promise}\n */\nasync function showSaveFilePicker (options = {}) {\n if (native && !options._preferPolyfill) {\n return native(options)\n }\n\n if (options._name) {\n console.warn('deprecated _name, spec now have `suggestedName`')\n options.suggestedName = options._name\n }\n\n const { FileSystemFileHandle } = await import('./FileSystemFileHandle.js')\n const { FileHandle } = await import('./adapters/downloader.js')\n return new FileSystemFileHandle(new FileHandle(options.suggestedName))\n}\n\nexport default showSaveFilePicker\nexport { showSaveFilePicker }\n", "/** @typedef {import('./FileSystemDirectoryHandle.js').default} FileSystemDirectoryHandle */\n\nif (globalThis.DataTransferItem && !DataTransferItem.prototype.getAsFileSystemHandle) {\n DataTransferItem.prototype.getAsFileSystemHandle = async function () {\n const entry = this.webkitGetAsEntry()\n const [\n { FileHandle, FolderHandle },\n { FileSystemDirectoryHandle },\n { FileSystemFileHandle }\n ] = await Promise.all([\n import('./adapters/sandbox.js'),\n import('./FileSystemDirectoryHandle.js'),\n import('./FileSystemFileHandle.js')\n ])\n\n return entry.isFile\n ? new FileSystemFileHandle(new FileHandle(entry, false))\n : new FileSystemDirectoryHandle(new FolderHandle(entry, false))\n }\n}\n\n/**\n * @param {object=} driver\n * @return {Promise}\n */\nasync function getOriginPrivateDirectory (driver, options = {}) {\n if (!driver) {\n return globalThis.navigator?.storage?.getDirectory() || globalThis.getOriginPrivateDirectory()\n }\n const {FileSystemDirectoryHandle} = await import('./FileSystemDirectoryHandle.js')\n const module = await driver\n const sandbox = await (module.default\n ? module.default(options)\n : module(options)\n )\n return new FileSystemDirectoryHandle(sandbox)\n}\n\nexport default getOriginPrivateDirectory\n", "import showDirectoryPicker from './showDirectoryPicker.js'\nimport showOpenFilePicker from './showOpenFilePicker.js'\nimport showSaveFilePicker from './showSaveFilePicker.js'\nimport getOriginPrivateDirectory from './getOriginPrivateDirectory.js'\nimport FileSystemDirectoryHandle from './FileSystemDirectoryHandle.js'\nimport FileSystemFileHandle from './FileSystemFileHandle.js'\nimport FileSystemHandle from './FileSystemHandle.js'\nimport FileSystemWritableFileStream from './FileSystemWritableFileStream.js'\n\nexport {\n FileSystemDirectoryHandle,\n FileSystemFileHandle,\n FileSystemHandle,\n FileSystemWritableFileStream,\n getOriginPrivateDirectory,\n showDirectoryPicker,\n showOpenFilePicker,\n showSaveFilePicker\n}\n", "import { avaloniaDb, fileBookmarksStore } from \"./indexedDb\";\r\nimport { StorageItem, StorageItems } from \"./storageItem\";\r\nimport { showOpenFilePicker, showDirectoryPicker, showSaveFilePicker, FileSystemFileHandle } from \"native-file-system-adapter\";\r\n\r\ndeclare global {\r\n type WellKnownDirectory = \"desktop\" | \"documents\" | \"downloads\" | \"music\" | \"pictures\" | \"videos\";\r\n interface FilePickerAcceptType {\r\n description?: string | undefined;\r\n accept: Record;\r\n }\r\n}\r\n\r\nexport class StorageProvider {\r\n public static async selectFolderDialog(\r\n startIn: StorageItem | null,\r\n preferPolyfill: boolean): Promise {\r\n // 'Picker' API doesn't accept \"null\" as a parameter, so it should be set to undefined.\r\n const options = {\r\n startIn: (startIn?.wellKnownType ?? startIn?.handle ?? undefined),\r\n _preferPolyfill: preferPolyfill\r\n };\r\n\r\n const handle = await showDirectoryPicker(options as any);\r\n return StorageItem.createFromHandle(handle);\r\n }\r\n\r\n public static async openFileDialog(\r\n startIn: StorageItem | null, multiple: boolean,\r\n types: FilePickerAcceptType[] | null, excludeAcceptAllOption: boolean,\r\n preferPolyfill: boolean): Promise {\r\n const options = {\r\n startIn: (startIn?.wellKnownType ?? startIn?.handle ?? undefined),\r\n multiple,\r\n excludeAcceptAllOption,\r\n types: (types ?? undefined),\r\n _preferPolyfill: preferPolyfill\r\n };\r\n\r\n const handles = await showOpenFilePicker(options);\r\n return new StorageItems(handles.map((handle: FileSystemFileHandle) => StorageItem.createFromHandle(handle)));\r\n }\r\n\r\n public static async saveFileDialog(\r\n startIn: StorageItem | null, suggestedName: string | null,\r\n types: FilePickerAcceptType[] | null, excludeAcceptAllOption: boolean,\r\n preferPolyfill: boolean): Promise {\r\n const options = {\r\n startIn: (startIn?.wellKnownType ?? startIn?.handle ?? undefined),\r\n suggestedName: (suggestedName ?? undefined),\r\n excludeAcceptAllOption,\r\n types: (types ?? undefined),\r\n _preferPolyfill: preferPolyfill\r\n };\r\n\r\n const handle = await showSaveFilePicker(options);\r\n return StorageItem.createFromHandle(handle);\r\n }\r\n\r\n public static async openBookmark(key: string): Promise {\r\n const connection = await avaloniaDb.connect();\r\n try {\r\n const handle = await connection.get(fileBookmarksStore, key);\r\n return handle && StorageItem.createFromHandle(handle, key);\r\n } finally {\r\n connection.close();\r\n }\r\n }\r\n\r\n public static createAcceptType(description: string, mimeTypes: string[], extensions: string[] | undefined): FilePickerAcceptType {\r\n const accept: Record = {};\r\n mimeTypes.forEach(a => { accept[a] = extensions ?? []; });\r\n return { description, accept };\r\n }\r\n}\r\n"], + "mappings": "8QAAA,IAAMA,GASCC,EATPC,EAAAC,EAAA,KAAMH,GAAS,CACb,eAAgB,WAAW,eAC3B,eAAgB,WAAW,eAC3B,gBAAiB,WAAW,gBAC5B,aAAc,WAAW,aACzB,KAAM,WAAW,KACjB,KAAM,WAAW,IACnB,EAEOC,EAAQD,KCTf,IAAAI,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,iBAAAC,EAAA,SAAAC,EAAA,YAAAC,KAAA,IAGQC,EAAMC,GAAMC,EACZC,GAASC,EAAMC,GAAUC,GAASC,GAAQC,GAAUC,GAE/CX,EAgGAF,EAoCAC,EA6EPa,GAECX,GAzNPY,EAAAC,EAAA,KAAAC,IACAC,KAEM,CAAE,KAAAd,EAAM,KAAAC,GAAM,aAAAC,GAAiBa,GAC/B,CAAE,QAAAZ,GAAS,KAAAC,EAAM,SAAAC,GAAU,QAAAC,GAAS,OAAAC,GAAQ,SAAAC,GAAU,WAAAC,IAAeO,EAE9DlB,EAAN,KAAW,CAMhB,YAAamB,EAAYC,EAAM,CAC7B,KAAK,WAAaD,EAClB,KAAK,KAAOC,EACZ,KAAK,KAAOA,EAAK,KACjB,KAAK,SAAW,CAClB,CAEA,MAAOC,EAAO,CACZ,IAAID,EAAO,KAAK,KAEhB,GAAI,OAAOC,GAAU,UACnB,GAAIA,EAAM,OAAS,QAAS,CAW1B,GAVI,OAAO,UAAUA,EAAM,QAAQ,GAAKA,EAAM,UAAY,IACxD,KAAK,SAAWA,EAAM,SAClB,KAAK,KAAOA,EAAM,WACpB,KAAK,KAAO,IAAInB,EACd,CAAC,KAAK,KAAM,IAAI,YAAYmB,EAAM,SAAW,KAAK,IAAI,CAAC,EACvD,KAAK,KAAK,KACV,KAAK,IACP,IAGA,EAAE,SAAUA,GACd,MAAM,IAAIjB,EAAa,GAAGK,GAAO,gCAAgC,CAAC,EAEpEY,EAAQA,EAAM,IAChB,SAAWA,EAAM,OAAS,OACxB,GAAI,OAAO,UAAUA,EAAM,QAAQ,GAAKA,EAAM,UAAY,EAAG,CAC3D,GAAI,KAAK,KAAOA,EAAM,SACpB,MAAM,IAAIjB,EAAa,GAAGC,EAAO,EAEnC,KAAK,SAAWgB,EAAM,SACtB,MACF,KACE,OAAM,IAAIjB,EAAa,GAAGK,GAAO,mCAAmC,CAAC,UAE9DY,EAAM,OAAS,WACxB,GAAI,OAAO,UAAUA,EAAM,IAAI,GAAKA,EAAM,MAAQ,EAAG,CACnDD,EAAOC,EAAM,KAAO,KAAK,KACrB,IAAInB,EAAK,CAACkB,EAAK,MAAM,EAAGC,EAAM,IAAI,CAAC,EAAGD,EAAK,KAAMA,CAAI,EACrD,IAAIlB,EAAK,CAACkB,EAAM,IAAI,WAAWC,EAAM,KAAO,KAAK,IAAI,CAAC,EAAGD,EAAK,IAAI,EAEtE,KAAK,KAAOA,EAAK,KACb,KAAK,SAAWA,EAAK,OACvB,KAAK,SAAWA,EAAK,MAEvB,KAAK,KAAOA,EACZ,MACF,KACE,OAAM,IAAIhB,EAAa,GAAGK,GAAO,mCAAmC,CAAC,EAK3EY,EAAQ,IAAIlB,GAAK,CAACkB,CAAK,CAAC,EAExB,IAAIC,EAAO,KAAK,KAEVC,EAAOD,EAAK,MAAM,EAAG,KAAK,QAAQ,EAClCE,EAAOF,EAAK,MAAM,KAAK,SAAWD,EAAM,IAAI,EAG9CI,EAAU,KAAK,SAAWF,EAAK,KAC/BE,EAAU,IACZA,EAAU,GAEZH,EAAO,IAAIpB,EAAK,CACdqB,EACA,IAAI,WAAWE,CAAO,EACtBJ,EACAG,CACF,EAAGF,EAAK,IAAI,EAEZ,KAAK,KAAOA,EAAK,KACjB,KAAK,UAAYD,EAAM,KAEvB,KAAK,KAAOC,CACd,CACA,OAAS,CACP,GAAI,KAAK,WAAW,SAAU,MAAM,IAAIlB,EAAa,GAAGE,CAAI,EAC5D,KAAK,WAAW,MAAQ,KAAK,KAC7B,KAAK,KACL,KAAK,SACL,KAAK,KAAO,KACR,KAAK,WAAW,SAClB,KAAK,WAAW,QAAQ,KAAK,UAAU,CAE3C,CACF,EAEaR,EAAN,KAAiB,CACtB,YAAa4B,EAAO,GAAIN,EAAO,IAAIlB,EAAK,CAAC,EAAGwB,CAAI,EAAGC,EAAW,GAAM,CAClE,KAAK,MAAQP,EACb,KAAK,KAAOM,EACZ,KAAK,KAAO,OACZ,KAAK,SAAW,GAChB,KAAK,SAAWC,EAChB,KAAK,SAAW,EAClB,CAEA,MAAM,SAAW,CACf,GAAI,KAAK,SAAU,MAAM,IAAIvB,EAAa,GAAGE,CAAI,EACjD,OAAO,KAAK,KACd,CAEA,MAAM,eAAgBsB,EAAM,CAC1B,GAAI,CAAC,KAAK,SAAU,MAAM,IAAIxB,EAAa,GAAGO,EAAU,EACxD,GAAI,KAAK,SAAU,MAAM,IAAIP,EAAa,GAAGE,CAAI,EAEjD,IAAMc,EAAOQ,EAAK,iBACd,MAAM,KAAK,QAAQ,EACnB,IAAI1B,EAAK,CAAC,EAAG,KAAK,IAAI,EAE1B,OAAO,IAAIF,EAAK,KAAMoB,CAAI,CAC5B,CAEA,MAAM,YAAaS,EAAO,CACxB,OAAO,OAASA,CAClB,CAEA,MAAM,UAAY,CAChB,KAAK,SAAW,GAChB,KAAK,MAAQ,IACf,CACF,EAEa9B,EAAN,KAAmB,CAGxB,YAAa2B,EAAMC,EAAW,GAAM,CAClC,KAAK,KAAOD,EACZ,KAAK,KAAO,YACZ,KAAK,SAAW,GAEhB,KAAK,SAAW,CAAC,EACjB,KAAK,SAAWC,EAChB,KAAK,SAAW,EAClB,CAGA,MAAQ,SAAW,CACjB,GAAI,KAAK,SAAU,MAAM,IAAIvB,EAAa,GAAGE,CAAI,EACjD,MAAO,OAAO,QAAQ,KAAK,QAAQ,CACrC,CAEA,MAAM,YAAauB,EAAO,CACxB,OAAO,OAASA,CAClB,CAMA,MAAM,mBAAoBH,EAAME,EAAM,CACpC,GAAI,KAAK,SAAU,MAAM,IAAIxB,EAAa,GAAGE,CAAI,EACjD,IAAMwB,EAAQ,KAAK,SAASJ,GAC5B,GAAII,EAAO,CACT,GAAIA,aAAiBhC,EACnB,MAAM,IAAIM,EAAa,GAAGG,EAAQ,EAElC,OAAOuB,CAEX,KAAO,CACL,GAAIF,EAAK,OACP,OAAQ,KAAK,SAASF,GAAQ,IAAI3B,EAAa2B,CAAI,EAEnD,MAAM,IAAItB,EAAa,GAAGE,CAAI,CAElC,CACF,CAMA,MAAM,cAAeoB,EAAME,EAAM,CAC/B,IAAME,EAAQ,KAAK,SAASJ,GACtBK,EAASD,aAAiBhC,EAChC,GAAIgC,GAASC,EAAQ,OAAOD,EAC5B,GAAIA,GAAS,CAACC,EAAQ,MAAM,IAAI3B,EAAa,GAAGG,EAAQ,EACxD,GAAI,CAACuB,GAAS,CAACF,EAAK,OAAQ,MAAM,IAAIxB,EAAa,GAAGE,CAAI,EAC1D,GAAI,CAACwB,GAASF,EAAK,OACjB,OAAQ,KAAK,SAASF,GAAQ,IAAI5B,EAAW4B,CAAI,CAErD,CAEA,MAAM,YAAaA,EAAME,EAAM,CAC7B,IAAME,EAAQ,KAAK,SAASJ,GAC5B,GAAI,CAACI,EAAO,MAAM,IAAI1B,EAAa,GAAGE,CAAI,EAC1C,MAAMwB,EAAM,SAASF,EAAK,SAAS,EACnC,OAAO,KAAK,SAASF,EACvB,CAEA,MAAM,SAAUM,EAAW,CACzB,QAASC,KAAK,OAAO,OAAO,KAAK,QAAQ,EAAG,CAC1C,GAAI,CAACD,EAAW,MAAM,IAAI5B,EAAa,GAAGI,EAAO,EACjD,MAAMyB,EAAE,SAASD,CAAS,CAC5B,CACA,KAAK,SAAW,CAAC,EACjB,KAAK,SAAW,EAClB,CACF,EAEMpB,GAAK,IAAIb,EAAa,EAAE,EAEvBE,GAAQ,IAAMW,KCzNrB,IAAAsB,GAAA,GAAAC,EAAAD,GAAA,gBAAAE,EAAA,iBAAAC,EAAA,YAAAC,KAAA,IAIQC,GAEFC,EAgEOJ,EA0CAC,EAwENC,GAxLPG,GAAAC,EAAA,KAEAC,KAEM,CAAE,WAAAJ,IAAeK,GAEjBJ,EAAN,KAAW,CAKT,YAAaK,EAAQC,EAAW,CAC9B,KAAK,OAASD,EACd,KAAK,UAAYC,CACnB,CAKA,MAAM,MAAOC,EAAO,CAClB,GAAI,OAAOA,GAAU,UACnB,GAAIA,EAAM,OAAS,QAAS,CAY1B,GAXI,OAAO,UAAUA,EAAM,QAAQ,GAAKA,EAAM,UAAY,IACxD,KAAK,OAAO,KAAKA,EAAM,QAAQ,EAC3B,KAAK,OAAO,WAAaA,EAAM,WACjC,MAAM,IAAI,QAAQ,CAACC,EAASC,IAAW,CACrC,KAAK,OAAO,WAAaD,EACzB,KAAK,OAAO,QAAUC,EACtB,KAAK,OAAO,SAASF,EAAM,QAAQ,CACrC,CAAC,EACD,KAAK,OAAO,KAAKA,EAAM,QAAQ,IAG/B,EAAE,SAAUA,GACd,MAAM,IAAI,aAAa,2GAAgH,aAAa,EAEtJA,EAAQA,EAAM,IAChB,SAAWA,EAAM,OAAS,OACxB,GAAI,OAAO,UAAUA,EAAM,QAAQ,GAAKA,EAAM,UAAY,EAAG,CAE3D,GADA,KAAK,OAAO,KAAKA,EAAM,QAAQ,EAC3B,KAAK,OAAO,WAAaA,EAAM,SACjC,MAAM,IAAI,aAAa,0BAA2B,mBAAmB,EAEvE,MACF,KACE,OAAM,IAAI,aAAa,8GAAmH,aAAa,UAEhJA,EAAM,OAAS,WACxB,OAAO,IAAI,QAAQC,GAAW,CAC5B,GAAI,OAAO,UAAUD,EAAM,IAAI,GAAKA,EAAM,MAAQ,EAChD,KAAK,OAAO,WAAaG,GAAOF,EAAQ,EACxC,KAAK,OAAO,SAASD,EAAM,IAAI,MAE/B,OAAM,IAAI,aAAa,8GAAmH,aAAa,CAE3J,CAAC,EAGL,MAAM,IAAI,QAAQ,CAACC,EAASC,IAAW,CACrC,KAAK,OAAO,WAAaD,EACzB,KAAK,OAAO,QAAUC,EACtB,KAAK,OAAO,MAAM,IAAI,KAAK,CAACF,CAAK,CAAC,CAAC,CACrC,CAAC,CACH,CAEA,OAAS,CACP,OAAO,IAAI,QAAQ,KAAK,UAAU,KAAK,KAAK,KAAK,SAAS,CAAC,CAC7D,CACF,EAEaX,EAAN,KAAiB,CAEtB,YAAae,EAAMC,EAAW,GAAM,CAClC,KAAK,KAAOD,EACZ,KAAK,KAAO,OACZ,KAAK,SAAWC,EAChB,KAAK,SAAW,EAClB,CAEA,IAAI,MAAQ,CACV,OAAO,KAAK,KAAK,IACnB,CAKA,YAAaC,EAAO,CAClB,OAAO,KAAK,KAAK,MAAM,IAAMA,EAAM,KAAK,MAAM,CAChD,CAGA,SAAW,CACT,OAAO,IAAI,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,CACnD,CAGA,eAAgBC,EAAM,CACpB,GAAI,CAAC,KAAK,SAAU,MAAM,IAAI,aAAa,GAAGf,EAAU,EAExD,OAAO,IAAI,QAAQ,CAACS,EAASC,IAC3B,KAAK,KAAK,aAAaM,GAAc,CAC/BD,EAAK,mBAAqB,IAC5BC,EAAW,WAAaL,GAAOF,EAAQ,IAAIR,EAAKe,EAAY,KAAK,IAAI,CAAC,EACtEA,EAAW,SAAS,CAAC,GAErBP,EAAQ,IAAIR,EAAKe,EAAY,KAAK,IAAI,CAAC,CAE3C,EAAGN,CAAM,CACX,CACF,CACF,EAEaZ,EAAN,KAAmB,CAExB,YAAamB,EAAKJ,EAAW,GAAM,CACjC,KAAK,IAAMI,EACX,KAAK,SAAWJ,EAChB,KAAK,SAAW,GAChB,KAAK,KAAO,YACZ,KAAK,KAAOI,EAAI,IAClB,CAGA,YAAaH,EAAO,CAClB,OAAO,KAAK,IAAI,WAAaA,EAAM,IAAI,QACzC,CAGA,MAAQ,SAAW,CACjB,IAAMI,EAAS,KAAK,IAAI,aAAa,EAC/BC,EAAU,MAAM,IAAI,QAAQD,EAAO,YAAY,KAAKA,CAAM,CAAC,EACjE,QAAWE,KAAKD,EACd,KAAM,CAACC,EAAE,KAAMA,EAAE,OAAS,IAAIvB,EAAWuB,EAAG,KAAK,QAAQ,EAAI,IAAItB,EAAasB,EAAG,KAAK,QAAQ,CAAC,CAEnG,CAOA,mBAAoBC,EAAMN,EAAM,CAC9B,OAAO,IAAI,QAAQ,CAACN,EAASC,IAAW,CACtC,KAAK,IAAI,aAAaW,EAAMN,EAAME,GAAO,CACvCR,EAAQ,IAAIX,EAAamB,CAAG,CAAC,CAC/B,EAAGP,CAAM,CACX,CAAC,CACH,CAOA,cAAeW,EAAMN,EAAM,CACzB,OAAO,IAAI,QAAQ,CAACN,EAASC,IAC3B,KAAK,IAAI,QAAQW,EAAMN,EAAMH,GAAQH,EAAQ,IAAIZ,EAAWe,CAAI,CAAC,EAAGF,CAAM,CAC5E,CACF,CAMA,MAAM,YAAaW,EAAMN,EAAM,CAE7B,IAAMO,EAAQ,MAAM,KAAK,mBAAmBD,EAAM,CAAE,OAAQ,EAAM,CAAC,EAAE,MAAME,GACzEA,EAAI,OAAS,oBAAsB,KAAK,cAAcF,EAAM,CAAE,OAAQ,EAAM,CAAC,EAAIE,CACnF,EAEA,GAAID,aAAiB,MAAO,MAAMA,EAElC,OAAO,IAAI,QAAQ,CAACb,EAASC,IAAW,CAClCY,aAAiBxB,EACnBiB,EAAK,UACDO,EAAM,IAAI,kBAAkB,IAAMb,EAAQ,EAAGC,CAAM,EACnDY,EAAM,IAAI,OAAO,IAAMb,EAAQ,EAAGC,CAAM,EACnCY,EAAM,MACfA,EAAM,KAAK,OAAO,IAAMb,EAAQ,EAAGC,CAAM,CAE7C,CAAC,CACH,CACF,EAEOX,GAAQ,CAACgB,EAAO,CAAC,IAAM,IAAI,QAAQ,CAACN,EAASC,IAClD,OAAO,wBACLK,EAAK,YAAa,EAClBS,GAAKf,EAAQ,IAAIX,EAAa0B,EAAE,IAAI,CAAC,EACrCd,CACF,CACF,IC9LA,IAAMe,EAANC,GAEMC,EA+ECC,EAjFPC,EAAAC,EAAA,KAAML,EAAW,OAAO,SAAS,EAE3BE,EAAN,KAAuB,CAUrB,YAAaI,EAAS,CARtBC,EAAA,KAACN,IAGDM,EAAA,aAEAA,EAAA,aAIE,KAAK,KAAOD,EAAQ,KACpB,KAAK,KAAOA,EAAQ,KACpB,KAAKN,GAAYM,CACnB,CAEA,MAAM,gBAAiB,CAAC,KAAAE,EAAO,MAAM,EAAI,CAAC,EAAG,CAC3C,IAAMC,EAAS,KAAKT,GAEpB,GAAIS,EAAO,gBACT,OAAOA,EAAO,gBAAgB,CAAC,KAAAD,CAAI,CAAC,EAGtC,GAAIA,IAAS,OACX,MAAO,UACF,GAAIA,IAAS,YAClB,OAAOC,EAAO,SAAW,UAAY,SAErC,MAAM,IAAI,UAAU,QAAQD,iCAAoC,CAEpE,CAEA,MAAM,kBAAmB,CAAC,KAAAA,EAAO,MAAM,EAAI,CAAC,EAAG,CAC7C,IAAMC,EAAS,KAAKT,GACpB,GAAIS,EAAO,kBACT,OAAOA,EAAO,kBAAkB,CAAC,KAAAD,CAAI,CAAC,EAGxC,GAAIA,IAAS,OACX,MAAO,UACF,GAAIA,IAAS,YAClB,OAAOC,EAAO,SAAW,UAAY,SAErC,MAAM,IAAI,UAAU,QAAQD,iCAAoC,CAEpE,CAQA,MAAM,OAAQE,EAAU,CAAC,EAAG,CAC1B,MAAM,KAAKV,GAAU,OAAOU,CAAO,CACrC,CAKA,MAAM,YAAaC,EAAO,CACxB,OAAI,OAASA,EAAc,GAExB,CAACA,GACD,OAAOA,GAAU,UACjB,KAAK,OAASA,EAAM,MACpB,CAACA,EAAMX,GACD,GACF,KAAKA,GAAU,YAAYW,EAAMX,EAAS,CACnD,CACF,EApEGC,GAAAD,EAsEH,OAAO,eAAeE,EAAiB,UAAW,OAAO,YAAa,CACpE,MAAO,mBACP,SAAU,GACV,WAAY,GACZ,aAAc,EAChB,CAAC,EAEMC,EAAQD,ICjFf,IAEQU,GAEFC,EAyDCC,GA7DPC,GAAAC,EAAA,KAAAC,KAEM,CAAE,eAAAL,IAAmBM,GAErBL,EAAN,cAA2CD,EAAe,CACxD,eAAgBO,EAAM,CACpB,MAAM,GAAGA,CAAI,EAIb,OAAO,eAAe,KAAMN,EAA6B,SAAS,EAGlE,KAAK,QAAU,EACjB,CAEA,OAAS,CACP,KAAK,QAAU,GACf,IAAMO,EAAI,KAAK,UAAU,EACnBC,EAAID,EAAE,MAAM,EAClB,OAAAA,EAAE,YAAY,EACPC,CAET,CAGA,KAAMC,EAAU,CACd,OAAO,KAAK,MAAM,CAAE,KAAM,OAAQ,SAAAA,CAAS,CAAC,CAC9C,CAGA,SAAUC,EAAM,CACd,OAAO,KAAK,MAAM,CAAE,KAAM,WAAY,KAAAA,CAAK,CAAC,CAC9C,CAEA,MAAOC,EAAM,CACX,GAAI,KAAK,QACP,OAAO,QAAQ,OAAO,IAAI,UAAU,0CAA0C,CAAC,EAGjF,IAAMC,EAAS,KAAK,UAAU,EACxBJ,EAAII,EAAO,MAAMD,CAAI,EAC3B,OAAAC,EAAO,YAAY,EACZJ,CACT,CACF,EAEA,OAAO,eAAeR,EAA6B,UAAW,OAAO,YAAa,CAChF,MAAO,+BACP,SAAU,GACV,WAAY,GACZ,aAAc,EAChB,CAAC,EAED,OAAO,iBAAiBA,EAA6B,UAAW,CAC9D,MAAO,CAAE,WAAY,EAAK,EAC1B,KAAM,CAAE,WAAY,EAAK,EACzB,SAAU,CAAE,WAAY,EAAK,EAC7B,MAAO,CAAE,WAAY,EAAK,CAC5B,CAAC,EAEMC,GAAQD,IC7Df,IAAAa,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,EAAA,YAAAC,KAAA,IAGMC,EAHNC,GAKMH,EAwCCC,GA7CPG,EAAAC,EAAA,KAAAC,IACAC,KAEML,EAAW,OAAO,SAAS,EAE3BF,EAAN,cAAmCQ,CAAiB,CAIlD,YAAaC,EAAS,CACpB,MAAMA,CAAO,EAHfC,EAAA,KAACP,IAIC,KAAKD,GAAYO,CACnB,CAOA,MAAM,eAAgBE,EAAU,CAAC,EAAG,CAClC,OAAO,IAAIC,GACT,MAAM,KAAKV,GAAU,eAAeS,CAAO,CAC7C,CACF,CAKA,MAAM,SAAW,CACf,OAAO,KAAKT,GAAU,QAAQ,CAChC,CACF,EAxBGC,GAAAD,EA0BH,OAAO,eAAeF,EAAqB,UAAW,OAAO,YAAa,CACxE,MAAO,uBACP,SAAU,GACV,WAAY,GACZ,aAAc,EAChB,CAAC,EAED,OAAO,iBAAiBA,EAAqB,UAAW,CACtD,eAAgB,CAAE,WAAY,EAAK,EACnC,QAAS,CAAE,WAAY,EAAK,CAC9B,CAAC,EAEMC,GAAQD,IC7Cf,IAAAa,GAAA,GAAAC,EAAAD,GAAA,+BAAAE,EAAA,YAAAC,KAAA,IAEMC,EAFNC,GAIMH,EAkICC,GAtIPG,EAAAC,EAAA,KAAAC,IAEMJ,EAAW,OAAO,SAAS,EAE3BF,EAAN,cAAwCO,CAAiB,CAIvD,YAAaC,EAAS,CACpB,MAAMA,CAAO,EAHfC,EAAA,KAACN,IAIC,KAAKD,GAAYM,CACnB,CAQA,MAAM,mBAAoBE,EAAMC,EAAU,CAAC,EAAG,CAC5C,GAAID,IAAS,GACX,MAAM,IAAI,UAAU,gCAAgC,EAEtD,GAAIA,IAAS,KAAOA,IAAS,MAAQA,EAAK,SAAS,GAAG,EACpD,MAAM,IAAI,UAAU,mCAAmC,EAEzDC,EAAQ,OAAS,CAAC,CAACA,EAAQ,OAC3B,IAAMC,EAAS,MAAM,KAAKV,GAAU,mBAAmBQ,EAAMC,CAAO,EACpE,OAAO,IAAIX,EAA0BY,CAAM,CAC7C,CAGA,MAAQ,SAAW,CACjB,GAAM,CAAC,qBAAAC,CAAoB,EAAI,KAAM,qCAErC,aAAiB,CAACC,EAAGC,CAAK,IAAK,KAAKb,GAAU,QAAQ,EACpD,KAAM,CAACa,EAAM,KAAMA,EAAM,OAAS,OAC9B,IAAIF,EAAqBE,CAAK,EAC9B,IAAIf,EAA0Be,CAAK,CAAC,CAC5C,CAGA,MAAQ,YAAa,CACnB,GAAM,CAAC,qBAAAF,CAAoB,EAAI,KAAM,qCACrC,QAAQ,KAAK,oCAAoC,EACjD,cAAeE,KAAS,KAAKb,GAAU,QAAQ,EAC7C,MAAMa,EAAM,OAAS,OACjB,IAAIF,EAAqBE,CAAK,EAC9B,IAAIf,EAA0Be,CAAK,CAC3C,CAOA,MAAM,cAAeL,EAAMC,EAAU,CAAC,EAAG,CACvC,GAAM,CAAC,qBAAAE,CAAoB,EAAI,KAAM,qCACrC,GAAIH,IAAS,GAAI,MAAM,IAAI,UAAU,gCAAgC,EACrE,GAAIA,IAAS,KAAOA,IAAS,MAAQA,EAAK,SAAS,GAAG,EACpD,MAAM,IAAI,UAAU,mCAAmC,EAEzDC,EAAQ,OAAS,CAAC,CAACA,EAAQ,OAC3B,IAAMC,EAAS,MAAM,KAAKV,GAAU,cAAcQ,EAAMC,CAAO,EAC/D,OAAO,IAAIE,EAAqBD,CAAM,CACxC,CAOA,MAAM,YAAaF,EAAMC,EAAU,CAAC,EAAG,CACrC,GAAID,IAAS,GACX,MAAM,IAAI,UAAU,gCAAgC,EAEtD,GAAIA,IAAS,KAAOA,IAAS,MAAQA,EAAK,SAAS,GAAG,EACpD,MAAM,IAAI,UAAU,mCAAmC,EAEzD,OAAAC,EAAQ,UAAY,CAAC,CAACA,EAAQ,UACvB,KAAKT,GAAU,YAAYQ,EAAMC,CAAO,CACjD,CAEA,MAAM,QAASK,EAAoB,CACjC,GAAI,MAAMA,EAAmB,YAAY,IAAI,EAC3C,MAAO,CAAC,EAGV,IAAMC,EAAU,CAAC,CAAE,OAAQ,KAAM,KAAM,CAAC,CAAE,CAAC,EAE3C,KAAOA,EAAQ,QAAQ,CACrB,GAAI,CAAE,OAAQC,EAAS,KAAAC,CAAK,EAAIF,EAAQ,IAAI,EAC5C,cAAiBF,KAASG,EAAQ,OAAO,EAAG,CAC1C,GAAI,MAAMH,EAAM,YAAYC,CAAkB,EAC5C,MAAO,CAAC,GAAGG,EAAMJ,EAAM,IAAI,EAEzBA,EAAM,OAAS,aACjBE,EAAQ,KAAK,CAAE,OAAQF,EAAO,KAAM,CAAC,GAAGI,EAAMJ,EAAM,IAAI,CAAE,CAAC,CAE/D,CACF,CAEA,OAAO,IACT,CAEA,MAAQ,MAAQ,CACd,aAAiB,CAACL,CAAI,IAAK,KAAKR,GAAU,QAAQ,EAChD,MAAMQ,CACV,CAEA,MAAQ,QAAU,CAChB,aAAiB,CAACI,EAAGC,CAAK,IAAK,KAC7B,MAAMA,CACV,CAEA,EA7GCZ,GAAAD,EA6GA,OAAO,iBAAiB,CACvB,OAAO,KAAK,QAAQ,CACtB,CACF,EAEA,OAAO,eAAeF,EAA0B,UAAW,OAAO,YAAa,CAC9E,MAAO,4BACP,SAAU,GACV,WAAY,GACZ,aAAc,EACf,CAAC,EAED,OAAO,iBAAiBA,EAA0B,UAAW,CAC5D,mBAAoB,CAAE,WAAY,EAAK,EACvC,QAAS,CAAE,WAAY,EAAK,EAC5B,cAAe,CAAE,WAAY,EAAK,EAClC,YAAa,CAAE,WAAY,EAAK,CACjC,CAAC,EAEMC,GAAQD,ICtIf,IAAAoB,GAAA,GAAAC,EAAAD,GAAA,YAAAE,GAAA,WAAAC,EAAA,qBAAAC,GAAA,2BAAAC,GAAA,4BAAAC,KAcA,eAAsBF,GAAkBG,EAAS,CAC/C,QAAQ,KAAK,iFAAiF,EAC9F,GAAM,CAACC,EAAQC,EAASC,CAAE,EAAI,MAAM,QAAQ,IAAI,CAC9C,oCACA,sCACA,oCACF,CAAC,EAEKC,EAAS,IAAIH,EAAO,aAAa,GAAI,EAAK,EAChD,OAAAG,EAAO,SAAWJ,EAAQ,IAAIK,GAASA,EAAM,OACzC,IAAIH,EAAQ,WAAWG,EAAO,EAAK,EACnC,IAAIH,EAAQ,aAAaG,EAAO,EAAK,CACzC,EAEO,IAAIF,EAAG,0BAA0BC,CAAM,CAChD,CAEA,eAAsBN,GAAwBQ,EAAO,CACnD,GAAM,CAAE,aAAAC,EAAc,WAAAC,CAAW,EAAI,KAAM,qCACrC,CAAE,0BAAAC,CAA0B,EAAI,KAAM,sCAEtCC,EAAQ,MAAM,KAAKJ,EAAM,KAAK,EAC9BK,EAAWD,EAAM,GAAG,mBAAmB,MAAM,IAAK,CAAC,EAAE,GACrDE,EAAO,IAAIL,EAAaI,EAAU,EAAK,EAE7C,OAAAD,EAAM,QAAQG,GAAQ,CACpB,IAAMC,EAAOD,EAAK,mBAAmB,MAAM,GAAG,EAC9CC,EAAK,MAAM,EACX,IAAMC,EAAOD,EAAK,IAAI,EAEhBE,EAAMF,EAAK,OAAO,CAACE,EAAKF,KACvBE,EAAI,SAASF,KAAOE,EAAI,SAASF,GAAQ,IAAIP,EAAaO,EAAM,EAAK,GACnEE,EAAI,SAASF,IACnBF,CAAI,EAEPI,EAAI,SAASD,GAAQ,IAAIP,EAAWK,EAAK,KAAMA,EAAM,EAAK,CAC5D,CAAC,EAEM,IAAIJ,EAA0BG,CAAI,CAC3C,CAEA,eAAsBb,GAAyBO,EAAO,CACpD,GAAM,CAAE,WAAAE,CAAW,EAAI,KAAM,qCACvB,CAAE,qBAAAS,CAAqB,EAAI,KAAM,qCAEvC,OAAO,MAAM,KAAKX,EAAM,KAAK,EAAE,IAAIO,GACjC,IAAII,EAAqB,IAAIT,EAAWK,EAAK,KAAMA,EAAM,EAAK,CAAC,CACjE,CACF,CA9DA,IAAajB,EAUAD,GAVbuB,EAAAC,EAAA,KAAavB,EAAS,CACpB,QAAS,CAAC,2BAA4B,mBAAmB,EACzD,KAAM,CAAC,2FAA4F,eAAe,EAClH,SAAU,CAAC,oEAAqE,mBAAmB,EACnG,QAAS,CAAC,8CAA+C,0BAA0B,EACnF,OAAQwB,GAAK,CAAC,6EAA6EA,IAAK,aAAa,EAC7G,SAAU,CAAC,gJAAiJ,eAAe,EAC3K,WAAY,CAAC,uFAAwF,iBAAiB,CACxH,EAEazB,GAAS,CACpB,SAAU,WAAW,cACvB,ICZA,IAAA0B,GAAA,GAAAC,EAAAD,GAAA,gBAAAE,KAAA,IAIEC,GACAC,GACAC,GACAC,GAGMC,GAEFC,GAEON,GAiFPO,GACAC,GACAC,GACAC,GACAC,GAEAC,GAqEAC,GA1KNC,GAAAC,EAAA,KAAAC,IACAC,KAEM,CACJ,eAAAhB,GACA,gBAAAC,GACA,aAAAC,GACA,KAAAC,IACEc,GAEE,CAAE,KAAAb,IAASc,EAEXb,GAAW,eAAe,KAAK,OAAO,WAAW,GAAK,OAAO,QAAU,OAAO,YAEvEN,GAAN,KAAiB,CACtB,YAAaoB,EAAO,SAAU,CAC5B,KAAK,KAAOA,EACZ,KAAK,KAAO,MACd,CAEA,MAAM,SAAW,CACf,MAAM,IAAIjB,GAAa,GAAGE,EAAI,CAChC,CAEA,MAAM,YAAYgB,EAAO,CACvB,OAAO,OAASA,CAClB,CAKA,MAAM,eAAgBC,EAAU,CAAC,EAAG,CA/BtC,IAAAC,EAgCI,IAAMC,EAAK,OAAMD,EAAA,UAAU,gBAAV,YAAAA,EAAyB,mBACpCE,EAAO,SAAS,cAAc,GAAG,EACjCC,EAAK,IAAIxB,GACTyB,EAAOD,EAAG,SAIhB,GAFAD,EAAK,SAAW,KAAK,KAEjBnB,IAAY,CAACkB,EAAI,CAEnB,IAAII,EAAS,CAAC,EACdF,EAAG,SAAS,OAAO,IAAIzB,GAAe,CACpC,MAAO4B,EAAO,CACZD,EAAO,KAAK,IAAIxB,GAAK,CAACyB,CAAK,CAAC,CAAC,CAC/B,EACA,OAAS,CACP,IAAMC,EAAO,IAAI1B,GAAKwB,EAAQ,CAAE,KAAM,yCAA0C,CAAC,EACjFA,EAAS,CAAC,EACVH,EAAK,KAAO,IAAI,gBAAgBK,CAAI,EACpCL,EAAK,MAAM,EACX,WAAW,IAAM,IAAI,gBAAgBA,EAAK,IAAI,EAAG,GAAK,CACxD,CACF,CAAC,CAAC,CACJ,KAAO,CACL,GAAM,CAAE,SAAAM,EAAU,aAAAC,CAAa,EAAI,IAAInB,GAAqBZ,EAAc,EAEpEgC,EAAW,mBAAmB,KAAK,IAAI,EAAE,QAAQ,SAAU,MAAM,EAAE,QAAQ,MAAO,KAAK,EACvFC,EAAU,CACd,sBAAuB,gCAAkCD,EACzD,eAAgB,0CAChB,GAAIX,EAAQ,KAAO,CAAE,iBAAkBA,EAAQ,IAAK,EAAI,CAAC,CAC3D,EAEMa,EAAY,WAAW,IAAMX,EAAG,OAAO,YAAY,CAAC,EAAG,GAAK,EAElEE,EAAG,SAAS,YAAY,IAAIxB,GAAgB,CAC1C,UAAW2B,EAAOO,EAAM,CACtB,GAAIP,aAAiB,WAAY,OAAOO,EAAK,QAAQP,CAAK,EAC1D,IAAMQ,EAAS,IAAI,SAASR,CAAK,EAAE,KAAK,UAAU,EAC5CS,EAAOC,IAAKF,EAAO,KAAK,EAAE,KAAKG,IAAKA,GAAE,KAAO,EAAIF,EAAKF,EAAK,QAAQI,GAAE,KAAK,CAAC,CAAC,EAClF,OAAOF,EAAK,CACd,CACF,CAAC,CAAC,EAAE,OAAOP,CAAQ,EAAE,QAAQ,IAAM,CACjC,cAAcI,CAAS,CACzB,CAAC,EAGDX,EAAG,OAAO,YAAY,CACpB,IAAKA,EAAG,MAAQS,EAChB,QAAAC,EACA,aAAAF,CACF,EAAG,CAACA,CAAY,CAAC,EAGjB,IAAMS,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,OAAS,GAChBA,EAAO,IAAMjB,EAAG,MAAQS,EACxB,SAAS,KAAK,YAAYQ,CAAM,CAClC,CAEA,OAAOd,EAAK,UAAU,CACxB,CACF,EAEMpB,GAAQ,EACRC,GAAO,EACPC,GAAQ,EACRC,GAAQ,EACRC,GAAQ,EAERC,GAAN,KAAsB,CAEpB,YAAa8B,EAAM,CACjBA,EAAK,UAAYC,GAAS,KAAK,WAAWA,EAAM,IAAI,EACpD,KAAK,MAAQD,EACb,KAAK,YAAY,CACnB,CAEA,MAAOE,EAAY,CACjB,YAAK,YAAcA,EAEZ,KAAK,aACd,CAEA,MAAOf,EAAO,CACZ,IAAMgB,EAAU,CAAE,KAAMtC,GAAO,MAAAsB,CAAM,EAGrC,YAAK,MAAM,YAAYgB,EAAS,CAAChB,EAAM,MAAM,CAAC,EAG9C,KAAK,YAAY,EAGV,KAAK,aACd,CAEA,OAAS,CACP,KAAK,MAAM,YAAY,CAAE,KAAMlB,EAAM,CAAC,EACtC,KAAK,MAAM,MAAM,CACnB,CAEA,MAAOmC,EAAQ,CACb,KAAK,MAAM,YAAY,CAAE,KAAMpC,GAAO,OAAAoC,CAAO,CAAC,EAC9C,KAAK,MAAM,MAAM,CACnB,CAEA,WAAYD,EAAS,CACfA,EAAQ,OAASrC,IAAM,KAAK,cAAc,EAC1CqC,EAAQ,OAASpC,IAAO,KAAK,SAASoC,EAAQ,MAAM,CAC1D,CAEA,SAAUC,EAAQ,CAChB,KAAK,YAAY,MAAMA,CAAM,EAC7B,KAAK,aAAaA,CAAM,EACxB,KAAK,MAAM,MAAM,CACnB,CAEA,aAAe,CACb,KAAK,cAAgB,IAAI,QAAQ,CAACC,EAASC,IAAW,CACpD,KAAK,cAAgBD,EACrB,KAAK,aAAeC,CACtB,CAAC,EACD,KAAK,cAAgB,EACvB,CAEA,eAAiB,CACf,KAAK,cAAc,EACnB,KAAK,cAAgB,EACvB,CAEA,aAAcF,EAAQ,CACf,KAAK,eAAe,KAAK,YAAY,EAC1C,KAAK,cAAc,MAAM,IAAM,CAAC,CAAC,EACjC,KAAK,aAAaA,CAAM,EACxB,KAAK,cAAgB,EACvB,CACF,EAEMjC,GAAN,KAA2B,CACzB,YAAaZ,EAAgB,CAC3B,IAAMgD,EAAU,IAAI,eACpB,KAAK,aAAeA,EAAQ,MAC5B,KAAK,SAAW,IAAIhD,EAClB,IAAIW,GAAgBqC,EAAQ,KAAK,CACnC,CACF,CACF,IClLA,IAAMC,GAAN,KAAwB,CACpB,YAA6BC,EAAuB,CAAvB,cAAAA,CAAyB,CAE9C,UAAUC,EAAeC,EAA0C,CAEvE,OADW,KAAK,SAAS,YAAYD,EAAOC,CAAI,EACtC,YAAYD,CAAK,CAC/B,CAEA,MAAa,IAAIA,EAAeE,EAAUC,EAAyC,CAC/E,IAAMC,EAAK,KAAK,UAAUJ,EAAO,WAAW,EAE5C,OAAO,MAAM,IAAI,QAAQ,CAACK,EAASC,IAAW,CAC1C,IAAMC,EAAWH,EAAG,IAAIF,EAAKC,CAAG,EAChCI,EAAS,UAAY,IAAM,CACvBF,EAAQE,EAAS,MAAM,CAC3B,EACAA,EAAS,QAAU,IAAM,CACrBD,EAAOC,EAAS,KAAK,CACzB,CACJ,CAAC,CACL,CAEO,IAAIP,EAAeG,EAAuB,CAC7C,IAAMC,EAAK,KAAK,UAAUJ,EAAO,UAAU,EAE3C,OAAO,IAAI,QAAQ,CAACK,EAASC,IAAW,CACpC,IAAMC,EAAWH,EAAG,IAAID,CAAG,EAC3BI,EAAS,UAAY,IAAM,CACvBF,EAAQE,EAAS,MAAM,CAC3B,EACAA,EAAS,QAAU,IAAM,CACrBD,EAAOC,EAAS,KAAK,CACzB,CACJ,CAAC,CACL,CAEA,MAAa,OAAOP,EAAeG,EAAiC,CAChE,IAAMC,EAAK,KAAK,UAAUJ,EAAO,WAAW,EAE5C,OAAO,MAAM,IAAI,QAAQ,CAACK,EAASC,IAAW,CAC1C,IAAMC,EAAWH,EAAG,OAAOD,CAAG,EAC9BI,EAAS,UAAY,IAAM,CACvBF,EAAQ,CACZ,EACAE,EAAS,QAAU,IAAM,CACrBD,EAAOC,EAAS,KAAK,CACzB,CACJ,CAAC,CACL,CAEO,OAAQ,CACX,KAAK,SAAS,MAAM,CACxB,CACJ,EAEMC,GAAN,KAAuB,CACnB,YAA6BC,EAAuCC,EAAwB,CAA/D,kBAAAD,EAAuC,kBAAAC,CACpE,CAEA,MAAa,SAAsC,CAC/C,IAAMC,EAAO,OAAO,UAAU,KAAK,KAAK,aAAc,CAAC,EAEvD,OAAAA,EAAK,gBAAkBC,GAAS,CAC5B,IAAMC,EAAMD,EAAM,OAAmC,OACrD,KAAK,aAAa,QAAQZ,GAAS,CAC/Ba,EAAG,kBAAkBb,CAAK,CAC9B,CAAC,CACL,EAEO,MAAM,IAAI,QAAQ,CAACK,EAASC,IAAW,CAC1CK,EAAK,UAAYC,GAAS,CACtBP,EAAQ,IAAIP,GAAmBc,EAAM,OAAmC,MAAM,CAAC,CACnF,EACAD,EAAK,QAAUC,GAAS,CACpBN,EAAQM,EAAM,OAAmC,KAAK,CAC1D,CACJ,CAAC,CACL,CACJ,EAEaE,EAA6B,gBAC7BC,EAAa,IAAIP,GAAiB,aAAc,CACzDM,CACJ,CAAC,EClFM,IAAME,EAAN,KAAkB,CACrB,OAAc,oBACVC,EACAC,EACAC,EACF,CANN,IAAAC,EAAAC,EAOQ,GAAI,CAACC,GACD,MAAM,IAAI,MACN,gFACJ,EAGJ,IAAMC,GAAQH,EAAAD,GAAA,YAAAA,EAAS,QAAT,KAAAC,EAAkB,GAChC,GAAIG,EAAO,CACP,IAAMC,EAAK,SAAS,cAChB,2CACJ,EACIA,KAAIH,EAAAG,EAAG,aAAH,MAAAH,EAAe,YAAYG,GACvC,CAGA,IAAMC,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,GAAK,2CACT,SAAS,KAAK,YAAYA,CAAG,EAE7B,IAAMC,EAAQD,EAAI,MACZE,EAAW,OAAO,iBAClB,OAAO,iBAAiBV,CAAO,EAC7BA,EAAgB,aAClBW,EAAUX,EAAQ,WAAa,QAGrCS,EAAM,WAAa,WACdE,IAASF,EAAM,SAAW,cAG/BA,EAAM,SAAW,WACZH,IAAOG,EAAM,WAAa,UAG/BG,GAAW,QAASC,GAAiB,CACjC,GAAIF,GAAWE,IAAS,aAEpB,GAAIH,EAAS,YAAc,aAAc,CACrC,IAAMI,EAAS,SAASJ,EAAS,MAAM,EACjCK,EACF,SAASL,EAAS,UAAU,EAC5B,SAASA,EAAS,aAAa,EAC/B,SAASA,EAAS,cAAc,EAChC,SAASA,EAAS,iBAAiB,EACjCM,EAAeD,EAAc,SAASL,EAAS,UAAU,EAC3DI,EAASE,EACTP,EAAM,WAAa,GAAGK,EAASC,MACxBD,IAAWE,EAClBP,EAAM,WAAaC,EAAS,WAE5BD,EAAM,WAAa,GAE3B,MACIA,EAAM,WAAaC,EAAS,YAG/BD,EAAcI,GAASH,EAAiBG,EAEjD,CAAC,EAEGI,GAEIjB,EAAQ,aAAe,SAASU,EAAS,MAAM,IAC/CD,EAAM,UAAY,UAGtBA,EAAM,SAAW,SAGrBD,EAAI,YAAcR,EAAQ,MAAM,UAAU,EAAGC,CAAQ,EAGjDU,IAASH,EAAI,YAAcA,EAAI,YAAY,QAAQ,MAAO,MAAQ,GAEtE,IAAMU,EAAO,SAAS,cAAc,MAAM,EAM1CA,EAAK,YAAclB,EAAQ,MAAM,UAAUC,CAAQ,GAAK,IACxDO,EAAI,YAAYU,CAAI,EAEpB,IAAMC,EAAc,CAChB,IAAKD,EAAK,UAAY,SAASR,EAAS,cAAc,EACtD,KAAMQ,EAAK,WAAa,SAASR,EAAS,eAAe,EACzD,OAAQ,SAASA,EAAS,UAAU,CACxC,EAEA,OAAIJ,EACAY,EAAK,MAAM,gBAAkB,OAE7B,SAAS,KAAK,YAAYV,CAAG,EAG1BW,CACX,CACJ,EAEMP,GAAa,CACf,YACA,YACA,QACA,SACA,YACA,YAEA,iBACA,mBACA,oBACA,kBACA,cAEA,aACA,eACA,gBACA,cAGA,YACA,cACA,aACA,cACA,WACA,iBACA,aACA,aAEA,YACA,gBACA,aACA,iBAEA,gBACA,cAEA,UACA,YACJ,EAEMP,GAAY,OAAO,QAAW,YAC9BY,GAAYZ,IAAc,OAAe,iBAAmB,KC9G3D,IAAMe,EAAN,KAAkB,CAKrB,OAAc,8BAA+B,CACrC,KAAK,iBAAmB,IAI5B,WAAW,iBAAiB,QAAUC,GAAc,CAC5C,KAAK,iBAAmB,GACxB,KAAK,iBAAiBA,EAAK,cAAc,QAAQ,MAAM,CAAC,CAEhE,CAAC,EACD,KAAK,eAAiB,EAC1B,CAEA,aAAoB,mBAAqC,CACrD,GAAI,WAAW,UAAU,UAAU,SAC/B,OAAO,MAAM,WAAW,UAAU,UAAU,SAAS,EAErD,GAAI,CACA,OAAO,MAAM,IAAI,QAAa,CAACC,EAASC,IAAW,CAC/C,KAAK,eAAiB,EACtB,KAAK,iBAAmBD,EACxB,KAAK,gBAAkBC,CAC3B,CAAC,CACL,QAAE,CACE,KAAK,eAAiB,EACtB,KAAK,iBAAmB,KACxB,KAAK,gBAAkB,IAC3B,CAER,CAEA,OAAc,mBACVC,EACAC,EACAC,EAA0E,CAC1E,IAAMC,EAAkBN,GAAwB,CACxCI,EAAgBJ,EAAK,KAAMA,EAAK,IAAK,KAAK,aAAaA,CAAI,CAAC,GACxD,KAAK,iBAAmB,GACxBA,EAAK,eAAe,CAGhC,EACAG,EAAQ,iBAAiB,UAAWG,CAAc,EAElD,IAAMC,EAAgBP,GAAwB,CACtCK,EAAcL,EAAK,KAAMA,EAAK,IAAK,KAAK,aAAaA,CAAI,CAAC,GAC1DA,EAAK,eAAe,EAEpB,KAAK,iBACL,KAAK,gBAAgB,CAE7B,EAEA,OAAAG,EAAQ,iBAAiB,QAASI,CAAY,EAEvC,IAAM,CACTJ,EAAQ,oBAAoB,UAAWG,CAAc,EACrDH,EAAQ,oBAAoB,QAASI,CAAY,CACrD,CACJ,CAEA,OAAc,oBACVJ,EACAK,EACAC,EACAC,EACAC,EAA6D,CAC7D,IAAMC,EAA2BZ,GAA2B,CACpDS,EAAyBT,CAAI,GAC7BA,EAAK,eAAe,CAE5B,EACAG,EAAQ,iBAAiB,mBAAoBS,CAAuB,EAEpE,IAAMC,EAAsBb,GAAqB,CAC7C,IAAMc,EAASd,EAAK,gBAAgB,EAChCe,EAAQ,GACRC,EAAM,GACNF,EAAO,OAAS,IAChBC,EAAQD,EAAO,GAAG,YAClBE,EAAMF,EAAO,GAAG,WAGhBd,EAAK,YAAc,0BACnBe,EAAQ,EACRC,EAAMD,EAAQ,GAEdP,EAAoBR,EAAMe,EAAOC,CAAG,GACpChB,EAAK,eAAe,CAE5B,EACAG,EAAQ,iBAAiB,cAAeU,CAAkB,EAE1D,IAAMI,EAA4BjB,GAA2B,CACrDU,EAA0BV,CAAI,GAC9BA,EAAK,eAAe,CAE5B,EACAG,EAAQ,iBAAiB,oBAAqBc,CAAwB,EAEtE,IAAMC,EAAyBlB,GAA2B,CAClDW,EAAuBX,CAAI,GAC3BA,EAAK,eAAe,CAE5B,EACA,OAAAG,EAAQ,iBAAiB,iBAAkBe,CAAqB,EAEzD,IAAM,CACTf,EAAQ,oBAAoB,mBAAoBS,CAAuB,EACvET,EAAQ,oBAAoB,oBAAqBc,CAAwB,EACzEd,EAAQ,oBAAoB,iBAAkBe,CAAqB,CACvE,CACJ,CAEA,OAAc,uBACVf,EACAgB,EACAC,EACAC,EACAC,EACAC,EACF,CACE,IAAMC,EAAsBxB,GAAuB,CAC/CmB,EAAoBnB,CAAI,EACxBA,EAAK,eAAe,CACxB,EAEMyB,EAAsBzB,GAAuB,CAC/CoB,EAAoBpB,CAAI,EACxBA,EAAK,eAAe,CACxB,EAEM0B,EAAoB1B,GAAuB,CAC7CqB,EAAkBrB,CAAI,EACtBA,EAAK,eAAe,CACxB,EAEM2B,EAAwB3B,GAAuB,CACjDsB,EAAsBtB,CAAI,EAC1BA,EAAK,eAAe,CACxB,EAEM4B,EAAgB5B,GAAqB,CACvCuB,EAAcvB,CAAI,EAClBA,EAAK,eAAe,CACxB,EAEA,OAAAG,EAAQ,iBAAiB,cAAeqB,CAAkB,EAC1DrB,EAAQ,iBAAiB,cAAesB,CAAkB,EAC1DtB,EAAQ,iBAAiB,YAAauB,CAAgB,EACtDvB,EAAQ,iBAAiB,QAASyB,CAAY,EAC9CzB,EAAQ,iBAAiB,gBAAiBwB,CAAoB,EAEvD,IAAM,CACTxB,EAAQ,oBAAoB,cAAeqB,CAAkB,EAC7DrB,EAAQ,oBAAoB,cAAesB,CAAkB,EAC7DtB,EAAQ,oBAAoB,YAAauB,CAAgB,EACzDvB,EAAQ,oBAAoB,gBAAiBwB,CAAoB,EACjExB,EAAQ,oBAAoB,QAASyB,CAAY,CACrD,CACJ,CAEA,OAAc,qBACVzB,EACA0B,EACF,CACE,IAAMC,EAAgB9B,GAAgB,CAC9B6B,EAAe7B,EAAa,KAAK,GACjCA,EAAK,eAAe,CAE5B,EACA,OAAAG,EAAQ,iBAAiB,QAAS2B,CAAY,EAEvC,IAAM,CACT3B,EAAQ,oBAAoB,QAAS2B,CAAY,CACrD,CACJ,CAEA,OAAc,oBACV3B,EACA4B,EACF,CACE,IAAMC,EAAehC,GAAgB,CAC7B+B,EAAU/B,CAAW,GACrBA,EAAK,eAAe,CAE5B,EACA,OAAAG,EAAQ,iBAAiB,WAAY6B,CAAW,EAChD7B,EAAQ,iBAAiB,YAAa6B,CAAW,EACjD7B,EAAQ,iBAAiB,YAAa6B,CAAW,EACjD7B,EAAQ,iBAAiB,OAAQ6B,CAAW,EAErC,IAAM,CACT7B,EAAQ,oBAAoB,WAAY6B,CAAW,EACnD7B,EAAQ,oBAAoB,YAAa6B,CAAW,EACpD7B,EAAQ,oBAAoB,YAAa6B,CAAW,EACpD7B,EAAQ,oBAAoB,OAAQ6B,CAAW,CACnD,CACJ,CAEA,OAAc,mBAAmBC,EAA4C,CACzE,OAAOA,EAAa,mBAAmB,CAC3C,CAEA,OAAc,gCACV9B,EACA+B,EAAiC,CAC7B,oBAAqB,WAEpB,UAAkB,gBAAgB,iBAAiB,iBAAmBC,GAAe,CAClF,IAAMC,EAAcjC,EAAQ,sBAAsB,EAC5CkC,EAAeF,EAAM,OAAO,aAClCD,EAAQ,CACJ,EAAGG,EAAa,EAAID,EAAY,EAChC,EAAGC,EAAa,EAAID,EAAY,EAChC,MAAOC,EAAa,MACpB,OAAQA,EAAa,MACzB,CAAC,CACL,CAAC,CAET,CAEA,OAAc,0BACVH,EAA4C,CAC5C,gBAAS,iBAAiB,mBAAoB,IAAM,CAChDA,EAAQ,SAAS,kBAAoB,SAAS,CAClD,CAAC,EACM,SAAS,kBAAoB,SACxC,CAEA,OAAc,WAAWI,EAAgC,CACrDA,EAAa,MAAQ,EACzB,CAEA,OAAc,aAAaA,EAA2B,CAClDA,EAAa,MAAM,CACvB,CAEA,OAAc,UAAUA,EAAgCC,EAAc,CAC9DA,IAAS,UACTD,EAAa,MAAM,eAAe,QAAQ,EAE1CA,EAAa,MAAM,OAASC,CAEpC,CAEA,OAAc,UAAUD,EAAgCE,EAAWC,EAAWC,EAAoBC,EAAqBC,EAAe,CAClIN,EAAa,MAAM,KAAQE,EAAG,QAAQ,CAAC,EAAI,KAC3CF,EAAa,MAAM,IAAOG,EAAG,QAAQ,CAAC,EAAI,KAE1C,GAAM,CAAE,KAAAI,EAAM,IAAAC,CAAI,EAAIC,EAAY,oBAAoBT,EAAcM,CAAK,EAEzEN,EAAa,MAAM,MAAQE,EAAIK,GAAM,QAAQ,CAAC,EAAI,KAClDP,EAAa,MAAM,KAAOG,EAAIK,GAAK,QAAQ,CAAC,EAAI,IACpD,CAEA,OAAc,KAAKR,EAAgC,CAC/CA,EAAa,MAAM,QAAU,MACjC,CAEA,OAAc,KAAKA,EAAgC,CAC/CA,EAAa,MAAM,QAAU,OACjC,CAEA,OAAc,mBAAmBA,EAAgCU,EAAcjC,EAAeC,EAAa,CACnG,CAACsB,IAILA,EAAa,MAAQU,EACrBV,EAAa,kBAAkBvB,EAAOC,CAAG,EACzCsB,EAAa,MAAM,MAAQ,OAC3BA,EAAa,MAAM,MAAQ,GAAGA,EAAa,gBAC/C,CAEA,OAAe,aAAatC,EAA6B,CACrD,IAAIiD,EAAY,EAEhB,OAAIjD,EAAK,UAAWiD,GAAa,GAC7BjD,EAAK,SAAUiD,GAAa,GAC5BjD,EAAK,WAAYiD,GAAa,GAC9BjD,EAAK,UAAWiD,GAAa,GAE1BA,EAAU,SAAS,CAC9B,CAEA,OAAc,kBAAkBC,EAAoCC,EAAyB,CACzFD,EAAiB,kBAAkBC,CAAS,CAChD,CAEA,OAAc,sBAAsBD,EAAoCC,EAAyB,CACzFD,EAAiB,kBAAkBC,CAAS,GAC5CD,EAAiB,sBAAsBC,CAAS,CAExD,CACJ,EA5SapD,EACF,eAAiC,ECvCrC,IAAMqD,EAAN,KAAc,CACjB,OAAc,qBAA+B,CACzC,MAAO,uBAAwB,UACnC,CAEA,OAAc,UAAoB,CALtC,IAAAC,EAMQ,IAAMC,GAAiBD,EAAA,WAAW,YAAX,YAAAA,EAA8B,cACrD,GAAIC,EACA,OAAOA,EAAc,OAGzB,IAAMC,EAAY,UAAU,UACtBC,EAAS,2TACTC,EAAS,8+CACf,OAAOD,EAAO,KAAKD,CAAS,GAAKE,EAAO,KAAKF,EAAU,OAAO,EAAG,CAAC,CAAC,CACvE,CAEA,OAAc,MAAgB,CAC1B,OAAO,UAAU,UAAU,SAAS,SAAS,CACjD,CACJ,EChBO,IAAMG,EAAN,KAAkB,CACb,YACGC,EACUC,EACAC,EACVC,EACT,CAJS,YAAAH,EACU,UAAAC,EACA,gBAAAC,EACV,mBAAAC,CAEX,CAEA,IAAW,MAAe,CAb9B,IAAAC,EAcQ,OAAI,KAAK,OACE,KAAK,OAAO,KAEnB,KAAK,KACE,KAAK,KAAK,MAEdA,EAAA,KAAK,gBAAL,KAAAA,EAAsB,EACjC,CAEA,IAAW,MAA6B,CACpC,OAAI,KAAK,OACE,KAAK,OAAO,KAEnB,KAAK,KACE,OAEJ,WACX,CAEA,OAAc,iBAAiBJ,EAA0DE,EAAqB,CAC1G,OAAO,IAAIH,EAAYC,EAAQ,OAAWE,EAAY,MAAS,CACnE,CAEA,OAAc,eAAeD,EAAY,CACrC,OAAO,IAAIF,EAAY,OAAWE,EAAM,OAAW,MAAS,CAChE,CAEA,OAAc,yBAAyBI,EAA0B,CAC7D,OAAO,IAAIN,EAAY,OAAW,OAAW,OAAWM,CAAI,CAChE,CAEA,aAAoB,SAASC,EAAkC,CAC3D,GAAIA,EAAK,KACL,OAAOA,EAAK,KAGhB,GAAI,CAACA,EAAK,QAAUA,EAAK,OAAS,OAC9B,MAAM,IAAI,MAAM,2BAA2B,EAG/C,aAAMA,EAAK,kBAAkB,MAAM,EAEtB,MAAOA,EAAK,OAAgC,QAAQ,CAErE,CAEA,aAAoB,UAAUA,EAA0D,CACpF,GAAI,CAACA,EAAK,QAAUA,EAAK,OAAS,OAC9B,MAAM,IAAI,MAAM,qCAAqC,EAGzD,aAAMA,EAAK,kBAAkB,WAAW,EAEjC,MAAOA,EAAK,OAAgC,eAAe,CAAE,iBAAkB,EAAK,CAAC,CAChG,CAEA,aAAoB,cAAcA,EAAyF,CAEvH,GAAI,CACA,IAAML,EAAOK,EAAK,QAAU,YAAaA,EAAK,OACxC,MAAMA,EAAK,OAAO,QAAQ,EAC1BA,EAAK,KAEX,OAAKL,EAIE,CACH,KAAMA,EAAK,KACX,aAAcA,EAAK,aACnB,KAAMA,EAAK,IACf,EAPW,IAQf,OAAQM,EAAN,CACE,OAAO,IACX,CACJ,CAEA,OAAc,iBAAiBD,EAA+B,CAC1D,OAAIA,EAAK,OAAS,aAAe,CAACA,EAAK,OAC5B,KAGHA,EAAK,OAAe,QAAQ,CACxC,CAEA,aAAoB,WAAWA,EAAmBE,EAAmC,CACjF,GAAIF,EAAK,OAAS,aAAe,CAACA,EAAK,OACnC,MAAM,IAAI,UAAU,kDAAkD,EAG1E,aAAMA,EAAK,kBAAkB,WAAW,EAEjC,MAAQA,EAAK,OAAe,cAAcE,EAAM,CAAE,OAAQ,EAAK,CAAC,CAC3E,CAEA,aAAoB,aAAaF,EAAmBE,EAAmC,CACnF,GAAIF,EAAK,OAAS,aAAe,CAACA,EAAK,OACnC,MAAM,IAAI,UAAU,kDAAkD,EAG1E,aAAMA,EAAK,kBAAkB,WAAW,EAEjC,MAAQA,EAAK,OAAe,mBAAmBE,EAAM,CAAE,OAAQ,EAAK,CAAC,CAChF,CAEA,aAAoB,YAAYF,EAAwC,CACpE,OAAKA,EAAK,QAIV,MAAMA,EAAK,kBAAkB,WAAW,EAEjC,MAAQA,EAAK,OAAe,OAAO,CAAE,UAAW,EAAK,CAAC,GALlD,IAMf,CAEA,aAAoB,UAAUA,EAAmBG,EAA+C,CAC5F,GAAI,CAACH,EAAK,OACN,OAAO,KAEX,GAAIG,EAAY,OAAS,aAAe,CAACA,EAAY,OACjD,MAAM,IAAI,UAAU,gDAAgD,EAGxE,aAAMH,EAAK,kBAAkB,WAAW,EAEjC,MAAQA,EAAK,OAAe,KAAKG,CAA0B,CACtE,CAEA,MAAc,kBAAkBC,EAAmD,CAC/E,GAAI,EAAC,KAAK,QAKN,EAACC,EAAQ,oBAAoB,GAI7B,MAAM,KAAK,OAAO,gBAAgB,CAAE,KAAAD,CAAK,CAAC,IAAM,WAIhD,MAAM,KAAK,OAAO,kBAAkB,CAAE,KAAAA,CAAK,CAAC,IAAM,SAClD,MAAM,IAAI,MAAM,oBAAoB,CAE5C,CAEA,aAAoB,aAAaJ,EAA2C,CAExE,GAAIA,EAAK,WACL,OAAOA,EAAK,WAIhB,GAAI,CAACA,EAAK,QAAU,CAACK,EAAQ,oBAAoB,EAC7C,OAAO,KAGX,IAAMC,EAAa,MAAMC,EAAW,QAAQ,EAC5C,GAAI,CAEA,OADY,MAAMD,EAAW,IAAIE,EAAoBR,EAAK,OAAQA,EAAK,mBAAmB,CAAC,CAE/F,QAAE,CACEM,EAAW,MAAM,CACrB,CACJ,CAEA,aAAoB,eAAeN,EAAkC,CACjE,GAAI,CAACA,EAAK,YAAc,CAACK,EAAQ,oBAAoB,EACjD,OAGJ,IAAMC,EAAa,MAAMC,EAAW,QAAQ,EAC5C,GAAI,CACA,MAAMD,EAAW,OAAOE,EAAoBR,EAAK,UAAU,CAC/D,QAAE,CACEM,EAAW,MAAM,CACrB,CACJ,CAEQ,oBAA6B,CACjC,OAAO,KAAK,IAAI,EAAE,SAAS,EAAE,EAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC,CAC3E,CACJ,EAEaG,EAAN,KAAmB,CACtB,YAA6BC,EAAsB,CAAtB,WAAAA,CAAwB,CAErD,OAAc,WAAWC,EAAuC,CAC5D,OAAOA,EAAS,KACpB,CAEA,OAAc,kBAAkBC,EAA8B,CAC1D,GAAI,CAACA,EACD,MAAO,CAAC,EAGZ,IAAMC,EAAW,CAAC,EAClB,QAASC,EAAI,EAAGA,EAAIF,EAAM,OAAQE,IAC9BD,EAASC,GAAKrB,EAAY,eAAemB,EAAME,EAAE,EAErD,OAAOD,CACX,CACJ,ECvNA,IAAME,GAAS,WAAW,oBAO1B,eAAeC,GAAqBC,EAAU,CAAC,EAAG,CAChD,GAAIF,IAAU,CAACE,EAAQ,gBACrB,OAAOF,GAAOE,CAAO,EAGvB,IAAMC,EAAQ,SAAS,cAAc,OAAO,EAI5C,GAHAA,EAAM,KAAO,OAGT,EAAE,oBAAqBA,GACzB,MAAM,IAAI,MAAM,mDAAmD,EAIrEA,EAAM,MAAM,SAAW,QACvBA,EAAM,MAAM,IAAM,YAClBA,EAAM,MAAM,KAAO,YACnB,SAAS,KAAK,YAAYA,CAAK,EAE/BA,EAAM,gBAAkB,GAGxB,IAAMC,EAAI,qCAEV,aAAM,IAAI,QAAQC,GAAW,CAC3BF,EAAM,iBAAiB,SAAUE,CAAO,EACxCF,EAAM,MAAM,CACd,CAAC,EAEMC,EAAE,KAAKE,GAAOA,EAAI,uBAAuBH,CAAK,CAAC,CACxD,CAEA,IAAOI,GAAQN,GCvCf,IAAMO,GAAM,CAAE,QAAS,CAAC,CAAE,EACpBC,GAAS,WAAW,mBAU1B,eAAeC,GAAoBC,EAAU,CAAC,EAAG,CAC/C,IAAMC,EAAO,CAAE,GAAGJ,GAAK,GAAGG,CAAQ,EAElC,GAAIF,IAAU,CAACE,EAAQ,gBACrB,OAAOF,GAAOG,CAAI,EAGpB,IAAMC,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,KAAO,OACbA,EAAM,SAAWD,EAAK,SACtBC,EAAM,QAAUD,EAAK,SAAW,CAAC,GAC9B,IAAIE,GAAK,CACR,IAAIA,EAAE,YAAc,CAAC,GAAG,IAAIA,GAAK,IAAMA,CAAC,EACxC,GAAGA,EAAE,WAAa,CAAC,CAAC,CACtB,EACC,KAAK,EACL,KAAK,GAAG,EAGXD,EAAM,MAAM,SAAW,QACvBA,EAAM,MAAM,IAAM,YAClBA,EAAM,MAAM,KAAO,YACnB,SAAS,KAAK,YAAYA,CAAK,EAG/B,IAAME,EAAI,qCAEV,aAAM,IAAI,QAAQC,GAAW,CAC3BH,EAAM,iBAAiB,SAAUG,CAAO,EACxCH,EAAM,MAAM,CACd,CAAC,EAEME,EAAE,KAAKE,GAAKA,EAAE,wBAAwBJ,CAAK,CAAC,CACrD,CAEA,IAAOK,GAAQR,GC9Cf,IAAMS,GAAS,WAAW,mBAW1B,eAAeC,GAAoBC,EAAU,CAAC,EAAG,CAC/C,GAAIF,IAAU,CAACE,EAAQ,gBACrB,OAAOF,GAAOE,CAAO,EAGnBA,EAAQ,QACV,QAAQ,KAAK,iDAAiD,EAC9DA,EAAQ,cAAgBA,EAAQ,OAGlC,GAAM,CAAE,qBAAAC,CAAqB,EAAI,KAAM,qCACjC,CAAE,WAAAC,CAAW,EAAI,KAAM,uCAC7B,OAAO,IAAID,EAAqB,IAAIC,EAAWF,EAAQ,aAAa,CAAC,CACvE,CAEA,IAAOG,GAAQJ,GC1BX,WAAW,kBAAoB,CAAC,iBAAiB,UAAU,wBAC7D,iBAAiB,UAAU,sBAAwB,gBAAkB,CACnE,IAAMK,EAAQ,KAAK,iBAAiB,EAC9B,CACJ,CAAE,WAAAC,EAAY,aAAAC,CAAa,EAC3B,CAAE,0BAAAC,CAA0B,EAC5B,CAAE,qBAAAC,CAAqB,CACzB,EAAI,MAAM,QAAQ,IAAI,CACpB,sCACA,qCACA,mCACF,CAAC,EAED,OAAOJ,EAAM,OACT,IAAII,EAAqB,IAAIH,EAAWD,EAAO,EAAK,CAAC,EACrD,IAAIG,EAA0B,IAAID,EAAaF,EAAO,EAAK,CAAC,CAClE,GCdFK,IACAC,IACAC,IACAC,KCKO,IAAMC,GAAN,KAAsB,CACzB,aAAoB,mBAChBC,EACAC,EAA+C,CAfvD,IAAAC,EAAAC,EAiBQ,IAAMC,EAAU,CACZ,SAAUD,GAAAD,EAAAF,GAAA,YAAAA,EAAS,gBAAT,KAAAE,EAA0BF,GAAA,YAAAA,EAAS,SAAnC,KAAAG,EAA6C,OACvD,gBAAiBF,CACrB,EAEMI,EAAS,MAAMC,GAAoBF,CAAc,EACvD,OAAOG,EAAY,iBAAiBF,CAAM,CAC9C,CAEA,aAAoB,eAChBL,EAA6BQ,EAC7BC,EAAsCC,EACtCT,EAAgD,CA7BxD,IAAAC,EAAAC,EA8BQ,IAAMC,EAAU,CACZ,SAAUD,GAAAD,EAAAF,GAAA,YAAAA,EAAS,gBAAT,KAAAE,EAA0BF,GAAA,YAAAA,EAAS,SAAnC,KAAAG,EAA6C,OACvD,SAAAK,EACA,uBAAAE,EACA,MAAQD,GAAA,KAAAA,EAAS,OACjB,gBAAiBR,CACrB,EAEMU,EAAU,MAAMC,GAAmBR,CAAO,EAChD,OAAO,IAAIS,EAAaF,EAAQ,IAAKN,GAAiCE,EAAY,iBAAiBF,CAAM,CAAC,CAAC,CAC/G,CAEA,aAAoB,eAChBL,EAA6Bc,EAC7BL,EAAsCC,EACtCT,EAA+C,CA7CvD,IAAAC,EAAAC,EA8CQ,IAAMC,EAAU,CACZ,SAAUD,GAAAD,EAAAF,GAAA,YAAAA,EAAS,gBAAT,KAAAE,EAA0BF,GAAA,YAAAA,EAAS,SAAnC,KAAAG,EAA6C,OACvD,cAAgBW,GAAA,KAAAA,EAAiB,OACjC,uBAAAJ,EACA,MAAQD,GAAA,KAAAA,EAAS,OACjB,gBAAiBR,CACrB,EAEMI,EAAS,MAAMU,GAAmBX,CAAO,EAC/C,OAAOG,EAAY,iBAAiBF,CAAM,CAC9C,CAEA,aAAoB,aAAaW,EAA0C,CACvE,IAAMC,EAAa,MAAMC,EAAW,QAAQ,EAC5C,GAAI,CACA,IAAMb,EAAS,MAAMY,EAAW,IAAIE,EAAoBH,CAAG,EAC3D,OAAOX,GAAUE,EAAY,iBAAiBF,EAAQW,CAAG,CAC7D,QAAE,CACEC,EAAW,MAAM,CACrB,CACJ,CAEA,OAAc,iBAAiBG,EAAqBC,EAAqBC,EAAwD,CAC7H,IAAMC,EAAmC,CAAC,EAC1C,OAAAF,EAAU,QAAQG,GAAK,CAAED,EAAOC,GAAKF,GAAA,KAAAA,EAAc,CAAC,CAAG,CAAC,EACjD,CAAE,YAAAF,EAAa,OAAAG,CAAO,CACjC,CACJ", + "names": ["config", "config_default", "init_config", "__esmMin", "memory_exports", "__export", "FileHandle", "FolderHandle", "Sink", "memory_default", "File", "Blob", "DOMException", "INVALID", "GONE", "MISMATCH", "MOD_ERR", "SYNTAX", "SECURITY", "DISALLOWED", "fs", "init_memory", "__esmMin", "init_util", "init_config", "config_default", "errors", "fileHandle", "file", "chunk", "blob", "head", "tail", "padding", "name", "writable", "opts", "other", "entry", "isFile", "recursive", "x", "sandbox_exports", "__export", "FileHandle", "FolderHandle", "sandbox_default", "DISALLOWED", "Sink", "init_sandbox", "__esmMin", "init_util", "errors", "writer", "fileEntry", "chunk", "resolve", "reject", "evt", "file", "writable", "other", "opts", "fileWriter", "dir", "reader", "entries", "x", "name", "entry", "err", "e", "kAdapter", "_a", "FileSystemHandle", "FileSystemHandle_default", "init_FileSystemHandle", "__esmMin", "adapter", "__publicField", "mode", "handle", "options", "other", "WritableStream", "FileSystemWritableFileStream", "FileSystemWritableFileStream_default", "init_FileSystemWritableFileStream", "__esmMin", "init_config", "config_default", "args", "w", "p", "position", "size", "data", "writer", "FileSystemFileHandle_exports", "__export", "FileSystemFileHandle", "FileSystemFileHandle_default", "kAdapter", "_a", "init_FileSystemFileHandle", "__esmMin", "init_FileSystemHandle", "init_FileSystemWritableFileStream", "FileSystemHandle_default", "adapter", "__publicField", "options", "FileSystemWritableFileStream_default", "FileSystemDirectoryHandle_exports", "__export", "FileSystemDirectoryHandle", "FileSystemDirectoryHandle_default", "kAdapter", "_a", "init_FileSystemDirectoryHandle", "__esmMin", "init_FileSystemHandle", "FileSystemHandle_default", "adapter", "__publicField", "name", "options", "handle", "FileSystemFileHandle", "_", "entry", "possibleDescendant", "openSet", "current", "path", "util_exports", "__export", "config", "errors", "fromDataTransfer", "getDirHandlesFromInput", "getFileHandlesFromInput", "entries", "memory", "sandbox", "fs", "folder", "entry", "input", "FolderHandle", "FileHandle", "FileSystemDirectoryHandle", "files", "rootName", "root", "file", "path", "name", "dir", "FileSystemFileHandle", "init_util", "__esmMin", "m", "downloader_exports", "__export", "FileHandle", "WritableStream", "TransformStream", "DOMException", "Blob", "GONE", "isSafari", "WRITE", "PULL", "ERROR", "ABORT", "CLOSE", "MessagePortSink", "RemoteWritableStream", "init_downloader", "__esmMin", "init_util", "init_config", "config_default", "errors", "name", "other", "options", "_a", "sw", "link", "ts", "sink", "chunks", "chunk", "blob", "writable", "readablePort", "fileName", "headers", "keepAlive", "ctrl", "reader", "pump", "_", "e", "iframe", "port", "event", "controller", "message", "reason", "resolve", "reject", "channel", "InnerDbConnection", "database", "store", "mode", "obj", "key", "os", "resolve", "reject", "response", "IndexedDbWrapper", "databaseName", "objectStores", "conn", "event", "db", "fileBookmarksStore", "avaloniaDb", "CaretHelper", "element", "position", "options", "_a", "_b", "isBrowser", "debug", "el", "div", "style", "computed", "isInput", "properties", "prop", "height", "outerHeight", "targetHeight", "isFirefox", "span", "coordinates", "InputHelper", "args", "resolve", "reject", "element", "keyDownCallback", "keyUpCallback", "keyDownHandler", "keyUpHandler", "beforeInputCallback", "compositionStartCallback", "compositionUpdateCallback", "compositionEndCallback", "compositionStartHandler", "beforeInputHandler", "ranges", "start", "end", "compositionUpdateHandler", "compositionEndHandler", "pointerMoveCallback", "pointerDownCallback", "pointerUpCallback", "pointerCancelCallback", "wheelCallback", "pointerMoveHandler", "pointerDownHandler", "pointerUpHandler", "pointerCancelHandler", "wheelHandler", "inputCallback", "inputHandler", "dragEvent", "dragHandler", "pointerEvent", "handler", "event", "elementRect", "keyboardRect", "inputElement", "kind", "x", "y", "caretWidth", "caretHeight", "caret", "left", "top", "CaretHelper", "text", "modifiers", "containerElement", "pointerId", "Caniuse", "_a", "userAgentData", "userAgent", "regex1", "regex2", "StorageItem", "handle", "file", "bookmarkId", "wellKnownType", "_a", "type", "item", "e", "name", "destination", "mode", "Caniuse", "connection", "avaloniaDb", "fileBookmarksStore", "StorageItems", "items", "instance", "files", "retItems", "i", "native", "showDirectoryPicker", "options", "input", "p", "resolve", "mod", "showDirectoryPicker_default", "def", "native", "showOpenFilePicker", "options", "opts", "input", "e", "p", "resolve", "m", "showOpenFilePicker_default", "native", "showSaveFilePicker", "options", "FileSystemFileHandle", "FileHandle", "showSaveFilePicker_default", "entry", "FileHandle", "FolderHandle", "FileSystemDirectoryHandle", "FileSystemFileHandle", "init_FileSystemDirectoryHandle", "init_FileSystemFileHandle", "init_FileSystemHandle", "init_FileSystemWritableFileStream", "StorageProvider", "startIn", "preferPolyfill", "_a", "_b", "options", "handle", "showDirectoryPicker_default", "StorageItem", "multiple", "types", "excludeAcceptAllOption", "handles", "showOpenFilePicker_default", "StorageItems", "suggestedName", "showSaveFilePicker_default", "key", "connection", "avaloniaDb", "fileBookmarksStore", "description", "mimeTypes", "extensions", "accept", "a"] } diff --git a/_framework/storage.js.map.br b/_framework/storage.js.map.br index 11e626e..c92b897 100644 Binary files a/_framework/storage.js.map.br and b/_framework/storage.js.map.br differ diff --git a/_framework/storage.js.map.gz b/_framework/storage.js.map.gz index a3f6057..e7b6401 100644 Binary files a/_framework/storage.js.map.gz and b/_framework/storage.js.map.gz differ