{
"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/screens.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 public static openUri(uri?: string, target?: string) {\r\n return !!window.open(uri, target);\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 { JsExports } from \"./jsExports\";\r\n\r\ntype SingleScreen = Screen & { window: Window; availLeft: number; availTop: number };\r\ntype ScreenDetailedEx = ScreenDetailed & { availLeft: number; availTop: number };\r\ntype BrowserScreen = ScreenDetailedEx | SingleScreen;\r\nenum ScreenOrientation {\r\n None,\r\n Landscape = 1,\r\n Portrait = 2,\r\n LandscapeFlipped = 4,\r\n PortraitFlipped = 8\r\n}\r\n\r\nexport class ScreenHelper {\r\n static detailedScreens?: ScreenDetails;\r\n\r\n private static raiseOnChanged() {\r\n JsExports.DomHelper.ScreensChanged();\r\n }\r\n\r\n public static async checkPermissions(globalThis: Window): Promise {\r\n // If previous session already granted \"window-management\" permissions, just re-request details, before they are used.\r\n const { state } = await globalThis.navigator.permissions.query({ name: \"window-management\" } as any);\r\n if (state === \"granted\") {\r\n await this.requestDetailedScreens(globalThis);\r\n }\r\n }\r\n\r\n public static subscribeOnChanged(globalThis: Window) {\r\n if (this.detailedScreens) {\r\n globalThis.screen.removeEventListener(\"change\", this.raiseOnChanged);\r\n this.detailedScreens.addEventListener(\"screenschange\", this.raiseOnChanged);\r\n\r\n // When any screen was added, we re-subscribe on all of them to keep it simpler.\r\n // Just like in C#, it's safer to re-subscribe if handler is the same function - it will trigger it once.\r\n for (const screen of this.detailedScreens.screens) {\r\n screen.addEventListener(\"change\", this.raiseOnChanged);\r\n }\r\n } else {\r\n globalThis.screen.addEventListener(\"change\", this.raiseOnChanged);\r\n }\r\n }\r\n\r\n public static getAllScreens(globalThis: Window): BrowserScreen[] {\r\n if (this.detailedScreens) {\r\n return this.detailedScreens.screens as ScreenDetailedEx[];\r\n } else {\r\n const singleScreen = Object.assign(globalThis.screen, { window: globalThis }) as SingleScreen;\r\n return [singleScreen];\r\n }\r\n }\r\n\r\n public static async requestDetailedScreens(globalThis: Window): Promise {\r\n if (this.detailedScreens) {\r\n return true;\r\n }\r\n if (\"getScreenDetails\" in globalThis) {\r\n this.detailedScreens = await globalThis.getScreenDetails();\r\n if (this.detailedScreens) {\r\n this.subscribeOnChanged(globalThis);\r\n globalThis.setTimeout(this.raiseOnChanged, 1);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static getDisplayName(screen: BrowserScreen) {\r\n return (screen as ScreenDetailed)?.label;\r\n }\r\n\r\n static getScaling(screen: BrowserScreen) {\r\n if (\"devicePixelRatio\" in screen) {\r\n return screen.devicePixelRatio;\r\n }\r\n if (\"window\" in screen) {\r\n return screen.window.devicePixelRatio;\r\n }\r\n return 1;\r\n }\r\n\r\n static getBounds(screen: BrowserScreen): number[] {\r\n const width = screen.width;\r\n const height = screen.height;\r\n\r\n if (\"left\" in screen && \"top\" in screen) {\r\n return [screen.left, screen.top, width, height];\r\n } else if (\"availLeft\" in screen && \"availTop\" in screen) {\r\n // If webapp doesn't have \"window-management\" perms, \"left\" and \"top\" will be undefined.\r\n // To keep getBounds consistent getWorkingArea, while still usable, fallback to availLeft and availTop values.\r\n return [screen.availLeft, screen.availTop, width, height];\r\n }\r\n\r\n return [0, 0, width, height];\r\n }\r\n\r\n static getWorkingArea(screen: BrowserScreen): number[] {\r\n const width = screen.availWidth;\r\n const height = screen.availHeight;\r\n\r\n if (\"availLeft\" in screen && \"availTop\" in screen) {\r\n return [screen.availLeft, screen.availTop, width, height];\r\n }\r\n return [0, 0, width, height];\r\n }\r\n\r\n static isCurrent(screen: BrowserScreen): boolean {\r\n if (this.detailedScreens) {\r\n return this.detailedScreens.currentScreen === screen;\r\n }\r\n\r\n // If detailedScreens were not requested - we have a single screen which always is a current one.\r\n return true;\r\n }\r\n\r\n static isPrimary(screen: BrowserScreen): boolean {\r\n if (\"isPrimary\" in screen) {\r\n return screen.isPrimary;\r\n }\r\n\r\n // If detailedScreens were not requested - we have a single screen which always is a current one, and we assume it's a primary one as well.\r\n return true;\r\n }\r\n\r\n /* eslint-disable indent */\r\n static getCurrentOrientation(screen: BrowserScreen): ScreenOrientation {\r\n switch (screen.orientation.type) {\r\n case \"landscape-primary\":\r\n return ScreenOrientation.Landscape;\r\n case \"landscape-secondary\":\r\n return ScreenOrientation.LandscapeFlipped;\r\n case \"portrait-primary\":\r\n return ScreenOrientation.Portrait;\r\n case \"portrait-secondary\":\r\n return ScreenOrientation.PortraitFlipped;\r\n }\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\nimport { ScreenHelper } from \"./avalonia/screens\";\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 ScreenHelper,\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", "uri", "target", "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", "ScreenHelper", "JsExports", "globalThis", "state", "screen", "width", "height", "registerServiceWorker", "path", "scope"]
}